自动更新

使用 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.json

latest.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 按以下优先级选择:

  1. 运行中 process environment 内非空的 UPDATE_SERVER_URL
  2. 编译时 baked 到 binary 的 UPDATE_SERVER_URL
  3. 内置默认值 https://updates.soarstarter.com

config file 的 endpoints 是相同的 starter default,但 command 会在 runtime 构造选定 endpoint 并传给 updater。发布前请同时 rebrand endpoint 和 public key;否则应用仍会信任并请求 starter feed。

Runtime 行为

UpdateStatus 依次经历 idlecheckingavailabledownloadingprogressdownloadederror。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-tags

v* tag 会触发 .github/workflows/release.ymltauri-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。

On this page