首页 > 解决方案 > Github API GET Approved Pull Request 评论列表

问题描述

我正在使用 Github API 端点为评论列表开发 Github Action,但它返回整个历史记录,包括解雇和评论,但我唯一需要的是状态为“已批准”的那些。

问题是,如果 PR 有超过 100 个审查对象(每页最多 100 个),我无法找到将在下一页上的已批准对象,因为它按时间顺序返回。

有没有其他方法可以让拉取请求审查获得批准状态?

我的代码如下:

async function evaluateReviews() {
  const result = await octokit.request('GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews', {
    owner: owner,
    repo: repo,
    pull_number: pullNumber
  });

  const numberOfApprovalsRequired = core.getInput('number-of-approvals');
  const reviews = result.data
  var approvals = 0

  reviews.forEach((item, i) => {
    if (item.state == "APPROVED") {
      approvals += 1;
    }
  });

  if (approvals >= numberOfApprovalsRequired) {
    addApprovedLabel();
  }
}

标签: javascriptgithubgithub-apigithub-actions

解决方案


我在这里发布答案,因此它可能会帮助遇到同样问题的人。

我在 Github 支持上打开了一张票,他们回答说仅检索已批准的拉取请求审查的端点无法通过 REST API 获得,但是,我可以使用他们的 GraphQL API 获得计数。

通过使用 GraphQL 将之前的请求更改为新请求,我能够准确地获得所需的内容。

这是代码。

async function evaluateReviews() {
  try {
    const approvedResponse = await octokit.graphql(`
      query($name: String!, $owner: String!, $pull_number: Int!) {
        repository(name: $name, owner: $owner) {
          pullRequest(number: $pull_number) {
            reviews(states: APPROVED) {
              totalCount
            }
          }
        }
      }
      `, {
        "name": name,
        "owner": owner,
        "pull_number": pullNumber
      });
      const approvalsRequired = core.getInput('number-of-approvals');
      const approvals = approvedResponse.repository.pullRequest.reviews.totalCount
      if (approvals >= approvalsRequired) {
        addApprovedLabel();
      }
    } catch (error) {
      console.log(`ERROR: ${error}`);
    }
}

参考:

拉取请求审查对象

拉取请求审查状态对象

GitHub GraphQL 资源管理器

GitHub GraphQL Explorer 上的示例:

{
  repository(name: "fetch", owner: "github") {
    pullRequest(number: 913) {
      reviews(states: APPROVED) {
        totalCount
      }
    }
  }
}

回复:

{
  "data": {
    "repository": {
      "pullRequest": {
        "reviews": {
          "totalCount": 3
        }
      }
    }
  }
}

推荐阅读