lsa-planer

LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.

/ scripts clean.mjs

2,3 KB Rohdatei
scripts/clean.mjs — 56 Zeilen
1 import { readdir, rm } from 'node:fs/promises';
2 import { join } from 'node:path';
3 import { fileURLToPath, URL } from 'node:url';
4
5 /*
6 * Aufraeumen nach einem Bau.
7 *
8 * `build/` entsteht bei jedem `npm run build` neu; es zu entfernen kostet
9 * nichts. `release/` ist etwas anderes: Dort liegen die ausgelieferten Pakete
10 * und die Dateien PRUEFSUMMEN-<Fassung>.txt, und der Ordner steht in
11 * .gitignore - er ist damit die einzige Kopie. Die Pruefsummen sind der
12 * Nachweis, mit welchem Programmstand eine Planunterlage erstellt wurde; ein
13 * Neubau aus derselben Marke ergaebe denselben Quelltext, aber eine andere
14 * Summe. Wer sie loescht, kann sie nicht zurueckholen - auch
15 * `npm run pruefsummen` nicht, denn das braucht das Paket, an das es die Summe
16 * haengt.
17 *
18 * Deshalb: `build/` geht immer, `release/` nur auf ausdrueckliche Ansage mit
19 * `npm run clean -- --auch-release`, und die PRUEFSUMMEN-Dateien bleiben auch
20 * dann liegen.
21 *
22 * Der doppelte Strich gehoert dazu und ist keine Schreibweise zur Zierde: npm
23 * nimmt ein unbekanntes Argument als eigene Einstellung und reicht es nicht an
24 * das Skript weiter. `npm run clean --auch-release` raeumt deshalb nur `build/`
25 * auf und laesst `release/` unberuehrt - erst `npm run clean -- --auch-release`
26 * kommt hier an. Wer das Skript unmittelbar aufruft (`node scripts/clean.mjs
27 * --auch-release`), braucht den Strich nicht.
28 */
29
30 /** Dateien, die auch mit --auch-release nicht angetastet werden. */
31 const NACHWEISE = /^PRUEFSUMMEN-.+\.txt$/i;
32
33 const ordner = (name) => fileURLToPath(new URL(`../${name}`, import.meta.url));
34
35 await rm(ordner('build'), { recursive: true, force: true });
36 console.log('entfernt: build');
37
38 if (!process.argv.includes('--auch-release')) {
39 console.log(
40 'behalten: release (Pakete und Pruefsummen) – entfernen mit: npm run clean -- --auch-release',
41 );
42 } else {
43 const ziel = ordner('release');
44 let eintraege = [];
45 try {
46 eintraege = await readdir(ziel, { withFileTypes: true });
47 } catch (fehler) {
48 // Ein frischer Klon hat kein release/ - das ist kein Fehlerfall.
49 if (fehler.code !== 'ENOENT') throw fehler;
50 }
51 for (const eintrag of eintraege) {
52 if (NACHWEISE.test(eintrag.name)) continue;
53 await rm(join(ziel, eintrag.name), { recursive: true, force: true });
54 }
55 console.log('entfernt: release, ohne die Dateien PRUEFSUMMEN-*.txt');
56 }