feat(desktop): in-app remote upgrade — 檢查更新 button + signed updater - #15
Merged
Conversation
Wires ADR-7 remote-upgrade on the app side. The installed app can pull the signed nightly bundle from the GitHub release and replace itself in place. - src-tauri: register tauri-plugin-updater; check_update / install_update commands (driven from Rust so the web skin stays free of the updater JS package — mirrors how start_core/deploy_list already bridge). install_update downloads, verifies the minisign signature against the embedded pubkey, then app.restart()s into the new build. - tauri.conf.json: plugins.updater endpoint (rolling `nightly` release's latest.json) + public key; bundle.createUpdaterArtifacts so CI emits the signed .app.tar.gz. - console: topbar "檢查更新" button — first click checks, then turns into an "更新到 v… ↻" install action; progress/errors go to the Activity pane. Desktop-only (hidden in the browser build; no command bridge). Verified: console tsc clean, vitest 8/8, vite build. Rust compile is gated by macOS CI — this Linux box lacks the GTK libs Tauri's linux backend pulls in. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The updater pubkey in tauri.conf.json makes `tauri build` sign the updater artifact, which needs the private key in env. The repo secrets already exist; wire them into the bundle-macos step so signing succeeds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brettchien
force-pushed
the
feat/desktop-auto-update
branch
from
August 11, 2026 00:44
debb505 to
dfa45e7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Wires the app side of remote-upgrade (ADR-7): the installed OAB Studio can pull the signed nightly bundle from the GitHub release and replace itself in place — the "upgrade button" ask.
Stacked on #9 (
feat/desktop-mcp-sidecar), since the Tauri shell + version stamp live there. Merge after #9 (→ #10).What's in it
src-tauri— registertauri-plugin-updater; two commandscheck_update/install_update, driven from Rust (so the web skin stays free of the updater JS package — same bridge pattern asstart_core/deploy_list).install_updatedownloads, verifies the minisign signature against the embedded pubkey, thenapp.restart()s into the new build.tauri.conf.json—plugins.updaterendpoint (the rollingnightlyrelease'slatest.json) + public key;bundle.createUpdaterArtifactsso CI emits the signed.app.tar.gz.console— topbar 「檢查更新」 button: first click checks; if a newer build exists it becomes 「更新到 v… ↻」 (install + restart). Progress/errors log to the Activity pane. Desktop-only (hidden in the browser build).Signing / release side (separate PR)
TAURI_SIGNING_PRIVATE_KEY/_PASSWORD); public key is embedded here.latest.jsonon the nightly release (forward-compatible: inert until this app is onmain).Verification
tscclean, vitest 8/8,vite buildOK (button string in bundle).cargo checkcan't complete. API usage is standardtauri-plugin-updaterv2.Sequencing to make it live
Once all four are on main, a nightly publishes a signed
latest.jsonand the button upgrades to it.🤖 Generated with Claude Code