我想知道Github API中是否有一个函数可以返回拉取请求的状态,无论是接受还是拒绝。这样的功能是否存在?
答案 0 :(得分:2)
您可以get a single PR查看state
和merged
属性。如果已合并,则已接受。如果它已关闭且未合并,则可能被拒绝。
实际上它可能不是被拒绝,而是由创作者关闭。我不确定是否可以检查其他用户(已拒绝)或其创建者是否已关闭(已拒绝 )。
答案 1 :(得分:1)
我也被这个问题所困扰。我很难在文档中找到相关信息。
选项A
我采用的策略是在review
参数中将issues search endpoint与q
限定符一起使用。
因此,在我的情况下,当我想查看分配给我的所有尚未审核的PR时,我会点击以下端点:https://github.com/api/v3/search/issues?q=is:open+is:pr+review-requested:jordan-bonitatis+review:none
其他review
限定词包括approved
和changes_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。
您可以在 reviewDecision
字段上查询给定存储库的 pullRequest
。
reviewDecision
属于 PullRequestReviewDecision 类型,是一个枚举,其值为 APPROVED
、CHANGES_REQUESTED
和 REVIEW_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"
}
}
}
}
如果存储库设置未指定需要审核,则无论是否获得批准,reviewDecision
都将为 null
。
在这种情况下,您可以遍历评论并检查状态。 state
属于 PullRequestReviewState 类型,是一个枚举,其值为 APPROVED
、CHANGES_REQUESTED
、COMMENTED
、DISMISSED
和 PENDING
。
示例查询:
{
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 state
(PullRequestState 类型)可能会产生误导:管理员用户可能绕过了合并更改所需的审查流程。