SuperAPI AI 工具集

sglang-cherrypick

部署与运维

查看项目

更新于 10-16 06:05

技能介绍

用途

SGLang Cherry-Pick 用于 SGLang 发布管理场景:把一批已经合并(MERGED)的 PR 批量拣选到某个 release 分支上。它触发仓库中的 .github/workflows/bot-cherry-pick.yml 工作流,然后监控每个运行直至结束,并报告每个 PR 的成功或失败,附带生成的拣选 PR 链接(或失败原因)。

主要能力

  • 通过斜杠命令批量提交多个 PR 号,支持空格或逗号分隔。
  • 在触发前做参数校验:目标分支格式、分支是否存在于上游、每个 PR 是否为数字、是否存在、是否已合并、是否有合并提交。
  • 本地预检:用 git merge-tree 模拟每个拣选,列出会变更的文件并提前发现冲突,避免为注定失败的 CI 付费。
  • 检测目标分支上已有的拣选 PR(任意状态),按标题中的 (#<源PR>) 后缀交叉引用,区分已合并、仍开启、已关闭、无记录四种情况。
  • 逐个派发工作流并解析运行 URL,必要时回退到轮询运行列表。
  • 逐个监控运行至完成,收集结论,成功时找出本次运行创建的拣选 PR,失败时提取错误行。
  • 输出预检报告表和最终批次汇总表,含成功/失败/未知计数。

使用方式

命令格式:

/sglang-cherrypick <target_branch> <pr1> [pr2 pr3 ...]

示例:

/sglang-cherrypick release/v0.5.7 25956 25958 25987

/sglang-cherrypick release/v0.5.7 25956,25958,25987

参数说明:

  • target_branch(必填):形如 release/vX.Y 或 release/vX.Y.Z 的发布分支,必须已存在于 origin(即 sgl-project/sglang)。
  • pr_numbers(必填,一个或多个):要拣选的已合并 PR 号,每个必须是正整数。

仓库:始终针对上游仓库 sgl-project/sglang。工作流的 job guard(if: github.repository == 'sgl-project/sglang')意味着在 fork 上触发是空操作。

执行流程分为六步:

  1. 校验参数:快速失败,不触发任何部分批次。
  2. 预检:定位上游 remote,拉取目标分支与各 PR 的合并提交,索引目标分支上已有的拣选 PR,对每个 PR 运行 git merge-tree 并 diff 结果,打印预检报告表。
  3. 派发:对每个 PR 执行 gh workflow run,解析运行 URL,必要时回退轮询。
  4. 监控:用 gh run watch 逐个等待运行完成。
  5. 收集结果:获取每个运行的结论,成功时找出创建的拣选 PR,失败时提取错误行。
  6. 最终汇总:按输入顺序打印汇总表与总计。

适用场景

  • SGLang 发布管理者需要把多个已合并 PR 批量回移到 release 分支。
  • 希望在触发 CI 前先在本地发现冲突、避免重复拣选。
  • 需要逐 PR 的成功/失败报告与拣选 PR 链接。

限制与注意事项

  • 技能从不修改工作流文件,只派发它。
  • 仅作用于上游仓库 sgl-project/sglang,用户的 fork 在此无关。
  • 工作流有按分支的并发控制(concurrency: cherry-pick-${{ target_branch }},cancel-in-progress: false),同一目标分支的多次派发会串行排队,客户端无法并行加速;跨不同目标分支则可并发。
  • 不要跳过已合并状态预检:工作流会拒绝未合并的 PR,但技能希望先给出一次批量校验报告,而不是 N 次单独的工作流失败。
  • 调用前应确保 gh auth status 已通过,否则应暴露认证错误并停止。
  • 预检 git merge-tree 需要 git ≥ 2.38(--write-tree 选项),否则会报未知选项错误。
  • 派发需要 token 具备 actions:write 权限,否则 gh workflow run 返回 403。
  • 若预检干净但变更文件数为 0 且未发现已有拣选 PR,说明该提交已通过直接合并或 rebase 落在发布分支上,应跳过派发并提示该异常。

常见失败模式

  • PR 未合并(state=OPEN):等待合并,或使用 --commit-sha(本斜杠命令不支持)。
  • 目标分支不存在:确认分支名,发布管理者可能尚未切出该分支。
  • 拣选因冲突失败:按工作流错误提示手动处理——git checkout release/v0.5.7 && git cherry-pick <SHA>,解决冲突,推送分支并手动开 PR。
  • 预检 git merge-tree 报告冲突:从批次中移除该 PR 并手动解决。
  • 没有指向 sgl-project/sglang 的 remote:添加上游 remote:git remote add upstream https://github.com/sgl-project/sglang.git。
  • 预检报告 Prior cherry-pick: merged as #N:该 PR 已被拣选并合并,跳过以免产生重复 PR。
  • 预检报告 Prior cherry-pick: OPEN as #N:上一次派发仍在进行,默认跳过并请用户先落地或关闭 #N。
  • 多次运行但只检测到一个:两次派发落在同一轮询周期,可重跑缺失的 PR 或手动查找其运行。
  • gh workflow run 返回 403:token 缺少 actions:write,使用具备工作流派发权限的 token。