在合并之前自动检查拉取请求是否有标签

axe*_*l22 1 git github github-api

我们正在使用Github,我们有以下拉取请求提交流程:

  1. 我们希望拉请求审阅者在拉取请求上放置一个特殊的LGTM标签,让拉请求作者知道他可以自己合并PR.
  2. 在拉取请求中存在LGTM标签之前,不允许作者按下"合并拉取请求"按钮.

目前,我们无法自动执行第二项要求.

是否有一个钩子在按下"合并拉动请求"按钮后运行,但在拉动请求真正合并之前,可以用来使PR无效?如果没有,还有其他方法可以确保上面的第二个要求吗?

Ant*_*kov 5

是的,这是可能的.一般来说,至少有两种方法可以做到这一点.第一个我不喜欢,但如果你无法控制存储库,它可能是一个简单的方法.

  1. 为GitHub Chrome Extension 构建类似于不合并WIP的内容.

  2. 使用状态API和受保护的分支

由于这个问题有github-api标签,我将谈论第二种选择.

首先,您需要将一些分支配置为受保护.通常他们是developmaster.取决于您的分支模型.

比你需要一些简单的应用程序来通过GitHub Statuses API发布状态.使用以下状态API,您可以发送Pending,Success,ErrorFailure状态.Pending,ErrorFailed状态将阻止合并按钮.

作为参考,您可以使用我的演示应用程序来计算 :shipit:注释并将PR标记为Successful.这样可以启用"合并"按钮.

这个应用程序是用C#编写的,但我希望即使你没有C#知识也很容易理解.

您需要注册一个新的WebHook.所以,你的脚本/应用的通知.想想你感兴趣的事件.我认为这组事件对你有用:

在此输入图像描述

从通知事件中,您可以提取Pull Request Id并执行不同的检查.

在您的情况下,您需要在问题上使用列表标签

GET /repos/:owner/:repo/issues/:number/labels
Run Code Online (Sandbox Code Playgroud)

使用问题作为追索权有点奇怪,但这就是它的工作原理.问题和拉动请求曾经是时间相同的事情.

之后,请确保您已准备好所有标签并将通知发送给回购.我正在向最后一次提交发送"成功" 状态

POST /repos/:owner/:repo/statuses/:sha 

{
  "state": "success",
  "target_url": "https://example.com/build/status",
  "description": "Merge label found",
  "context": "review/labels"
}
Run Code Online (Sandbox Code Playgroud)

注意"review/labels"线.这是一个重要的部分.

第一次发送后,您应该转到Repository - > Settings- > Branches- > YourBranchName-> Edit并单击带有上下文名称的复选框.因此,此状态成为执行"合并操作"的必需条件.

看起来应该是这样的: 在此输入图像描述

其他阅读链接