76 lines
2.8 KiB
Bash
Executable file
76 lines
2.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Wakdo - deploiement scripte (declenchement humain ; socle d'un CD pull-based).
|
|
#
|
|
# Strategie CD : deploiement DECLENCHE A LA MAIN pour l'instant (solo dev, prod
|
|
# unique). Ce script fiabilise l'operation (Cr 7.b.2). Il :
|
|
# 1. recupere la derniere `main` depuis Forgejo (git fetch + fast-forward) ;
|
|
# 2. RECONSTRUIT les images depuis les Dockerfiles -- les images wakdo
|
|
# (apache / php-fpm / cron) sont buildees localement, il n'y a pas de registre,
|
|
# donc on `build`, on ne `pull` pas ;
|
|
# 3. recree la stack.
|
|
# L'automatisation "pull-based" (un job cron cote hote qui detecte un nouveau `main`
|
|
# et lance ce script) est l'etape suivante : elle reutilisera ce meme script.
|
|
#
|
|
# A lancer SUR L'HOTE de prod, depuis la racine du depot :
|
|
# scripts/deploy.sh [BRANCHE] (defaut : main)
|
|
# GIT_REMOTE=origin scripts/deploy.sh (override du remote git)
|
|
# COMPOSE_FILE=docker-compose.yml scripts/deploy.sh (override du fichier compose)
|
|
#
|
|
# Prerequis : le fichier compose cible (defaut docker-compose.prod.yml, gitignore,
|
|
# propre a l'hote) declare les services wakdo en `build:` (memes contextes que le
|
|
# docker-compose.yml standalone) et un .env de prod renseigne. Le service one-shot
|
|
# wakdo-migrate applique migrations + seed (idempotents) avant que l'app ne serve.
|
|
#
|
|
# Exit codes : 0 = OK ; 1 = prerequis manquant / confirmation refusee.
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
cd "$ROOT"
|
|
|
|
BRANCH="${1:-main}"
|
|
# Remote : le canonique du projet est `forgejo` (git.acadenice.com) ; on le prefere
|
|
# s'il existe, sinon `origin` (clone standard). Surchargeable via GIT_REMOTE.
|
|
if [ -n "${GIT_REMOTE:-}" ]; then
|
|
REMOTE="$GIT_REMOTE"
|
|
elif git remote | grep -qx forgejo; then
|
|
REMOTE="forgejo"
|
|
else
|
|
REMOTE="origin"
|
|
fi
|
|
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.prod.yml}"
|
|
|
|
if [ ! -f "$COMPOSE_FILE" ]; then
|
|
echo "deploy: $COMPOSE_FILE introuvable (fichier compose de l'hote)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "deploy: docker introuvable sur l'hote." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Deploiement Wakdo : branche '$BRANCH' depuis '$REMOTE' via $COMPOSE_FILE"
|
|
printf 'Confirmer le deploiement en production ? [oui/NON] '
|
|
read -r answer
|
|
if [ "$answer" != "oui" ]; then
|
|
echo "deploy: annule."
|
|
exit 1
|
|
fi
|
|
|
|
echo "[1/4] recuperation de '$BRANCH' depuis '$REMOTE' (fast-forward only)"
|
|
git fetch --prune "$REMOTE" "$BRANCH"
|
|
git checkout "$BRANCH"
|
|
git merge --ff-only "$REMOTE/$BRANCH"
|
|
|
|
echo "[2/4] reconstruction des images depuis les Dockerfiles (--pull rafraichit les bases)"
|
|
docker compose -f "$COMPOSE_FILE" build --pull
|
|
|
|
echo "[3/4] demarrage de la stack (migrate + seed idempotents puis app)"
|
|
docker compose -f "$COMPOSE_FILE" up -d
|
|
|
|
echo "[4/4] etat des services"
|
|
docker compose -f "$COMPOSE_FILE" ps
|
|
|
|
echo "Deploiement termine."
|