Ajout d'une méthode gitea.release()
This commit is contained in:
parent
97352aad87
commit
45ff14ce10
|
@ -0,0 +1,153 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
GITEA_RELEASE_PROJECT=${GITEA_RELEASE_PROJECT}
|
||||||
|
GITEA_RELEASE_ORG=${GITEA_RELEASE_ORG}
|
||||||
|
GITEA_RELEASE_BASE_URL=${GITEA_BASE_URL:-https://forge.cadoles.com}
|
||||||
|
GITEA_RELEASE_USERNAME=${GITEA_RELEASE_USERNAME}
|
||||||
|
GITEA_RELEASE_PASSWORD=${GITEA_RELEASE_PASSWORD}
|
||||||
|
GITEA_RELEASE_VERSION=${GITEA_RELEASE_VERSION}
|
||||||
|
GITEA_RELEASE_COMMITISH_TARGET=${GITEA_RELEASE_COMMITISH_TARGET}
|
||||||
|
GITEA_RELEASE_IS_DRAFT=${GITEA_RELEASE_IS_DRAFT:-false}
|
||||||
|
GITEA_RELEASE_IS_PRERELEASE=${GITEA_RELEASE_IS_PRERELEASE:-true}
|
||||||
|
GITEA_RELEASE_BODY=${GITEA_RELEASE_BODY}
|
||||||
|
GITEA_RELEASE_ATTACHMENTS=${GITEA_RELEASE_ATTACHMENTS}
|
||||||
|
|
||||||
|
function check_dependencies {
|
||||||
|
assert_command_available 'curl'
|
||||||
|
assert_command_available 'jq'
|
||||||
|
}
|
||||||
|
|
||||||
|
function assert_command_available {
|
||||||
|
local command=$1
|
||||||
|
local command_path=$(which $command)
|
||||||
|
|
||||||
|
if [ -z "$command_path" ]; then
|
||||||
|
echo "The '$command' command could not be found. Please install it before using this script." 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_environment {
|
||||||
|
assert_environment GITEA_RELEASE_PROJECT
|
||||||
|
assert_environment GITEA_RELEASE_ORG
|
||||||
|
assert_environment GITEA_RELEASE_BASE_URL
|
||||||
|
}
|
||||||
|
|
||||||
|
function source_env_file {
|
||||||
|
if [ ! -f '.env' ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
set -o allexport
|
||||||
|
source .env
|
||||||
|
set +o allexport
|
||||||
|
}
|
||||||
|
|
||||||
|
function assert_environment {
|
||||||
|
local name=$1
|
||||||
|
local value=${!name}
|
||||||
|
|
||||||
|
if [ -z "$value" ]; then
|
||||||
|
echo "The $"$name" environment variable is empty." 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function ask_credentials {
|
||||||
|
if [ -z "$GITEA_RELEASE_USERNAME" ]; then
|
||||||
|
echo -n "Username: "
|
||||||
|
read GITEA_RELEASE_USERNAME
|
||||||
|
|
||||||
|
fi
|
||||||
|
if [ -z "$GITEA_RELEASE_PASSWORD" ]; then
|
||||||
|
echo -n "Password: "
|
||||||
|
stty -echo
|
||||||
|
read GITEA_RELEASE_PASSWORD
|
||||||
|
stty echo
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function retrieve_version {
|
||||||
|
if [ ! -z "$GITEA_RELEASE_VERSION" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
set +e
|
||||||
|
GITEA_RELEASE_VERSION=$(git describe --abbrev=0 --tags 2>/dev/null)
|
||||||
|
GITEA_RELEASE_VERSION=${GITEA_RELEASE_VERSION}
|
||||||
|
set -e
|
||||||
|
}
|
||||||
|
|
||||||
|
function retrieve_commitish_target {
|
||||||
|
if [ ! -z "$GITEA_RELEASE_COMMITISH_TARGET" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
GITEA_RELEASE_COMMITISH_TARGET=$(git log -n 1 --pretty="format:%h")
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_release {
|
||||||
|
local payload={}
|
||||||
|
|
||||||
|
payload=$(json_set "$payload" body "\"$GITEA_RELEASE_BODY\"")
|
||||||
|
payload=$(json_set "$payload" draft $GITEA_RELEASE_IS_DRAFT)
|
||||||
|
payload=$(json_set "$payload" name "\"$GITEA_RELEASE_VERSION\"")
|
||||||
|
payload=$(json_set "$payload" prerelease $GITEA_RELEASE_IS_PRERELEASE)
|
||||||
|
payload=$(json_set "$payload" tag_name "\"${GITEA_RELEASE_VERSION:-$GITEA_RELEASE_COMMITISH_TARGET}\"")
|
||||||
|
payload=$(json_set "$payload" target_commitish "\"$GITEA_RELEASE_COMMITISH_TARGET\"")
|
||||||
|
|
||||||
|
gitea_api "/repos/$GITEA_RELEASE_ORG/$GITEA_RELEASE_PROJECT/releases" \
|
||||||
|
-H "Content-Type:application/json" \
|
||||||
|
-d "$payload"
|
||||||
|
}
|
||||||
|
|
||||||
|
function json_set {
|
||||||
|
local data=$1
|
||||||
|
local key=$2
|
||||||
|
local value=$3
|
||||||
|
echo $data | jq -cr --argjson v "$value" --arg k "$key" '.[$k] = $v'
|
||||||
|
}
|
||||||
|
|
||||||
|
function upload_release_attachments {
|
||||||
|
local release="$1"
|
||||||
|
local release_id=$(echo "$release" | jq -r .id)
|
||||||
|
|
||||||
|
if [ -z "$GITEA_RELEASE_ATTACHMENTS" ]; then
|
||||||
|
set +e
|
||||||
|
GITEA_RELEASE_ATTACHMENTS="$(ls release/*.{tar.gz,zip} 2>/dev/null)"
|
||||||
|
set -e
|
||||||
|
fi
|
||||||
|
|
||||||
|
for file in $GITEA_RELEASE_ATTACHMENTS; do
|
||||||
|
local filename=$(basename "$file")
|
||||||
|
gitea_api "/repos/$GITEA_RELEASE_ORG/$GITEA_RELEASE_PROJECT/releases/$release_id/assets?name=$filename" \
|
||||||
|
-H "Content-Type:multipart/form-data" \
|
||||||
|
-F "attachment=@$file"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function gitea_api {
|
||||||
|
local path=$1
|
||||||
|
local args=${@:2}
|
||||||
|
|
||||||
|
curl -L \
|
||||||
|
--fail \
|
||||||
|
-u "$GITEA_RELEASE_USERNAME:$GITEA_RELEASE_PASSWORD" \
|
||||||
|
${args} \
|
||||||
|
"$GITEA_RELEASE_BASE_URL/api/v1$path"
|
||||||
|
}
|
||||||
|
|
||||||
|
function main {
|
||||||
|
check_dependencies
|
||||||
|
source_env_file
|
||||||
|
check_environment
|
||||||
|
ask_credentials
|
||||||
|
retrieve_commitish_target
|
||||||
|
retrieve_version
|
||||||
|
local release=$(create_release)
|
||||||
|
upload_release_attachments "$release"
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
|
@ -3,7 +3,7 @@ def commentPullRequest(String repo, String issueId, String comment, Integer comm
|
||||||
withCredentials([
|
withCredentials([
|
||||||
string(credentialsId: 'GITEA_JENKINS_PERSONAL_TOKEN', variable: 'GITEA_TOKEN'),
|
string(credentialsId: 'GITEA_JENKINS_PERSONAL_TOKEN', variable: 'GITEA_TOKEN'),
|
||||||
]) {
|
]) {
|
||||||
writeFile(file: ".prComment", text: comment)
|
writeFile(file: '.prComment', text: comment)
|
||||||
sh """#!/bin/bash
|
sh """#!/bin/bash
|
||||||
set -xeo pipefail
|
set -xeo pipefail
|
||||||
|
|
||||||
|
@ -37,4 +37,62 @@ def commentPullRequest(String repo, String issueId, String comment, Integer comm
|
||||||
fi
|
fi
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Effectue une "release" sur Gitea pour le <ORG>/<PROJET> 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue