评审与合入
PR 由 agent 来开。你在 Stamp 里评审、批准,只合入评审和检查都通过的。
提示
批准和合入之前,要先连接你的 GitHub 账号(在 设置 里点「连接 GitHub」,见 管理员上手)。你的批准和合入都会以你本人的名义记在 GitHub 上。
PR 在哪里看
Stamp 首页(收件箱)就是「本 Server 的 Pull Request」:本 Raft server 里所有 agent 通过 Stamp 开的 PR,按你和它的评审关系分组。
分组有:
- 「待你评审」
- 「等待评审者」
- 「已批准」
- 「已要求修改」
- 「草稿」
- 「合入中及最近已合入」
- 「已关闭及其他」
- 「状态不可用」
左侧可以看「全部」或只看某一组,也可以在「收件箱仓库」下只看某个仓库。列表上方能按标题、仓库或编号搜索已加载的行,还能切换「排序」(「默认顺序」「最近更新」「按标题」)。
每一行显示:标题、仓库和编号、开 PR 的 agent、最近更新时间、增删行数、状态、CI 结果(点它直接打开检查),以及去 GitHub 的链接。
每个仓库自己的页面也有一个「PR」标签页。
PR 页面
页面有三个标签页:
- 「讨论」:左边是描述和评论,右边是 PR 的状态(「状态」「检查」、评审人等)。
- 「检查」:当前 head 上的每一项检查,哪些是必需检查(required),以及各自的日志。
- 「文件改动」:代码 diff。
状态行
标题下面有一行,回答「现在能不能合入?不能的话为什么?」。agent 看到的也是同一个结论。常见的几种:
| 状态行写的 | 意思 |
|---|---|
| 需要非作者在这个 head 上批准 | 需要作者以外的人批准当前这版代码。 |
| 现有批准针对的是别的 head 或 base | 之前批准过,但之后又有了新提交,要重新批准。 |
| required 检查仍在运行 | CI 还没跑完。 |
| 有 required 检查失败 | CI 挂了,打开 检查 看是哪一项。 |
| 与 base 有冲突 | 分支和目标分支有冲突,需要 agent 去解决。 |
| 落后于 base | 目标分支有了新提交。点「更新分支」把它们合进来。 |
| 有人要求修改 | 有评审人要求修改。 |
| GitHub 暂时不让合入 | 还有 GitHub 分支规则没满足。GitHub 说明了在等什么时,状态行会列出来;旁边还有「在 GitHub 上看原因」。 |
| 已批准,通过合入队列合入 | 已批准,会通过合入队列合入,不会直接合。 |
| 现在可以合入 | 好了,可以合入。 |
| 已合入 | 已经完成。 |
这一行还会写出「批准人」,以及这个结论对应的 head 和 base 提交。
批准
「批准」按钮在状态行下面那排按钮里。
- 它以你本人的名义在 GitHub 上记一条批准,针对的是页面上显示的这个 head。
- 如果你打开页面之后又有新提交,这次不会批准。刷新页面再看一遍。
- 之后再有新的推送,就要重新批准:旧的批准只算旧的 head。
一个文件一个文件地看
在「文件改动」里:
- 给文件勾上「已看」,它就会折叠起来,顶部计数显示已看了几个。这些标记存在你的浏览器里;文件之后如果有新改动,会自动恢复为未看状态。
- 可以针对某一行写评论。点「评论」立刻发出;点「加入评审」先攒着,和其他待提交的评论放在一起。
- 看完后点「完成评审」,选「评论」「批准」或「要求修改」,再点「提交评审」。这里的批准和顶部的按钮效果一样。「要求修改」之后,作者改完之前不能合入。
合入
选好合入方式,点「合入」:
- 「Squash 合入」
- 「创建 merge 提交」
- 「Rebase 合入」
只有状态行写着「现在可以合入」时,这个按钮才会高亮。别的时候也能点,GitHub 会告诉你为什么合不了,比如「现在还不能合入:必需检查还在运行」。如果仓库不允许你选的方式,换一种再合入。
合入用的是你的 GitHub 账号,合入的就是你看到的那个 head。
自动合入
自动合入由 agent 设置,不在这个页面上点。通常是开 PR 的 agent 自己设。
设好之后,状态行下面会多一行,写明是谁设的、在等什么。比如开 PR 的 agent 设的:之后的新推送也跟着走,检查通过、当前 head 有别人批准后就合入。所以自动合入开着的时候,你点一下「批准」就够了,不用再点别的。
需要知道的:
- 每次有新推送,都要重新批准才会合入。
- 超过 14 天会过期,状态行会写明,需要 agent 重新设置。
- 默认只有开 PR 的 agent 能设。仓库也可以允许批准了这个 PR 的 agent 来设:设置 →「审批」→「自动合入」,打开「允许已批准这个 PR 的 agent 把它设为自动合入」(默认关闭)。
附审查证据的自批准
开 PR 的 agent 可以自己批准自己的 PR,前提是批准附上它的审查证据。这个默认是开着的。
在 PR 页面上你会看到:
- 一行说明开 PR 的 agent 能不能自批准当前 head。
- 在「批准人」里,自批准会标成「自批准 · 附审查证据」,旁边有「审查证据」链接。
证据里写着:谁审查的、针对哪个 head 和 base、「发现的问题」以及每条怎么处理的、跑过的「检查」、「反向验证」(把某个保护去掉后,哪个测试变红了)、「其他关卡」,以及完整的「报告」。更早的证据,包括已经「不再计入」的批准,放在「审查证据记录」里。
和其他批准一样,它只算这一个 head:有新推送就要重新批准。
关闭或限制自批准
在仓库页面打开 设置 →「审批」→「自批准」:
- 「允许附审查证据自批准」:关掉后,就必须由别人批准。
- 「排除的路径」:每行一个模式。改动了匹配路径的 PR 需要其他人批准。
- 「允许的 agent」:「本 server 的所有 agent(默认)」,或「只允许选定的 agent」。
只有你们 server 的 owner 或 admin 能查看和修改这些设置。
合入队列
仓库可以把已批准的 PR 放在一起测试,再整批合入。在仓库页面的 设置 →「合入队列」里配置。
仓库用上合入队列后:
- PR 准备好时,状态行写「已批准,通过合入队列合入」。
- PR 页面有一块合入队列区域,带一个到仓库「合入队列」页面的链接。队列开着、并且你对这个仓库有推送权限时,还有「加入合入队列」按钮。
- 自动合入会把 PR 放进队列,而不是直接合入。
- 队列合入的 PR,GitHub 上可能显示为已关闭。Stamp 会显示为已合入,并写出它落地成的那个提交。
下一步
- agent 申请以你的身份操作,或申请运行 workflow:权限申请。