在合并

时间:2016-02-15 09:29:21

标签: git github github-api

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

  1. 我们希望拉请求审阅者在拉取请求中放置一个特殊的LGTM标签,让拉请求作者知道他可以自己合并PR。
  2. 在拉取请求中存在LGTM标签之前,不允许作者按“合并拉取请求”按钮。
  3. 目前,我们无法自动执行第二项要求。

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

1 个答案:

答案 0 :(得分:5)

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

  1. 构建类似Do Not Merge WIP for GitHub Chrome扩展程序的内容。

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

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

    首先你需要configure some branches as protected。通常它们是developmaster。取决于您的分支模型。

    您需要一些简单的应用程序才能通过GitHub Statuses API发布状态。使用状态API,您可以发送PendingSuccessErrorFailure状态。 PendingErrorFailed状态将阻止合并按钮。

    作为参考,您可以use my demo app which counts :shipit:发表评论并将PR标记为Successful。这样就可以启用“合并”按钮。

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

    您需要注册一个新的WebHook。所以你的脚本/ app is notified。想想你感兴趣的about events。我认为这组事件对你有用:

    enter image description here

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

    在您的情况下,您需要使用List labels on an issue

    GET /repos/:owner/:repo/issues/:number/labels
    

    使用问题作为追索权有点奇怪,但这就是它的运作方式。问题和拉动请求曾经是过时的事情。

    之后确保您已准备好所有标签并将通知发送给回购。 我正在发送“成功”status to the last commit

    POST /repos/:owner/:repo/statuses/:sha 
    
    {
      "state": "success",
      "target_url": "https://example.com/build/status",
      "description": "Merge label found",
      "context": "review/labels"
    }
    

    注意"review/labels"行。这是一个重要的部分。

    第一次发送后,你应该去Repository - > Settings - > Branches - > YourBranchName-> Edit,然后点击带有您的上下文名称的复选框。因此,此状态必须执行“合并操作”。

    看起来应该是这样的: enter image description here

    其他阅读链接

相关问题