Squelette du dépôt : Makefile, tests, lint, crédits, journal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
6d4ff4e7b4
commit
7fd23031ca
Executable
+50
@@ -0,0 +1,50 @@
|
||||
#!/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 -q $'\r' "$f"; then
|
||||
signaler "$f : fins de ligne Windows (CRLF)"
|
||||
fi
|
||||
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
|
||||
|
||||
if [ "$erreurs" -gt 0 ]; then
|
||||
echo "Lint : $erreurs problème(s)."
|
||||
exit 1
|
||||
fi
|
||||
echo "Lint : aucun problème."
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
# Lance tous les tests du projet : chaque fichier tests/test_*.sh est un test.
|
||||
# Sort en erreur si au moins un test échoue.
|
||||
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
echecs=0
|
||||
total=0
|
||||
for t in tests/test_*.sh; do
|
||||
total=$((total + 1))
|
||||
if bash "$t"; then
|
||||
echo "OK $t"
|
||||
else
|
||||
echo "ÉCHEC $t"
|
||||
echecs=$((echecs + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$((total - echecs))/$total tests réussis."
|
||||
[ "$echecs" -eq 0 ]
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
# Vérifie le contrat du Makefile décrit dans CLAUDE.md :
|
||||
# toutes les commandes obligatoires existent et apparaissent dans `make help`,
|
||||
# et `make clean` peut être relancé sans erreur.
|
||||
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# Lancé depuis `make test` : repartir d'un make indépendant du make parent.
|
||||
unset MAKEFLAGS MFLAGS MAKELEVEL
|
||||
|
||||
aide="$(make help)"
|
||||
for cible in setup build test lint deploy clean help; do
|
||||
if ! grep -qE "^ make $cible " <<<"$aide"; then
|
||||
echo "make help ne mentionne pas « $cible »"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
make clean >/dev/null
|
||||
make clean >/dev/null
|
||||
[ ! -e build ] || { echo "make clean n'a pas supprimé build/"; exit 1; }
|
||||
Reference in New Issue
Block a user