jenkins-pipeline-shared-libraries/vars/pullrequest.groovy (36 lines of code) (raw):
/**
* This method add a comment to current PR (for either ghprb or Github Branch Source plugin)
*/
void postComment(String commentText, String githubTokenCredsId = "kie-ci3-token") {
if (!CHANGE_ID && !ghprbPullId) {
error "Pull Request Id variable (ghprbPullId or CHANGE_ID) is not set. Are you sure you are running with Github Branch Source plugin or ghprb plugin?"
}
def changeId = CHANGE_ID ?: ghprbPullId
def changeRepository = CHANGE_ID ? getAuthorAndRepoForPr() : ghprbGhRepository
String filename = "${util.generateHash(10)}.build.summary"
def jsonComment = [
body : commentText
]
writeJSON(json: jsonComment, file: filename)
sh "cat ${filename}"
withCredentials([string(credentialsId: githubTokenCredsId, variable: 'GITHUB_TOKEN')]) {
sh "curl -s -H \"Authorization: token ${GITHUB_TOKEN}\" -X POST -d '@${filename}' \"https://api.github.com/repos/${changeRepository}/issues/${changeId}/comments\""
}
sh "rm ${filename}"
}
String getAuthorAndRepoForPr() {
if (!env.CHANGE_FORK && !env.CHANGE_URL) {
error "CHANGE_FORK neither CHANGE_URL variables are set. Are you sure you're running with Github Branch Source plugin?"
}
def group = ''
def repository = ''
if (env.CHANGE_FORK) {
def parsedFork = env.CHANGE_FORK.split('/')
group = parsedFork[0]
if (parsedFork.length==2) {
repository = parsedFork[1]
}
}
String fullUrl = env.CHANGE_URL
String urlWithoutProtocol = fullUrl.split('://')[1]
String path = urlWithoutProtocol.substring(urlWithoutProtocol.indexOf('/'))
def parsedUrl = path.substring(1, path.indexOf('/pull/')).split('/')
return "${group?:parsedUrl[0]}/${repository?:parsedUrl[1]}"
}