Prhub

#33597 [CI] Extract `download-rust-ext` and give every install step a cache fallback

原始 PR 作者 hnyls2002 合并时间 2026-08-05 06:33 文件变更 10 提交数 6 评论 5 代码增减 +153 / -168

执行摘要

提取 rust-ext 下载操作,CI 安装回退到缓存

PR body 指出 _pr-test-rust-ext-build.yml 发布的 artifact 只有 1 天签发,过期后任何重跑都会在安装期间重新编译全部 Rust 扩展;rerun-test.yml 因为是 workflow_dispatch,运行中没有 rust-ext-build 作业,完全读不到 artifact,只能每次冷编译。作者希望让过期 artifact 不再导致冷 cargo build,并把可淘汰的 cache 作为第二层来源。

值得精读,特别是 download-rust-ext 的“artifact 优先、cache 兜底”设计,以及用 outputs.hit 门控工具链安装的思路。对维护大型 GitHub Actions 的团队有参考价值,可迁移到其他需要“预构建产物 + 缓存回退”的场景。

讨论亮点

本 PR 无专人 review 评论;唯一的交互来自 GitHub Actions bot 的 rerun-test 结果确认(test_quant_config_parsing.py 与 test_cuda_wrapper.py 均通过)。作者通过 /tag-and-rerun-ci 和 /rerun-test 触发了重跑,没有公开的设计争议。

实现拆解

实现分 5 步:

  1. 新建复合操作 .github/actions/download-rust-ext/action.yml,优先从 artifact 读取,失败后安装 zstd 并回退 actions/cache/restore@v4,命中时通过 GITHUB_ENV 写入 SGLANG_BUILD_RUST_EXTS=none,并通过 outputs.hit 暴露命中状态。
  2. 收敛调用点:_pr-test-stage.yml, _pr-test-stage-cpu.yml, pr-test-jit-kernel.yml, pr-test-multimodal-gen.yml, pr-test-sgl-kernel.yml 中 16 处内联步骤替换为 2-4 行操作引用,删除重复的 continue-on-error 与步骤级 env
  3. 调整 CPU 阶段门控:_pr-test-stage-cpu.ymlinstall_rust_protoc.shSwatinem/rust-cache 改用 outputs.hit != 'true' 才执行,命中时同时跳过工具链安装和缓存恢复。
  4. 接入 rerun-test.yml:三个作业 (cuda / multimodal_gen / cpu) 都使用操作,cpu 作业在托管 runner 上原本每次冷编译,现在可命中缓存并跳过工具链。
  5. 处理 aarch64 例外:pr-test.yml 用显式 skip_prebuilt_rust_ext: true 替代空 artifact 名,并抽取 scripts/ci/utils/ensure_zstd.sh 统一 zstd 安装。
文件 模块 状态 重要度
.github/actions/download-rust-ext/action.yml CI 操作 added 5.43
.github/workflows/pr-test-multimodal-gen.yml CI 工作流 modified 5.09
.github/workflows/pr-test-jit-kernel.yml CI 工作流 modified 4.79
.github/workflows/pr-test-sgl-kernel.yml CI 工作流 modified 4.64
.github/workflows/_pr-test-rust-ext-build.yml CI 工作流 modified 4.38
.github/workflows/_pr-test-stage-cpu.yml CI 工作流 modified 4.35
.github/workflows/_pr-test-stage.yml CI 工作流 modified 4.33
scripts/ci/utils/ensure_zstd.sh CI 脚本 added 4.29
.github/workflows/rerun-test.yml CI 工作流 modified 4.05
.github/workflows/pr-test.yml CI 工作流 modified 2.92

关键符号

download-rust-ext ensure_zstd.sh

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

主要风险集中在四点:

1) aarch64 阶段:cache 键不含架构,若新增调用点未设 skip_prebuilt_rust_ext 会拿到 x86_64 模块;
2) zstd 依赖:自托管 runner 缺 zstd 时缓存静默 miss,ensure_zstd.sh 安装失败仅告警,行为退回冷编译但不更差;
3) SGLANG_BUILD_RUST_EXTS 从 step 级 env 移到 GITHUB_ENV,作用域扩大,未来新读者需注意;
4) 仓库 cache 已达 10 GB 上限,缓存可能淘汰,但 artifact 优先能兜底。

影响的都是 CI 基础设施:所有导入 rust-ext 的测试工作流(jit-kernel、sgl-kernel、multimodal-gen、基础 stage、rerun-test)都会使用新操作,行为一致性提升,重复代码显著减少。开发者的直接收益是重跑过期 PR 或 workflow_dispatch 时不再等待 cargo 全量编译,尤其是 cpu 作业托管 runner 的冷启动。对运行时代码无影响,风险集中在工作流 YAML 回归,但旧逻辑未删除,失败基本可回退。

缓存键不区分架构 依赖 zstd 压缩工具 缓存易被淘汰 GITHUB_ENV 变量作用域变化

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论