- deploy.sh : met à jour depuis Gitea (branche master) et ne reconstruit les conteneurs (docker compose up -d --build) que si une nouvelle version existe ; option --force ; vérifie git/docker/compose/.env ; pull --ff-only ; compatible Compose v2 et v1 - DEPLOY.md : guide de premier déploiement (prérequis, git clone, .env depuis .env.example), mises à jour, persistance SQLite, dépannage - design.md : note renvoyant vers DEPLOY.md et la procédure Git + Docker (abandon de la copie d'archive)
71 lines
2.8 KiB
Bash
Executable File
71 lines
2.8 KiB
Bash
Executable File
#!/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})."
|