通过Github API如何给Pull Request添加标签

178次阅读
没有评论

问题描述

想要通过Github API给Pull Request(PR)添加标签,根据GitHub API文档,用户可以使用POST请求来为问题添加标签。用户尝试了这个请求,但使用了PR编号代替,并在Jenkinsfile中编写了一个函数,以自动设置PR的标签。然而,用户得到了一个HTTP/1.1 400 Bad Request的响应,因此用户怀疑该请求可能无法用于为PR添加标签。

解决方案

以下解决方案适用于GitHub API,确保按照问题描述的操作顺序执行。

要通过GitHub API为Pull Request添加标签,你可以按照以下步骤进行操作:

  1. 构造正确的请求URL:使用以下URL模板构造请求URL,将其中的占位符替换为相应的值。
    https://api.github.com/repos/:owner/:repo/issues/:issue_number/labels
    其中,:owner是仓库所有者,:repo是仓库名称,:issue_number是问题或PR的编号。

  2. 准备请求头:在HTTP请求头中,添加适当的认证信息,可以使用OAuth令牌或Personal Access Token(PAT)来进行身份验证。

  3. 准备请求体:在请求体中以JSON格式提供标签信息。标签信息应该是一个字符串数组,每个标签都用双引号括起来。

以下是一个用于在Jenkinsfile中通过GitHub API为PR添加标签的示例函数:

def setLabels(String repository, int prNumber, List labels) {
    try {
        def labelsAsString = labels.collect { "\"$it\"" }.join(', ')

        def response = httpRequest(
            httpMode: 'POST',
            url: "https://api.github.com/repos/:owner/:repo/issues/${prNumber}/labels",
            authentication: 'ors_git_service_account',
            requestBody: "[${labelsAsString}]"
        )

        echo "Labels added successfully."
    } catch (e) {
        wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) {
            echo "\u001B[31mFailed to add labels: ${e.toString()}\u001B[0m"
        }
        throw e
    }
}

在上面的函数中,我们使用了httpRequest步骤来执行POST请求。我们构造了正确的URL,并在请求头中提供了适当的认证信息。在请求体中,我们将标签数组转换为一个字符串,每个标签都用双引号括起来。

请注意,函数中的:owner:repo应该替换为实际的仓库所有者和仓库名称。

总结

通过GitHub API为Pull Request添加标签可以通过发送正确格式的POST请求来实现。确保在请求体中以JSON格式提供标签信息,并正确构造URL和提供认证信息。使用示例函数作为Jenkinsfile中的参考,可以实现自动添加标签的操作。

正文完