执行摘要
- 一句话:修复 AMD CI 工作流取消后任务卡住的问题,添加取消守卫。
- 推荐动作:这是一个简单的 CI 配置修复,无需深入阅读。对于关注 CI/CD 基础设施的工程师,可以快速浏览变更文件以了解 GitHub Actions 中
always() 和 !cancelled() 的使用模式。
功能与动机
根据 PR body 描述,AMD CI 中的特定任务(sgl-kernel、jit-kernel、stage-a、multimodal)使用了 always() 条件而没有 !cancelled() 守卫,导致工作流被手动取消后,这些任务仍会停留在“等待运行器”状态,无法正常终止。这造成了 CI 资源的浪费和用户体验问题。
实现拆解
- 修改 CI 配置文件:在
.github/workflows/pr-test-amd.yml 文件中,针对 sgl-kernel-unit-test-amd、sgl-kernel-unit-test-2-gpu-amd、stage-a-test-1-gpu-small-amd、jit-kernel-unit-test-amd、multimodal-gen-test-1-gpu-amd、multimodal-gen-test-2-gpu-amd 这六个作业的 if 条件,将 always() 替换为 always() && !cancelled()。
- 变更逻辑:每个作业的条件判断从“总是运行”改为“总是运行且工作流未被取消时运行”,确保工作流取消时这些作业能正确跳过执行。
- 影响范围:仅影响 AMD CI 工作流中的特定作业,不涉及任何源码、测试或文档变更。
关键文件:
.github/workflows/pr-test-amd.yml(模块 CI配置;类别 infra;类型 infrastructure): 这是唯一被修改的文件,包含了 AMD CI 工作流的配置,修复了工作流取消时任务卡住的问题。
关键符号:未识别
关键源码片段
.github/workflows/pr-test-amd.yml
这是唯一被修改的文件,包含了 AMD CI 工作流的配置,修复了工作流取消时任务卡住的问题。
# 示例:修改后的 sgl-kernel-unit-test-amd 作业条件
sgl-kernel-unit-test-amd:
needs: [check-changes, call-gate]
if: |
always() && !cancelled() && # 添加 !cancelled() 守卫,确保工作流取消时跳过
(
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',sgl-kernel-unit-test-amd,')) ||
(inputs.target_stage == 'all' && needs.check-changes.outputs.changes_amd == 'true')
)
评论区精华
Review 中仅有一名审核者(bingxche)批准,未留下具体评论。从上下文推断,这是一个简单直接的修复,没有引发技术讨论或争议。
风险与影响
- 风险:低风险。变更仅涉及 CI 工作流配置,不修改任何业务逻辑、测试或部署脚本。主要风险在于:
- 配置错误风险:如果
!cancelled() 守卫添加位置不当,可能导致作业在不该跳过时被跳过。但从变更内容看,仅针对特定作业的条件表达式进行修改,逻辑清晰。
- 回归风险:无,因为这只是修复了工作流取消时的行为,不影响正常执行路径。
- 影响:影响范围有限,但能提升 CI 效率。
- 对用户:无直接影响,这是内部 CI 改进。
- 对系统:修复后,AMD CI 工作流取消时,相关作业将不再卡住,能更快释放 CI 资源(如运行器配额)。
- 对团队:减少因 CI 任务卡住导致的手动干预需求,提升开发体验。
- 风险标记:配置变更
关联脉络
- PR #23313 ci: reduce scheduled PR test from 4x to 3x daily: 同属 CI 基础设施优化,关注 CI 资源利用效率。
- PR #23305 [misc] CI hygiene: enforce main entry, drop silent-skipped tests, fix rerun-test protoc: 同属 CI 改进,涉及测试执行和 CI 稳定性。
参与讨论