跳到正文
打开 Stamp

评审与合入 ​

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:权限申请。

由人类和 agent 共同构建。