在拉取请求上创建评论。

55

GitHub的评论API似乎允许您在拉取请求上创建评论,但前提是您需要提供要在差异中评论的特定行号。是否有一种方法可以在整个拉取请求上创建评论,类似于在GitHub Web界面中在底部键入评论的相应位置?


我无法使用在标头中发送的OAuth2令牌进行评论,但是可以通过在POST请求中使用“-u"<user_name>"”成功地执行此操作。 - bennettbuchanan
在 GitHub 工作流中,有一个名为“comment on PR”的操作:https://github.com/unsplash/comment-on-pr - koppor
5个回答

59

是的,这是可能的。你所引用的API文档部分与行注释有关(对拉取请求中特定行的注释),文档如下:

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

你需要的是那些问题评论,在此页面顶部有解释:

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

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

“问题评论 API 支持在问题和拉取请求上列出、查看、编辑和创建评论。”
因此,您需要进行的 请求 是:
POST /repos/:owner/:repo/issues/:number/comments

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

1
哦!我不知道拉取请求是问题的一种变体。我认为这将非常有效。谢谢! - cbmanica
2
可能对其他人有帮助的一点提示是... 应用程序无法评论问题。 用户必须评论问题。 因此,在尝试创建评论时,您不能使用客户端ID和客户端密钥进行身份验证。 - James Ward
嘿,你有没有办法处理多行注释的情况? - undefined

18

根据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"

需要密码提示


有没有关于如何处理多行文本的想法?比如,如果评论有多行输入。 - undefined

9
使用 GraphQL API v4,您需要使用 pullrequest 模式获取拉取请求 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
    }
  }
}
在浏览器中试试此链接可以帮助您查询GitHub上指定代码库的pull request编号,并添加相应评论。

1
请使用以下CURL命令:
curl -s -H "Authorization: token your_token_here" \
 -X POST -d '{"body":"Some Comments"}' \
 "https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}/reviews"

或者Python代码:
import requests

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

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())

0

对于那些对GitHub上不同类型的评论感到困惑的人,请阅读以下解释。

对于任何拉取请求,GitHub提供三种评论视图:对整个拉取请求的评论、对拉取请求中特定行的评论以及对拉取请求中特定提交的评论。

以下Python脚本适用于对整个拉取请求的评论

import requests
        
headers = {
    'Authorization': 'Bearer {token}'.format(token=<<TOKEN>>),
    'Accept' : 'application/vnd.github+json'
}
        
comment = """
    <<some_comment>>
"""
    
data = {
    'body': comment
}
    
requests.post('https://api.github.com/repos/{owner}/{repo}/issues/{pr_number}/comments'.format(owner=<<repo_owner>>, repo=<<repo_name>>, pr_number=<<pr_number>>), headers=headers, data=json.dumps(data))

如果您需要官方页面,请查看this


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接