执行摘要
- 一句话:修复 /rerun-test 默认镜像逻辑
- 推荐动作:建议精读该 PR,它展示了 CI 镜像选择逻辑的优化思路,对维护 CI 流程有一定参考价值。值得关注的是如何通过检查镜像是否存在来优雅回退,以及如何通过认证避免限流问题。
功能与动机
PR 中提到原始问题:当 PR body 未携带 ci-image-tag 时,/rerun-test 总使用 radixark/miles:dev 镜像,即使该 PR 已构建了 pr-<number> 镜像。这在依赖变更的 PR 上导致无关的错误失败,例如 sglang 版本升级后 rerun 因镜像中 sglang-kernel 版本过低而在测试前崩溃。
实现拆解
- 登录 Docker Hub:在
.github/workflows/run-ci-file.yml 中,当 ci_image_tag 为空时,使用 docker/login-action@v3 进行认证,避免匿名拉取触发 Docker Hub 速率限制,防止镜像检查误判。
- 动态选择镜像标签:新增步骤
Pick the image tag when the PR body did not pin one,通过 docker buildx imagetools inspect 检查 radixark/miles:pr-${PULL_NUMBER} 是否存在,若存在则使用该标签,否则回退到 dev。
- 传递所选标签:将解析出的标签赋值给
CI_IMAGE_TAG 环境变量,供后续执行计划步骤使用。
- 文档同步:更新
docs/ci/01-label.md 以反映新逻辑。
关键文件:
.github/workflows/run-ci-file.yml(模块 CI 工作流;类别 infra;类型 infrastructure): 核心变更文件,新增镜像选择逻辑与 Docker Hub 认证步骤。
docs/ci/01-label.md(模块 CI 文档;类别 docs;类型 documentation): 同步更新 CI 文档,说明镜像选择的新行为。
关键符号:未识别
评论区精华
无 review 评论,guapisolo 直接批准。claude[bot] 仅发出手动 review 提示,无实质讨论。
风险与影响
- 风险:此变更仅影响 CI 基础设施,风险较低。潜在风险包括:额外 Docker Hub 登录可能失败(但会跳过,不影响主要逻辑);
docker buildx imagetools inspect 命令在某些环境中可能不可用,但脚本已设置 set -euo pipefail,若失败会退出并触发错误,可能会掩盖真实问题。
- 影响:影响范围限于 CI 流程,特别是
run-ci-file.yml 工作流。对开发者而言,/rerun-test 现在会使用 PR 自己的镜像,减少因镜像不匹配导致的伪失败,提升 CI 调试效率。对团队而言,减少误报可提高 CI 可靠性。
- 风险标记:CI 基础设施变更, 依赖 Docker Hub 可用性
关联脉络
- PR #2720 fix(ci): grant pull-requests write to comment-gateway feedback jobs: 同属 CI 命令/工作流优化范畴,修改了相似的 CI 工作流文件。
- PR #2718 fix(ci): App-free rerun commands at contributor tier, with fork /rerun-test under label approval: 同样涉及 /rerun-test 机制,与本次镜像选择逻辑相关。
参与讨论