#!/usr/bin/env bash # ============================================================================= # run-all-stacks.sh — Lance les tests des 3 stacks web en séquence # # Usage : # ./run-all-stacks.sh # toutes les stacks # ./run-all-stacks.sh nginx # stack nginx uniquement # ./run-all-stacks.sh nginx-varnish hitch-varnish # 2 stacks # ./run-all-stacks.sh --no-down # garder les stacks actives # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' log() { echo -e "${CYAN}[run-all]${NC} $(date +%H:%M:%S) $*"; } pass() { echo -e "${GREEN} ✓ $*${NC}"; } fail() { echo -e "${RED} ✗ $*${NC}"; } # Stacks disponibles ALL_STACKS=(apache nginx nginx-varnish hitch-varnish) STACKS_TO_RUN=() EXTRA_ARGS=() for arg in "$@"; do case "$arg" in apache|nginx|nginx-varnish|hitch-varnish) STACKS_TO_RUN+=("$arg") ;; *) EXTRA_ARGS+=("$arg") ;; esac done # Par défaut : toutes les stacks [ "${#STACKS_TO_RUN[@]}" -eq 0 ] && STACKS_TO_RUN=("${ALL_STACKS[@]}") declare -A RESULTS for stack in "${STACKS_TO_RUN[@]}"; do runner="$SCRIPT_DIR/$stack/run-tests.sh" if [ ! -f "$runner" ]; then log "ERREUR : runner introuvable pour la stack '$stack' ($runner)" RESULTS[$stack]="MISSING" continue fi chmod +x "$runner" log "========================================================" log "Démarrage de la stack : $stack" log "========================================================" if bash "$runner" "${EXTRA_ARGS[@]}"; then RESULTS[$stack]="PASS" pass "Stack $stack : TOUS LES TESTS RÉUSSIS" else RESULTS[$stack]="FAIL" fail "Stack $stack : DES TESTS ONT ÉCHOUÉ" fi echo "" done # ── Résumé global ───────────────────────────────────────────────────────────── log "========================================================" log "RÉSUMÉ GLOBAL" log "========================================================" TOTAL_PASS=0 TOTAL_FAIL=0 for stack in "${STACKS_TO_RUN[@]}"; do result="${RESULTS[$stack]:-MISSING}" case "$result" in PASS) pass "[$stack] RÉUSSI" ; TOTAL_PASS=$((TOTAL_PASS + 1)) ;; FAIL) fail "[$stack] ÉCHOUÉ" ; TOTAL_FAIL=$((TOTAL_FAIL + 1)) ;; MISSING) echo -e "${YELLOW} ⚠ [$stack] MANQUANT${NC}" ; TOTAL_FAIL=$((TOTAL_FAIL + 1)) ;; esac done echo "" log "Total : ${TOTAL_PASS} réussi(s), ${TOTAL_FAIL} échoué(s) sur ${#STACKS_TO_RUN[@]} stacks" [ "$TOTAL_FAIL" -gt 0 ] && exit 1 || exit 0