waffensachkunde

Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.

/ .githooks pre-commit

2,4 KB Rohdatei
.githooks/pre-commit — 53 Zeilen
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'