46

GitHub 的评论 API似乎允许您在拉取请求上创建评论,但前提是您在差异中提供特定的行号以进行评论。有没有办法对整个拉取请求创建评论,相当于在 GitHub 的 Web 界面的拉取请求屏幕底部键入?

4

4 回答 4

51

对的,这是可能的。您引用的 API 文档部分与行注释(对 pull req 中提交的特定行的注释)相关,文档说:

拉取请求评论评论是对统一差异的一部分的评论。这些与提交评论(直接应用于提交,在拉取请求视图之外)和问题评论(不引用统一差异的一部分)是分开的。

您需要的是这些问题评论,这些评论在本页顶部进行了说明:

拉取请求 API 允许您列出、查看、编辑、创建甚至合并拉取请求。可以通过问题评论 API 管理对拉取请求的评论。

所以,为了创建一个拉取请求评论,你实际上需要创建一个问题评论(因为拉取请求会创建一个问题来管理它)。问题评论页面证实了这一点:

问题评论 API 支持对问题和拉取请求列出、查看、编辑和创建评论。

因此,您需要提出的要求是:

POST /repos/:owner/:repo/issues/:number/comments

您如何知道要发布到哪个问题评论 URL?好吧,如果您查看获取单个拉取请求的响应,您会看到它包含一个名为 的属性_links,并且该属性具有一个嵌套comments属性。这是您应该用于阅读和创建拉取请求评论的 URL,与上面的 POST 请求中使用的相同。

于 2013-05-24T22:10:15.970 回答
13

根据 Ivan 的说法,我能够执行以下操作:

$ curl -s -H "Authorization: token ${ACCESS_TOKEN}" \
 -X POST -d '{"body": "Your Message to Comment"}' \
 "https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/issues/${PR_NUMBER}/comments"

或者

$ curl -s -u "${GITHUB_ACCOUNT} \
 -X POST -d '{"body": "Your Message to Comment"}' \
 "https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/issues/${PR_NUMBER}/comments"

带密码提示

于 2018-08-22T04:33:46.413 回答
8

使用GraphQL API v4,您需要使用pullrequestSchema 获取 Pull Request id 并在之后执行addComment突变:

query FindPullRequestID {
  repository(owner:"bertrandmartel", name:"ustream-dl") {
    pullRequest(number:2) {
      id
    }
  }
}

mutation AddPullRequestComment {
  addComment(input:{subjectId:"MDExOlB1bGxSZXF1ZXN0MTU0NzExOTA0",body: "test comment"}) {
    commentEdge {
        node {
        createdAt
        body
      }
    }
    subject {
      id
    }
  }
}

在资源管理器中尝试

于 2017-11-27T02:24:02.493 回答
0

使用这个 CURL:

curl -s -H "Authorization: token ghp_BWuQzbiDANEvrQP9vZbqa5LHBAxxIzwi2gM7" \
 -X POST -d '{"body":"Some Comments"}' \
 "https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}/reviews"

或 Python 代码:

import requests

headers = {
    'Authorization': 'token ghp_BWuQzbiDANEvrQP9vZbqa5LHBAxxIzwi2gM7',
}

data = '{"body":"Some Comments"}'

response = requests.post('https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}/reviews', headers=headers, data=data)

print (response.json())
于 2022-01-25T13:16:02.693 回答