【问题标题】:How to know if a git pull request is approved via github api如何通过 github api 知道 git pull 请求是否被批准
【发布时间】:2021-03-24 01:27:31
【问题描述】:

基于此 api: https://docs.github.com/en/rest/reference/pulls#get-a-pull-request

我可以使用响应中的 state、mergable 或 rebaseable 字段来找出某个审阅者批准了我的 PR。

我也在专门寻找用例,如果最低要求 2 个批准评论(如下图所示)并且拉取请求只有1 批准,国家应该仍然是未批准的,一旦有至少 2 个批准的审查者,应该返回批准。有没有我可以用于这个用例的字段?

【问题讨论】:

标签: github github-api


【解决方案1】:

有两种选择。

  1. 您请求 PR 的所有审核并自行维护批准/审核请求的逻辑。 Link to docs
  2. 我个人使用 GitHub 挂钩,在提交的每条评论中,我都会检查是否是 APPROVE,然后使用 this advanced query syntaxsearch 是否批准此 PR。

查看this repository 获取完整的代码示例(尤其是this function

【讨论】:

  • 2.搜索 API 可以返回审批状态的缓存值。如果您批准了 PR,然后立即使用搜索来评估它是否被批准,它有时会返回以前的状态。你找到了优雅处理这个案子的方法吗?
【解决方案2】:

使用 GitHub GraphQL API,您可以在 pullRequest 字段中查询给定存储库的 reviewDecision

如果需要 2 条评论并且 PR 恰好获得 1 条批准,reviewDecision 的值将是 REVIEW_REQUIRED

reviewDecisionPullRequestReviewDecision 类型,一个枚举值APPROVEDCHANGES_REQUESTEDREVIEW_REQUIRED

查询示例:

{
  repository(name: "gatsby", owner: "gatsbyjs") {
    pullRequest(number: 30371) {
      title
      reviewDecision
      state
      reviews(first: 100) {
        nodes {
          state
          author {
            login
          }
        }
      }
    }
  }
}

回复:

{
  "data": {
    "repository": {
      "pullRequest": {
        "title": "chore(gatsby): don't terminate dev server if graphql wasn't imported from gatsby",
        "reviewDecision": "APPROVED",
        "state": "MERGED",
        "reviews": {
          "nodes": [
            {
              "state": "APPROVED",
              "author": {
                "login": "LekoArts"
              }
            }
          ]
        }
      }
    }
  }
}

根据您的 repo 设置,检查 PR 是否已获得批准可能有点复杂(例如,reviewDecision 返回 null,如果未强制执行审核并且 PR 已获得一项批准但已获得另一项审核已请求并正在等待中)。您可能需要遍历reviews 才能找到您需要的内容。

state 也可能有用。它的类型为PullRequestReviewState,一个枚举值APPROVEDCHANGES_REQUESTEDCOMMENTEDDISMISSEDPENDING

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2012-04-15
    • 2015-12-13
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多