Portage navigateur complet de l'app Android HormoneTrack v1.4.10 : - moteur PK fidèle (Estrannaise tables ODS, Transfem Science V3C, WHSAH fit Mona, Bateman) — paramètres identiques, invariants Android préservés (fixes #19-#23, #35, #52-#62), 121 tests Node épinglés - calibration par période d'ester et par modèle affiché (#60/#61) - UI 6 écrans + éditeur, CurveChart Canvas (zoom/pan fractionnaire, prévision, pics/creux, fuseau configurable), rappels web (Notification API), seuils d'alerte, i18n FR/EN - sauvegarde JSON v2 compatible Android bidirectionnelle (rétrocompat v1) - 100 % local : localStorage, aucun serveur applicatif, aucune télémétrie - processus : scripts/check.sh (syntaxe, i18n, tests, E2E navigateur, smoke HTTP), docs séparées (README + DEVELOPPEMENT + CHANGELOG) - dépôt GIT SÉPARÉ de l'Android : historique 100 % propre, versions alignées sur l'Android porté, changelogs indépendants Non porté (impossible dans un navigateur, documenté §12) : agenda récurrent, notifications onglet fermé, montre.
90 lines
3.3 KiB
Bash
90 lines
3.3 KiB
Bash
#!/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
|