执行摘要
移除 bot-cherry-pick.yml 中的 concurrency 配置块,修复了批量 cherry-pick 时大部分工作流被取消的问题。变更仅删除 4 行,无风险,可安全并行执行多个 cherry-pick 任务。
功能与动机
当发布管理员通过 /sglang-cherrypick 或 GitHub Actions CLI 批量分发多个 PR 到同一个 release 分支时,由于 GitHub Actions 的 concurrency 机制(即使 cancel-in-progress: false),每个 concurrency 组只保留一个 pending 运行,新 dispatch 会取消之前排队的任务。实际验证中,8 个 PR 只有第一个和最后一个成功,中间 6 个从未启动。作者明确指出:"There is no shared mutable state that the concurrency group was actually protecting."
实现拆解
- 删除 concurrency 块:在
.github/workflows/bot-cherry-pick.yml 中移除以下 4 行:
concurrency:
group: cherry-pick-${{ github.event.inputs.target_branch }}
cancel-in-progress: false
- 保持不变的部分:工作流的
permissions、jobs.cherry-pick 定义、if 条件及步骤均未修改。
- 安全依据:每个 cherry-pick 运行都创建随机后缀的分支(
cherry-pick/<sha>-to-<branch>-<rand>),互不冲突;仅推送各自分支,不会竞争写入;最终合并 release 分支是人工审查步骤。
无(变更仅为删除配置行,无需展示代码)
评论区精华
无人工 review 评论。Gemini Code Assist 自动回复表示不支持生成 review。
风险与影响
风险:极低。无共享状态,移除后不会导致冲突。并行运行时可能增加 CI runner 负载,但在 SGLang 基础设施下可接受。
影响:正面改进,发布管理员可批量分发 cherry-pick 并获得全部成功,提升效率。
关联脉络
与 PR #26035(CI 取消工作流修复)同属 CI 基础设施改进系列,都涉及工作流并发行为和取消逻辑。
参与讨论