lsa-planer
LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.
| 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 | } |