#!/usr/bin/env bash # ───────────────────────────────────────────────────────────────────────────── # check.sh — vérifications de l'app web (pré-commit / pré-push). # # 1. node --check sur chaque module ES (syntaxe) — attrape les typos avant # même de charger l'app dans un navigateur ; # 2. présence des fichiers critiques (index.html, asset PK, CSS, changelog) ; # 3. cohérence i18n : clés FR/EN synchronisées + clés référencées existantes # (leçon Android §12 : une string manquante s'affiche brute) ; # 4. tests unitaires Node (node --test) ; # 5. E2E navigateur (si playwright est installé — npm i + npx playwright # install firefox, cf docs/DEVELOPPEMENT.md §Tests) ; # 6. smoke HTTP (--with-serve : serveur + curl des ressources clés). # # Usage : bash scripts/check.sh [--with-serve] # ───────────────────────────────────────────────────────────────────────────── set -euo pipefail cd "$(dirname "$0")/.." # racine du dépôt fail=0 echo "── 1. Syntaxe des modules (node --check) ──" while IFS= read -r f; do if ! node --check "$f" 2>/tmp/hrt-check.err; then echo "✗ $f" cat /tmp/hrt-check.err fail=1 fi done < <(find js -name '*.js' -type f | sort) echo " tous les modules de js/ sont syntaxiquement valides" echo "── 2. Fichiers critiques ──" for f in index.html css/style.css assets/pk_profiles.json docs/CHANGELOG.md \ js/ui/app.js js/pk/pk-engine.js; do if [[ ! -f "$f" ]]; then echo "✗ manquant : $f" fail=1 fi done echo " fichiers critiques présents" echo "── 3. Cohérence i18n FR/EN ──" # Vérifie : (a) chaque clé de EN existe dans FR et inversement ; # (b) chaque clé utilisée par t('...') dans js/ existe dans EN et FR. # (leçon Android §12 : une string manquante s'affiche brute — et FR/EN # désynchronisés = UI mi-anglaise mi-française) if ! node scripts/i18n-check.mjs; then echo "✗ clés i18n manquantes (voir ci-dessus)" fail=1 fi echo "── 4. Tests unitaires ──" if ! node --test tests/ 2>&1 | tail -6; then fail=1 fi echo "── 5. E2E navigateur (si playwright installé) ──" if [[ -d node_modules/playwright-core && -d "$HOME/Library/Caches/ms-playwright" ]]; then if ! node scripts/e2e.mjs 8989; then fail=1 fi else echo " (ignoré : playwright non installé — npm i && npx playwright install firefox)" fi if [[ "${1:-}" == "--with-serve" ]]; then echo "── 6. Smoke HTTP ──" python3 scripts/serve.py --port 8971 >/tmp/hrt-serve.log 2>&1 & SRV=$! sleep 1.5 for path in / /css/style.css /assets/pk_profiles.json /js/ui/app.js /docs/CHANGELOG.md; do code=$(curl -s -o /dev/null -w '%{http_code}' "http://127.0.0.1:8971${path}") if [[ "$code" != "200" ]]; then echo "✗ ${path} → HTTP ${code}" fail=1 else echo " 200 ${path}" fi done kill $SRV 2>/dev/null || true wait $SRV 2>/dev/null || true fi if [[ $fail -eq 0 ]]; then echo "✓ CHECK OK" else echo "✗ CHECK FAILED" exit 1 fi