Files
Florian Wilde b2ac13e128 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
2026-08-22 10:41:33 +02:00

32 lines
1.1 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { readFileSync } from 'node:fs'
import { VERSION, versionstext } from '@/lib/version'
/**
* Die Version steht an zwei Stellen: in der package.json und in
* src/lib/version.ts. Das ist Absicht - im Standalone-Build liegt eine
* andere package.json neben dem Server als die des Projekts, ein Import
* waere also je nach Laufzeit eine andere Zahl.
*
* Damit die beiden nicht auseinanderlaufen, gibt es dieses Netz. Wer die
* Version von Hand aendert statt mit "npm run version", merkt es hier.
*/
describe('Version', () => {
const paket = JSON.parse(readFileSync('package.json', 'utf8')) as { version: string }
it('stimmt mit der package.json ueberein', () => {
expect(
VERSION,
'src/lib/version.ts und package.json weichen ab - benutze "npm run version"',
).toBe(paket.version)
})
it('ist eine gueltige Versionsnummer nach SemVer', () => {
expect(VERSION).toMatch(/^\d+\.\d+\.\d+$/)
})
it('haengt den Git-Stand an, wenn er bekannt ist', () => {
expect(versionstext().startsWith(VERSION)).toBe(true)
})
})