37 lines
1.2 KiB
Bash
Executable File
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 ]
|