docs: CI-Desktop-Bau nur bei geaendertem Desktop-Stand — Betriebshandbuch, CI-Runbook, Entwicklungsanleitung, CHANGELOG

- anleitung-betrieb.md Kap. 10: neuer Unterabschnitt "Wann gebaut wird und
  wann Pakete uebernommen werden", Job-Dauer-Satz und Fehlerbilder-Tabelle
  ergaenzt
- ci-cd-setup.md Abschnitt 4: Absatz zum Ueberspringen bei unveraendertem
  Desktop; Abschnitt 6: neuer Fehlerbehebungs-Eintrag
- anleitung-entwicklung.md: Absatz zum CI-Ueberspringen bei "Desktop-App
  lokal bauen"
- CHANGELOG.md: ein Stichpunkt unter Unveroeffentlicht/Geaendert

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 14:28:54 +02:00
parent 8c4aaa51fa
commit e7633e15de
4 changed files with 84 additions and 2 deletions
+45 -1
View File
@@ -138,6 +138,27 @@ Der Job `desktop` baut auf demselben `ubuntu-latest`-Runner nacheinander (ein
Cache, ein Runner, siehe `18-CONTEXT.md` Specific Ideas) sowohl das
Linux-AppImage als auch -- per Cross-Bau -- den Windows-Installer:
**Ueberspringen bei unveraendertem Desktop (quick-260917-jdh):** Direkt nach
dem Checkout berechnet `desktop-stamp.sh stamp` den Stempel `<Version>-<SHA>`
(Version aus `desktop-version.sh --print`; SHA = letzter Commit an
`apps/desktop`, `desktop-version.sh`, `desktop-collect.sh`,
`desktop-stamp.sh`, `ci.yml` -- Konstante `DESKTOP_PATHS`; `pnpm-lock.yaml`
bewusst nicht, weil die Tauri-CLI-Version an `apps/desktop/package.json`
haengt und der Bau keine Datei ausserhalb von `apps/desktop` liest) und gibt
`skip_allowed=true` nur fuer `refs/heads/main` aus. Danach `actions/cache/restore@v4`
mit dem Schluessel `desktop-dist-stamp-<Stempel>` -- ohne `restore-keys`, weil
`act_runner` auch den Hauptschluessel per Praefix sucht und ein aelterer
Stand nie als Treffer gelten darf. Anschliessend `desktop-stamp.sh check`:
`cache-hit`, Manifest, Kanal `beta`, Version, beide Dateien mit Groesse und
sha256 laut Manifest -> `reuse=true`; sonst raeumt es `desktop-dist/` auf und
gibt `reuse=false`. Alle Bau-Schritte (setup-node bis Pakete einsammeln)
tragen `if: steps.reuse.outputs.reuse != 'true'`. Nach einem echten Bau legt
`actions/cache/save@v4` die Pakete zusaetzlich unter dem Stempel-Schluessel ab
(nur auf `main`). Die Uebergabe an `publish` (`desktop-dist-<sha>`) laeuft in
beiden Faellen; `publish` ist unveraendert. Bei Tags `v*` wird weder gesucht
noch abgelegt. Lokale Probe: `DESKTOP_TAG=v1.2.0 GITHUB_REF=refs/heads/main
sh .gitea/scripts/desktop-stamp.sh stamp`.
1. **Systemabhaengigkeiten** (`apt-get install`): WebKit/Tauri-Pakete
(`libwebkit2gtk-4.1-dev` usw.) fuer den Linux-Bau, dazu `lld llvm clang
nsis` fuer den Windows-Cross-Bau (der NSIS-Bundler ruft `makensis` aus
@@ -166,7 +187,9 @@ Linux-AppImage als auch -- per Cross-Bau -- den Windows-Installer:
7. **Uebergabe an `publish`** per `actions/cache/save@v4` mit dem Schluessel
`desktop-dist-${{ gitea.sha }}` (ein neuer Schluessel je Commit, damit
`publish` garantiert die Pakete des gerade gebauten Standes bekommt, nicht
einen aelteren Cache-Treffer).
einen aelteren Cache-Treffer). Dieser Schritt laeuft auch dann, wenn der Bau
uebersprungen wurde -- er sichert in diesem Fall den aus dem Stempel-Cache
restaurierten Stand unter dem neuen SHA.
**Warum `actions/cache` und nicht `upload-artifact`:** Auf dieser
Gitea-Instanz ist `actions/upload-artifact`/`download-artifact` unzuverlaessig
@@ -320,6 +343,27 @@ und einen Branch-Schutz fuer `live` anlegen (T-KU1-04).
Speicherdruck `CARGO_BUILD_JOBS` (z. B. auf `4`) als Umgebungsvariable im
Job setzen, um die parallele Uebersetzung zu drosseln.
### `desktop` baut, obwohl nichts geaendert wurde -- oder uebernimmt trotz Aenderung
**Baut trotzdem:**
1. Erster Lauf nach einer Aenderung unter den Desktop-Pfaden -- der Stempel
ist neu, das ist erwartet.
2. Ein neuer Freigabe-Tag ist gesetzt -- die Version im Stempel hat sich
geaendert, die Beta-Pakete muessen einmal neu entstehen.
3. Der Eintrag ist vom Runner-Cache weggeraeumt worden -- `act_runner` raeumt
ungenutzte Eintraege nach einigen Tagen, aeltere nach etwa einem Monat weg.
4. `ci.yml` oder eines der Desktop-Skripte wurde geaendert -- beides gehoert
selbst zur Pfadliste `DESKTOP_PATHS`.
5. `desktop-stamp.sh check` hat den gefundenen Eintrag verworfen -- der Grund
steht im Log des Schritts "Gefundene Pakete pruefen".
**Uebernimmt trotz Aenderung:** Die Aenderung liegt ausserhalb der Pfadliste
(zum Beispiel nur `pnpm-lock.yaml`). Entweder zusaetzlich etwas unter
`apps/desktop/` aendern, oder `DESKTOP_PATHS` in `.gitea/scripts/desktop-stamp.sh`
um den betroffenen Pfad erweitern -- diese Erweiterung loest selbst einen
Neubau aus, weil `desktop-stamp.sh` Teil der eigenen Pfadliste ist.
### `publish`: cache miss
`actions/cache/restore@v4` mit `fail-on-cache-miss: true` bricht den Job