如何使用API​​更新GitHub Pull Request Review的注释文本

时间:2018-01-24 11:23:30

标签: git github github-api

使用GitHub的Web UI,您可以编辑PR审核的审核摘要,例如在此屏幕截图中(请参阅带有“编辑审核摘要”工具提示的铅笔图标):

Example PR review

如何使用GitHub API执行此操作?

我浏览了documentation,但找不到办法做到这一点。我在使用用户界面进行更改时监控了页面上触发的网络服务调用,我发现了对https://api.github.com/repos/SonarSourceIT/pr-decoration/pull/3195/reviews/91117155/update的调用,因此我尝试使用curl执行相同操作:

$ curl -sL -u janos-ss:$token  https://api.github.com/repos/SonarSourceIT/pr-decoration/pull/3195/reviews/91117155/update -X POST -d @comment.json | jq . | tee response.json 
{
  "message": "Not Found",
  "documentation_url": "https://developer.github.com/v3"
}

我并不感到惊讶,因为URL看起来不像任何记录的API方法。

请注意,这与编辑评论不同。可以编辑评论(documented here),但我想编辑评论摘要,这是其他内容。

这可以使用REST API v3吗?我对hacky解决方案或使用Selenium或类似产品不感兴趣。我正在寻找一个干净的API解决方案,或者确认这对于当前的REST API v3来说实际上是不可能的。

更新

正如GitHub支持所证实的那样,今天使用REST API v3是不可能的。 (我确认接受的答案中的建议有效,我可能会将其用作解决方法。)

1 个答案:

答案 0 :(得分:2)

您可以使用GraphQL API v4使用updatePullRequestReview更新拉取请求审核:

  • 通过拉取请求编号和&amp ;;查找评论的查询得到评论id
  • 执行updatePullRequestReview
  • 的突变

您可以在the GraphQL explorer中测试以下内容:

query FindReview {
  repository(owner: "bertrandmartel", name: "speed-test-lib") {
    pullRequest(number: 46) {
      reviews(first: 100) {
        edges {
          node {
            id
          }
        }
      }
    }
  }
}

mutation UpdateReview {
  updatePullRequestReview(input: {pullRequestReviewId: "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3OTExNjM5NjI=", body: "some test"}) {
    pullRequestReview {
      updatedAt
    }
  }
}

您可以找到有关形成graphql call here

的其他信息

以下脚本使用& 请求评论列表,提取第一个和更新审核机构:

owner="SonarSourceIT"
name="pr-decoration"
pr=3195
access_token="YOUR_ACCESS_TOKEN"

# find reviews for PR - extract the first review ID
review_id=$(curl -s -H "Authorization: Token $access_token" \
     -d '{ "query": "query  { repository(owner: \"'$owner'\", name: \"'$name'\") { pullRequest(number: '$pr') { reviews(first: 100) { edges { node { id } } } } } }" }' \
     https://api.github.com/graphql | \
     jq -r '.data.repository.pullRequest.reviews.edges[0].node.id')

curl -s -H "Authorization: Token $access_token" \
     -d '{ "query": "mutation { updatePullRequestReview(input: {pullRequestReviewId: \"'$review_id'\", body: \"some test2\"}) { pullRequestReview { updatedAt } } }" }' \
     https://api.github.com/graphql

请注意,您还可以使用updatePullRequestReviewComment

更新拉取请求审核评论