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 rund 73 Sekunden. Ein Gate, das |
| 12 | # bei jedem Zwischenstand so lange blockiert, wird nicht respektiert, |
| 13 | # sondern mit --no-verify abgeschaltet. Deshalb hier nur die Schnellstufe |
| 14 | # (rund 40 s) - und eine Erinnerung, wenn die Vollstufe zu lange her ist. |
| 15 | # |
| 16 | # UMGEHEN |
| 17 | # `git commit --no-verify` bleibt möglich und soll es bleiben. Ein |
| 18 | # Alleinentwickler braucht Zwischenstände. Wer umgeht, weiß, was er tut - |
| 19 | # die Veröffentlichungsliste verlangt die Vollstufe ohnehin. |
| 20 | # |
| 21 | # EINRICHTEN |
| 22 | # Hooks liegen versioniert unter .githooks/ und wirken erst nach |
| 23 | # git config core.hooksPath .githooks |
| 24 | # Das erledigt `npm run hooks:einrichten` in app/, und `npm install` ruft es |
| 25 | # über das prepare-Skript von selbst auf. |
| 26 | |
| 27 | set -e |
| 28 | |
| 29 | wurzel=$(git rev-parse --show-toplevel) |
| 30 | stempel="$wurzel/.git/gate-stempel" |
| 31 | |
| 32 | printf 'Gate (Schnellstufe): Typen, Linter, Tests …\n' |
| 33 | |
| 34 | cd "$wurzel/app" |
| 35 | npm run --silent gate:schnell |
| 36 | |
| 37 | # ── Erinnerung an die Vollstufe ──────────────────────────────────────────── |
| 38 | # Kein Sperren, nur Sagen: Sperren erzeugt Umgehungsgewohnheiten, und die |
| 39 | # Vollstufe gehört ohnehin in die Veröffentlichungsliste. |
| 40 | if [ ! -f "$stempel" ]; then |
| 41 | printf '\nHinweis: Die Vollstufe lief hier noch nie.\n' |
| 42 | printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen -\n' |
| 43 | printf 'nur dort laufen die Prüfungen im echten Fenster (Kontrast, Zielgrößen).\n' |
| 44 | elif [ -n "$(find "$wurzel/app/src" -newer "$stempel" -print -quit 2>/dev/null)" ]; then |
| 45 | printf '\nHinweis: Seit dem letzten vollen Gate-Lauf hat sich der Quelltext geändert.\n' |
| 46 | printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen.\n' |
| 47 | fi |
| 48 | |
| 49 | printf '\nGate sauber: Typen, Linter, Tests - axe je Ansicht in jsdom.\n' |
| 50 | printf 'Kontrast und Zielgroessen prueft erst die Vollstufe im echten Fenster.\n' |