mcpField
I
iterate-pr

iterate-pr

github.com/getsentry开发1.1k4.6k 次安装5 天前更新
代码仓库

关于 iterate-pr

面向开发者的 PR 迭代技能,用于修复可处理的 CI 失败及高中优先级评审反馈,并持续监控检查。它区分可自动处理的事项与需报告的人为审批、草稿及合并就绪门槛。

主要功能

  1. 01获取 PR 检查和评审反馈
  2. 02优先处理高中优先级反馈
  3. 03指导根因修复与本地验证
  4. 04循环监控检查和反馈
  5. 05报告人为与草稿就绪门槛

适用场景

  1. 01处理开放 PR 的 CI 失败
  2. 02跟进可处理的评审反馈
  3. 03推送修复后监控检查
  4. 04进展受人为门槛阻塞时报告

MCP 相关

该技能通过经过身份验证的 `gh` 和附带脚本检查 PR、获取检查及反馈,并发布讨论串回复。输入未说明 MCP 功能。

安装

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

$npx skills add https://github.com/getsentry/skills --skill iterate-pr

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

包含的文件

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

SPEC.md
agents/
openai.yaml
scripts/
fetch_pr_checks.py
fetch_pr_feedback.py
monitor_pr_checks.py
reply_to_thread.py

详细介绍

迭代处理 PR,直至 CI 通过

目标:修复可处理的 CI 失败和高优先级/中优先级审查反馈。遇到需要人工审批、草稿就绪状态和合并就绪状态的门槛时停止并报告。

需要:

  • 已通过身份验证的 gh
  • uv
  • 将目标仓库根目录设为当前工作目录
  • 相对于技能根目录的脚本路径,例如 scripts/fetch_pr_checks.py

捆绑脚本

脚本运行方式输出
scripts/fetch_pr_checks.pyuv run scripts/fetch_pr_checks.py [--pr NUMBER]JSON:pr、summary、checks、失败摘要
scripts/fetch_pr_feedback.pyuv run scripts/fetch_pr_feedback.py [--pr NUMBER]JSON 分类:high、medium、low、bot、resolved
scripts/monitor_pr_checks.pyuv run scripts/monitor_pr_checks.py [--pr NUMBER]终端标记及以制表符分隔的检查项
scripts/reply_to_thread.pyuv run scripts/reply_to_thread.py THREAD_ID BODY [...]JSON 回复结果

检查摘要字段包括 failed、pending、actionable_pending 和 human_gate_pending。

监控标记:

  • ALL_CHECKS_PASSED
  • CHECKS_DONE_WITH_FAILURES
  • NO_CHECKS_REGISTERED
  • DRAFT_PR_WITH_NO_CHECKS
  • CHECKS_BLOCKED_BY_REVIEW_GATE

工作流

1. 确认 PR

运行:

gh pr view --json number,url,headRefName,isDraft,reviewDecision

以下情况停止:

  • 不存在 PR
  • 经过监控宽限期后,草稿 PR 仍没有检查项:报告 DRAFT_PR_WITH_NO_CHECKS

草稿规则:仅检查现有检查项和反馈。除非收到要求,否则不要将 PR 标记为可供审查。

2. 处理反馈

运行 uv run scripts/fetch_pr_feedback.py [--pr NUMBER]。

分类操作
high修复
medium修复
low询问用户要处理哪些内容
bot跳过信息性评论
resolved跳过

反馈修复清单:

  • 确认根本原因
  • 搜索相关代码
  • 修复所有实例
  • 对于 review_bot: true:修复实际问题,并说明误报情况

低优先级反馈提示词格式:

Found 3 low-priority suggestions:
1. [l] "Consider renaming this variable" - @reviewer in api.py:42
2. [nit] "Could use a list comprehension" - @reviewer in utils.py:18
3. [style] "Add a docstring" - @reviewer in models.py:55

Which should I address? ("1,3", "all", or "none")
3. 检查 CI 状态

运行 uv run scripts/fetch_pr_checks.py [--pr NUMBER]。

状态操作
failed > 0 且 actionable_pending == 0修复失败项
actionable_pending > 0等待;等待期间轮询反馈
pending > 0 且 actionable_pending == 0报告 CHECKS_BLOCKED_BY_REVIEW_GATE
宽限期后仍无检查项报告 NO_CHECKS_REGISTERED 或 DRAFT_PR_WITH_NO_CHECKS
所有可处理的检查均已通过执行 CI 后反馈检查

等待可处理的审查机器人:sentry、warden、cursor、bugbot、seer、codeql。 不要等待审批、isDraft、REVIEW_REQUIRED、Codecov 或信息性机器人。

4. 修复 CI 失败

针对每项失败:

  1. 阅读完整日志:gh run view <run-id> --log-failed
  2. 从断言/异常/lint 规则追溯到源代码
  3. 编辑前说明原因:“因 X 失败,受 Y 影响”
  4. 搜索相关调用点/模式
  5. 修复根本原因,而非表面症状
  6. 必要时添加针对性的测试覆盖
5. 本地验证,然后提交并推送

提交前:

  • 测试修复:重新运行特定测试
  • lint/类型修复:重新运行受影响的检查器
  • 代码修复:重新运行覆盖相关代码的测试
  • 本地失败:推送前先修复
git add <files>
git commit -m "fix: <descriptive message>"
git push
6. 监控 CI 并处理反馈

循环执行:

  1. 运行 uv run scripts/fetch_pr_checks.py
  2. 按照步骤 3 中的表格处理
  3. 当 actionable_pending > 0 时,运行 uv run scripts/fetch_pr_feedback.py
  4. 立即修复新出现的高优先级/中优先级反馈
  5. 如果有改动,则验证、提交、推送,并重新开始循环
  6. 否则等待 30 秒后重复
  7. 检查通过后等待 10 秒,再获取一次反馈
  8. 如果有新的高优先级/中优先级反馈,返回步骤 4

Claude Code 可选项:通过 MonitorTool 运行 uv run scripts/monitor_pr_checks.py,并设置 persistent: false;将超时设为仓库 CI 的正常耗时。每次推送后都重新启动监控器。

退出条件

退出条件
成功可执行的 CI 检查已通过;CI 后的反馈无问题;已处理低优先级选择
询问用户同一失败尝试 2 次后仍然存在;反馈不明确;基础设施问题
停止没有 PR;分支需要 rebase;没有检查;草稿 PR 无检查;只剩人工关卡

后备方案

如果脚本失败,请直接使用 gh CLI:

  • gh pr view --json number,url,headRefName,isDraft,reviewDecision
  • gh pr checks --json name,state,bucket,description,link
  • gh run view <run-id> --log-failed
  • gh api repos/{owner}/{repo}/pulls/{number}/comments

评论

支持 Markdown