feat(V0.2): 版本方案落地 —— 前端/外壳解绑, build 标识统一, 外壳版本展示
Docker Build and Push / build-image (push) Successful in 1m5s

- check-version: 分组校验 (前端 package.json / 外壳 tauri.conf+Cargo),
  两组不再要求相等; 分支前缀校验只针对前端版本
- build-ota: build_id 改为 YYYYMMDDHHmmss (北京时间, 与前端 BUILD_ID
  同格式); sequence 保持毫秒仅用于判新
- 我的页: 当前版本恢复 v0.2.0 · build <原始BUILD_ID>; 新版本附 OTA
  build_id; 底部替换为外壳版本 (Tauri getVersion, Web 端 —)
- README: 合并遗留 readme 全部内容并按决议重写版本管理章节;
  新增 CHANGELOG.md (PATCH 仅明确提出时自增)
This commit is contained in:
jif2.zhang
2026-10-25 21:28:06 +08:00
parent 06aa48f6ad
commit 67be8d8f7b
18 changed files with 700 additions and 338 deletions
+16
View File
@@ -22,6 +22,19 @@ export function getCurrentVersionInfo() {
return { version: APP_VERSION, build: BUILD_ID }
}
// 构建标识统一化: 任意来源 (YYYYMMDDHHmmss / seq-<ms> / 毫秒数) → 'YYYYMMDDHHmmss'
// (北京时间, 与 vite BUILD_ID / OTA manifest.build_id 同格式; 无法解析返回 '')
export function fmtBuildId(v) {
if (v == null) return ''
if (typeof v === 'string' && v.startsWith('seq-')) return fmtBuildId(Number(v.slice(4)))
if (typeof v === 'string' && /^\d{14}$/.test(v)) return v
const ms = Number(v)
if (!Number.isFinite(ms) || ms <= 0) return ''
const d = new Date(ms + 8 * 3600 * 1000)
const p = (n, w) => String(n).padStart(w || 2, '0')
return `${d.getUTCFullYear()}${p(d.getUTCMonth() + 1)}${p(d.getUTCDate())}${p(d.getUTCHours())}${p(d.getUTCMinutes())}${p(d.getUTCSeconds())}`
}
// 启动时: 确认当前资源可用 (Tauri only)
// 失败/异常都不抛, 仅 console.warn
export function initOta() {
@@ -114,6 +127,7 @@ async function checkByVersion() {
info: {
version: manifest.version,
sequence: manifest.sequence,
build: manifest.build_id || fmtBuildId(manifest.sequence),
notes: manifest.notes || '',
commit: manifest.commit || '',
mandatory: !!manifest.mandatory,
@@ -136,6 +150,7 @@ async function checkOtaUpdateTauri(devMode) {
info: {
version: r.version,
sequence: r.sequence,
build: fmtBuildId(r.sequence),
notes: r.notes,
mandatory: r.mandatory,
bundle_size: r.bundle_size,
@@ -168,6 +183,7 @@ async function checkOtaUpdateWeb(devMode) {
info: {
version: data.version,
sequence: data.sequence,
build: fmtBuildId(data.build_id || data.sequence),
notes: data.note || '',
commit: data.commit || '',
// web 端没有强制/mandatory 等字段, 仅展示