CI 失败根因(本地已复现确认):`tauri-build`(build.rs) 会在**编译期校验** `tauri.conf.json` 的 `bundle.resources` 声明文件是否存在。 我之前声明了两项:`sidecar.mjs`(CI 未生成)+ `resources/node`(Node 运行时未下载) → build.rs 直接失败("failed to run custom build command")。 修复: - `tauri.conf.json` 的 resources **只留 sidecar.mjs**,并写明为何不能声明未就绪的文件 - `rust.yml` 在 clippy/test **之前**加「构建 sidecar」步骤(`pnpm --filter nodeagent-console sidecar:build`) - console-plan.md:⑤ 不再把 node 记为已完成(未验证的不写成做完), 补「已知待办」(Node 运行时随包分发 + GUI 端到端人工验证)与「构建约束」说明 本地复现验证:删掉 `sidecar/dist/` → `cargo check` 复现同一错误;恢复 → 通过 ✓
79 lines
2.8 KiB
YAML
79 lines
2.8 KiB
YAML
name: Rust Shell
|
||
|
||
# 2026-10:原 crates/nodeagent-client(Rust 版协议客户端)已退役 ——
|
||
# 协议实现改由 Node sidecar 承担(apps/console/sidecar/),避免两套实现静默漂移。
|
||
# 本工作流随之改为验证 **console 的 Rust 壳**(sidecar 管理 + command 转发)。
|
||
#
|
||
# 它的单测是**真跑** Node sidecar 子进程的(见 apps/console/src-tauri/src/sidecar.rs),
|
||
# 不依赖 Tauri GUI,因此能在 Linux 快车道上跑。
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
paths:
|
||
- 'apps/console/src-tauri/**'
|
||
- 'apps/console/sidecar/**'
|
||
- '.github/workflows/rust.yml'
|
||
pull_request:
|
||
paths:
|
||
- 'apps/console/src-tauri/**'
|
||
- 'apps/console/sidecar/**'
|
||
- '.github/workflows/rust.yml'
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
CARGO_TERM_COLOR: always
|
||
|
||
jobs:
|
||
test:
|
||
name: Rust 壳单测(真跑 sidecar)
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: 检出代码
|
||
uses: actions/checkout@v5
|
||
|
||
# 版本**锁死**而不跟 stable 漂 —— 否则「本地全绿」与「CI 绿」会因 lint 集合随工具链
|
||
# 变化而分叉(本仓库已因同类原因吃过 8 轮 Windows CI 的苦头)。
|
||
- name: 安装 Rust 工具链(含 clippy)
|
||
uses: dtolnay/rust-toolchain@master
|
||
with:
|
||
toolchain: stable
|
||
components: clippy
|
||
|
||
# Tauri 壳在 Linux 上编译需要这些系统库(webkit2gtk 等)。sidecar 单测本身
|
||
# 不需要 GUI,但整个 crate 要能编过。
|
||
- name: 安装 Tauri 系统依赖
|
||
run: |
|
||
sudo apt-get update
|
||
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev \
|
||
librsvg2-dev patchelf libgtk-3-dev
|
||
|
||
- name: 安装 Node(sidecar 单测要真跑它)
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '22'
|
||
|
||
- name: 安装 pnpm 与依赖(sidecar 需 @nodeagent/client)
|
||
uses: pnpm/action-setup@v4
|
||
with:
|
||
version: 9
|
||
- run: pnpm install --frozen-lockfile
|
||
|
||
- name: 构建 workspace 包(sidecar 依赖其 dist)
|
||
run: pnpm -r --filter "./packages/*" build
|
||
|
||
# ⚠️ tauri-build 在**编译期**校验 tauri.conf.json 里 resources 的文件存在性,
|
||
# 故必须先产出 sidecar.mjs,否则 clippy/test 会在 build.rs 阶段就失败。
|
||
- name: 构建 sidecar(resources 引用的产物)
|
||
run: pnpm --filter nodeagent-console sidecar:build
|
||
|
||
- name: 缓存 cargo 构建产物
|
||
uses: Swatinem/rust-cache@v2
|
||
with:
|
||
workspaces: apps/console/src-tauri
|
||
|
||
- name: Clippy(告警即失败)
|
||
run: cargo clippy --manifest-path apps/console/src-tauri/Cargo.toml --all-targets -- -D warnings
|
||
|
||
- name: 单测(真跑 Node sidecar 进程)
|
||
run: cargo test --manifest-path apps/console/src-tauri/Cargo.toml
|