Versionsnummer aus dem Git-Tag ableiten statt sie einzuchecken #7

Closed
opened 2026-08-15 10:34:04 +00:00 by AxonByteDev · 1 comment
Owner

Problem

VERSION und frontend/package.json enthalten die Versionsnummer als eingecheckten Dateiinhalt. Beim Release werden diese Dateien auf beta und auf main unabhängig voneinander verändert. Git sieht dadurch bei jedem Merge beta -> main zwei divergierende Fassungen derselben Dateien und meldet einen Konflikt.

Das aktuelle publish.sh umgeht das mit einer Sonderbehandlung (merge_auto_resolving_version_files()) und einem automatischen Rück-Merge main -> beta. Das behandelt nur das Symptom und macht das Release-Skript deutlich komplizierter, als es sein müsste.

Ziel

Der Git-Tag ist die einzige Quelle der Wahrheit für die Versionsnummer. Die Version wird beim Build erzeugt und nicht mehr versioniert. Dadurch hat main keine eigenen Inhaltsänderungen mehr, jeder Merge beta -> main ist konfliktfrei, und das Release-Skript wird deutlich schlanker.

Aufgaben

  • VERSION aus der Git-Verwaltung nehmen und in .gitignore aufnehmen (git rm --cached VERSION)
  • version in frontend/package.json dauerhaft auf 0.0.0 setzen (Feld wird von npm verlangt, Inhalt ist ab dann bedeutungslos)
  • In frontend/vite.config.ts ein define für __APP_VERSION__ ergänzen, gespeist aus process.env.APP_VERSION, mit Fallback "dev"
  • Typdeklaration declare const __APP_VERSION__: string; in frontend/src/vite-env.d.ts ergänzen
  • Frontend: fest verdrahtete Versionsanzeige durch __APP_VERSION__ ersetzen
  • Backend: Helfer zum Lesen der VERSION-Datei mit Fallback "0.0.0-dev" anlegen und an allen Stellen verwenden, die bisher eine Version ausgeben (u. a. der Health-/Info-Endpunkt)
  • publish.sh auf die neue Logik umstellen: merge_auto_resolving_version_files(), den Rück-Merge-Block und switch_default_branch() entfernen; Version nur noch generieren, nicht committen
  • Passwort-Abfrage im Skript durch Access Token (FORGEJO_TOKEN) ersetzen
  • README/CONTRIBUTING um den neuen Release-Ablauf ergänzen

Akzeptanzkriterien

  • git status zeigt nach einem Build keine geänderte VERSION mehr an
  • Ein frischer Klon ohne Build startet fehlerfrei und meldet 0.0.0-dev
  • Ein Merge beta -> main erzeugt keinen Konflikt mehr
  • Frontend und Backend zeigen nach scripts/publish.sh beta X.Y.Z beide dieselbe Versionsnummer an
  • merge_auto_resolving_version_files() existiert nicht mehr im Skript

Hinweise

  • Der Build muss die Version explizit übergeben: APP_VERSION=$(git describe --tags --abbrev=0) npm run build. Das übernimmt publish.sh automatisch.
  • Der Backend-Fallback ist wichtig: im Entwickler-Checkout existiert die VERSION-Datei nicht, und dort darf nichts abstürzen.
  • Diese Umstellung ist Voraussetzung dafür, dass Releases über einen Pull Request beta -> main laufen können, statt direkt nach main zu pushen.
## Problem `VERSION` und `frontend/package.json` enthalten die Versionsnummer als eingecheckten Dateiinhalt. Beim Release werden diese Dateien auf `beta` und auf `main` unabhängig voneinander verändert. Git sieht dadurch bei jedem Merge `beta -> main` zwei divergierende Fassungen derselben Dateien und meldet einen Konflikt. Das aktuelle `publish.sh` umgeht das mit einer Sonderbehandlung (`merge_auto_resolving_version_files()`) und einem automatischen Rück-Merge `main -> beta`. Das behandelt nur das Symptom und macht das Release-Skript deutlich komplizierter, als es sein müsste. ## Ziel Der Git-Tag ist die einzige Quelle der Wahrheit für die Versionsnummer. Die Version wird beim Build erzeugt und nicht mehr versioniert. Dadurch hat `main` keine eigenen Inhaltsänderungen mehr, jeder Merge `beta -> main` ist konfliktfrei, und das Release-Skript wird deutlich schlanker. ## Aufgaben - [ ] `VERSION` aus der Git-Verwaltung nehmen und in `.gitignore` aufnehmen (`git rm --cached VERSION`) - [ ] `version` in `frontend/package.json` dauerhaft auf `0.0.0` setzen (Feld wird von npm verlangt, Inhalt ist ab dann bedeutungslos) - [ ] In `frontend/vite.config.ts` ein `define` für `__APP_VERSION__` ergänzen, gespeist aus `process.env.APP_VERSION`, mit Fallback `"dev"` - [ ] Typdeklaration `declare const __APP_VERSION__: string;` in `frontend/src/vite-env.d.ts` ergänzen - [ ] Frontend: fest verdrahtete Versionsanzeige durch `__APP_VERSION__` ersetzen - [ ] Backend: Helfer zum Lesen der `VERSION`-Datei mit Fallback `"0.0.0-dev"` anlegen und an allen Stellen verwenden, die bisher eine Version ausgeben (u. a. der Health-/Info-Endpunkt) - [ ] `publish.sh` auf die neue Logik umstellen: `merge_auto_resolving_version_files()`, den Rück-Merge-Block und `switch_default_branch()` entfernen; Version nur noch generieren, nicht committen - [ ] Passwort-Abfrage im Skript durch Access Token (`FORGEJO_TOKEN`) ersetzen - [ ] README/CONTRIBUTING um den neuen Release-Ablauf ergänzen ## Akzeptanzkriterien - [ ] `git status` zeigt nach einem Build keine geänderte `VERSION` mehr an - [ ] Ein frischer Klon ohne Build startet fehlerfrei und meldet `0.0.0-dev` - [ ] Ein Merge `beta -> main` erzeugt keinen Konflikt mehr - [ ] Frontend und Backend zeigen nach `scripts/publish.sh beta X.Y.Z` beide dieselbe Versionsnummer an - [ ] `merge_auto_resolving_version_files()` existiert nicht mehr im Skript ## Hinweise - Der Build muss die Version explizit übergeben: `APP_VERSION=$(git describe --tags --abbrev=0) npm run build`. Das übernimmt `publish.sh` automatisch. - Der Backend-Fallback ist wichtig: im Entwickler-Checkout existiert die `VERSION`-Datei nicht, und dort darf nichts abstürzen. - Diese Umstellung ist Voraussetzung dafür, dass Releases über einen Pull Request `beta -> main` laufen können, statt direkt nach `main` zu pushen.
Author
Owner

V1.1.2

V1.1.2
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
AxonByteDev/PatchPilot#7
No description provided.