Autopilot
把拉取请求交给 HeyDeer。Autopilot 会修复待处理的问题,推送到 PR 的分支,并审查每次改动,直到 PR 可以合并或需要你介入。
使用要求
- PR 处于打开状态,且其分支位于同一仓库中,而不是来自 Fork。
- 你拥有该仓库的写权限,并且包含在谁可以发起审查设置中。
- 工作区使用付费套餐。详见套餐。
- HeyDeer 拥有 Contents 和 Pull requests 的读写权限。详见GitHub App 与权限。
启动和停止 Autopilot
可以通过以下任一方式启动 Autopilot:
- 在 HeyDeer 的审查页面选择 Autopilot,然后选择启动 Autopilot。
- 在 GitHub 上 HeyDeer 的审查评论中选择 Autopilot 按钮,然后在 HeyDeer 中选择启动 Autopilot。
- 在 PR 中评论
@heydeer autopilot。
如需停止,在 HeyDeer 的 Autopilot 页面选择停止 Autopilot,或评论 @heydeer autopilot stop。再次启动 Autopilot 会重新计算轮数,并读取新的回复和评论。
Autopilot 运行期间,无法对该 PR 发起修复或审查,请先停止 Autopilot。修复进行中时,也无法启动 Autopilot。
Autopilot 修复哪些问题
| 类型 | 包括 |
|---|---|
| 发现的问题 | 仓库反馈范围内发现的问题,以及 HeyDeer 此前提出且仍未解决的问题,计算方式与 HeyDeer Review 检查相同。 |
| 请求 | 由人发起、未解决且最后发言者拥有写权限的审查讨论,以及拥有写权限的人在 Autopilot 所基于的那次审查之后于 PR 中发布的评论和审查正文。Autopilot 运行期间,在 PR 中提及 @heydeer(包括在 HeyDeer 自己的审查讨论中)会交给 Autopilot 处理,而不会另起一个请求。 |
| 失败的检查 | 如果分支规则指定了必需检查,则为这些检查;否则为除 HeyDeer Review 之外的所有检查。 |
| 合并冲突 | HeyDeer 会合并目标分支并解决冲突。它从不变基或强制推送,也不会仅因分支落后就更新它。 |
Autopilot 会忽略机器人和没有写权限的人发表的评论。HeyDeer 会在每个处理过的讨论中回复;如果某个请求需要人来决定,它会在该讨论中提问。
HeyDeer 会读取每个失败检查的标题、摘要和注释;对于 GitHub Actions 作业,还会读取失败步骤的日志。它会在隔离沙箱中复现失败,在其中修改代码并运行你的测试。无法复现的失败会保留在仍待处理的列表中。读取日志需要 Actions 权限;没有该权限时,HeyDeer 会根据其余信息处理。代码执行的隔离方式详见安全。
Autopilot 的提交不能修改 .github/workflows/ 中的文件,因为改动后的工作流会在有人读过之前就带着仓库的密钥运行。
Autopilot 何时停止
| 原因 | 具体情况 |
|---|---|
| 已就绪 | 没有需要修复的问题了。 |
| 需要你的回复 | HeyDeer 在某个讨论或其审查中提出了问题,或需要你确认此前的问题是否已解决,并修复了其他所有问题。请在对应位置回复,然后再次启动 Autopilot。 |
| 其他人推送了代码 | 任何不是 HeyDeer 的推送,包括 GitHub 的 Update branch 按钮。HeyDeer 会丢弃进行中的这一轮及其暂存的审查。 |
| 轮数上限 | Autopilot 已运行 5 轮。 |
| 没有进展 | 某一轮没有做出任何更改且待处理的项目不变,连续两轮没有解决任何问题,或者仍待处理的每一项都是某一轮说明需要人来处理的。Autopilot 的评论会说明每一项需要人做什么,例如添加密钥或修改工作流。 |
| 检查未完成 | 一小时后检查仍在运行。 |
| 合并队列 | PR 已在合并队列中,推送会把它移出队列。 |
| 推送被拒绝 | GitHub 拒绝了 HeyDeer 的推送,例如分支规则限制了谁可以推送到该分支。 |
| 积分或套餐 | 工作区的积分已用完,或已不再使用付费套餐。 |
| 已被手动停止 | 任何拥有该仓库写权限的人都可以停止它。 |
| 访问权限已移除 | 启动 Autopilot 的人已无法在该仓库中发起审查。 |
| GitHub 拒绝访问 | GitHub 阻止了 HeyDeer 读取或更新该 PR,例如 HeyDeer 失去了对该仓库的访问权限。 |
| PR 已变更 | PR 已关闭或合并,或其目标分支已更改。 |
| 未完成 | HeyDeer 未能完成某一轮,或未能完成对最新提交的审查。 |
HeyDeer 在 GitHub 上发布的内容
- PR 上的一条 Autopilot 评论,随工作进展更新:当前在做什么、正在修复什么;每个已完成轮次的提交及其处理的内容记录在历史记录中。HeyDeer 会将较早的 Autopilot 评论隐藏为过时。
- PR 分支上的提交,以及在处理过的讨论中的回复。
- HeyDeer Review 检查,在 Autopilot 运行期间保持进行中。
- Autopilot 停止时,会发布它对最新提交的审查(除非有其他人推送或 PR 已变更),并在评论中给出结果:停止原因以及仍需你处理的事项。当它需要你时,例如需要你的回复或遇到无法解决的问题,它会发布一条新评论并提及启动 Autopilot 的人。
Autopilot 的推送不会触发自动审查,HeyDeer 也不会向任何人请求审查。Autopilot 运行期间,HeyDeer 的审查评论不会显示 用 HeyDeer 修复 和 Autopilot 按钮。
HeyDeer 发布的审查照常适用自动批准。如果希望 HeyDeer 推送后仍需人工批准,请在分支规则中开启 Require approval of the most recent reviewable push。详见自动批准。
HeyDeer 的 Autopilot 页面列出你可见仓库中的所有运行记录。每次运行的页面会显示其状态、仍待处理的事项和已用积分,以及每一轮处理的事项、提交、回复和智能体的总结。
积分
每一轮的修复和审查都像其他修复和审查一样消耗工作区积分。Autopilot 本身不单独收费。详见积分如何计费。