Pre-Commit-Hook um PHPUnit erweitern #67

Closed
opened 2026-05-22 22:50:15 +02:00 by greggy · 3 comments
Owner

Beschreibung

Der bestehende pre-commit-Hook soll erweitert werden, sodass PHPUnit-Tests vor jedem Commit automatisch ausgeführt werden.

Anforderungen

  • Pre-Commit-Hook identifizieren und analysieren
  • PHPUnit-Testlauf als neuen Hook-Schritt einfügen
  • Bei Test-Fehler soll der Commit abgebrochen werden
  • Hook soll performant sein (keine unnötige Verzögerung)

Hintergrund

Damit wird sichergestellt, dass keine Commits mit fehlschlagenden Tests in den Branch gelangen – als lokale Ergänzung zur CI-Pipeline.

## Beschreibung Der bestehende pre-commit-Hook soll erweitert werden, sodass PHPUnit-Tests vor jedem Commit automatisch ausgeführt werden. ## Anforderungen - [ ] Pre-Commit-Hook identifizieren und analysieren - [ ] PHPUnit-Testlauf als neuen Hook-Schritt einfügen - [ ] Bei Test-Fehler soll der Commit abgebrochen werden - [ ] Hook soll performant sein (keine unnötige Verzögerung) ## Hintergrund Damit wird sichergestellt, dass keine Commits mit fehlschlagenden Tests in den Branch gelangen – als lokale Ergänzung zur CI-Pipeline.
greggy added the
KI
KI
KI
KI
labels 2026-05-22 22:51:00 +02:00
Author
Owner

Erstellt von: Ollama-Git/qwen/qwen3.6-27b

Erstellt von: Ollama-Git/qwen/qwen3.6-27b
Author
Owner

Implementiert (Branch feature/issue-67-phpunit-precommit)

Was wurde gemacht

Architektur — DRY:

  • scripts/pre-commit-checks.sh (NEU, 77 Zeilen): Zentrale Logik
    • Lint-Staged (HTML/CSS/JS/PHP)
    • PHPUnit-Skip wenn keine PHP-Files gestaged (Performance!)
    • PHPUnit-Run mit composer install (lazy, nur wenn vendor/ fehlt)
    • Stale-Index Safety-Check (verhindert Tests mit gelöschten Files)
  • .husky/pre-commit (MODIFIZIERT, 3 Zeilen): Delegiert an pre-commit-checks.sh
  • scripts/safe-commit.sh (MODIFIZIERT): Nutzt gleiche Logik als Safety-Net

Trigger-Filter (Performance-Optimum):

  • *.php, phpunit.xml, composer.json, composer.lock
  • → CSS/HTML/JS-only Commits überspringen PHPUnit komplett

Commits

  • 85cf4f3 chore(hooks): add shared pre-commit-checks script
  • b0f769d feat(hooks): run PHPUnit in pre-commit hook (#67)
  • 3f1f0f5 fix(hooks): use array-based file iteration for safety check

Verifizierte Szenarien (4/4 )

  • CSS-only commit: PHPUnit skip → Exit 0 ✓
  • PHP-Datei commit: PHPUnit 18/18 grün → Exit 0 ✓
  • Stale-Index (staged + deleted): Abbruch → Exit 1 ✓
  • Bash-Quoting-Fix: Funktioniert mit Spaces in Filenames ✓

Bereit für PR

Branch ready zum Reviewen und Mergen. PR-Erstellung durch Martin (gemäß Konvention).

## ✅ Implementiert (Branch `feature/issue-67-phpunit-precommit`) ### Was wurde gemacht **Architektur — DRY:** - `scripts/pre-commit-checks.sh` (NEU, 77 Zeilen): Zentrale Logik - Lint-Staged (HTML/CSS/JS/PHP) - PHPUnit-Skip wenn keine PHP-Files gestaged (Performance!) - PHPUnit-Run mit `composer install` (lazy, nur wenn `vendor/` fehlt) - Stale-Index Safety-Check (verhindert Tests mit gelöschten Files) - `.husky/pre-commit` (MODIFIZIERT, 3 Zeilen): Delegiert an `pre-commit-checks.sh` - `scripts/safe-commit.sh` (MODIFIZIERT): Nutzt gleiche Logik als Safety-Net **Trigger-Filter (Performance-Optimum):** - `*.php`, `phpunit.xml`, `composer.json`, `composer.lock` - → CSS/HTML/JS-only Commits überspringen PHPUnit komplett ### Commits - `85cf4f3` chore(hooks): add shared pre-commit-checks script - `b0f769d` feat(hooks): run PHPUnit in pre-commit hook (#67) - `3f1f0f5` fix(hooks): use array-based file iteration for safety check ### Verifizierte Szenarien (4/4 ✅) - CSS-only commit: PHPUnit skip → Exit 0 ✓ - PHP-Datei commit: PHPUnit 18/18 grün → Exit 0 ✓ - Stale-Index (staged + deleted): Abbruch → Exit 1 ✓ - Bash-Quoting-Fix: Funktioniert mit Spaces in Filenames ✓ ### Bereit für PR Branch ready zum Reviewen und Mergen. PR-Erstellung durch Martin (gemäß Konvention).
greggy reopened this issue 2026-06-04 02:27:21 +02:00
Author
Owner

🏗️ ADR-001 nachgetragen

Architektur-Entscheidung rückwirkend dokumentiert in docs/adr/001-phpunit-integration.md (Commit f9295a2).

Kernentscheidung: 2-Layer-Strategie — CI-Pipeline (.gitea/workflows/phpunit.yml) + Pre-Commit-Hook (.husky/pre-commitscripts/pre-commit-checks.sh).

Dokumentiert:

  • Kontext + Anforderungen
  • Schichten-Logik (Husky → Shared-Script → Composer (lazy) → PHPUnit)
  • Verworfene Alternativen mit Rationale (CI-only, lokal-only, npm-Wrapper, Lint-integration)
  • Konsequenzen (positiv/negativ/Risiken)
  • Performance-Budget (~25s CI, <10s lokal bei PHP-Commits)
  • Stale-Index-Edge-Case-Mitigation

Lesson Learned: ADRs gehören in Ph0.5 (vor Code-Phase), nicht erst nach Ph8. Für künftige Issues verbindlich.

Refs #65, #67.

## 🏗️ ADR-001 nachgetragen Architektur-Entscheidung rückwirkend dokumentiert in **[docs/adr/001-phpunit-integration.md](https://git.home.kies-media.de/greggy/landingpage-haus-schleusingen/src/branch/main/docs/adr/001-phpunit-integration.md)** (Commit `f9295a2`). **Kernentscheidung:** 2-Layer-Strategie — CI-Pipeline (`.gitea/workflows/phpunit.yml`) + Pre-Commit-Hook (`.husky/pre-commit` → `scripts/pre-commit-checks.sh`). **Dokumentiert:** - Kontext + Anforderungen - Schichten-Logik (Husky → Shared-Script → Composer (lazy) → PHPUnit) - Verworfene Alternativen mit Rationale (CI-only, lokal-only, npm-Wrapper, Lint-integration) - Konsequenzen (positiv/negativ/Risiken) - Performance-Budget (~25s CI, <10s lokal bei PHP-Commits) - Stale-Index-Edge-Case-Mitigation **Lesson Learned:** ADRs gehören in Ph0.5 (vor Code-Phase), nicht erst nach Ph8. Für künftige Issues verbindlich. Refs #65, #67.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: greggy/landingpage-haus-schleusingen#67
No description provided.