waffensachkunde

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

/ app tools gate-stempel.mjs

2,1 KB Rohdatei
app/tools/gate-stempel.mjs — 53 Zeilen
1 /**
2 * Hält fest, wann die Vollstufe des Gates zuletzt sauber durchlief.
3 *
4 * Der Stempel liegt in `.git/` und ist damit bewusst NICHT versioniert: Er
5 * beschreibt den Zustand dieses einen Arbeitsplatzes, nicht den des Projekts.
6 * Ein eingecheckter Stempel würde behaupten, bei jedem anderen sei die
7 * Vollstufe auch schon gelaufen.
8 *
9 * Der pre-commit-Hook vergleicht sein Alter mit der jüngsten Änderung unter
10 * `app/src` und erinnert, wenn der Quelltext seither weitergewandert ist.
11 */
12 import { execFileSync } from 'node:child_process';
13 import { writeFileSync } from 'node:fs';
14 import { dirname, join } from 'node:path';
15 import { fileURLToPath } from 'node:url';
16
17 import { paketstand } from './paketstand.mjs';
18
19 const wurzel = execFileSync('git', ['rev-parse', '--show-toplevel'], {
20 encoding: 'utf8',
21 }).trim();
22
23 const pfad = join(wurzel, '.git', 'gate-stempel');
24 writeFileSync(pfad, `${new Date().toISOString()}\n`, 'utf8');
25
26 process.stdout.write(`Gate vollständig durchlaufen. Stempel: ${pfad}\n`);
27
28 /*
29 Und jetzt das, was der Bericht bisher verschwieg.
30
31 Playwright zählt übersprungene Prüfungen nicht in die Zusammenfassung: Aus
32 „119 bestanden“ wird „110 bestanden“, und die fehlenden fallen
33 niemandem auf. Ein Gate, das nicht sagt, was es ausgelassen hat, behauptet
34 mehr, als es geprüft hat – dieselbe Unwahrheit, gegen die `bauPruefen()`
35 angelegt ist.
36
37 Kein Fehlschlag, sondern eine Feststellung: `npm run gate` baut das Paket
38 nicht mit, und ein Abbruch zwänge zu einem mehrminütigen `dist:win` vor
39 jedem Lauf. Wer veröffentlicht, findet den Schritt in
40 docs/veroeffentlichen.md.
41 */
42 const appWurzel = dirname(dirname(fileURLToPath(import.meta.url)));
43 const paket = paketstand(appWurzel);
44
45 if (!paket.vorhanden || paket.veraltet) {
46 process.stdout.write(
47 `\nNICHT geprüft: e2e/gepackt.spec.ts – ${paket.grund}\n` +
48 'Die gepackte Anwendung ist damit ungeprüft geblieben; vor einer ' +
49 'Veröffentlichung ist das ein offener Punkt.\n',
50 );
51 } else {
52 process.stdout.write('Einschließlich der Prüfungen gegen das gebaute Paket.\n');
53 }