perf(macos): 加速 Rust CI 与桌面打包
This commit is contained in:
1 parent
d9113e0b03
commit
b268dcf978
7 files changed
+317
-38
No files matched your search
@@ -12,6 +12,12 @@ on:
|
||||
pull_request:
|
||||
branches: [main, beta]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
platform:
|
||||
description: Platforms to check (macos runs only macOS gates)
|
||||
type: choice
|
||||
options: [all, macos]
|
||||
default: all
|
||||
|
||||
# 同一 PR 快速重复推送时取消旧运行;workflow_dispatch 用 run_id 隔离。
|
||||
concurrency:
|
||||
@@ -20,6 +26,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
android-check:
|
||||
if: github.event_name != 'workflow_dispatch' || inputs.platform != 'macos'
|
||||
name: Android cargo check
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
@@ -166,6 +173,7 @@ jobs:
|
||||
--no-daemon
|
||||
|
||||
linux-core-contract:
|
||||
if: github.event_name != 'workflow_dispatch' || inputs.platform != 'macos'
|
||||
name: Linux core tests
|
||||
runs-on: ubuntu-22.04
|
||||
defaults:
|
||||
@@ -194,13 +202,7 @@ jobs:
|
||||
# 一个平台挂掉不阻塞其他平台拿到验证结果。
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: macos-latest
|
||||
label: macOS
|
||||
preflight: false
|
||||
- os: windows-latest
|
||||
label: Windows
|
||||
preflight: true
|
||||
include: ${{ fromJSON(github.event_name == 'workflow_dispatch' && inputs.platform == 'macos' && '[{"os":"macos-latest","label":"macOS","preflight":false}]' || '[{"os":"macos-latest","label":"macOS","preflight":false},{"os":"windows-latest","label":"Windows","preflight":true}]') }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
# 新增 shared Core 后,macOS 首次编译同时构建 MLX C++ 依赖和完整
|
||||
@@ -226,15 +228,30 @@ jobs:
|
||||
cache: npm
|
||||
cache-dependency-path: openless-all/app/package-lock.json
|
||||
|
||||
# 现有测试继续用 stable;额外安装声明的 MSRV,供下方兼容性门禁显式调用。
|
||||
# macOS MSRV 在独立 job 并行检查;Windows 保留原有检查顺序。
|
||||
- uses: dtolnay/rust-toolchain@1.88.0
|
||||
if: runner.os == 'Windows'
|
||||
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Configure macOS check profile
|
||||
if: runner.os == 'macOS'
|
||||
run: echo "CARGO_PROFILE_DEV_DEBUG=0" >> "$GITHUB_ENV"
|
||||
|
||||
- uses: swatinem/rust-cache@v2
|
||||
if: runner.os == 'Windows'
|
||||
with:
|
||||
workspaces: 'openless-all/app/src-tauri -> target'
|
||||
|
||||
- name: Cache macOS stable dependencies
|
||||
if: runner.os == 'macOS'
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
key: macos-stable-v1
|
||||
workspaces: |
|
||||
openless-all/app -> target
|
||||
openless-all/app/src-tauri -> target
|
||||
|
||||
- name: Prepare Windows Sherpa static libraries
|
||||
if: runner.os == 'Windows'
|
||||
shell: pwsh
|
||||
@@ -284,11 +301,14 @@ jobs:
|
||||
run: cargo test --locked -p openless-core hardening_actually_narrows_the_writable_roots -- --ignored --nocapture --test-threads=1
|
||||
|
||||
- name: Check Tauri backend (cargo check)
|
||||
if: runner.os == 'Windows'
|
||||
run: cargo check --locked --manifest-path src-tauri/Cargo.toml
|
||||
|
||||
# test 编译并运行 lib/bin,覆盖原 cargo check 的生产 binary 路径。
|
||||
# 避免先 metadata-only check、再为同一依赖图做一次 codegen。
|
||||
- name: Run Rust backend unit tests
|
||||
if: runner.os != 'Windows'
|
||||
run: cargo test --locked --manifest-path src-tauri/Cargo.toml --lib
|
||||
run: cargo test --locked --manifest-path src-tauri/Cargo.toml --lib --bins --timings
|
||||
|
||||
- name: Compile Rust backend unit tests (Windows)
|
||||
# Windows runner 能链接 lib test binary,但干净镜像缺少可选 native runtime
|
||||
@@ -304,9 +324,11 @@ jobs:
|
||||
run: cargo test --locked --manifest-path src-tauri/backend-tests/Cargo.toml
|
||||
|
||||
- name: Check Tauri backend with Rust 1.88 MSRV
|
||||
if: runner.os == 'Windows'
|
||||
run: cargo +1.88.0 check --locked --manifest-path src-tauri/Cargo.toml
|
||||
|
||||
- name: Compile backend tests with Rust 1.88 MSRV
|
||||
if: runner.os == 'Windows'
|
||||
run: cargo +1.88.0 test --locked --manifest-path src-tauri/backend-tests/Cargo.toml --no-run
|
||||
|
||||
- name: Verify version sync across all 5 files
|
||||
@@ -338,3 +360,37 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
echo "[ok] 全部 5 处版本号一致:$PKG"
|
||||
|
||||
macos-msrv:
|
||||
name: macOS Rust 1.88 MSRV
|
||||
runs-on: macos-latest
|
||||
env:
|
||||
CARGO_BUILD_JOBS: 2
|
||||
CARGO_PROFILE_DEV_DEBUG: 0
|
||||
CARGO_PROFILE_TEST_DEBUG: 0
|
||||
CMAKE_BUILD_PARALLEL_LEVEL: 2
|
||||
defaults:
|
||||
run:
|
||||
working-directory: openless-all/app
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
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@1.88.0
|
||||
- uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
key: macos-msrv-v1
|
||||
workspaces: |
|
||||
openless-all/app/src-tauri -> target
|
||||
openless-all/app/src-tauri/backend-tests -> target
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- name: Check Tauri backend with Rust 1.88 MSRV
|
||||
run: cargo +1.88.0 check --locked --manifest-path src-tauri/Cargo.toml --timings
|
||||
- name: Compile backend tests with Rust 1.88 MSRV
|
||||
run: cargo +1.88.0 test --locked --manifest-path src-tauri/backend-tests/Cargo.toml --no-run --timings
|
||||
@@ -21,6 +21,12 @@ on:
|
||||
tags:
|
||||
- 'v*-tauri'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
platform:
|
||||
description: Desktop platforms to build (manual builds do not publish a release)
|
||||
type: choice
|
||||
options: [all, macos]
|
||||
default: all
|
||||
|
||||
# 同一 tag 重复推送只跑最新一次;workflow_dispatch 用 run_id 隔离避免互相取消。
|
||||
concurrency:
|
||||
@@ -34,19 +40,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- platform: macos-latest
|
||||
rust-target: aarch64-apple-darwin
|
||||
updater-target: darwin
|
||||
updater-arch: aarch64
|
||||
- platform: macos-15-intel
|
||||
rust-target: x86_64-apple-darwin
|
||||
updater-target: darwin
|
||||
updater-arch: x86_64
|
||||
- platform: windows-latest
|
||||
rust-target: x86_64-pc-windows-msvc
|
||||
updater-target: windows
|
||||
updater-arch: x86_64
|
||||
include: ${{ fromJSON(github.event_name == 'workflow_dispatch' && inputs.platform == 'macos' && '[{"platform":"macos-latest","rust-target":"aarch64-apple-darwin","updater-target":"darwin","updater-arch":"aarch64"},{"platform":"macos-15-intel","rust-target":"x86_64-apple-darwin","updater-target":"darwin","updater-arch":"x86_64"}]' || '[{"platform":"macos-latest","rust-target":"aarch64-apple-darwin","updater-target":"darwin","updater-arch":"aarch64"},{"platform":"macos-15-intel","rust-target":"x86_64-apple-darwin","updater-target":"darwin","updater-arch":"x86_64"},{"platform":"windows-latest","rust-target":"x86_64-pc-windows-msvc","updater-target":"windows","updater-arch":"x86_64"}]') }}
|
||||
runs-on: ${{ matrix.platform }}
|
||||
env:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
@@ -79,11 +73,25 @@ jobs:
|
||||
with:
|
||||
targets: ${{ matrix.rust-target }}
|
||||
|
||||
# 在恢复缓存前设置实际编译环境,让 cache key 包含 macOS profile。
|
||||
- name: Configure macOS build environment
|
||||
if: startsWith(matrix.platform, 'macos')
|
||||
working-directory: openless-all/app
|
||||
run: bash scripts/macos-build-env.sh
|
||||
|
||||
- name: Cache Cargo
|
||||
if: matrix.platform == 'windows-latest'
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: 'openless-all/app/src-tauri -> target'
|
||||
|
||||
- name: Cache macOS release dependencies
|
||||
if: startsWith(matrix.platform, 'macos')
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
key: macos-release-v1
|
||||
workspaces: 'openless-all/app/src-tauri -> target'
|
||||
|
||||
- name: Prepare Windows Sherpa static libraries
|
||||
if: matrix.platform == 'windows-latest'
|
||||
working-directory: 'openless-all/app'
|
||||
@@ -192,6 +200,14 @@ jobs:
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
run: bash scripts/build-mac.sh
|
||||
|
||||
- name: Upload macOS Cargo timings
|
||||
if: always() && startsWith(matrix.platform, 'macos')
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos-cargo-timings-${{ matrix.updater-arch }}
|
||||
path: openless-all/app/src-tauri/target/cargo-timings/*.html
|
||||
if-no-files-found: ignore
|
||||
|
||||
# ── Windows:先 build OpenLessIme.dll(x64+x86),再跑 tauri bundle。
|
||||
# openless-ime.wxs 用 $(env.OPENLESS_IME_DLL_X64) / _X86 拿绝对路径,
|
||||
# 跨 candle/light cwd 都能 resolve(Tauri wix bundler cwd 不固定)。
|
||||
@@ -427,6 +443,7 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: openless-macos-${{ matrix.updater-arch }}
|
||||
compression-level: 0
|
||||
path: |
|
||||
openless-all/app/src-tauri/target/release/bundle/dmg/*.dmg
|
||||
if-no-files-found: error
|
||||
@@ -436,6 +453,7 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: openless-macos-${{ matrix.updater-arch }}-updater
|
||||
compression-level: 0
|
||||
path: |
|
||||
openless-all/app/src-tauri/target/release/bundle/macos/*.app.tar.gz
|
||||
openless-all/app/src-tauri/target/release/bundle/macos/*.app.tar.gz.sig
|
||||
|
||||
Reference in new issue
Block a user