关于 landing-prs
指导编码 Agent 完成 PR 合并的技能,涵盖预检、必要时变基及由 CI 结果把关的合并。它要求明确的发布指令,并在检查或仓库保护机制阻止操作时停止。
主要功能
- 01要求明确的发布指令
- 02运行预检检查
- 03变基落后的分支
- 04变基后使用租约保护推送
- 05根据 CI 结果决定是否合并
- 06报告合并与发布状态
适用场景
- 01收到明确指令后合并 PR
- 02合并前更新落后的 PR 分支
- 03CI 或分支保护阻止时停止合并
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bostonaholic/ skills --skill landing-prs安装后在 Claude Code 中输入/landing-prs确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlscripts/ci-gate.mjsmerge.shpreflight.shshared/skill-calls.md详细介绍
合并 PR
gh pr merge不可逆。- 仅在用户明确要求“ship it”“land the PR”或使用
/landing-prs时执行;PR 已获批准、检查通过或看起来已完成,都不代表用户要求合并。 - 该请求也授权对落后的分支执行变基和受租约保护的强制推送;绝不要停下来把这两项操作交还给用户。
- 下方的 CI 门禁通过后,无需再次询问即可合并。
脚本位于 <skill-dir>/scripts/,并从仓库中、在 PR 的头分支上运行。
推送前
运行 "<skill-dir>/scripts/preflight.sh" [<n>];如果用户提供了参数,则传入该参数(仅限数字)。退出码为 0 时,使用下方的 KEY=VALUE 行。其他任何退出码:停止并报告其 stderr。若因分支错误而退出码为 4,告知用户运行 gh pr checkout <n> 后重试。
落后时变基
仅当 BEHIND 大于 0 时才变基:
- 运行
git rebase refs/remotes/<REMOTE>/<BASE_REF>;如果MERGES大于0,则添加--rebase-merges。 - 遇到冲突时,运行
git rebase --abort,并使用modernizing-prs和<n>调用 Skill 工具(参见 Skill 调用)。该工具完成并推送后,继续;如果它停止,则停止并转达其报告。如果未安装该工具,列出冲突路径,并以Next: /modernizing-prs <n>, then /landing-prs <n>结束。
合并前步骤与推送
如果项目的 Agent 指令声明了合并前要执行的步骤(例如,更新版本号),现在就执行。如果步骤停止,则停止。
然后推送。变基后,如果此 Skill 本身已运行但尚未推送,则运行 git push --force-with-lease=<HEAD_REF>:<LEASE> <REMOTE> HEAD:<HEAD_REF>;其他情况下,包括 modernizing-prs 已推送之后,都运行 git push。绝不要单独使用 --force。如果推送被拒绝,原样报告 git 的消息并停止,不要重试。
CI 门禁
在后台运行 node "<skill-dir>/scripts/ci-gate.mjs" <URL>,并根据其退出码采取行动:
0(merge):使用其HEAD继续执行“合并”。10(rebase):重新运行推送前,执行变基、推送,并重新运行门禁。一次运行中变基三次后,停止并报告:“base keeps moving”。1(fail)、11(unstable)、124(timeout):停止并报告判定结果,列出每个FAILED检查。3(stop):停止并原样报告STATUS(BLOCKED、DIRTY、DRAFT等)。绝不要在状态未明确时合并。143:执行器已终止该进程;在后台重新运行。- 其他任何退出码:停止并报告其 stderr(
127表示命令缺失,并非检查失败)。
合并
运行 "<skill-dir>/scripts/merge.sh" <URL> <HEAD>。
0:报告MERGED提交。3:门禁通过后头分支发生了变化。重新运行一次 CI 门禁;如果再次返回3,则停止。5:尚未合并(正在等待合并队列或自动合并);报告此情况。- 其他任何退出码,包括分支保护拒绝(
4):原样报告其 stderr 并停止。绝不要使用--admin或任何绕过方式。
对于合并触发的任何发布,指向 gh run list;不要假定发布已完成。