diff --git a/CREDITS.md b/CREDITS.md index 5d28556..358f87d 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -34,12 +34,13 @@ Les contenus pédagogiques (leçons, textes) sont sous licence CC BY-SA 4.0. (`docker/gnubg-reference/`, `tests/reference/`). Les résultats de `tests/reference/results/` et les données `gnubg.wd`, `gnubg_os0.bd`, `gnubg_ts0.bd` sont produits par ce programme. -- **jq** (licence MIT), lecture des JSON dans `tests/test_reference.sh` ; - utilisé sur le PC, pas dans Docker. - **Image `ustagammon/build-c`** (`docker/build-c/Dockerfile`), construite sur Debian trixie : gcc (GPLv3 avec exception d'exécution), make (GPLv3), GLib (LGPL 2.1 ou ultérieure, uniquement pour les outils `makeweights` et - `makebearoff` lancés au build ; le moteur embarqué n'en contient rien). + `makebearoff` lancés au build ; le moteur embarqué n'en contient rien), + **Python 3** (licence PSF, compatible GPL), qui exécute le comparateur + `tests/reference/compare.py`, et **jq** (licence MIT), qui lit les JSON + dans `tests/test_reference.sh`. Aucun des deux n'est utilisé sur le PC. ## Remerciements diff --git a/Makefile b/Makefile index b31292c..3163d3f 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ GHERKIN_IMAGE := ustagammon/gherkin:2 REFERENCE_IMAGE := ustagammon/gnubg-reference:14b6798 # Chaîne de compilation C (docker/build-c/Dockerfile) : changer l'étiquette # à chaque modification du Dockerfile, pour que make setup la reconstruise. -BUILD_C_IMAGE := ustagammon/build-c:1 +BUILD_C_IMAGE := ustagammon/build-c:2 export SHELLCHECK_IMAGE GHERKIN_IMAGE BUILD_C_IMAGE diff --git a/docker/build-c/Dockerfile b/docker/build-c/Dockerfile index 95d841d..8722451 100644 --- a/docker/build-c/Dockerfile +++ b/docker/build-c/Dockerfile @@ -1,14 +1,16 @@ -# Chaîne de compilation C d'Ustagammon (moteur embarqué et engine-cli). -# Construite une fois par `make setup` ; le build tourne dedans, jamais avec -# les outils de l'hôte (ADR 0004). +# Chaîne de compilation C d'Ustagammon (moteur embarqué et engine-cli), et +# outils des tests du moteur. Construite une fois par `make setup` ; le build +# et ces tests tournent dedans, jamais avec les outils de l'hôte (ADR 0004). # # - gcc et make : compilation du moteur et d'engine-cli ; # - libglib2.0-dev : uniquement pour les outils officiels de gnubg lancés au # build (makeweights, makebearoff), qui produisent les données du moteur. -# Le moteur embarqué lui-même n'utilise pas GLib (shim engine/compat/). +# Le moteur embarqué lui-même n'utilise pas GLib (shim engine/compat/) ; +# - python3 : comparateur du moteur aux références (tests/reference/compare.py) ; +# - jq : contrôle du format des références (tests/test_reference.sh). FROM debian:trixie RUN apt-get update \ && apt-get install -y --no-install-recommends \ - gcc libc6-dev make pkg-config libglib2.0-dev \ + gcc libc6-dev make pkg-config libglib2.0-dev python3 jq \ && rm -rf /var/lib/apt/lists/* diff --git a/tests/test_reference.sh b/tests/test_reference.sh index 8e9a58b..dd5bfed 100644 --- a/tests/test_reference.sh +++ b/tests/test_reference.sh @@ -2,12 +2,21 @@ # Vérifie la cohérence des positions de référence (tests/reference/) : # JSON valide, au moins 30 positions, chaque catégorie présente, un résultat # par position aux niveaux 0 et 2 plis avec tous les champs du format -# (voir tests/reference/README.md). Ne lance pas Docker ni gnubg. +# (voir tests/reference/README.md). Ne lance pas gnubg : jq tourne dans +# l'image de la chaîne C (ADR 0004), dans laquelle le script se relance. set -euo pipefail -cd "$(dirname "$0")/reference" +cd "$(dirname "$0")/.." -command -v jq >/dev/null || { echo "jq est requis : sudo apt install jq"; exit 1; } +if [ -z "${USTAGAMMON_IN_DOCKER:-}" ]; then + image="${BUILD_C_IMAGE:?lancer via make test}" + docker image inspect "$image" >/dev/null 2>&1 \ + || { echo "Chaîne C absente : lancer d'abord make setup"; exit 1; } + exec docker run --rm --user "$(id -u):$(id -g)" -e USTAGAMMON_IN_DOCKER=1 \ + -v "$PWD:/src:ro" -w /src "$image" bash tests/test_reference.sh +fi + +cd tests/reference erreurs=0 signaler() {