#!/usr/bin/env node // CI 专用: 校验分支名与 package.json 版本号一致 // // 背景: // OTA 升级包的 version 直接取自 package.json (`-ota`), 而分支按版本命名 // (dev-0.1 / dev-0.2 ...). 两者一旦错位 (例如 dev-0.2 上 package.json 还是 0.1.0), // 线上 OTA 就会报成上一个版本的号, 客户端判新逻辑全部失准。 // // 规则: // - 分支形如 dev-. → package.json 的 version 必须以 . 开头 // - 分支形如 dev- → version 必须以 . 开头 // - 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})`)