corentin_wakdo/.githooks/pre-commit
Corentin JOGUET 09ac9e5a3f
All checks were successful
CI / secret-scan (push) Successful in 8s
CI / php-lint (push) Successful in 22s
CI / static-tests (push) Successful in 45s
CI / js-tests (push) Successful in 23s
chore(devops): hooks Git versionnes + scripts deploy et restore (Cr 4.f.2 / 7.b.2) (#75)
2026-06-22 08:44:45 +02:00

41 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# Wakdo - hook pre-commit : garde-fous locaux avant chaque commit.
#
# Active via scripts/install-hooks.sh (git config core.hooksPath .githooks).
# Defense en profondeur cote dev ; la protection de reference reste la CI Forgejo
# (secret-scan, php-lint, static-tests) et la branch protection serveur.
#
# Controles :
# 1. Refuse un commit direct sur main ou dev (PROJECT_CONTEXT regle 18.5).
# 2. Lint PHP (php -l) sur les fichiers .php indexes, si php est disponible.
#
# Exit codes : 0 = OK ; 1 = commit bloque.
set -euo pipefail
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "dev" ]; then
echo "pre-commit: commit direct sur '$BRANCH' interdit (regle 18.5)." >&2
echo " cree une branche : git checkout -b feat/ma-feature" >&2
exit 1
fi
# Lint PHP des fichiers indexes (added/copied/modified), si l'outil est present.
if command -v php >/dev/null 2>&1; then
FAILED=0
while IFS= read -r file; do
[ -n "$file" ] || continue
[ -f "$file" ] || continue
if ! php -l "$file" >/dev/null 2>&1; then
echo "pre-commit: erreur de syntaxe PHP dans $file" >&2
php -l "$file" >&2 || true
FAILED=1
fi
done < <(git diff --cached --name-only --diff-filter=ACM -- '*.php')
if [ "$FAILED" -ne 0 ]; then
exit 1
fi
fi
exit 0