#!/usr/bin/env bash # Déploiement / mise à jour de SchotzIAD KM Tracker via Git + Docker Compose. # # Récupère la dernière version depuis Gitea (branche master) et ne reconstruit # les conteneurs QUE si une nouvelle version est disponible. À exécuter sur le # serveur, dans le dépôt cloné (voir DEPLOY.md pour le premier déploiement). # # Usage : # ./deploy.sh Met à jour puis rebuild uniquement si nouveau commit. # ./deploy.sh --force Rebuild même sans nouveau commit (ex. après édition du .env). # # Codes de sortie : 0 = succès (ou déjà à jour), 1 = erreur de prérequis/déploiement. set -uo pipefail RACINE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$RACINE" BRANCHE="master" FORCER=0 [[ "${1:-}" == "--force" ]] && FORCER=1 echo "→ Déploiement SchotzIAD (dépôt : $RACINE, branche : $BRANCHE)" # --- 1. Prérequis ----------------------------------------------------------- erreur() { echo "✗ $1" >&2; exit 1; } command -v git >/dev/null 2>&1 || erreur "git n'est pas installé (voir DEPLOY.md)." command -v docker >/dev/null 2>&1 || erreur "docker n'est pas installé (voir DEPLOY.md)." # Docker Compose v2 (plugin « docker compose ») ou v1 (« docker-compose »). if docker compose version >/dev/null 2>&1; then COMPOSE="docker compose" elif command -v docker-compose >/dev/null 2>&1; then COMPOSE="docker-compose" else erreur "docker compose introuvable (ni le plugin v2, ni docker-compose v1)." fi [[ -f "$RACINE/.env" ]] || erreur "Fichier .env absent. Copiez .env.example vers .env et renseignez-le (voir DEPLOY.md)." # --- 2. Détection d'une nouvelle version ------------------------------------ echo "→ Récupération des références distantes (git fetch)…" git fetch --quiet origin "$BRANCHE" || erreur "git fetch a échoué (accès à Gitea ?)." LOCAL="$(git rev-parse "$BRANCHE")" DISTANT="$(git rev-parse "origin/$BRANCHE")" if [[ "$LOCAL" == "$DISTANT" && "$FORCER" -eq 0 ]]; then echo "✓ Déjà à jour (commit ${LOCAL:0:8}). Aucun rebuild." echo " (Utilisez ./deploy.sh --force pour reconstruire malgré tout.)" exit 0 fi # --- 3. Mise à jour du code ------------------------------------------------- if [[ "$LOCAL" != "$DISTANT" ]]; then echo "→ Nouvelle version détectée : ${LOCAL:0:8} → ${DISTANT:0:8}. Mise à jour…" git pull --ff-only origin "$BRANCHE" || erreur "git pull --ff-only a échoué (historique divergent ? voir DEPLOY.md)." else echo "→ Pas de nouveau commit, mais --force demandé : reconstruction." fi # --- 4. (Re)construction et démarrage --------------------------------------- echo "→ Construction et démarrage des conteneurs ($COMPOSE up -d --build)…" $COMPOSE up -d --build || erreur "Le déploiement Docker a échoué." echo "→ État des conteneurs :" $COMPOSE ps echo "✓ Déploiement terminé (version ${DISTANT:0:8})."