# Makefile pour le déploiement Forgejo .PHONY: help install check deploy setup prod clean test PYTHON := python3 VENV := venv ANSIBLE := ansible ANSIBLE_PLAYBOOK := ansible-playbook help: ## Affiche l'aide @grep -E '^[a-zA-Z_-]+:.*?## .*$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $1, $2}' install: ## Installe les prérequis (Ansible, collections, etc.) @echo "📦 Installation des prérequis..." @if [ -d "$(VENV)" ]; then \ echo "✓ Venv existant détecté"; \ else \ echo "🔧 Création du virtualenv..."; \ $(PYTHON) -m venv $(VENV); \ fi @echo "📦 Installation des packages Python..." @$(VENV)/bin/pip install --upgrade pip > /dev/null @$(VENV)/bin/pip install ansible jinja2 pyyaml > /dev/null @echo "✓ Prérequis Python/Ansible installés dans le venv" @echo "" @echo "💡 Pour utiliser Ansible : source $(VENV)/bin/activate" @echo "ℹ️ Note: Go sera installé automatiquement sur le serveur distant lors du déploiement" install-collections: ## Installe les collections Ansible nécessaires @echo "📦 Installation des collections Ansible..." @if [ ! -d "$(VENV)" ]; then \ echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \ exit 1; \ fi @$(VENV)/bin/ansible-galaxy collection install community.general @$(VENV)/bin/ansible-galaxy collection install ansible.posix @echo "✓ Collections installées" check: ## Vérifie la syntaxe du playbook @echo "🔍 Vérification de la syntaxe..." @if [ ! -d "$(VENV)" ]; then \ echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \ exit 1; \ fi @$(VENV)/bin/ansible-playbook --syntax-check playbook.yml @echo "✓ Syntaxe OK" test-connection: ## Test la connexion SSH au serveur @echo "🔍 Test de connexion..." @if [ ! -f inventory.ini ]; then \ echo "❌ Fichier inventory.ini manquant. Exécutez 'make setup' d'abord."; \ exit 1; \ fi @if [ ! -d "$(VENV)" ]; then \ echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \ exit 1; \ fi @$(VENV)/bin/ansible forgejo_servers -i inventory.ini -m ping setup: ## Configure l'inventaire (demande IP et clé SSH) @echo "🔧 Configuration de l'inventaire..." @read -p "IP du serveur: " SERVER_IP; \ read -p "Chemin de la clé SSH [~/.ssh/id_rsa]: " SSH_KEY; \ SSH_KEY=$${SSH_KEY:-~/.ssh/id_rsa}; \ read -p "Utilisateur SSH [root]: " SSH_USER; \ SSH_USER=$${SSH_USER:-root}; \ echo "[forgejo_servers]" > inventory.ini; \ echo "forgejo_prod ansible_host=$$SERVER_IP ansible_user=$$SSH_USER ansible_ssh_private_key_file=$$SSH_KEY" >> inventory.ini; \ echo "" >> inventory.ini; \ echo "[forgejo_servers:vars]" >> inventory.ini; \ echo "ansible_python_interpreter=/usr/bin/python3" >> inventory.ini @echo "✓ Inventaire créé: inventory.ini" deploy: ## Déploie Forgejo en production @echo "🚀 Déploiement de Forgejo..." @if [ ! -f inventory.ini ]; then \ echo "❌ Fichier inventory.ini manquant. Exécutez 'make setup' d'abord."; \ exit 1; \ fi @if [ ! -d "$(VENV)" ]; then \ echo "❌ Venv non trouvé. Exécutez 'make install' d'abord."; \ exit 1; \ fi @$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml deploy-ci: ## Déploie uniquement le pipeline CI/CD @echo "🚀 Déploiement du pipeline CI/CD..." @$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml --tags ci prod: install install-collections setup test-connection deploy ## Installation complète et déploiement clean: ## Nettoie les fichiers générés @echo "🧹 Nettoyage..." rm -f inventory.ini rm -rf $(VENV) find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true @echo "✓ Nettoyage terminé" update-forgejo: ## Met à jour Forgejo vers la dernière version @echo "🔄 Mise à jour de Forgejo..." @$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml --tags update backup: ## Crée une sauvegarde de Forgejo @echo "💾 Sauvegarde de Forgejo..." @$(VENV)/bin/ansible-playbook -i inventory.ini playbook.yml --tags backup logs: ## Affiche les logs de Forgejo @echo "📋 Récupération des logs..." @$(VENV)/bin/ansible forgejo_servers -i inventory.ini -m shell -a "journalctl -u forgejo -n 50 --no-pager" status: ## Vérifie le statut du service Forgejo @echo "📊 Statut de Forgejo..." @$(VENV)/bin/ansible forgejo_servers -i inventory.ini -m shell -a "systemctl status forgejo --no-pager"