自动更新
使用 tauri-plugin-updater 与 minisign 的签名静态更新源。
自动更新是受 flag 控制且默认开启的功能。它使用 tauri-plugin-updater 对接 static、
minisign-signed feed。feed failure 不会阻断启动,也不会在用户未操作时下载或安装。
Feed 模型
当前唯一 channel 是 latest;settings type 为未来的 beta 预留了空间。effective endpoint 为:
${UPDATE_SERVER_URL}/${settings.updateChannel}/latest.jsonlatest.json 描述 release version、notes、发布时间以及各平台的 URL 和 inline minisign
signature。Tauri 使用 src-tauri/tauri.conf.json 中的 public key 验证它;
bundle.createUpdaterArtifacts 会让 release build 生成所需 updater artifacts。
endpoint 有三种来源,src-tauri/src/commands/update.rs 按以下优先级选择:
- 运行中 process environment 内非空的
UPDATE_SERVER_URL。 - 编译时 baked 到 binary 的
UPDATE_SERVER_URL。 - 内置默认值
https://updates.soarstarter.com。
config file 的 endpoints 是相同的 starter default,但 command 会在 runtime 构造选定 endpoint
并传给 updater。发布前请同时 rebrand endpoint 和 public key;否则应用仍会信任并请求 starter feed。
Runtime 行为
UpdateStatus 依次经历 idle、checking、available、downloading、progress、downloaded、
error。Rust 通过带类型的 update-status event 将状态发送到 /update、“更新”设置标签和
菜单/托盘界面。手动流程为 check → download → install;install 会请求 app restart。
src/lib/updates/scheduler.ts 中的 scheduler 是独立 runtime opt-in:settings.autoUpdate 默认关闭。
用户开启它后,第一次 background check 在启动约 30 秒后执行,之后每 6 小时执行一次。无法访问或无效
feed 会成为 error state,而不是 startup crash。
flag 开启的 updater 仍需要 signed artifacts。TAURI_SIGNING_PRIVATE_KEY(以及适用时的密码)
只能放在 release CI。macOS 更新还需要 signed、notarized builds;Windows 强烈建议签名。
Release flow
提升版本并创建 tag。
npm version patch
git push --follow-tagsv* tag 会触发 .github/workflows/release.yml。tauri-action 会构建 macOS(Apple Silicon 和 Intel)、Linux、Windows installers,并将 installers、signatures、latest.json 附加到 draft GitHub Release。
发布与 endpoint 匹配的 feed。可以把生成的 artifacts/manifest 复制到 static host,或将 UPDATE_SERVER_URL 指向 GitHub Release download base,例如 https://github.com/<owner>/<repo>/releases/latest/download。workflow 的 Linux rsync deploy 只有在全部 UPDATE_DEPLOY_* secrets 存在时才运行;确认 hosted layout 包含 latest.json 和它引用的每个 URL。
从较旧的 installed build 测试。Linux 请测试 AppImage;deb/rpm 更新不走该 updater。
关闭功能
在 build time 设置 VITE_AUTO_UPDATE_ENABLED=false。/update route、“更新”设置标签与
update menu/tray entries 都会被移除。scheduler 也会检查此 flag,因此该 build 无法启动 background checks。
