Files
Ustagammon/tests/test_adr.sh
T

37 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Vérifie la forme des ADR de docs/adr/ (voir l'ADR 0001) :
# numérotation continue à partir de 0001, titre conforme au numéro, statut
# valide, sections obligatoires, et présence de chaque ADR dans l'index.
set -euo pipefail
cd "$(dirname "$0")/../docs/adr"
erreurs=0
signaler() {
echo "$1"
erreurs=$((erreurs + 1))
}
attendu=1
for f in [0-9][0-9][0-9][0-9]-*.md; do
num="${f%%-*}"
if [ "$((10#$num))" -ne "$attendu" ]; then
signaler "$f : numéro attendu $(printf '%04d' "$attendu")"
fi
attendu=$((10#$num + 1))
head -n1 "$f" | grep -qE "^# $num\. " \
|| signaler "$f : la première ligne doit être « # $num. Titre »"
grep -qE '^- \*\*Statut\*\* : (proposé|accepté|remplacé par [0-9]{4}|obsolète)$' "$f" \
|| signaler "$f : statut absent ou invalide"
grep -qE '^- \*\*Date\*\* : [0-9]{4}-[0-9]{2}-[0-9]{2}$' "$f" \
|| signaler "$f : date absente ou invalide"
for section in Contexte Décision "Alternatives écartées" Conséquences; do
grep -qx "## $section" "$f" || signaler "$f : section « $section » absente"
done
grep -qF "]($f)" README.md || signaler "$f : absent de l'index docs/adr/README.md"
done
[ "$attendu" -gt 1 ] || signaler "aucun ADR trouvé"
[ "$erreurs" -eq 0 ]