【新增 .github/workflows/rust.yml】crates/ 此前**零 CI 覆盖**(唯一工作流只在
windows-latest 跑 pnpm 那套,不碰 Rust)。新工作流走 Linux 快车道,只跑该 crate:
- clippy --all-targets -- -D warnings(告警即失败;该 crate 既定标准是零告警)
- cargo test(9 单测 + 2 E2E)
- **工具链锁死 1.98.1** 而不跟 stable 漂 —— 否则 lint 集合随工具链漂移,
「本地全绿」与「CI 绿」会分叉(本仓库已因同类原因吃过 8 轮 Windows CI 的苦头)。
本步当场抓到一处真实 lint:discovery.rs 的 sort_by(|a,b| b.f.cmp(&a.f)) → sort_by_key(Reverse(..))。
【tests/e2e/run.mjs】新增 testContractShapes:对**真实被控端**调 7 项只读能力,
断言返回字段 ⊆ manifest returns_schema(含数组首元素)。与单测侧的 console-contract
合起来构成闭环:
agent 实现 ──e2e──▶ 协议契约 ──unit──▶ 前端类型
只调无副作用能力(不写文件/不装软件/不动输入),避免 E2E 产生难回收的变更。
**已注入故障实测会红**:给 system.info 塞 injected_drift_field → 精确报出契约外字段。
【scripts/release.mjs】发版闸门补第二层。原闸门只查 git ls-files --others(未跟踪文件),
但紧接着的 `git add -A` 会提交**已修改的跟踪文件**,而它们不在原闸门视野里 —— 真例:
`pnpm install` 把某应用依赖写进跟踪中的根 pnpm-lock.yaml(+1401 行),发版时静默推走
且闸门不响。现补「脏文件白名单」:除脚本自己改的文件外,任何脏跟踪文件一律中止发版。
另:Tauri 的版本号不在 package.json 而另存于 src-tauri/tauri.conf.json(且它才是打进
.app 的版本),原先漏更新 → 现一并纳入版本号写入,避免「包里是旧版本号」。
【package.json】补 test:rust 与 probe 脚本(probe 需 crates/ 在库内,现已满足)。
55 lines
2.0 KiB
YAML
55 lines
2.0 KiB
YAML
name: Rust Client
|
||
|
||
# crates/nodeagent-client 是桌面控制台的协议客户端(Tauri 壳经 Cargo path 依赖它)。
|
||
# 它是纯 Rust、无平台相关代码,故单开一个 Linux 快车道:
|
||
# 比 Windows 那条 E2E 长流程反馈快得多,失败归属也一目了然。
|
||
#
|
||
# ⚠️ 本工作流与仓库其余部分的铁律不同:**不涉及** .ps1/.cmd 编码,无需 BOM 守卫。
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
paths:
|
||
- 'crates/**'
|
||
- 'packages/protocol/**'
|
||
- '.github/workflows/rust.yml'
|
||
pull_request:
|
||
paths:
|
||
- 'crates/**'
|
||
- 'packages/protocol/**'
|
||
- '.github/workflows/rust.yml'
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
CARGO_TERM_COLOR: always
|
||
|
||
jobs:
|
||
test:
|
||
name: Rust 客户端单测 + E2E
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: 检出代码
|
||
uses: actions/checkout@v4
|
||
|
||
# 版本**锁死**而不跟 stable 漂 —— 否则「本地全绿」与「CI 绿」会因为 lint 集合随
|
||
# 工具链变化而分叉(本仓库已因同类原因吃过 8 轮 Windows CI 的苦头)。
|
||
# 当前值与 crates/ 开发环境一致:rustc/cargo 1.98.1、clippy 0.1.98。
|
||
# 升级时两边同改,升完先本地复跑 `cargo clippy ... -- -D warnings`。
|
||
- name: 安装 Rust 工具链(1.98.1,含 clippy)
|
||
uses: dtolnay/rust-toolchain@master
|
||
with:
|
||
toolchain: 1.98.1
|
||
components: clippy
|
||
|
||
- name: 缓存 cargo 构建产物
|
||
uses: Swatinem/rust-cache@v2
|
||
with:
|
||
workspaces: crates
|
||
|
||
# clippy 单列为一步:它拦的是「能编译但不该这么写」,与测试失败是两类问题。
|
||
# -D warnings 让告警即失败 —— 该 crate 的既定标准是**零告警**。
|
||
- name: Clippy(告警即失败)
|
||
run: cargo clippy --manifest-path crates/nodeagent-client/Cargo.toml --all-targets -- -D warnings
|
||
|
||
- name: 单测 + E2E
|
||
run: cargo test --manifest-path crates/nodeagent-client/Cargo.toml
|