mcpField
L
landing-prs

landing-prs

github.com/bostonaholic开发267 次安装今天更新
代码仓库

关于 landing-prs

指导编码 Agent 完成 PR 合并的技能,涵盖预检、必要时变基及由 CI 结果把关的合并。它要求明确的发布指令,并在检查或仓库保护机制阻止操作时停止。

主要功能

  1. 01要求明确的发布指令
  2. 02运行预检检查
  3. 03变基落后的分支
  4. 04变基后使用租约保护推送
  5. 05根据 CI 结果决定是否合并
  6. 06报告合并与发布状态

适用场景

  1. 01收到明确指令后合并 PR
  2. 02合并前更新落后的 PR 分支
  3. 03CI 或分支保护阻止时停止合并

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bostonaholic/skills --skill landing-prs

安装后在 Claude Code 中输入/landing-prs确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
scripts/
ci-gate.mjs
merge.sh
preflight.sh
shared/
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 时才变基:

  1. 运行 git rebase refs/remotes/<REMOTE>/<BASE_REF>;如果 MERGES 大于 0,则添加 --rebase-merges。
  2. 遇到冲突时,运行 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;不要假定发布已完成。

评论

支持 Markdown