Siphonight 491efef8eb v1.4.10 — portage initial de l'app Android v1.4.10
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.
2026-09-08 14:34:58 +02:00

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