#!/bin/bash # ============================================ # Script de mise à jour Gitea # ============================================ # Ce script met à jour Gitea de manière sécurisée # avec une sauvegarde automatique avant la mise à jour set -e # Arrêter en cas d'erreur # Couleurs pour l'affichage RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Charger les variables d'environnement if [ -f .env ]; then source .env else echo -e "${RED}Erreur: Fichier .env non trouvé${NC}" exit 1 fi # Fonction de nettoyage en cas d'erreur cleanup() { echo -e "${YELLOW}Une erreur s'est produite. Vérifiez l'état des services.${NC}" echo "Pour revenir à l'état précédent, utilisez la dernière sauvegarde:" echo " make restore FILE=backups/gitea_backup_*.tar.gz" } trap cleanup ERR echo -e "${GREEN}=== Mise à jour de Gitea ===${NC}" echo "" # Vérifier que les services tournent if ! docker compose ps | grep -q "gitea.*running"; then echo -e "${YELLOW}Avertissement: Gitea ne semble pas être en cours d'exécution${NC}" read -p "Continuer quand même? (oui/non) " -r if [[ ! $REPLY =~ ^[Oo][Uu][Ii]$ ]]; then echo "Mise à jour annulée." exit 0 fi fi echo -e "${YELLOW}[1/6] Création d'une sauvegarde de sécurité...${NC}" if ! bash scripts/backup.sh; then echo -e "${RED}Erreur: La sauvegarde a échoué. Mise à jour annulée.${NC}" exit 1 fi echo -e "${GREEN}✓ Sauvegarde créée${NC}" echo -e "${YELLOW}[2/6] Téléchargement des nouvelles images...${NC}" docker compose pull echo -e "${GREEN}✓ Images téléchargées${NC}" echo -e "${YELLOW}[3/6] Arrêt des services...${NC}" docker compose down echo -e "${GREEN}✓ Services arrêtés${NC}" echo -e "${YELLOW}[4/6] Démarrage avec les nouvelles versions...${NC}" docker compose up -d echo -e "${GREEN}✓ Services démarrés${NC}" echo -e "${YELLOW}[5/6] Attente du démarrage complet...${NC}" sleep 10 # Attendre que Gitea soit prêt MAX_TRIES=60 COUNTER=0 until docker compose exec -T gitea wget -q --spider http://localhost:3000/api/healthz 2>/dev/null; do COUNTER=$((COUNTER + 1)) if [ $COUNTER -gt $MAX_TRIES ]; then echo -e "${RED}Erreur: Gitea ne répond pas après la mise à jour${NC}" echo "Vérifiez les logs: docker compose logs gitea" exit 1 fi echo "En attente de Gitea... ($COUNTER/$MAX_TRIES)" sleep 2 done echo -e "${GREEN}✓ Gitea répond${NC}" echo -e "${YELLOW}[6/6] Vérification de l'état...${NC}" # Afficher les versions echo "" echo "Versions actuelles:" docker compose images echo "" echo "État des services:" docker compose ps echo "" echo -e "${GREEN}=== Mise à jour terminée avec succès ===${NC}" echo "" echo "Vérifications recommandées:" echo " 1. Accéder à l'interface web: http://localhost:3000" echo " 2. Vérifier les dépôts existants" echo " 3. Tester les fonctionnalités principales" echo " 4. Consulter les logs: docker compose logs -f gitea" echo "" echo "En cas de problème, restaurez la sauvegarde:" LATEST_BACKUP=$(ls -t backups/gitea_backup_*.tar.gz 2>/dev/null | head -n 1) if [ -n "$LATEST_BACKUP" ]; then echo " make restore FILE=$LATEST_BACKUP" fi