chore(V0.2): 统一 APK 与 OTA 版本规则 —— 同一版本号, APK 裸写 / OTA 加 -ota
Docker Build and Push / build-image (push) Successful in 10m16s
Docker Build and Push / build-image (push) Successful in 10m16s
- readme: 版本管理章节重写, 明确 APK=0.2.0 无后缀, OTA=0.2.0-ota 多一个标记 并补充 APK versionName/versionCode 的生成链路 (tauri.properties, major*1e6+minor*1e3+patch) - scripts/ci/check-version.mjs: 新增四处一致性校验 (package.json / tauri.conf.json / Cargo.toml / Cargo.lock), 并禁止 version 带 -ota - android-build.yml: 构建前也执行版本校验 (tauri.conf.json 的 version 就是 APK versionName) - 需求文档 F-OT-01a、设计文档 §10.2 同步该规则
This commit is contained in:
@@ -3,21 +3,57 @@
|
||||
|
||||
## 版本管理
|
||||
|
||||
版本号遵循 `主版本.次版本.修订号`,**唯一手动管理点是 `package.json` 的 `version` 字段**(当前 `0.2.0`)。
|
||||
版本号必须与所在分支对应:`dev-0.2` 分支上就该是 `0.2.x`(CI 有 `scripts/ci/check-version.mjs` 强校验,不一致直接失败)。
|
||||
发版时只改这一处,以下位置必须保持一致(改版本时一并核对):
|
||||
### 一句话规则
|
||||
|
||||
**同一个版本号,APK(原生包)裸写,OTA 热更包多一个 `-ota` 后缀。**
|
||||
|
||||
```
|
||||
分支 dev-0.2 → 版本 0.2.0
|
||||
├─ APK / 桌面安装包 versionName = 0.2.0 (无后缀)
|
||||
├─ 前端运行时 APP_VERSION = 0.2.0 (无后缀)
|
||||
└─ OTA 热更包 version = 0.2.0-ota (多一个 -ota)
|
||||
```
|
||||
|
||||
版本号遵循 `主版本.次版本.修订号`,**唯一手动管理点是 `package.json` 的 `version` 字段**(当前 `0.2.0`),
|
||||
该字段只写裸版本号,**不允许带 `-ota`**——`-ota` 由 `scripts/build-ota.mjs` 打包时自动追加。
|
||||
|
||||
版本号必须与所在分支对应:`dev-0.2` 分支上就该是 `0.2.x`。
|
||||
|
||||
### 改版本号时要同步的位置
|
||||
|
||||
| 文件 | 字段 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `package.json` | `version` | **唯一源**,前端 `src/version.js` 与 OTA 打包脚本均读取此值 |
|
||||
| `src-tauri/tauri.conf.json` | `version` | Tauri 应用版本(Android/桌面包版本) |
|
||||
| `src-tauri/tauri.conf.json` | `version` | Tauri 应用版本 → **APK 的 versionName**、桌面安装包版本 |
|
||||
| `src-tauri/Cargo.toml` | `[package].version` | Rust 包版本,需与 tauri.conf.json 一致 |
|
||||
| `src-tauri/Cargo.lock` | `name = "iboard"` 条目 | 同上,随 Cargo.toml 一起改 |
|
||||
|
||||
说明:
|
||||
`scripts/ci/check-version.mjs` 会在 CI 第一段就校验这四处**完全相等**且不含 `-ota`,
|
||||
并校验 `dev-<major>.<minor>` 分支与版本前缀对应;任何一项不满足直接构建失败(`main`/`master` 只跳过分支校验,一致性照样查)。
|
||||
|
||||
### APK 版本号是怎么来的
|
||||
|
||||
`tauri android init` 会按 `src-tauri/tauri.conf.json` 的 `version` 生成
|
||||
`src-tauri/gen/android/app/tauri.properties`(该目录被 gitignore,CI 每次 `android init` 重新生成):
|
||||
|
||||
```
|
||||
tauri.android.versionName = 0.2.0 # 人类可见版本,与 tauri.conf.json 一致
|
||||
tauri.android.versionCode = 2000 # 整数,升级判定用 = major*1000000 + minor*1000 + patch
|
||||
```
|
||||
|
||||
注意:
|
||||
- `versionCode` 必须**单调递增**才能覆盖安装,所以版本号只能往上走(`0.2.0` → 2000 > `0.1.0` → 1000)。
|
||||
- 本地如果 APK 装完显示旧版本号,是 `src-tauri/gen/android` 缓存没刷新,
|
||||
删掉该目录重新 `npx tauri android init` 即可。
|
||||
|
||||
### 其它
|
||||
|
||||
- `src/version.js` 从 `package.json` 取值,前端"我"页与 OTA 检查接口展示的即此版本,不要另写死版本号。
|
||||
- OTA 升级包的 `version` 字段 = `<package.json version>-ota`(见 `scripts/build-ota.mjs`),
|
||||
- OTA 升级包的 `version` = `<package.json version>-ota`(见 `scripts/build-ota.mjs`),
|
||||
所以版本号错位会直接导致线上 OTA 判新失准。
|
||||
- **`min_binary_version` 与这里的版本号是两件事**:它是 OTA 包要求的最低原生二进制版本
|
||||
(CI 里由 `OTA_MIN_BINARY` 显式指定,当前 `0.1.0`)。前端版本升到 0.2.0 时它不应跟着抬,
|
||||
否则装了 0.1.0 APK 的设备会直接收不到热更。
|
||||
- `BUILD_ID` 每次编译自动生成(见 `vite.config.js` 的 `__BUILD_ID__`),无需手动维护。
|
||||
- `ota-package/latest.json` 为运行时产物,不纳入版本管理。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user