更新机制
版本号策略
采用四段式版本号:
主.次.修订.构建
1 . 0 . 22 . 222
| 段 | 递增时机 |
|---|---|
| 构建(最后一段) | 日常修 bug、小改动 —— 默认只动这段 |
| 修订 | 功能累积到一定量 |
| 次 | 较大功能集 |
| 主 | 重大变更,不轻易动 |
原则:尽量使用补丁版本,不发大版本。
版本号同步
三个文件需要保持一致的前三段:
| 文件 | 格式 | 示例 |
|---|---|---|
src-tauri/tauri.conf.json | 四段式 | 1.0.22.222 |
src-tauri/Cargo.toml | 三段式 | 1.0.22 |
package.json | 三段式 | 1.0.22 |
为什么 Cargo 只能用三段
Cargo 的 version 字段强制要求合法 semver,四段式会报错。四段式版本以 tauri.conf.json 为准,安装包实际使用这个版本。
递增版本
# 递增构建段(默认)1.0.22.222 -> 1.0.22.223
pwsh scripts/bump-version.ps1
# 递增修订段 1.0.22.223 -> 1.0.23.0
pwsh scripts/bump-version.ps1 -Level patch
# 递增次段
pwsh scripts/bump-version.ps1 -Level minor
# 直接指定
pwsh scripts/bump-version.ps1 -Set 1.0.22.222
# 只改版本号,不创建 git 标签
pwsh scripts/bump-version.ps1 -NoTag
脚本会自动更新三个文件,并创建 v1.0.22.223 格式的 git 标签。
发布流程
# 1. 递增版本并打标签
pwsh scripts/bump-version.ps1
# 2. 推送标签,触发云原生构建
git push origin v1.0.22.223
推送 v* 标签后,cnb.cool 流水线自动执行:
- prepare — 从标签提取版本号
- build-frontend —
pnpm install+pnpm build - build-windows — 同步版本到
tauri.conf.json,cargo tauri build产出 NSIS + MSI - checksum — 生成 SHA256 校验文件
- upload-release — 上传安装包与校验文件到仓库 Release
流水线配置见仓库根目录 .cnb.yml。
更新检查
应用启动 30 秒后检查更新(避免拖慢启动)。
配置项:
| 设置 | 默认 | 说明 |
|---|---|---|
auto_check_update | 开 | 启动时自动检查 |
silent_update | 关 | 发现新版本后自动下载并静默安装 |
update_repo | 空 | 更新源仓库,如 alaikis/sidekick-desktop |
静默更新流程
检查 Release → 版本比对 → 下载 → SHA256 校验 → 静默安装 → 退出应用
任一步骤失败只记录日志并推送事件,不弹窗、不阻塞应用使用。
安装参数
| 格式 | 交互式 | 静默 |
|---|---|---|
| NSIS | 显示安装界面 | /S |
| MSI | 显示安装界面 | /qn /norestart |
安装前必须退出应用
安装程序要覆盖正在运行的可执行文件。流程末尾会调用 app.exit(0) 让出文件占用。
安全检查
未提供校验值时拒绝静默安装。
如果 Release 没有 .sha256 资产,静默流程会中止并推送 update-needs-confirm 事件,转为提示用户确认来源,而不是静默安装一个无法验证的文件。
下载后校验不匹配会删除文件并报错:
校验失败:期望 abc123...,实际 def456...
前端事件
更新过程通过 Tauri 事件推送,前端可监听:
| 事件 | 触发时机 |
|---|---|
update-check-failed | 查询失败(网络异常等) |
update-available | 发现新版本 |
update-needs-confirm | 缺少校验值,需用户确认 |
update-download-failed | 下载失败 |
update-progress | 下载进度(received / total) |
update-installing | 开始静默安装 |
update-install-failed | 安装启动失败 |