For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /zh-tw/docs/desktop/updates.md (or send Accept: text/markdown).
自動更新與釋出頻道
簽名的更新源、stable/beta 頻道,以及出廠的釋出工作流。
一次性生成更新器金鑰對
更新器會校驗下載產物的 minisign 簽名。用 Tauri 簽名工具生成金鑰對,把私鑰存入 TAURI_SIGNING_PRIVATE_KEY、口令存入 TAURI_SIGNING_PRIVATE_KEY_PASSWORD,兩者都放進金鑰儲存 —— 絕不進倉庫。產出更新器產物的構建會在每個安裝包旁生成 .sig 旁車檔案;公鑰分發給客戶端,私鑰留在 CI。
corepack pnpm --filter @supastack/desktop exec tauri signer generate -w ~/.tauri/product.key在構建期配置更新器
tauri.conf.json 附帶一個哨兵更新器塊,endpoints 與 pubkey 留空 —— 請保留它,因為缺少這些鍵更新器外掛就無法初始化。真實值在構建期通過 --config JSON 覆蓋層或 TAURI_CONFIG 環境變數深合併進去;設定了 SUPASTACK_UPDATER_ENDPOINT 與 SUPASTACK_UPDATER_PUBKEY 時,check:release-config 會列印可直接貼上的覆蓋層。
要麼兩個都設、要麼都不設:只覆蓋 endpoints 會讓 pubkey 留空,檢檢視似正常而每次安裝都卡在簽名校驗。端點 URL 攜帶 {{target}}、{{arch}} 與 {{current_version}} 佔位符 —— 版本槽為必填 —— 外加一個可選的 {{channel}} 路徑段,用於啟用釋出頻道。
# check:release-config prints this overlay for tauri build --config:
# {"plugins":{"updater":{"endpoints":["https://releases.example.com/{{channel}}/{{target}}/{{arch}}/{{current_version}}"],"pubkey":"<base64 public key>"}}}
# SUPASTACK_UPDATER_ENDPOINT=
# SUPASTACK_UPDATER_PUBKEY=釋出 latest.json 更新源
每個端點應答一份 latest.json 清單 —— version、notes、pub_date,以及覆蓋 darwin-aarch64、darwin-x86_64、windows-x86_64、windows-aarch64、linux-x86_64、linux-aarch64 的 platforms 對映 —— 每個條目把安裝包 URL 與其簽名配成一對。
用 release:manifest 指令碼生成它:指令碼掃描打包目錄中的 .app.tar.gz、-setup.exe(優先於 .msi)與 .AppImage 產物 —— 每個都必須帶 .sig 鄰居 —— 然後寫入或合併清單。可用標誌包括 --version、--base-url、--bundle-dir 加 --platform、跨多次執行累積平臺的 --merge、--notes、--pub-date 與 --out。
corepack pnpm --filter @supastack/desktop release:manifest -- \
--version 1.2.0 \
--base-url https://releases.example.com/stable \
--bundle-dir src-tauri/target/release/bundle \
--platform windows-x86_64 \
--merge latest.jsonstable 與 beta 頻道
端點包含 {{channel}} 佔位符時,應用選單會啟用 Beta Updates 核取方塊,在 stable 與 beta 源之間切換。選擇持久化在應用配置旁的 update-channel 檔案中;SUPASTACK_UPDATE_CHANNEL 可按次覆蓋 —— 無法識別的值帶警告忽略 —— 預設為 stable。沒有該佔位符時開關保持停用,只檢查 stable 源。
何時檢查更新
啟動時跑一次靜默後臺檢查,只有發現更新才彈對話方塊;Check for Updates… 選單項會報告每種結果。檢查是序列的 —— 併發的第二個請求被丟棄。有可用更新時提供 Install and Restart,它會下載、安裝並重啟應用;未配置的構建回答更新未配置,失敗以對話方塊呈現而非自動重試。
出廠的釋出工作流
.github/workflows/desktop-release.yml 在 desktop-v* 標籤或帶版本與頻道的手動觸發上構建矩陣 —— 兩種架構的 macOS、Windows 與 Ubuntu。它用標籤寫入清單版本(跳過這步的釋出會永遠把自己當作更新推出去)、合併各平臺清單,並建立攜帶 latest.json 及全部安裝包與簽名的 GitHub 草稿釋出 —— beta 頻道標記為 prerelease。
它需要 SUPASTACK_APP_URL 與 SUPASTACK_UPDATER_ENDPOINT 作為倉庫變數,SUPASTACK_UPDATER_PUBKEY 以及簽名私鑰與其口令作為 secrets;Apple 簽名憑據是可選附加項。完整操作手冊在倉庫的 docs/desktop-updates.md。
驗證與排障
安裝一個構建,把更新的清單釋出到測試源,確認下一次檢查彈出更新對話方塊且應用重啟進入新版本。然後切到 beta,確認頻道源的應答發生變化。