#!/bin/sh # # Barrierefreiheits- und Qualitätsgate vor jedem Commit. # # WARUM AM COMMIT UND NICHT AM PUSH # Dieses Projekt hat kein Fernarchiv. `git push` findet nie statt, ein # pre-push-Hook wäre totes Konfigurat. Der Commit ist das einzige Ereignis, # das tatsächlich eintritt. # # WARUM NUR DIE SCHNELLSTUFE # Die Vollstufe (Bau + Playwright) dauert rund 73 Sekunden. Ein Gate, das # bei jedem Zwischenstand so lange blockiert, wird nicht respektiert, # sondern mit --no-verify abgeschaltet. Deshalb hier nur die Schnellstufe # (rund 40 s) - und eine Erinnerung, wenn die Vollstufe zu lange her ist. # # UMGEHEN # `git commit --no-verify` bleibt möglich und soll es bleiben. Ein # Alleinentwickler braucht Zwischenstände. Wer umgeht, weiß, was er tut - # die Veröffentlichungsliste verlangt die Vollstufe ohnehin. # # EINRICHTEN # Hooks liegen versioniert unter .githooks/ und wirken erst nach # git config core.hooksPath .githooks # Das erledigt `npm run hooks:einrichten` in app/, und `npm install` ruft es # über das prepare-Skript von selbst auf. set -e wurzel=$(git rev-parse --show-toplevel) stempel="$wurzel/.git/gate-stempel" printf 'Gate (Schnellstufe): Typen, Linter, Tests …\n' cd "$wurzel/app" npm run --silent gate:schnell # ── Erinnerung an die Vollstufe ──────────────────────────────────────────── # Kein Sperren, nur Sagen: Sperren erzeugt Umgehungsgewohnheiten, und die # Vollstufe gehört ohnehin in die Veröffentlichungsliste. if [ ! -f "$stempel" ]; then printf '\nHinweis: Die Vollstufe lief hier noch nie.\n' printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen -\n' printf 'nur dort laufen die Prüfungen im echten Fenster (Kontrast, Zielgrößen).\n' elif [ -n "$(find "$wurzel/app/src" -newer "$stempel" -print -quit 2>/dev/null)" ]; then printf '\nHinweis: Seit dem letzten vollen Gate-Lauf hat sich der Quelltext geändert.\n' printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen.\n' fi printf '\nGate sauber: Typen, Linter, Tests - axe je Ansicht in jsdom.\n' printf 'Kontrast und Zielgroessen prueft erst die Vollstufe im echten Fenster.\n'