[DTP-Worker 20260802_170601] Sprint 8 · buffer · run_ci.sh : -h|--help + en-tête --static honnête (UX du lanceur, PAS un gate #5)

Deux vraies aspérités d'UX sur le lanceur run_ci.sh (miroir local du gate),
reproduites avant fix :
- `--help`/`-h` échouait « option inconnue » exit 2 alors qu'un bloc d'usage
  riche dormait dans l'en-tête → ajout usage() branché AVANT résolution git
  (aide marche hors checkout : exit 0 ; vrai run hors git reste exit 3),
  codes de sortie documentés (0/1/2/3).
- en mode --static l'en-tête annonçait « 30 jobs = 7 gates + 23 suites »
  alors que seuls 7 gates tournent → récap « 7 PASS » contredisait l'en-tête ;
  en-tête rendu mode-conscient (« 7 gates seuls, 23 suites ignorées »).
- message d'option inconnue + ci/README.md alignés (ajout --help).

Toutes les valeurs restent DÉRIVÉES de gate.needs (#6, zéro compte figé).
Zéro nouveau module · zéro gate ajouté (#5) : run_ci.sh reste un lanceur
(racine ∉ ci/*.sh, hors gate.needs, INV-B). Vérif : --help exit 0 in+hors git ·
--bogus exit 2 · check_docs/check_readme_claims/guard_constraints verts ·
run_ci.sh plein → 30 PASS · 0 FAIL · 0 SKIP.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-02 17:11:19 +00:00
parent 59eb4dcb7c
commit 68f8c1a718
3 changed files with 59 additions and 2 deletions
+28 -2
View File
@@ -36,12 +36,34 @@
# bash run_ci.sh # exécute tout gate.needs (miroir CI complet)
# bash run_ci.sh --static # seulement les gates statiques ci/*.sh (rapide)
# bash run_ci.sh --list # liste les jobs qui SERAIENT lancés, sans exécuter
# bash run_ci.sh --help # affiche cette aide et sort
#
# Sortie : une ligne PASS/FAIL par job + un récapitulatif. Code de sortie 0 ssi
# tous les jobs passent (identique à la sémantique du gate de merge).
# ============================================================================
set -uo pipefail
usage() {
cat <<'EOF'
run_ci.sh · miroir LOCAL du gate CI (dérivé de gate.needs, sans liste en dur).
Rejoue en une commande, sans runner ni réseau, l'ensemble de checks que le gate
de merge Gitea Actions agrège.
Usage :
bash run_ci.sh exécute tout gate.needs (miroir CI complet)
bash run_ci.sh --static seulement les gates statiques ci/*.sh (rapide)
bash run_ci.sh --list liste les jobs qui SERAIENT lancés, sans exécuter
bash run_ci.sh --help affiche cette aide et sort
Sortie : une ligne PASS/FAIL par job + un récapitulatif.
Code de sortie : 0 ssi tous les jobs passent · 1 si un job échoue ·
2 option inconnue · 3 hors checkout git / ci.yml illisible.
EOF
}
# --- aide : disponible AVANT toute résolution git (n'exige aucun checkout) ---
case "${1:-}" in -h|--help) usage; exit 0 ;; esac
# --- racine du dépôt (marche depuis n'importe quel sous-dossier) -------------
ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || {
echo "run_ci.sh : hors d'un checkout git — impossible de localiser ci.yml." >&2
@@ -56,7 +78,7 @@ case "${1:-}" in
--static) MODE="static" ;;
--list) MODE="list" ;;
"") MODE="all" ;;
*) echo "run_ci.sh : option inconnue « $1 » (attendu : --static | --list)" >&2; exit 2 ;;
*) echo "run_ci.sh : option inconnue « $1 » (attendu : --static | --list | --help)" >&2; exit 2 ;;
esac
# --- parse ci.yml : gate.needs (ordre) + par job {working-directory, run} ----
@@ -115,7 +137,11 @@ LOGDIR="$(mktemp -d)"
trap 'rm -rf "$LOGDIR"' EXIT
pass=0; fail=0; skip=0; failed_jobs=()
echo "run_ci.sh · miroir du gate CI (mode=$MODE) · $(git rev-parse --short HEAD 2>/dev/null || echo '?')"
echo "gate.needs dérivé : $n_jobs jobs = $n_gates gates ci/*.sh + $n_suites suites de module"
if [ "$MODE" = "static" ]; then
echo "gate.needs dérivé : $n_jobs jobs · mode --static → $n_gates gates ci/*.sh seuls ($n_suites suites de module ignorées)"
else
echo "gate.needs dérivé : $n_jobs jobs = $n_gates gates ci/*.sh + $n_suites suites de module"
fi
echo "------------------------------------------------------------------------"
for row in "${ROWS[@]}"; do
IFS=$'\t' read -r job wd cmd <<<"$row"