54 lines
1.7 KiB
Bash
Executable File
54 lines
1.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
|
|
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."
|