Files
Ustagammon/tests/lint.sh
T
Pierre MARTINandClaude Opus 5.5 54883f4ca3 Outils de l'application web : image ustagammon/web, make web, lint
Image docker/web/ (Node 22.11) avec TypeScript 6.0.3, @types/node,
Biome 2.5.15, @cucumber/cucumber 12.9.0 et dependency-cruiser 18.6.0,
versions figées (ADR 0009). make web compile app/ dans build/web/ ;
make lint passe Biome et tsc --noEmit, et vérifie à part que le domaine
compile sans les types de Node ni du navigateur. make setup construit
l'image ; CREDITS.md à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:41:57 +01:00

72 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Vérifications de style communes à tout le dépôt :
# - fichiers texte en UTF-8, fins de ligne Unix, sans espaces en fin de ligne,
# terminés par un saut de ligne ;
# - scripts shell analysés par ShellCheck (dans Docker).
set -euo pipefail
cd "$(dirname "$0")/.."
erreurs=0
signaler() {
echo "$1"
erreurs=$((erreurs + 1))
}
# Fichiers suivis par git, plus les nouveaux fichiers non ignorés.
mapfile -t fichiers < <(git ls-files --cached --others --exclude-standard | grep -v '^LICENSE$')
for f in "${fichiers[@]}"; do
[ -f "$f" ] || continue
case "$(file --brief --mime-encoding "$f")" in
binary) continue ;;
us-ascii | utf-8) ;;
*) signaler "$f : encodage autre que UTF-8" ;;
esac
if grep -qE '^(<<<<<<<|>>>>>>>)( |$)' "$f"; then
signaler "$f : marqueurs de conflit git restants"
fi
if grep -q $'\r' "$f"; then
signaler "$f : fins de ligne Windows (CRLF)"
fi
# Copies fidèles de GNU Backgammon (sources et données) : on ne
# reformate pas leurs espaces, pour rester identique à l'original.
case "$f" in
engine/gnubg/* | engine/data/*) continue ;;
esac
if grep -nE '[[:blank:]]+$' "$f" >/dev/null; then
signaler "$f : espaces en fin de ligne (lignes $(grep -nE '[[:blank:]]+$' "$f" | cut -d: -f1 | paste -sd, -))"
fi
if [ -s "$f" ] && [ -n "$(tail -c1 "$f")" ]; then
signaler "$f : pas de saut de ligne final"
fi
done
mapfile -t scripts < <(printf '%s\n' "${fichiers[@]}" | grep -E '\.sh$' || true)
if [ "${#scripts[@]}" -gt 0 ]; then
if ! docker image inspect "${SHELLCHECK_IMAGE:?lancer via make lint}" >/dev/null 2>&1; then
signaler "ShellCheck absent : lancer d'abord make setup"
elif ! docker run --rm -v "$PWD:/src:ro" -w /src "$SHELLCHECK_IMAGE" shellcheck "${scripts[@]}"; then
signaler "ShellCheck a trouvé des problèmes (voir ci-dessus)"
fi
fi
# Application web (ADR 0009), dans Docker : Biome (style et erreurs
# courantes) et TypeScript (types). Le domaine est vérifié une seconde fois
# seul, sans les types de Node ni du navigateur : il doit rester pur.
if ! docker image inspect "${WEB_IMAGE:?lancer via make lint}" >/dev/null 2>&1; then
signaler "Outils web absents : lancer d'abord make setup"
else
web=(docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/src:ro" -w /src/app "$WEB_IMAGE")
"${web[@]}" biome check . || signaler "Biome a trouvé des problèmes (voir ci-dessus)"
"${web[@]}" tsc -p tsconfig.json --noEmit || signaler "TypeScript a trouvé des erreurs (voir ci-dessus)"
"${web[@]}" tsc -p src/domain/tsconfig.json \
|| signaler "le domaine utilise Node ou le navigateur (voir ci-dessus)"
fi
if [ "$erreurs" -gt 0 ]; then
echo "Lint : $erreurs problème(s)."
exit 1
fi
echo "Lint : aucun problème."