把分支模型从「dev/main」改造为「Beta/正式版」双渠道,渠道语义直接由分支名承载: - `beta` — Beta 渠道(开发版),默认分支、集成缓冲区,所有 PR 一律打到这里。 Beta 包不推送给普通用户,只面向主动加入 Beta 渠道的用户。 - `main` — 正式版渠道(Stable),始终可发布。仅由维护者在双端冒烟测试通过后从 beta 合入;普通用户默认拿到的就是这条线。 文档与 CI 改动: - README.md / README.zh.md:把「Contributing workflow / 贡献流程」章节 改写为 Beta/正式版双渠道,含分支流向 ASCII 图、6 条核心规则, 以及「Beta 不溢出正式版」的隔离要求。 - CLAUDE.md:把 `### Branch & contribution workflow` 改名为 `### Branch & release-channel workflow`,明确「分支名=渠道名」。 - ci.yml:触发分支从 [main, dev] 改为 [main, beta]。 仓库侧已同步: - 远端 dev 分支已重命名为 beta(git push origin dev:beta + 删除旧 dev) - GitHub 仓库默认分支已切到 beta - release-tauri.yml 用 v*-tauri tag 触发,跟分支无关,发版机制不受影响 Beta 包的 opt-in 分发机制(per-channel updater endpoint + 设置页开关) 将在独立 PR 中接入。在它落地之前,所有 v*-tauri tag 都按正式版对待, 不要从 beta 分支直接打 tag。 Co-authored-by: baiqing <lbx12309@icloud.com>
104 lines
4.0 KiB
YAML
104 lines
4.0 KiB
YAML
name: CI
|
||
|
||
# 多平台跨语言质量门禁。release-tauri.yml 是发版流水线(仅打包构建),这里负责
|
||
# 在合并前快速验证两件事:
|
||
# 1. 前端 typecheck + vite bundle 通过(tsc + vite build,捕获跨 locale 类型 drift)
|
||
# 2. Rust 后端在 macOS / Windows 都能 cargo check 过(捕获 cfg 漏分支 / 平台 API 误用)
|
||
# 跑 build-mac.sh / windows-package-msvc.ps1 太重;只跑轻量 cargo check + vite build。
|
||
|
||
on:
|
||
push:
|
||
branches: [main, beta]
|
||
pull_request:
|
||
branches: [main, beta]
|
||
|
||
jobs:
|
||
cross-platform:
|
||
name: ${{ matrix.label }} checks
|
||
strategy:
|
||
# 一个平台挂掉不阻塞其他平台拿到验证结果。
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- os: macos-latest
|
||
label: macOS
|
||
preflight: false
|
||
- os: windows-latest
|
||
label: Windows
|
||
preflight: true
|
||
runs-on: ${{ matrix.os }}
|
||
defaults:
|
||
run:
|
||
working-directory: openless-all/app
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
# vendor/qwen-asr 是 macOS 上 build.rs 必须的 git submodule。Windows
|
||
# checkout 也拉一份保持与 release-tauri.yml 一致,开销几秒可以忽略。
|
||
submodules: recursive
|
||
|
||
- uses: actions/setup-node@v4
|
||
with:
|
||
node-version: "22"
|
||
cache: npm
|
||
cache-dependency-path: openless-all/app/package-lock.json
|
||
|
||
- uses: dtolnay/rust-toolchain@stable
|
||
|
||
- name: Install frontend dependencies
|
||
run: npm ci
|
||
|
||
- name: Check Windows prerequisites
|
||
if: matrix.preflight
|
||
shell: pwsh
|
||
run: ./scripts/windows-preflight.ps1 -Toolchain msvc
|
||
|
||
- name: Check PowerShell scripts
|
||
if: matrix.preflight
|
||
shell: pwsh
|
||
run: |
|
||
foreach ($script in @("./scripts/windows-preflight.ps1", "./scripts/windows-build-gnu.ps1", "./scripts/windows-runtime-smoke.ps1")) {
|
||
$errors = $null
|
||
[System.Management.Automation.PSParser]::Tokenize((Get-Content -Raw $script), [ref]$errors) | Out-Null
|
||
if ($errors) {
|
||
$errors | Format-List
|
||
exit 1
|
||
}
|
||
}
|
||
|
||
- name: Build frontend (tsc + vite)
|
||
run: npm run build
|
||
|
||
- name: Check Tauri backend (cargo check)
|
||
run: cargo check --manifest-path src-tauri/Cargo.toml
|
||
|
||
- name: Verify version sync across all 5 files
|
||
# 两个平台都跑这个校验:Windows runner 自带 git-bash,跨 shell 表现一致。
|
||
# 一旦版本号 drift 立刻 fail,避免发版时再发现漏改。
|
||
# 校验 5 处:package.json / package-lock.json (root + nested) /
|
||
# tauri.conf.json / Cargo.toml / Cargo.lock 的 [openless] 包。
|
||
shell: bash
|
||
run: |
|
||
PKG=$(node -p "require('./package.json').version")
|
||
LOCK_ROOT=$(node -p "require('./package-lock.json').version")
|
||
LOCK_NESTED=$(node -p "require('./package-lock.json').packages[''].version")
|
||
TAU=$(node -p "require('./src-tauri/tauri.conf.json').version")
|
||
CRG=$(grep -E '^version = ' src-tauri/Cargo.toml | head -1 | sed -E 's/^version = "(.+)"$/\1/')
|
||
# Cargo.lock:找 [openless] 包紧跟的 version 行
|
||
CARGO_LOCK_VER=$(awk 'BEGIN{found=0} /^name = "openless"$/{found=1; next} found && /^version = /{gsub(/"/,""); print $3; exit}' src-tauri/Cargo.lock)
|
||
echo "package.json = $PKG"
|
||
echo "package-lock root = $LOCK_ROOT"
|
||
echo "package-lock nested = $LOCK_NESTED"
|
||
echo "tauri.conf.json = $TAU"
|
||
echo "Cargo.toml = $CRG"
|
||
echo "Cargo.lock openless = $CARGO_LOCK_VER"
|
||
mismatch=0
|
||
for v in "$LOCK_ROOT" "$LOCK_NESTED" "$TAU" "$CRG" "$CARGO_LOCK_VER"; do
|
||
if [ "$v" != "$PKG" ]; then mismatch=1; fi
|
||
done
|
||
if [ "$mismatch" -ne 0 ]; then
|
||
echo "::error::版本号未对齐 — 请用 scripts/bump-version.sh 同步更新"
|
||
exit 1
|
||
fi
|
||
echo "[ok] 全部 5 处版本号一致:$PKG"
|