fix(ci): publish desktop installers via Gitea Release, not upload-artifact
Build desktop / desktop (push) Successful in 4m17s
CI / check (push) Successful in 39s

actions/upload-artifact@v4's backend fails on the Gitea runner (Upload installers
step errored). Mirror release.yml's proven path instead: curl + the built-in token
to the Releases API, into a ROLLING per-branch prerelease (tag desktop-<branch>,
deleted+recreated each push). Installers renamed space-free
(parking-desktop-<branch>-<sha>.{deb,AppImage}). Signed v* releases unchanged.

Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
2026-06-24 10:32:29 +02:00
parent e0cfeb5e71
commit 215a3ac405
2 changed files with 59 additions and 14 deletions
+14 -6
View File
@@ -177,12 +177,20 @@ The desktop bundle now runs in CI under **two distinct workflows** — keep the
and publishes a Gitea Release. This is what the auto-updater consumes. Unchanged.
- **`.gitea/workflows/build-desktop.yml`** (push to `dev`/`main`) — a **per-commit test build**:
compiles `.deb` + `.AppImage` only (`pnpm --filter @parking/desktop bundle --bundles deb,appimage`)
and uploads them as **workflow artifacts** (14-day retention). **Unsigned** — no `TAURI_SIGNING_*`,
no Release, no `latest.json` — so it must NEVER be wired to the updater (an unsigned artifact would
be rejected anyway). It exists so each branch push yields a downloadable installer for manual
testing of the native shell, and catches a broken Tauri/Rust build early. Same system-deps + cargo
cache as `release.yml`. The container images (`build-images.yml`) and the desktop installers are
deliberately separate pipelines — the desktop app is **not** containerized ([[container-deployment]]).
and publishes them to a **rolling per-branch pre-release** (tag `desktop-<branch>`). **Unsigned** —
no `TAURI_SIGNING_*`, no `latest.json` — so it must NEVER be wired to the updater (an unsigned
artifact would be rejected anyway). It exists so each branch push yields a downloadable installer
for manual testing of the native shell, and catches a broken Tauri/Rust build early. Same
system-deps + cargo cache as `release.yml`. The container images (`build-images.yml`) and the
desktop installers are deliberately separate pipelines — the desktop app is **not** containerized
([[container-deployment]]).
- **Delivery: a rolling pre-release, NOT `actions/upload-artifact`.** That action's artifact
backend isn't reliable on the Gitea runner (the *Upload installers* step failed). Instead the
workflow mirrors `release.yml`'s proven path — plain `curl` + the built-in `GITHUB_TOKEN` to the
**Releases API**. It DELETEs any existing `desktop-<branch>` release + tag, recreates it against
the new commit as a **prerelease**, and uploads the two installers (renamed space-free,
`parking-desktop-<branch>-<sha>.{deb,AppImage}`). So `desktop-dev` always holds the newest dev
build; `v*` tags remain the only *signed* releases.
- **Gotcha (the unsigned build still demands the key).** `tauri.conf.json` sets
`bundle.createUpdaterArtifacts: true` (so `release.yml` produces the `.sig` updater signatures).
With that on, `tauri build` **fails** if `TAURI_SIGNING_PRIVATE_KEY` is absent — *"A public key