1a05290841
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
154 lines
10 KiB
Markdown
154 lines
10 KiB
Markdown
---
|
|
phase: 18-desktop-client-fertigstellen
|
|
plan: 05
|
|
subsystem: infra
|
|
tags: [ci, gitea-actions, tauri, cargo-xwin, nsis, windows-cross-build, desktop]
|
|
|
|
# Dependency graph
|
|
requires:
|
|
- phase: 18-desktop-client-fertigstellen (18-02)
|
|
provides: Job `desktop` mit Linux-AppImage-Bau, `actions/cache`-Uebergabe an `publish`, `desktop-collect.sh`/`publish-release.sh`
|
|
- phase: 18-desktop-client-fertigstellen (18-04)
|
|
provides: Client mit tauri-plugin-opener/autostart/window-state — die Cargo.toml, die der Cross-Bau kompilieren muss
|
|
provides:
|
|
- Job `desktop` baut auf dem Linux-Runner zusaetzlich `Tessera-Setup-X.Y.Z.exe` per Cross-Bau (cargo-xwin, NSIS)
|
|
- Gruener Pipeline-Lauf auf `main` mit beiden Dateien (`.exe` + `.AppImage`), gruenem `publish`
|
|
affects: [18-06]
|
|
|
|
# Actuals (#2632)
|
|
actuals:
|
|
tokens: 900
|
|
tasks: 3
|
|
commits: 2
|
|
|
|
# Tech tracking
|
|
tech-stack:
|
|
added: [cargo-xwin 0.23.x (Ubuntu apt: lld/llvm/clang/nsis)]
|
|
patterns:
|
|
- "Cross-Job-Handoff ueber actions/cache@v4 (Schluessel gitea.sha), nicht upload-artifact — bestaetigt auch fuer den erweiterten Job funktionsfaehig"
|
|
- "Cache-Restore-Schritt steht VOR jedem Installationsschritt, der geprueft werden soll (command -v ... || cargo install), sonst greift die Restauration zu spaet und das Werkzeug wird bei jedem Lauf neu gebaut"
|
|
|
|
key-files:
|
|
created: []
|
|
modified:
|
|
- .gitea/workflows/ci.yml
|
|
|
|
key-decisions:
|
|
- "Windows-Bau laeuft nacheinander im selben Job wie der Linux-Bau (ein Cache, ein Runner) statt in einem eigenen Job — wie in 18-CONTEXT.md (Specific Ideas, Runner-Grenzen 8 Kerne/15 GB) festgelegt."
|
|
- "cargo-xwin, NSIS-Plugin-Ablage (~/.local/share/tauri) und die xwin-SDK-Ablage (~/.cache/cargo-xwin) wurden in den bestehenden Cargo-Zwischenspeicher-Schritt aufgenommen statt einen zweiten Cache-Schritt anzulegen."
|
|
- "Der Schritt 'Windows-Werkzeuge' (rustup target add + cargo install cargo-xwin) wurde bewusst NACH dem Cargo-Zwischenspeicher-Schritt platziert (nicht wie im Plantext 'nach Rust-Toolchain' woertlich als naechster Schritt), damit die command -v cargo-xwin-Pruefung den wiederhergestellten Cache sieht und das Werkzeug bei warmem Cache nicht jedes Mal neu gebaut wird."
|
|
|
|
patterns-established:
|
|
- "Iterationsschleife (D-16): jede Runde ein eigener Commit mit Praefix 'ci(desktop): Runde N — {Ursache}', Ursache/Fix im SUMMARY dokumentiert."
|
|
|
|
requirements-completed: [DESK-01, DESK-04, DESK-05]
|
|
|
|
coverage:
|
|
- id: D1
|
|
description: "Der CI-Job desktop baut auf dem Linux-Runner den Windows-Installer per Cross-Bau (cargo-xwin, NSIS) und sammelt Tessera-Setup-X.Y.Z.exe neben Tessera-X.Y.Z.AppImage ein"
|
|
requirement: "DESK-04"
|
|
verification:
|
|
- kind: e2e
|
|
ref: "Gitea CI/CD Lauf 367 (Commit 742fb5c), Job 'Desktop-Pakete bauen', Schritt 'Pakete einsammeln'"
|
|
status: pass
|
|
human_judgment: false
|
|
- id: D2
|
|
description: "Ein Push auf main endet mit einem gruenen Lauf: Job desktop mit beiden Dateien, Job publish mit Abbildern, die die Pakete tragen"
|
|
requirement: "DESK-04"
|
|
verification:
|
|
- kind: e2e
|
|
ref: "Gitea CI/CD Lauf 367 (Commit 742fb5c) — alle vier Jobs gruen, Job publish hat Abbilder mit Etiketten beta/latest gepusht"
|
|
status: pass
|
|
human_judgment: false
|
|
- id: D3
|
|
description: "Jeder Fehlschlag der Pipeline wird gelesen, der Job angepasst, erneut gepusht — hoechstens drei Runden, jede als normaler Commit"
|
|
requirement: "DESK-01"
|
|
verification:
|
|
- kind: manual_procedural
|
|
ref: "Runde 1 (Commit 742fb5c): clippy-Komponente fehlte, ein Commit, danach gruen — 1 von hoechstens 3 Runden verbraucht"
|
|
status: pass
|
|
human_judgment: false
|
|
|
|
duration: 29min
|
|
completed: 2026-09-16
|
|
status: complete
|
|
---
|
|
|
|
# Phase 18 Plan 05: Windows-Cross-Bau im CI-Job desktop Summary
|
|
|
|
**Der CI-Job `desktop` baut jetzt in einem Lauf auf dem Linux-Runner sowohl das Linux-AppImage als auch — per Cross-Bau mit `cargo-xwin` und NSIS aus dem Ubuntu-Paket — den Windows-Installer; bewiesen durch einen gruenen Pipeline-Lauf mit beiden Dateien und gruenem `publish`.**
|
|
|
|
## Performance
|
|
|
|
- **Duration:** 29 min
|
|
- **Started:** 2026-09-16T14:46:59Z (erster Commit dieses Plans)
|
|
- **Completed:** 2026-09-16T15:15:23Z
|
|
- **Tasks:** 3 (Task 2 = Checkpoint, kein eigener Commit; 3 Aufgaben, 2 Commits)
|
|
- **Files modified:** 1 (`.gitea/workflows/ci.yml`)
|
|
|
|
## Accomplishments
|
|
- Job `desktop` installiert `lld llvm clang nsis` per apt und ein neues `rustup target x86_64-pc-windows-msvc` + `cargo-xwin` (Schritt "Windows-Werkzeuge", NACH dem Cache-Restore platziert, damit ein warmer Cache das Neu-Bauen von `cargo-xwin` erspart).
|
|
- Nach dem bestehenden AppImage-Schritt baut ein neuer Schritt "Windows-Installer bauen (Cross-Bau)" per `pnpm --filter @tessera/desktop exec tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc --bundles nsis`.
|
|
- "Pakete einsammeln" laeuft jetzt mit `--require linux,windows`; `desktop-collect.sh` kannte den Windows-Zweig (`target/x86_64-pc-windows-msvc/release/bundle/nsis/*.exe`) bereits aus 18-01, keine Skript-Aenderung noetig.
|
|
- Cargo-Zwischenspeicher um `~/.cargo/bin/cargo-xwin`, `~/.cache/cargo-xwin` (Windows-SDK-Ablage von cargo-xwin) und `~/.local/share/tauri` (NSIS-Plugins) erweitert.
|
|
- Iterationsschleife durchlaufen (D-16): 1 Runde — fehlende `clippy`-Komponente im `--profile minimal`-Toolchain behoben, dann gruener Lauf.
|
|
- Gruener Pipeline-Lauf auf `main` (Lauf 367, Commit `742fb5c`): alle vier Jobs gruen, Job `desktop` in ~10 min (kalter Cache) mit `Tessera-Setup-1.1.0-beta.742fb5c.exe` (2.775.663 Bytes) und `Tessera-1.1.0-beta.742fb5c.AppImage` (82.479.608 Bytes), Job `publish` hat Abbilder mit Etiketten `beta`/`latest` gepusht.
|
|
|
|
## Task Commits
|
|
|
|
Jede Aufgabe wurde atomar committet:
|
|
|
|
1. **Task 1: Windows-Cross-Bau in den Job desktop einbauen** - `1c4247a` (ci)
|
|
2. **Task 2: Push und CI-Lauf beobachten** - Checkpoint, kein eigener Commit (Push durch Orchestrator, kein Repo-Zustand veraendert)
|
|
3. **Task 3, Runde 1: clippy-Komponente ergaenzt** - `742fb5c` (ci)
|
|
|
|
**Plan metadata:** folgt in diesem Commit (`docs(18-05): ...`)
|
|
|
|
## Files Created/Modified
|
|
- `.gitea/workflows/ci.yml` - Windows-Cross-Bau-Schritte im Job `desktop` (apt-Pakete, Werkzeuge, Cache-Pfade, Bauschritt, Einsammeln mit beiden Plattformen), plus die Runde-1-Korrektur (`rustup component add clippy`)
|
|
|
|
## Decisions Made
|
|
- Windows-Bau nacheinander im selben Job wie der Linux-Bau, ein Cache — wie in `18-CONTEXT.md` (Specific Ideas) festgelegt, statt eines zweiten parallelen Jobs, der die Runner-Grenzen (8 Kerne/15 GB) ueberschritten haette.
|
|
- Der neue Schritt "Windows-Werkzeuge" wurde entgegen der woertlichen Plan-Reihenfolge ("nach Rust-Toolchain") NACH dem Cargo-Zwischenspeicher-Schritt platziert. Grund: `command -v cargo-xwin >/dev/null 2>&1 || cargo install --locked cargo-xwin` soll den wiederhergestellten Cache sehen koennen — stuende der Schritt vor dem Cache-Restore, waere `cargo-xwin` bei jedem Lauf neu gebaut, selbst wenn der Cache es bereits enthaelt. Das Ziel des Plans ("SDK-Ablage ... soll nur einmal geladen werden") war damit nur durch die Umstellung der Reihenfolge sauber erreichbar; die genannten Kennzeichen des Plans (`cargo-xwin`-Vorkommen, Cache-Pfade, Bauschritt-Reihenfolge AppImage-vor-NSIS) blieben davon unberuehrt und alle automatisierten `<verify>`-Pruefungen bestehen weiterhin.
|
|
- Keine `XWIN_CACHE_DIR`-Umgebungsvariable im ersten Anlauf gesetzt (Plan-Vorgabe: das ist eine Ausweichlösung der Iterationsschleife, nicht Teil von Task 1) — nicht noetig, der Lauf war nach der Clippy-Korrektur gruen.
|
|
|
|
## Deviations from Plan
|
|
|
|
### Auto-fixed Issues
|
|
|
|
**1. [Rule 3 - Blocking] `cargo clippy` scheiterte an fehlender clippy-Komponente**
|
|
- **Found during:** Task 2 (erste CI-Rueckmeldung, "rot")
|
|
- **Issue:** Der Schritt "Rust-Toolchain" installiert `stable` mit `--profile minimal`, dieses Profil enthaelt `clippy` nicht. Der bereits bestehende Schritt "Rust pruefen" (aus 18-02, unveraendert von diesem Plan) ruft `cargo clippy` auf und scheiterte mit `'cargo-clippy' is not installed for the toolchain 'stable-x86_64-unknown-linux-gnu'`.
|
|
- **Fix:** `"$HOME/.cargo/bin/rustup" component add clippy` direkt nach der Toolchain-Installation im Schritt "Rust-Toolchain" ergaenzt (voller Pfad, weil `$GITHUB_PATH` erst fuer Folgeschritte greift, nicht innerhalb desselben `run:`-Blocks).
|
|
- **Files modified:** `.gitea/workflows/ci.yml`
|
|
- **Verification:** Lauf 367 (Commit `742fb5c`) — Schritt "Rust pruefen" gruen, gesamter Job `desktop` gruen.
|
|
- **Committed in:** `742fb5c` (`ci(desktop): Runde 1 — clippy-Komponente fehlt im Toolchain`)
|
|
|
|
---
|
|
|
|
**Total deviations:** 1 auto-fixed (1 blocking, per D-16-Iterationsschleife — dies ist die im Plan vorgesehene Korrekturrunde, keine ungeplante Abweichung im engeren Sinn).
|
|
**Impact on plan:** Notwendige Korrektur fuer einen gruenen Lauf; kein Scope-Creep, betraf ausschliesslich den bereits vorhandenen "Rust pruefen"-Schritt aus 18-02.
|
|
|
|
## Iterationsschleife (D-16)
|
|
|
|
| Runde | Signatur im Protokoll | Ursache | Aenderung | Commit |
|
|
|---|---|---|---|---|
|
|
| 1 | `error: 'cargo-clippy' is not installed for the toolchain 'stable-x86_64-unknown-linux-gnu'` (Job `desktop`, Schritt "Rust pruefen", Lauf 366) | `--profile minimal` installiert keine `clippy`-Komponente | `rustup component add clippy` im Schritt "Rust-Toolchain" | `742fb5c` |
|
|
|
|
Nach Runde 1: Lauf 367 (Commit `742fb5c`) komplett gruen — Iterationsschleife nach 1 von hoechstens 3 Runden beendet.
|
|
|
|
## Issues Encountered
|
|
Keiner ueber die dokumentierte Runde 1 hinaus. Hinweis aus der Rueckmeldung des roten Laufs: nach dem Fehlschlag in Runde-0 (Lauf 366) landete nichts im Cargo-Cache (Post-Schritt wegen `success()=false` uebersprungen) — der naechste Lauf startete entsprechend kalt (~10 min fuer den Job `desktop`). Kein Fehler, nur zur Einordnung der Bau-Dauer.
|
|
|
|
## User Setup Required
|
|
None - keine externe Dienstkonfiguration noetig.
|
|
|
|
## Next Phase Readiness
|
|
- Beide Desktop-Pakete (`.exe`, `.AppImage`) entstehen zuverlaessig in einem CI-Lauf auf `main`; das Beta-Abbild traegt sie ab Lauf 367.
|
|
- 18-06 kann den Testserver auf den neuen Stand ziehen und die Pakete dort sichtbar machen (Download-Weg selbst wurde bereits in 18-02 gebaut und per Probelauf geprueft).
|
|
- Der Release-Anhang (Gitea-Release-Datei-Upload) ist erst beim naechsten Freigabe-Tag `v*` sichtbar — in diesem Lauf war kein Tag gesetzt, der Release-Schritt lief erwartungsgemaess nicht.
|
|
|
|
---
|
|
*Phase: 18-desktop-client-fertigstellen*
|
|
*Completed: 2026-09-16*
|