forgejo-deploy/Makefile

113 lines
4.3 KiB
Makefile
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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"