diff --git a/README.md b/README.md new file mode 100644 index 0000000..934225d --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# iBoard + +跨平台个人看板 (Tauri + React + Express + MariaDB)。版本方案见下文「版本方案 (V0.2)」。 + +--- + +## 版本方案 (V0.2) — 整理稿 (2026-10-25, 待评审) + +> 本节是版本管理口径的整理与约定草案;标注 ⚠️ 的条目为待确认问题,确认后据此落地代码。 + +### 1. 版本号构成 + +``` +V MAJOR.MINOR.PATCH 例: V0.2.0 + │ └── PATCH 小版本号 (当前未启用, 见 §4) + └── MINOR 大版本迭代, 对应一个开发分支 (V0.2 ↔ dev-0.2) +``` + +- **程序版本 (APP_VERSION)**: 唯一管理点是 `package.json` 的 `version` 字段, 手动修改; 前端经 `src/version.js` 读取。 +- **build (构建时间戳)**: 每次 vite 编译生成 `__BUILD_ID__`, 格式 `YYYYMMDDHHmmss` (固定北京时间, 见 `vite.config.js#makeBuildId`)。展示格式统一为 `v0.2.0 · build 20261025204300`。 +- **外壳版本 (Android 壳)**: 独立管理, 管理点在 `src-tauri/tauri.conf.json` 的 `version` (当前 0.2.0; 生成 APK 的 versionName)。CI 已有四处版本一致性校验 (`scripts/ci/check-version.mjs`)。 + - ⚠️ **待确认 A**: 外壳与前端版本号当前同为 0.2.0, 但二者生命周期不同 (外壳随 APK 发版, 前端随 OTA 高频发版)。是否解除 `check-version.mjs` 里二者必须相等的约束, 改为只校验格式? + +### 2. 版本 ↔ 分支映射 + +| 版本 | 开发分支 | 发布出口 | +| --- | --- | --- | +| V0.2.x | `dev-0.2` | `master` (push 触发 docker-build: 服务镜像 + OTA) | +| 外壳 APK | `android-*` 分支 push 触发 | Gitea Generic Package Registry | + +- ⚠️ **待确认 B**: 当前 CI 口径 (2026-10 调整) 是「只有 `master` push 部署; `dev-*` 只做 CI 校验不部署」。按"V0.2 对应 dev-0.2"的说法, 确认口径为: **dev-0.2 上开发合并, 发布一律走 master**; 还是希望 dev-0.2 也能直接出 OTA? + +### 3. OTA 版本号 + +- OTA 包 `version` = 程序版本 + `-ota` 标记, 即 `0.2.0-ota`, **始终与程序版本保持一致** (已实现, `scripts/build-ota.mjs`)。 +- OTA 包另带: + - `sequence`: 构建时刻的 Unix 毫秒时间戳 (单调递增, 判新用); + - `build_id`: `seq-`; + - `commit`: 触发构建的 git commit sha; + - `notes`: commit message (标题+正文, ≤400 字)。 +- 判新口径: 生产 = 版本号比较; 开发者开关 = sequence 比较 ("我的"页)。 + +### 4. PATCH 小版本号 (待落地) + +现状: 第三位 PATCH 一直是 0, 没有实际使用。需要一个**记录处**。提案: + +- 在本仓库根目录建 `CHANGELOG.md`, 按 PATCH 记行: `patch 号 / 日期 / commit / 要点`。 +- 发版 (每次合并到 master 产生新 OTA) 时手动将 `package.json` version 的 PATCH +1 并补一行 CHANGELOG。 +- ⚠️ **待确认 C**: 是否按"每次 master 发版 PATCH 必 +1"执行? 还是 PATCH 仅在有用户可感知变更时手动递增? 记录用 `CHANGELOG.md` 还是仓库内其他位置? + +### 5. "我的"页版本展示 (待修复) + +| 行 | 展示 | 现状 | +| --- | --- | --- | +| 当前版本 | `v0.2.0 · build 20261025204300` | ⚠️ 上一轮改坏: 误把前端 BUILD_ID 当毫秒时间戳格式化, 显示成了错误日期; 恢复为与页面底部 `v0.2.0 · build xxx` 完全一致的样式 | +| 运行资源 | OTA 覆盖包版本 / 内置 | — | +| 新版本 | `v0.2.0-ota · <构建时间>` | 构建时间来自 sequence (毫秒), 展示 `MM-dd HH:mm` | +| 发布说明 | commit message | — | +| 提交 | commit sha 前 10 位 | — | +| 外壳版本 | `v0.2.0` | ⚠️ **待确认 D**: 计划经 `@tauri-apps/api/app#getVersion()` 读取外壳版本显示 (Web 端显示 `—`); 放在 OTA 列表「运行资源」下方, 是否可以? | + +- ⚠️ **待确认 E**: 前端 BUILD_ID (`YYYYMMDDHHmmss`) 与 OTA sequence (Unix ms) 是两套时间戳。是否统一为同一来源 (建议都改为 `seq-`, 展示层再格式化)? 统一可消除两处格式分叉, 但会改变底部 build 的现有样式。