我们如何知道在github中使用API​​批准或拒绝拉取请求?

时间:2017-05-24 13:17:35

标签: github github-api

我想知道Github API中是否有一个函数可以返回拉取请求的状态,无论是接受还是拒绝。这样的功能是否存在?

6 个答案:

答案 0 :(得分:2)

您可以get a single PR查看statemerged属性。如果已合并,则已接受。如果它已关闭且未合并,则可能被拒绝

实际上它可能不是被拒绝,而是由创作者关闭。我不确定是否可以检查其他用户(已拒绝)或其创建者是否已关闭(已拒绝 )。

答案 1 :(得分:1)

我也被这个问题所困扰。我很难在文档中找到相关信息。

选项A

我采用的策略是在review参数中将issues search endpointq限定符一起使用。

因此,在我的情况下,当我想查看分配给我的所有尚未审核的PR时,我会点击以下端点:https://github.com/api/v3/search/issues?q=is:open+is:pr+review-requested:jordan-bonitatis+review:none

其他review限定词包括approvedchanges_requested,如下所述:https://help.github.com/articles/searching-issues-and-pull-requests/#search-by-pull-request-review-status

选项B

如果您想查看给定PR的审阅状态,而不是像上面的示例那样按状态过滤列表,则可以点击pull requests reviews endpoint/repos/:owner/:repo/pulls/:number/reviews

这将返回PR的评论列表,每个评论都有一个state键。

请注意,给定的PR可能有多个带有冲突状态的评论。就像,如果teamMemberA批准了,但teamMemberB请求了更改。您必须遍历整个列表,并根据所有状态决定如何对待它。

答案 2 :(得分:0)

在官方Github API Documentation中,它显示有一个GET请求,如果已合并,则可以使用该字段merged_at。编辑:theres也是一个合并字段。

段: ... "merge_commit_sha": "e5bd3914e2e596debea16f433f57875b5b90bcd6", "merged": false, "mergeable": true, "merged_by": { "login": "octocat", "id": 1, "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false },

答案 3 :(得分:0)

我有类似的要求-在将PR合并到母版之前要知道PR是否已被批准。我为回购添加了一条规则,以确保合并之前必须批准每个PR。然后,使用API​​获取有关分支的详细信息时,有一个字段说明分支是否干净可以合并或阻塞。我用这种方法来管理应用程序中的内容。

 mergeable_state

答案 4 :(得分:0)

现在可以使用GraphQL

具体来说,如果mergeStateStatus枚举为BLOCKED,则拉取请求尚未获得批准,对于其他任何状态,该请求也将得到批准。

该枚举存在于PullRequest对象中。请注意,在发布时这是一个preview feature,因此必须具有适当的标题才能工作。在预览中使用GraphQL Explorer也会工作。

答案 5 :(得分:0)

根据存储库配置,您可以通过一种或另一种方式获得答案。以下示例使用 GraphQL API

案例 1:合并前需要 PR 审核

您可以在 reviewDecision 字段上查询给定存储库的 pullRequest

reviewDecision 属于 PullRequestReviewDecision 类型,是一个枚举,其值为 APPROVEDCHANGES_REQUESTEDREVIEW_REQUIRED

示例查询:

{
  repository(name: "gatsby", owner: "gatsbyjs") {
    pullRequest(number: 30371) {
      title
      reviewDecision
      url
    }
  }
}

回复:

{
  "data": {
    "repository": {
      "pullRequest": {
        "title": "chore(gatsby): don't terminate dev server if graphql wasn't imported from gatsby",
        "reviewDecision": "APPROVED",
        "url": "https://github.com/gatsbyjs/gatsby/pull/30371"
      }
    }
  }
}

案例 2:在合并之前不需要 PR 审查

如果存储库设置未指定需要审核,则无论是否获得批准,reviewDecision 都将为 null

在这种情况下,您可以遍历评论并检查状态。 state 属于 PullRequestReviewState 类型,是一个枚举,其值为 APPROVEDCHANGES_REQUESTEDCOMMENTEDDISMISSEDPENDING

示例查询:

{
  repository(name: "create-react-app", owner: "facebook") {
    pullRequest(number: 10003) {
      title
      reviewDecision
      url
      reviews(first: 100) {
        nodes {
          state
          author {
            login
          }
        }
      }
    }
  }
}

回复:

{
  "data": {
    "repository": {
      "pullRequest": {
        "title": "Update postcss packages",
        "reviewDecision": null,
        "url": "https://github.com/facebook/create-react-app/pull/10003",
        "reviews": {
          "nodes": [
            {
              "state": "APPROVED",
              "author": {
                "login": "jasonwilliams"
              }
            }
          ]
        }
      }
    }
  }
}

可以过滤审核以获得批准:reviews(first: 100, states: APPROVED)

请注意,如果审阅者批准并随后请求更改,则将返回两个审阅。

检查 PR statePullRequestState 类型)可能会产生误导:管理员用户可能绕过了合并更改所需的审查流程。