feat(V0.2): OTA 版本与判新口径 + Tab 结构调整
1) 版本对齐分支 - package.json / tauri.conf.json / Cargo.toml / Cargo.lock: 0.1.0 -> 0.2.0, OTA 包版本变为 0.2.0-ota - 新增 scripts/ci/check-version.mjs: 分支 dev-x.y 与 package.json 版本不一致时 CI 直接失败 - docker-build.yml / ota-build.yml: min_binary_version 与前端版本解耦, 固定 0.1.0 (现有 APK 原生层仍是 0.1.0, 抬高会导致旧 APK 收不到更新) 2) 我的页 OTA「开发版本」开关 (默认关, 持久化 localStorage.iboard_ota_dev_mode) - 关: 按版本号逐字段比较 (src/utils/version.js), 服务端 version 更高才算新 - 开: 按 build sequence 判新 (hotswap checkUpdate), 每次构建都能推到设备 - Web 端: 开发口径退化为版本不同即算新; 生产口径严格比较大小 3) 打卡 Tab 移到最左并默认选中, 移除特效开关 - BottomNav: 打卡/宏观/监控/我; 删除 home 图标 - App: / 与 404 均重定向到 /checkin - RingProgress/Celebrate: 删除 effectsEnabled/setEffectsEnabled, 特效恒开 - HabitView: 去掉头部「特效开/关」按钮 4) 取消首页 Tab, 报警/新闻并入宏观 - 新增 pages/macro/AlertsView.jsx、NewsView.jsx; 删除 HomePage.jsx - MacroPage: 6 个子 Tab (油价/经济数据/策略研究/经济文章/报警/新闻), 报警角标保留 - 新闻详情 /news/:id -> /macro/news/:id (宏观 Tab 保持高亮) 5) 文档: 需求文档补 F-OT 需求点与已决策项; 设计文档新增 §10 变更记录与判新设计; 界面设计.html 11 屏 (Tab 4 项/去掉特效开关/宏观合并/我的 OTA 开关 关+开 两态)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env node
|
||||
// CI 专用: 校验分支名与 package.json 版本号一致
|
||||
//
|
||||
// 背景:
|
||||
// OTA 升级包的 version 直接取自 package.json (`<version>-ota`), 而分支按版本命名
|
||||
// (dev-0.1 / dev-0.2 ...). 两者一旦错位 (例如 dev-0.2 上 package.json 还是 0.1.0),
|
||||
// 线上 OTA 就会报成上一个版本的号, 客户端判新逻辑全部失准。
|
||||
//
|
||||
// 规则:
|
||||
// - 分支形如 dev-<major>.<minor> → package.json 的 version 必须以 <major>.<minor> 开头
|
||||
// - 分支形如 dev-<major> → version 必须以 <major>. 开头
|
||||
// - main / master 及其它分支 → 跳过校验 (生产分支不做约束, 只打印当前版本)
|
||||
//
|
||||
// 环境变量:
|
||||
// GITHUB_REF_NAME - Gitea Actions 提供的分支名 (本地运行可用 BRANCH 覆盖)
|
||||
//
|
||||
// 退出码: 0 通过 / 1 不一致
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
const ROOT = path.resolve(__dirname, '..', '..')
|
||||
|
||||
const branch = process.env.GITHUB_REF_NAME || process.env.BRANCH || ''
|
||||
const pkg = JSON.parse(fs.readFileSync(path.join(ROOT, 'package.json'), 'utf8'))
|
||||
const version = String(pkg.version || '0.0.0')
|
||||
const otaVersion = version + '-ota'
|
||||
|
||||
console.log('[check-version] 分支: ', branch || '(未知)')
|
||||
console.log('[check-version] package.json version:', version)
|
||||
console.log('[check-version] OTA 包版本将是:', otaVersion)
|
||||
|
||||
const m = /^dev-(\d+)(?:\.(\d+))?$/.exec(branch)
|
||||
if (!m) {
|
||||
console.log('[check-version] 非 dev-<版本> 分支, 跳过一致性校验')
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
const want = m[2] === undefined ? `${m[1]}.` : `${m[1]}.${m[2]}`
|
||||
if (!version.startsWith(want)) {
|
||||
console.error('')
|
||||
console.error(`[check-version] 版本与分支不一致: 分支 "${branch}" 要求版本以 ${want} 开头, 实际是 ${version}`)
|
||||
console.error('[check-version] 请修改 package.json 的 version (唯一手动管理点),')
|
||||
console.error('[check-version] 并同步 src-tauri/tauri.conf.json 与 src-tauri/Cargo.toml')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log(`[check-version] 一致 (${branch} ↔ ${version})`)
|
||||
Reference in New Issue
Block a user