2023-09-21 12:20:21 -04:00
|
|
|
#! /usr/bin/groovy
|
|
|
|
/*
|
|
|
|
* Hibernate, Relational Persistence for Idiomatic Java
|
|
|
|
*
|
|
|
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
|
|
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* See https://github.com/hibernate/hibernate-jenkins-pipeline-helpers
|
|
|
|
*/
|
|
|
|
@Library('hibernate-jenkins-pipeline-helpers@1.5') _
|
|
|
|
|
|
|
|
// Avoid running the pipeline on branch indexing
|
|
|
|
if (currentBuild.getBuildCauses().toString().contains('BranchIndexingCause')) {
|
|
|
|
print "INFO: Build skipped due to trigger being Branch Indexing"
|
2023-10-06 08:10:51 -04:00
|
|
|
currentBuild.result = 'NOT_BUILT'
|
2023-09-21 12:20:21 -04:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
env.PROJECT = "orm"
|
|
|
|
env.JIRA_KEY = "HHH"
|
|
|
|
|
|
|
|
pipeline {
|
|
|
|
agent {
|
|
|
|
label 'Worker&&Containers'
|
|
|
|
}
|
|
|
|
tools {
|
|
|
|
jdk 'OpenJDK 11 Latest'
|
|
|
|
}
|
|
|
|
options {
|
|
|
|
buildDiscarder logRotator(daysToKeepStr: '30', numToKeepStr: '10')
|
|
|
|
rateLimitBuilds(throttle: [count: 1, durationName: 'day', userBoost: true])
|
|
|
|
disableConcurrentBuilds(abortPrevious: false)
|
|
|
|
preserveStashes()
|
|
|
|
}
|
|
|
|
parameters {
|
|
|
|
string(
|
|
|
|
name: 'RELEASE_VERSION',
|
|
|
|
defaultValue: '',
|
|
|
|
description: 'The version to be released, e.g. 6.2.1.Final.',
|
|
|
|
trim: true
|
|
|
|
)
|
|
|
|
string(
|
|
|
|
name: 'DEVELOPMENT_VERSION',
|
|
|
|
defaultValue: '',
|
|
|
|
description: 'The next version to be used after the release, e.g. 6.2.2-SNAPSHOT.',
|
|
|
|
trim: true
|
|
|
|
)
|
|
|
|
booleanParam(
|
|
|
|
name: 'RELEASE_DRY_RUN',
|
|
|
|
defaultValue: false,
|
|
|
|
description: 'If true, just simulate the release, without pushing any commits or tags, and without uploading any artifacts or documentation.'
|
|
|
|
)
|
|
|
|
}
|
|
|
|
stages {
|
|
|
|
stage('Release check') {
|
|
|
|
steps {
|
|
|
|
script {
|
2023-10-04 18:44:02 -04:00
|
|
|
// Avoid doing a release for commits from a release
|
2023-10-06 07:05:00 -04:00
|
|
|
def lastCommitter = sh(script: 'git show -s --format=\'%an\'', returnStdout: true).trim()
|
|
|
|
def secondLastCommitter = sh(script: 'git show -s --format=\'%an\' HEAD~1', returnStdout: true).trim()
|
2023-10-04 18:44:02 -04:00
|
|
|
if (lastCommitter == 'Hibernate-CI' && secondLastCommitter == 'Hibernate-CI') {
|
2023-10-06 07:05:00 -04:00
|
|
|
print "INFO: Release skipped because last commits were for the previous release"
|
2023-10-12 11:07:34 -04:00
|
|
|
currentBuild.getRawBuild().getExecutor().interrupt(Result.NOT_BUILT)
|
|
|
|
sleep(1) // Interrupt is not blocking and does not take effect immediately.
|
2023-10-04 18:44:02 -04:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2023-09-21 12:20:21 -04:00
|
|
|
dir('.release/scripts') {
|
|
|
|
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'ed25519.Hibernate-CI.github.com', url: 'https://github.com/hibernate/hibernate-release-scripts.git']])
|
|
|
|
}
|
|
|
|
// Determine version information for release process
|
|
|
|
env.CURRENT_VERSION = sh(
|
|
|
|
script: ".release/scripts/determine-current-version.sh ${env.PROJECT}",
|
|
|
|
returnStdout: true
|
|
|
|
).trim()
|
|
|
|
|
|
|
|
if ( params.RELEASE_VERSION == null || params.RELEASE_VERSION.isEmpty() ) {
|
|
|
|
env.RELEASE_VERSION = sh(
|
|
|
|
script: ".release/scripts/determine-release-version.sh ${env.CURRENT_VERSION}",
|
|
|
|
returnStdout: true
|
|
|
|
).trim()
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
env.RELEASE_VERSION = params.RELEASE_VERSION
|
|
|
|
}
|
|
|
|
if ( params.DEVELOPMENT_VERSION == null || params.DEVELOPMENT_VERSION.isEmpty() ) {
|
|
|
|
env.DEVELOPMENT_VERSION = sh(
|
|
|
|
script: ".release/scripts/determine-development-version.sh ${env.RELEASE_VERSION}",
|
|
|
|
returnStdout: true
|
|
|
|
).trim()
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
env.DEVELOPMENT_VERSION = params.DEVELOPMENT_VERSION
|
|
|
|
}
|
|
|
|
env.VERSION_BASIS = sh(
|
|
|
|
script: ".release/scripts/determine-version-basis.sh ${env.RELEASE_VERSION}",
|
|
|
|
returnStdout: true
|
|
|
|
).trim()
|
|
|
|
env.VERSION_FAMILY = sh(
|
|
|
|
script: ".release/scripts/determine-version-family.sh ${env.RELEASE_VERSION}",
|
|
|
|
returnStdout: true
|
|
|
|
).trim()
|
|
|
|
env.NEXT_VERSION_BASIS = sh(
|
|
|
|
script: ".release/scripts/determine-version-basis.sh ${env.DEVELOPMENT_VERSION}",
|
|
|
|
returnStdout: true
|
|
|
|
).trim()
|
|
|
|
env.SCRIPT_OPTIONS = params.RELEASE_DRY_RUN ? "-d" : ""
|
|
|
|
echo "Workspace version: ${env.CURRENT_VERSION}"
|
|
|
|
echo "Release version: ${env.RELEASE_VERSION}"
|
|
|
|
echo "Development version: ${env.DEVELOPMENT_VERSION}"
|
|
|
|
echo "Version family: ${env.VERSION_FAMILY}"
|
|
|
|
|
|
|
|
// Determine version id to check if Jira version exists
|
|
|
|
sh(script: ".release/scripts/determine-jira-version-id.sh ${env.JIRA_KEY} ${env.VERSION_BASIS}", returnStdout: true)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stage('Release prepare') {
|
|
|
|
steps {
|
|
|
|
script {
|
|
|
|
dir('.release/scripts') {
|
|
|
|
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'ed25519.Hibernate-CI.github.com', url: 'https://github.com/hibernate/hibernate-release-scripts.git']])
|
|
|
|
}
|
|
|
|
configFileProvider([configFile(fileId: 'release.config.ssh', targetLocation: "${env.HOME}/.ssh/config"), configFile(fileId: 'release.config.ssh.knownhosts', targetLocation: "${env.HOME}/.ssh/known_hosts")]) {
|
|
|
|
withCredentials([
|
|
|
|
usernamePassword(credentialsId: 'ossrh.sonatype.org', passwordVariable: 'OSSRH_PASSWORD', usernameVariable: 'OSSRH_USER'),
|
|
|
|
usernamePassword(credentialsId: 'gradle-plugin-portal-api-key', passwordVariable: 'PLUGIN_PORTAL_PASSWORD', usernameVariable: 'PLUGIN_PORTAL_USERNAME'),
|
|
|
|
file(credentialsId: 'release.gpg.private-key', variable: 'RELEASE_GPG_PRIVATE_KEY_PATH'),
|
|
|
|
string(credentialsId: 'release.gpg.passphrase', variable: 'RELEASE_GPG_PASSPHRASE')
|
|
|
|
]) {
|
|
|
|
sshagent(['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'hibernate-ci.frs.sourceforge.net']) {
|
|
|
|
// set release version
|
|
|
|
// update changelog from JIRA
|
|
|
|
// tags the version
|
|
|
|
// changes the version to the provided development version
|
|
|
|
sh ".release/scripts/prepare-release.sh ${env.PROJECT} ${env.RELEASE_VERSION} ${env.DEVELOPMENT_VERSION}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stage('Publish release') {
|
|
|
|
steps {
|
|
|
|
script {
|
|
|
|
dir('.release/scripts') {
|
|
|
|
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'ed25519.Hibernate-CI.github.com', url: 'https://github.com/hibernate/hibernate-release-scripts.git']])
|
|
|
|
}
|
|
|
|
configFileProvider([configFile(fileId: 'release.config.ssh', targetLocation: "${env.HOME}/.ssh/config"), configFile(fileId: 'release.config.ssh.knownhosts', targetLocation: "${env.HOME}/.ssh/known_hosts")]) {
|
|
|
|
withCredentials([
|
|
|
|
usernamePassword(credentialsId: 'ossrh.sonatype.org', passwordVariable: 'OSSRH_PASSWORD', usernameVariable: 'OSSRH_USER'),
|
|
|
|
usernamePassword(credentialsId: 'gradle-plugin-portal-api-key', passwordVariable: 'PLUGIN_PORTAL_PASSWORD', usernameVariable: 'PLUGIN_PORTAL_USERNAME'),
|
2023-10-04 13:03:15 -04:00
|
|
|
file(credentialsId: 'release.gpg.private-key', variable: 'RELEASE_GPG_PRIVATE_KEY_PATH'),
|
2023-10-04 18:44:02 -04:00
|
|
|
string(credentialsId: 'release.gpg.passphrase', variable: 'RELEASE_GPG_PASSPHRASE'),
|
|
|
|
gitUsernamePassword(credentialsId: 'username-and-token.Hibernate-CI.github.com', gitToolName: 'Default')
|
2023-09-21 12:20:21 -04:00
|
|
|
]) {
|
|
|
|
sshagent(['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'hibernate-ci.frs.sourceforge.net']) {
|
|
|
|
// performs documentation upload and Sonatype release
|
|
|
|
// push to github
|
2023-10-04 13:03:15 -04:00
|
|
|
sh ".release/scripts/publish.sh ${env.SCRIPT_OPTIONS} ${env.PROJECT} ${env.RELEASE_VERSION} ${env.DEVELOPMENT_VERSION}"
|
2023-09-21 12:20:21 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stage('Website release') {
|
|
|
|
steps {
|
|
|
|
script {
|
|
|
|
dir('.release/scripts') {
|
|
|
|
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'ed25519.Hibernate-CI.github.com', url: 'https://github.com/hibernate/hibernate-release-scripts.git']])
|
|
|
|
}
|
|
|
|
configFileProvider([configFile(fileId: 'release.config.ssh', targetLocation: "${env.HOME}/.ssh/config"), configFile(fileId: 'release.config.ssh.knownhosts', targetLocation: "${env.HOME}/.ssh/known_hosts")]) {
|
2023-10-04 18:44:02 -04:00
|
|
|
withCredentials([
|
|
|
|
gitUsernamePassword(credentialsId: 'username-and-token.Hibernate-CI.github.com', gitToolName: 'Default')
|
|
|
|
]) {
|
|
|
|
sshagent( ['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'hibernate-ci.frs.sourceforge.net'] ) {
|
|
|
|
dir( '.release/hibernate.org' ) {
|
|
|
|
checkout scmGit(
|
|
|
|
branches: [[name: '*/production']],
|
|
|
|
extensions: [],
|
|
|
|
userRemoteConfigs: [[credentialsId: 'ed25519.Hibernate-CI.github.com', url: 'https://github.com/hibernate/hibernate.org.git']]
|
|
|
|
)
|
2023-10-04 18:44:02 -04:00
|
|
|
sh "../scripts/website-release.sh ${env.SCRIPT_OPTIONS} ${env.PROJECT} ${env.RELEASE_VERSION}"
|
2023-10-04 18:44:02 -04:00
|
|
|
}
|
2023-09-21 12:20:21 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stage('GitHub release') {
|
|
|
|
steps {
|
|
|
|
script {
|
|
|
|
dir('.release/scripts') {
|
|
|
|
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'ed25519.Hibernate-CI.github.com', url: 'https://github.com/hibernate/hibernate-release-scripts.git']])
|
|
|
|
}
|
|
|
|
withCredentials([string(credentialsId: 'Hibernate-CI.github.com', variable: 'GITHUB_API_TOKEN')]) {
|
|
|
|
sh ".release/scripts/github-release.sh ${env.SCRIPT_OPTIONS} ${env.PROJECT} ${env.RELEASE_VERSION}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
post {
|
|
|
|
always {
|
|
|
|
configFileProvider([configFile(fileId: 'job-configuration.yaml', variable: 'JOB_CONFIGURATION_FILE')]) {
|
|
|
|
notifyBuildResult maintainers: (String) readYaml(file: env.JOB_CONFIGURATION_FILE).notification?.email?.recipients
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|