Skip to content

perf(ci): cargo 缓存缺失,Windows 每次触发跑两遍全量测试 #404

Description

@2233admin

症状

.github/workflows/ci.yml 内没有任何 cargo 构建缓存,且同一次 CI 触发在 Windows 上跑两遍全量测试。

只读证据

缓存缺失:ci.yml 全文无 actions/cache,无 Swatinem/rust-cache 之类的 Rust 缓存 action,也无手写的 cargo target 复用。.github/workflows/ 下 5 个工作流均未命中任何缓存配置。

Windows 重复:

位置 内容
ci.yml:14-16 windows-build-test-package 固定 job,runs-on: windows-latest
ci.yml:72 cargo test -p code-intel --locked
ci.yml:355-358 矩阵 os: [windows-latest, macos-latest, ...]
ci.yml:445 cargo test -p code-intel --locked

矩阵含 windows-latest,所以每次触发 Windows 全量测试执行两遍。另有两处重复的 release build:ci.yml:80 与 ci.yml:449。

成本规模(静态计数,2026-09-30 快照):

  • 229 个 .rs,3,298,590 字节
  • 69 个集成测试文件;其中 28 个直接用 #[path = "../src/…"] 引入生产模块(121 次直接声明),48 个经 tests/common/mod.rs:7-8 再引入 src/env_contract.rs,合计 169 次生产模块引入实例
  • 最密的 tests/decision_record.rs 直接引入 12 个生产模块(:10-33),加 common 后 13 个
  • 最深的重入链 4 层:decision_record → run_commit → staged_artifact → stable_artifact
  • [profile.release]: opt-level 3 / lto thin / codegen-units 1 / strip;无显式 dev profile 设置
  • 仓库无 .cargo/config.toml
  • target/ 本地 14,997 文件 / 5,657 MB

未执行任何编译或测试,全部为静态读取。

为何不在现有 issue 下处理

已核对全部 open 与 closed issue,无一条覆盖 CI 基建成本:

上游自有的修复与验收

第一步必须先建立基线,不能直接改矩阵。 目前没有任何实测耗时数据(原因见下),无基线时改矩阵是猜测。

  1. 在 ci.yml 引入 cargo target 缓存(Swatinem/rust-cache 或 actions/cache + ~/.cargo/registry),保持 --locked 不变,不改动任何测试选择或闸门语义。
  2. 在启用缓存的同一次触发上记录 cargo test -p code-intel --locked 与 cargo build -p code-intel --release --locked 的耗时,形成"改前/改后"两个数字。
  3. 报告这两个数字,再决定 ci.yml:14-16 固定 Windows job 与矩阵中 windows-latest 的职责如何切分。若两个 job 覆盖的步骤实为重复,应合并或让固定 job 只跑矩阵不覆盖的那部分;若职责确有差异,需在 issue 里写明差异后再动。
  4. 缓存不得放宽任何既有断言:cargo test --locked 的选择集、--ignored --nocapture 的 packaged install smoke 步骤(ci.yml:698,707,711)与 orchestration/sentrux-capability-matrix.v1.json 的 closure 校验(ci.yml:771-807)必须原样保留。

阻塞:无法在本机取得耗时基线

本 checkout 所在 Windows 主机被 docs/decisions/DR-0013-affected-host-compilation-isolation.md 隔离(issue #403 未结期间禁止 cargo build / cargo test / cargo check / cargo clippy / cargo run / cargo nextest / cargo clean)。因此基线必须在其他主机或 CI 上取。

DR-0013 的 Why 段落已记录本机 32 逻辑核 / 93.7 GB RAM / 页文件分配 68 GB 峰值 1.4 GB / 四盘 Healthy / 近 7 天零 WHEA 记录——本机不是被资源耗尽压垮的,所以"CI 慢"与"主机崩溃"是两件事,不要混为一谈。

严重度

P1。不是故障:CI 仍能通过且闸门语义完整。但每次 PR 都付双倍 Windows 全量测试代价,在 69 个测试二进制 / 169 次生产模块引入实例的规模下这是可测的持续成本。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    claimedIssue claimed by an active session (DR-0004): read the claim comment before touching itenhancementNew feature or request领域/横向跨领域的横向治理与基础设施工作

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions