def commentPullRequest(String repo, String issueId, String comment, Integer commentIndex = 0) { comment = comment.replaceAll('"', '\\"') withCredentials([ string(credentialsId: 'GITEA_JENKINS_PERSONAL_TOKEN', variable: 'GITEA_TOKEN'), ]) { writeFile(file: '.prComment', text: comment) sh """#!/bin/bash set -xeo pipefail # Récupération si il existe du commentaire existant previous_comment_id=\$(curl -v --fail \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ https://forge.cadoles.com/api/v1/repos/${repo}/issues/${issueId}/comments \ | jq -c '[ .[] | select(.user.login=="jenkins") ] | .[${commentIndex}] | .id' \ ) # Génération du payload pour l'API Gitea echo '{}' | jq -c --rawfile body .prComment '.body = \$body' > payload.json if [[ "\$previous_comment_id" == "null" ]]; then # Création du commentaire via l'API Gitea curl -v --fail \ -XPOST \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d @payload.json \ https://forge.cadoles.com/api/v1/repos/${repo}/issues/${issueId}/comments else # Modification du commentaire existant curl -v --fail \ -XPATCH \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d @payload.json \ https://forge.cadoles.com/api/v1/repos/${repo}/issues/comments/\$previous_comment_id fi """ } } // Effectue une "release" sur Gitea pour le / donné. def release(String credentialsId, String org, String project, Map options = [:]) { def isDraft = options.get('isDraft', false) def baseUrl = options.get('baseUrl', 'https://forge.cadoles.com') def defaultVersion = sh(returnStdout: true, script: 'git describe --always').trim() def releaseVersion = options.get('releaseVersion', defaultVersion) def commitishTarget = options.get('commitishTarget', env.GIT_COMMIT) def defaultIsPrerelease = true try { sh(script: "git describe --exact-match ${GIT_COMMIT}") defaultIsPrerelease = false } catch (err) { println "Could not find tag associated with commit '${GIT_COMMIT}' ! Using 'prerelease' as default." } def isPrerelease = options.get('isPrerelease', defaultIsPrerelease) def body = options.get('body', '') def attachments = options.get('attachments', []) def scriptTempDir = ".gitea-release-script-${System.currentTimeMillis()}" sh("mkdir -p '${scriptTempDir}'") def giteaReleaseScript = "${scriptTempDir}/gitea-release.sh" def giteaReleaseScriptContent = libraryResource 'com/cadoles/gitea/gitea-release.sh' writeFile file: giteaReleaseScript, text:giteaReleaseScriptContent sh("chmod +x '${giteaReleaseScript}'") try { withCredentials([ usernamePassword( credentialsId: credentialsId, usernameVariable: 'GITEA_RELEASE_USERNAME', passwordVariable: 'GITEA_RELEASE_PASSWORD' ) ]) { sh """ export GITEA_RELEASE_PROJECT="${project}" export GITEA_RELEASE_ORG="${org}" export GITEA_RELEASE_BASE_URL="${baseUrl}" export GITEA_RELEASE_VERSION="${releaseVersion}" export GITEA_RELEASE_COMMITISH_TARGET="${commitishTarget}" export GITEA_RELEASE_IS_DRAFT="${isDraft}" export GITEA_RELEASE_IS_PRERELEASE="${isPrerelease}" export GITEA_RELEASE_BODY="${body}" export GITEA_RELEASE_ATTACHMENTS="${attachments.join(' ')}" ${giteaReleaseScript} """ } } finally { dir(scriptTempDir) { deleteDir() } } }