docs: update README and add pre-commit hook (#173)

* docs: replace requirements with developer and deployment guide

* docs: add CI badge, disclaimer, contributing guide, and license

* docs: fix and expand disclaimer based on legal review

* docs: clarify test vs dev fixture commands in testing section

* feat: add pre-commit hook for staged-file quality checks

Adds a versioned .githooks/pre-commit script that runs Rector,
PHP-CS-Fixer, and PHPStan on staged PHP files, and Twig-CS-Fixer on
staged Twig files. Auto-fixes are re-staged before PHPStan runs.
Falls back to docker compose run --rm when the PHP service is not up.

Install with: just install-hooks

* chore: switch pre-commit hook shebang from bash to zsh
This commit is contained in:
2026-07-03 17:05:29 +02:00
committed by GitHub
parent 5ea7a636b8
commit d1d1eb3a24
3 changed files with 203 additions and 27 deletions
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env zsh
setopt ERR_EXIT PIPE_FAIL NOUNSET
# Collect staged PHP and Twig files
STAGED_PHP=()
while IFS= read -r file; do
[[ -n "$file" ]] && STAGED_PHP+=("$file")
done < <(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.php$' || true)
STAGED_TWIG=()
while IFS= read -r file; do
[[ -n "$file" ]] && STAGED_TWIG+=("$file")
done < <(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.twig$' || true)
if [[ ${#STAGED_PHP[@]} -eq 0 && ${#STAGED_TWIG[@]} -eq 0 ]]; then
exit 0
fi
# Use exec if the service is up, otherwise spin up a one-off container
if docker compose exec -T php true 2>/dev/null; then
DOCKER_CMD=(docker compose exec -T php)
else
echo "PHP service not running — using docker compose run..."
DOCKER_CMD=(docker compose run --rm php)
fi
if [[ ${#STAGED_PHP[@]} -gt 0 ]]; then
echo "PHP (${#STAGED_PHP[@]} file(s)): Rector → CS-Fixer → PHPStan"
echo " → Rector"
"${DOCKER_CMD[@]}" vendor/bin/rector process "${STAGED_PHP[@]}"
git add "${STAGED_PHP[@]}"
echo " → PHP-CS-Fixer"
"${DOCKER_CMD[@]}" vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php "${STAGED_PHP[@]}"
git add "${STAGED_PHP[@]}"
echo " → PHPStan"
"${DOCKER_CMD[@]}" vendor/bin/phpstan analyse "${STAGED_PHP[@]}" --no-progress
fi
if [[ ${#STAGED_TWIG[@]} -gt 0 ]]; then
echo "Twig (${#STAGED_TWIG[@]} file(s)): Twig-CS-Fixer"
echo " → Twig-CS-Fixer"
"${DOCKER_CMD[@]}" vendor/bin/twig-cs-fixer fix "${STAGED_TWIG[@]}"
git add "${STAGED_TWIG[@]}"
fi