waffensachkunde
Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.
| 1 | #!/bin/sh |
| 2 | # |
| 3 | # Barrierefreiheits- und Qualitätsgate vor jedem Commit. |
| 4 | # |
| 5 | # WARUM AM COMMIT UND NICHT AM PUSH |
| 6 | # Dieses Projekt hat kein Fernarchiv. `git push` findet nie statt, ein |
| 7 | # pre-push-Hook wäre totes Konfigurat. Der Commit ist das einzige Ereignis, |
| 8 | # das tatsächlich eintritt. |
| 9 | # |
| 10 | # WARUM NUR DIE SCHNELLSTUFE |
| 11 | # Die Vollstufe (Bau + Playwright) dauert gemessen 243 Sekunden. Ein Gate, |
| 12 | # das bei jedem Zwischenstand vier Minuten blockiert, wird nicht respektiert, |
| 13 | # sondern umgangen. Deshalb hier nur die Schnellstufe (gemessen 98 s) - und |
| 14 | # eine Erinnerung, wenn die Vollstufe zu lange her ist. Beide Zeiten am |
| 15 | # 03.09.2026 auf dem Arbeitsplatz gemessen, nicht geschätzt. |
| 16 | # |
| 17 | # UMGEHEN |
| 18 | # `git commit --no-verify` ist in diesem Projekt NICHT vorgesehen. CLAUDE.md |
| 19 | # sagt es ausdrücklich ("Kein `--no-verify`"), und .claude/settings.json |
| 20 | # sperrt den Aufruf. Bis Fassung 0.27.2 stand hier das Gegenteil - dieselbe |
| 21 | # Datei versprach, was die Projektregel verbietet. Git selbst kann den Haken |
| 22 | # weiterhin überspringen; das ist eine Eigenschaft von Git, keine Erlaubnis. |
| 23 | # |
| 24 | # EINRICHTEN |
| 25 | # Hooks liegen versioniert unter .githooks/ und wirken erst nach |
| 26 | # git config core.hooksPath .githooks |
| 27 | # Das erledigt `npm run hooks:einrichten` in app/, und `npm install` ruft es |
| 28 | # über das prepare-Skript von selbst auf. |
| 29 | |
| 30 | set -e |
| 31 | |
| 32 | wurzel=$(git rev-parse --show-toplevel) |
| 33 | stempel="$wurzel/.git/gate-stempel" |
| 34 | |
| 35 | printf 'Gate (Schnellstufe): Typen, Linter, Tests …\n' |
| 36 | |
| 37 | cd "$wurzel/app" |
| 38 | npm run --silent gate:schnell |
| 39 | |
| 40 | # ── Erinnerung an die Vollstufe ──────────────────────────────────────────── |
| 41 | # Kein Sperren, nur Sagen: Sperren erzeugt Umgehungsgewohnheiten, und die |
| 42 | # Vollstufe gehört ohnehin in die Veröffentlichungsliste. |
| 43 | if [ ! -f "$stempel" ]; then |
| 44 | printf '\nHinweis: Die Vollstufe lief hier noch nie.\n' |
| 45 | printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen -\n' |
| 46 | printf 'nur dort laufen die Prüfungen im echten Fenster (Kontrast, Zielgrößen).\n' |
| 47 | elif [ -n "$(find "$wurzel/app/src" -newer "$stempel" -print -quit 2>/dev/null)" ]; then |
| 48 | printf '\nHinweis: Seit dem letzten vollen Gate-Lauf hat sich der Quelltext geändert.\n' |
| 49 | printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen.\n' |
| 50 | fi |
| 51 | |
| 52 | printf '\nGate sauber: Typen, Linter, Tests - axe je Ansicht in jsdom.\n' |
| 53 | printf 'Kontrast und Zielgroessen prueft erst die Vollstufe im echten Fenster.\n' |