All checks were successful
Deploy Feature Branch to Test / PHP Syntax Check (push) Successful in 58s
Lint / PHP Syntax Check (push) Successful in 1m0s
Deploy Feature Branch to Test / HTML Lint (htmlhint) (push) Successful in 1m39s
Deploy Feature Branch to Test / CSS Lint (stylelint) (push) Successful in 1m42s
Deploy Feature Branch to Test / Deploy to Test Environment (push) Successful in 23s
Lint / HTML Lint (htmlhint) (push) Successful in 1m16s
Lint / CSS Lint (stylelint) (push) Successful in 1m21s
Lint / PHP Syntax Check (pull_request) Successful in 31s
Lint / CSS Lint (stylelint) (pull_request) Successful in 1m13s
Lint / HTML Lint (htmlhint) (pull_request) Successful in 1m4s
mapfile + array prevents word-splitting issues with filenames containing spaces or other shell-special characters. Affects both the affected-files listing and the stale-index safety check. Without this fix, a filename like 'My Module.php' would be split into 'My' and 'Module.php', causing the disk-existence check to look for wrong paths.
79 lines
3.2 KiB
Bash
Executable File
79 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# pre-commit-checks.sh – Pre-Commit Checks (Lint + PHPUnit)
|
||
# Wird vom Husky-Hook (.husky/pre-commit) und von scripts/safe-commit.sh aufgerufen.
|
||
#
|
||
# Abbruch mit Exit-Code != 0 bei Fehler.
|
||
set -euo pipefail
|
||
|
||
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
cd "$REPO_ROOT"
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# 1) lint-staged (HTML, CSS, JS, JSON, MD, PHP-Syntax)
|
||
# ─────────────────────────────────────────────────────────────
|
||
if command -v npx >/dev/null 2>&1 && [ -f "node_modules/.bin/lint-staged" ]; then
|
||
echo "🔍 Pre-Commit: lint-staged laeuft..."
|
||
if ! npx lint-staged; then
|
||
echo ""
|
||
echo "❌ Pre-Commit: lint-staged fehlgeschlagen. Commit abgebrochen."
|
||
exit 1
|
||
fi
|
||
echo "✅ Pre-Commit: lint-staged OK"
|
||
fi
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# 2) PHPUnit nur, wenn PHP-relevante Dateien gestaged sind
|
||
# - *.php Quellcode & Tests
|
||
# - phpunit.xml Test-Konfiguration
|
||
# - composer.json PHP-Abhaengigkeiten
|
||
# - composer.lock Lock-File
|
||
# ─────────────────────────────────────────────────────────────
|
||
# PHP-relevante Files (Array-basiert, robust gegen Spaces/Newlines in Filenames)
|
||
mapfile -t PHP_TOUCHED_ARR < <(git diff --cached --name-only --diff-filter=ACMR \
|
||
| grep -E '\.(php)$|^phpunit\.xml$|^composer\.(json|lock)$' || true)
|
||
|
||
if [ "${#PHP_TOUCHED_ARR[@]}" -gt 0 ]; then
|
||
echo ""
|
||
echo "==> PHP-Dateien geaendert -> PHPUnit wird ausgefuehrt"
|
||
echo " Betroffene Dateien:"
|
||
printf ' - %s\n' "${PHP_TOUCHED_ARR[@]}"
|
||
|
||
# Safety-Check: alle gestaged PHP-Dateien muessen auf der Disk existieren.
|
||
# Sonst wuerde PHPUnit eine inkonsistente Codebasis testen (Staged != Working Tree).
|
||
MISSING=()
|
||
for f in "${PHP_TOUCHED_ARR[@]}"; do
|
||
[ -f "$f" ] || MISSING+=("$f")
|
||
done
|
||
if [ "${#MISSING[@]}" -gt 0 ]; then
|
||
echo ""
|
||
echo "FEHLER: Gestaged PHP-Dateien existieren nicht auf der Disk:"
|
||
printf ' - %s\n' "${MISSING[@]}"
|
||
echo " Loesung: 'git restore --staged <datei>' oder Working-Tree synchronisieren."
|
||
exit 1
|
||
fi
|
||
|
||
# Composer-Deps nur installieren, falls noetig (Cache-Hit fuer wiederholte Commits)
|
||
if [ ! -f "vendor/bin/phpunit" ]; then
|
||
echo ""
|
||
echo "==> vendor/ fehlt -> composer install laeuft"
|
||
if ! command -v composer >/dev/null 2>&1; then
|
||
echo "FEHLER: 'composer' ist nicht installiert."
|
||
echo " Installation: https://getcomposer.org/download/"
|
||
exit 1
|
||
fi
|
||
composer install --no-interaction --prefer-dist --no-progress
|
||
fi
|
||
|
||
echo ""
|
||
echo "==> PHPUnit laeuft..."
|
||
if ! vendor/bin/phpunit; then
|
||
echo ""
|
||
echo "FEHLER: PHPUnit-Tests fehlgeschlagen. Commit abgebrochen."
|
||
echo " Behebe die Fehler und versuche es erneut."
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "==> PHPUnit OK"
|
||
fi
|