1
+ #! /usr/bin/groovy
2
+ /*
3
+ * Hibernate, Relational Persistence for Idiomatic Java
4
+ *
5
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
6
+ * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
7
+ */
8
+
9
+ /*
10
+ * See https://github.com/hibernate/hibernate-jenkins-pipeline-helpers
11
+ */
12
+
13
+
14
+ import org.hibernate.jenkins.pipeline.helpers.version.Version
15
+
16
+ // --------------------------------------------
17
+ // Global build configuration
18
+ env. PROJECT = " reactive"
19
+ env. JIRA_KEY = " HREACT"
20
+ def RELEASE_ON_PUSH = false // Set to `true` *only* on branches where you want a release on each push.
21
+
22
+ print " INFO: env.PROJECT = ${ env.PROJECT} "
23
+ print " INFO: env.JIRA_KEY = ${ env.JIRA_KEY} "
24
+ print " INFO: RELEASE_ON_PUSH = ${ RELEASE_ON_PUSH} "
25
+
26
+ // --------------------------------------------
27
+ // Build conditions
28
+
29
+ // Avoid running the pipeline on branch indexing
30
+ if (currentBuild. getBuildCauses(). toString(). contains(' BranchIndexingCause' )) {
31
+ print " INFO: Build skipped due to trigger being Branch Indexing"
32
+ currentBuild. result = ' NOT_BUILT'
33
+ return
34
+ }
35
+
36
+ def manualRelease = currentBuild. getBuildCauses(). toString(). contains( ' UserIdCause' )
37
+
38
+ // Only do automatic release on branches where we opted in
39
+ if ( ! manualRelease && ! RELEASE_ON_PUSH ) {
40
+ print " INFO: Build skipped because automated releases are disabled on this branch. See constant RELEASE_ON_PUSH in ci/release/Jenkinsfile"
41
+ currentBuild. result = ' NOT_BUILT'
42
+ return
43
+ }
44
+
45
+ // --------------------------------------------
46
+ // Reusable methods
47
+
48
+ def checkoutReleaseScripts () {
49
+ dir(' .release/scripts' ) {
50
+ checkout scmGit(branches : [[name : ' */main' ]], extensions : [],
51
+ userRemoteConfigs : [[credentialsId : ' ed25519.Hibernate-CI.github.com' ,
52
+ url : ' https://github.com/hibernate/hibernate-release-scripts.git' ]])
53
+ }
54
+ }
55
+
56
+ // --------------------------------------------
57
+ // Pipeline
58
+
59
+ pipeline {
60
+ agent {
61
+ label ' Worker&&Containers'
62
+ }
63
+ tools {
64
+ jdk ' OpenJDK 11 Latest'
65
+ }
66
+ options {
67
+ buildDiscarder logRotator(daysToKeepStr : ' 30' , numToKeepStr : ' 10' )
68
+ rateLimitBuilds(throttle : [count : 1 , durationName : ' day' , userBoost : true ])
69
+ disableConcurrentBuilds(abortPrevious : false )
70
+ preserveStashes()
71
+ }
72
+ parameters {
73
+ string(
74
+ name : ' RELEASE_VERSION' ,
75
+ defaultValue : ' ' ,
76
+ description : ' The version to be released, e.g. 2.4.0.Final. Mandatory for manual releases, to prevent mistakes.' ,
77
+ trim : true
78
+ )
79
+ string(
80
+ name : ' DEVELOPMENT_VERSION' ,
81
+ defaultValue : ' ' ,
82
+ description : ' The next version to be used after the release, e.g. 2.4.1-SNAPSHOT. If not set, determined automatically from the release version.' ,
83
+ trim : true
84
+ )
85
+ booleanParam(
86
+ name : ' RELEASE_DRY_RUN' ,
87
+ defaultValue : false ,
88
+ description : ' If true, just simulate the release, without pushing any commits or tags, and without uploading any artifacts or documentation.'
89
+ )
90
+ }
91
+ stages {
92
+ stage(' Release check' ) {
93
+ steps {
94
+ script {
95
+ checkoutReleaseScripts()
96
+
97
+ def currentVersion = Version . parseDevelopmentVersion( sh(
98
+ script : " .release/scripts/determine-current-version.sh ${ env.PROJECT} " ,
99
+ returnStdout : true
100
+ ). trim() )
101
+ echo " Workspace version: ${ currentVersion} "
102
+
103
+ def releaseVersion
104
+ def developmentVersion
105
+
106
+ if ( manualRelease ) {
107
+ echo " Release was requested manually"
108
+
109
+ if ( ! params. RELEASE_VERSION ) {
110
+ throw new IllegalArgumentException ( ' Missing value for parameter RELEASE_VERSION. This parameter must be set explicitly to prevent mistakes.' )
111
+ }
112
+ releaseVersion = Version . parseReleaseVersion( params. RELEASE_VERSION )
113
+
114
+ if ( ! releaseVersion. toString(). startsWith( currentVersion. family + ' .' ) ) {
115
+ throw new IllegalArgumentException ( " RELEASE_VERSION = $releaseVersion , which is different from the family of CURRENT_VERSION = $currentVersion . Did you make a mistake?" )
116
+ }
117
+ }
118
+ else {
119
+ echo " Release was triggered automatically"
120
+
121
+ // Avoid doing an automatic release for commits from a release
122
+ def lastCommitter = sh(script : ' git show -s --format=\' %an\' ' , returnStdout : true )
123
+ def secondLastCommitter = sh(script : ' git show -s --format=\' %an\' HEAD~1' , returnStdout : true )
124
+ if (lastCommitter == ' Hibernate-CI' && secondLastCommitter == ' Hibernate-CI' ) {
125
+ print " INFO: Automatic release skipped because last commits were for the previous release"
126
+ currentBuild. result = ' ABORTED'
127
+ return
128
+ }
129
+
130
+ releaseVersion = Version . parseReleaseVersion( sh(
131
+ script : " .release/scripts/determine-release-version.sh ${ currentVersion} " ,
132
+ returnStdout : true
133
+ ). trim() )
134
+ }
135
+ echo " Release version: ${ releaseVersion} "
136
+
137
+ if ( ! params. DEVELOPMENT_VERSION ) {
138
+ developmentVersion = Version . parseDevelopmentVersion( sh(
139
+ script : " .release/scripts/determine-development-version.sh ${ releaseVersion} " ,
140
+ returnStdout : true
141
+ ). trim() )
142
+ }
143
+ else {
144
+ developmentVersion = Version . parseDevelopmentVersion( params. DEVELOPMENT_VERSION )
145
+ }
146
+ echo " Development version: ${ developmentVersion} "
147
+
148
+ env. RELEASE_VERSION = releaseVersion. toString()
149
+ env. DEVELOPMENT_VERSION = developmentVersion. toString()
150
+ // Dry run is not supported at the moment
151
+ env. SCRIPT_OPTIONS = params. RELEASE_DRY_RUN ? " -d" : " "
152
+
153
+ // Determine version id to check if Jira version exists
154
+ // This step doesn't work for Hibernate Reactive (the project has been created with a different type on JIRA)
155
+ // sh ".release/scripts/determine-jira-version-id.sh ${env.JIRA_KEY} ${releaseVersion.withoutFinalQualifier}"
156
+ }
157
+ }
158
+ }
159
+ stage(' Publish release' ) {
160
+ steps {
161
+ script {
162
+ checkoutReleaseScripts()
163
+
164
+ configFileProvider([
165
+ configFile(fileId : ' release.config.ssh' , targetLocation : " ${ env.HOME} /.ssh/config" ),
166
+ configFile(fileId : ' release.config.ssh.knownhosts' , targetLocation : " ${ env.HOME} /.ssh/known_hosts" )
167
+ ]) {
168
+ withCredentials([
169
+ usernamePassword(credentialsId : ' ossrh.sonatype.org' , passwordVariable : ' OSSRH_PASSWORD' , usernameVariable : ' OSSRH_USER' ),
170
+ usernamePassword(credentialsId : ' gradle-plugin-portal-api-key' , passwordVariable : ' PLUGIN_PORTAL_PASSWORD' , usernameVariable : ' PLUGIN_PORTAL_USERNAME' ),
171
+ file(credentialsId : ' release.gpg.private-key' , variable : ' RELEASE_GPG_PRIVATE_KEY_PATH' ),
172
+ string(credentialsId : ' release.gpg.passphrase' , variable : ' RELEASE_GPG_PASSPHRASE' ),
173
+ gitUsernamePassword(credentialsId : ' username-and-token.Hibernate-CI.github.com' , gitToolName : ' Default' )
174
+ ]) {
175
+ sshagent([' ed25519.Hibernate-CI.github.com' , ' hibernate.filemgmt.jboss.org' , ' hibernate-ci.frs.sourceforge.net' ]) {
176
+ // performs documentation upload and Sonatype release
177
+ // push to github
178
+ sh " .release/scripts/publish.sh ${ env.SCRIPT_OPTIONS} ${ env.PROJECT} ${ env.RELEASE_VERSION} ${ env.DEVELOPMENT_VERSION} ${ env.GIT_BRANCH} "
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+ post {
187
+ always {
188
+ notifyBuildResult
notifySuccessAfterSuccess :
true ,
maintainers :
' [email protected] '
189
+ }
190
+ }
191
+ }
0 commit comments