feat: Versionierung mit Changelog, Version 1.0.0

Bis jetzt stand nirgends, welcher Stand laeuft. Beim Aktualisieren auf
einem Server ist das die erste Frage.

CHANGELOG.md nach Keep a Changelog, Versionsnummern nach SemVer. Der
Changelog sagt, was sich beim Arbeiten aendert - nicht, welche Datei
angefasst wurde. Dazu eine Tabelle, was Major, Minor und Patch fuer den
Betreiber praktisch bedeuten, und der Hinweis, dass sich eine
Datenbank-Migration nicht zurueckrollen laesst.

Die Version steht bewusst an zwei Stellen: package.json und
src/lib/version.ts. Ein Import der package.json waere im
Standalone-Build eine andere Datei als die des Projekts - die Zahl haenge
dann an der Laufzeit. Ein Test haelt beide zusammen, und
"npm run version" setzt sie gemeinsam samt Changelog-Abschnitt.

Committet und getaggt wird nicht automatisch. Ein Changelog-Eintrag, den
niemand gegengelesen hat, ist keinen Deut besser als keiner.

Sichtbar wird die Version unten in der Seitenleiste und unter
/api/gesundheit - dort mit Git-Stand, den der Docker-Build hineinreicht.
Auf der Anmeldeseite steht sie nicht: wer nicht angemeldet ist, muss
nicht wissen, welche Fassung hier laeuft.

Etappe: 8
Phase: Haertung
This commit is contained in:
Florian Wilde
2026-08-22 10:41:33 +02:00
parent 4b953e7887
commit b2ac13e128
10 changed files with 442 additions and 8 deletions
+38
View File
@@ -0,0 +1,38 @@
/**
* Versionsangaben der Anwendung.
*
* VERSION wird vom Skript `npm run version` zusammen mit der package.json
* gesetzt - es gibt also genau eine Quelle, aus der beide gespeist werden.
* Ein Test (tests/version.test.ts) prueft, dass sie nicht auseinanderlaufen.
*
* Warum nicht einfach die package.json importieren? Im Standalone-Build
* liegt eine andere package.json neben dem Server als die des Projekts.
* Die Zahl waere dann je nach Laufzeit eine andere - genau das, was man
* bei einer Versionsangabe nicht gebrauchen kann.
*
* Die Angabe ist kein Geheimnis, aber auch keine oeffentliche Auskunft:
* sie steht in den Einstellungen und im Gesundheitsendpunkt, nicht auf
* der Anmeldeseite. Wer nicht angemeldet ist, muss nicht wissen, welche
* Fassung hier laeuft.
*/
/** Muss zur "version" in der package.json passen. */
export const VERSION = '1.0.0'
/**
* Kurzer Git-Stand, beim Bauen hineingereicht:
*
* docker build --build-arg GIT_COMMIT=$(git rev-parse --short HEAD) .
*
* Fehlt die Angabe (etwa im Entwicklungsmodus), bleibt sie leer. Dann
* zeigt die Oberflaeche nur die Version.
*/
export const COMMIT = process.env.NEXT_PUBLIC_GIT_COMMIT ?? ''
/** Zeitpunkt des Bauens, ebenfalls beim Bauen hineingereicht. */
export const GEBAUT_AM = process.env.NEXT_PUBLIC_BUILD_ZEIT ?? ''
/** "1.0.0" oder "1.0.0 · 4b953e7" - fuer die Anzeige. */
export function versionstext(): string {
return COMMIT ? `${VERSION} · ${COMMIT}` : VERSION
}