Skip to content

Commit 9e7b7a2

Browse files
committed
[RelEng] Simplify input processing in release preparation pipeline
Unify the printing of processed/computed parameters with the other RelEng jobs (which is more compact). Enhance processing of the 'PREVIOUS_RELEASE_CANDIDATE_ID' parameter to - handle RC2a/b/c... builds - service versions
1 parent 9ab1b2c commit 9e7b7a2

File tree

1 file changed

+41
-49
lines changed

1 file changed

+41
-49
lines changed

JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile

Lines changed: 41 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
pipeline {
33
options {
44
timestamps()
5-
timeout(time: 60, unit: 'MINUTES')
5+
timeout(time: 120, unit: 'MINUTES')
66
buildDiscarder(logRotator(numToKeepStr:'5'))
77
skipDefaultCheckout()
88
}
@@ -18,63 +18,41 @@ pipeline {
1818
stage('Process Input') {
1919
steps {
2020
script {
21-
def nextVersionMatcher = params.NEXT_RELEASE_VERSION =~ /(?<major>\d+)\.(?<minor>\d+)/
21+
echo "DRY_RUN: ${DRY_RUN}"
22+
env.NEXT_RELEASE_VERSION = readParameter('NEXT_RELEASE_VERSION')
23+
def nextVersionMatcher = env.NEXT_RELEASE_VERSION =~ /(?<major>\d+)\.(?<minor>\d+)/
2224
if (!nextVersionMatcher.matches()) {
23-
error "Unexpected format for NEXT_RELEASE_VERSION: ${params.NEXT_RELEASE_VERSION}"
25+
error "Unexpected format for NEXT_RELEASE_VERSION: ${NEXT_RELEASE_VERSION}"
2426
}
25-
env.NEXT_RELEASE_VERSION_MAJOR = nextVersionMatcher.group('major')
26-
env.NEXT_RELEASE_VERSION_MINOR = nextVersionMatcher.group('minor')
27+
assignEnvVariable('NEXT_RELEASE_VERSION_MAJOR', nextVersionMatcher.group('major'))
28+
assignEnvVariable('NEXT_RELEASE_VERSION_MINOR', nextVersionMatcher.group('minor'))
2729
nextVersionMatcher = null // release matcher as it's not serializable
2830

29-
def previousVersionMatcher = params.PREVIOUS_RELEASE_CANDIDATE_ID =~ /(S|R)-(?<major>\d+)\.(?<minor>\d+)(?<kind>M1|M2|M3|RC1|RC2)?-(?<timestamp>\d{12})/
30-
if (!previousVersionMatcher.matches()) {
31-
error "Unexpected format for PREVIOUS_RELEASE_CANDIDATE_ID: ${params.PREVIOUS_RELEASE_CANDIDATE_ID}"
31+
env.PREVIOUS_RELEASE_CANDIDATE_ID = readParameter('PREVIOUS_RELEASE_CANDIDATE_ID')
32+
def previousIdMatcher = env.PREVIOUS_RELEASE_CANDIDATE_ID =~ /(S|R)-(?<major>\d+)\.(?<minor>\d+)(\.\d+)?(?<checkpoint>(M|RC)\d+[a-z]?)?-(?<date>\d{8})(?<time>\d{4})/
33+
if (!previousIdMatcher.matches()) {
34+
error "Unexpected format for PREVIOUS_RELEASE_CANDIDATE_ID: ${PREVIOUS_RELEASE_CANDIDATE_ID}"
3235
}
33-
env.PREVIOUS_RELEASE_VERSION_MAJOR = previousVersionMatcher.group('major')
34-
env.PREVIOUS_RELEASE_VERSION_MINOR = previousVersionMatcher.group('minor')
35-
env.PREVIOUS_RELEASE_VERSION = "${PREVIOUS_RELEASE_VERSION_MAJOR}.${PREVIOUS_RELEASE_VERSION_MINOR}"
36-
env.PREVIOUS_RELEASE_CANDIDATE_TAG = "${PREVIOUS_RELEASE_VERSION}" + previousVersionMatcher.group('kind')
37-
def previousReleaseTimestamp = previousVersionMatcher.group('timestamp')
38-
env.PREVIOUS_RELEASE_CANDIDATE_I_BUILD = "I${previousReleaseTimestamp.substring(0,8)}-${previousReleaseTimestamp.substring(8,12)}"
39-
previousVersionMatcher = null // release matcher as it's not serializable
36+
assignEnvVariable('PREVIOUS_RELEASE_VERSION_MAJOR', previousIdMatcher.group('major'))
37+
assignEnvVariable('PREVIOUS_RELEASE_VERSION_MINOR', previousIdMatcher.group('minor'))
38+
assignEnvVariable('PREVIOUS_RELEASE_VERSION', "${PREVIOUS_RELEASE_VERSION_MAJOR}.${PREVIOUS_RELEASE_VERSION_MINOR}")
39+
assignEnvVariable('PREVIOUS_RELEASE_CANDIDATE_TAG', "${PREVIOUS_RELEASE_VERSION}${previousIdMatcher.group('checkpoint')}")
40+
assignEnvVariable('PREVIOUS_RELEASE_CANDIDATE_I_BUILD', "I${previousIdMatcher.group('date')}-${previousIdMatcher.group('time')}")
41+
previousIdMatcher = null // release matcher as it's not serializable
4042

4143
//TODO: Read the dates from the calender instead of provide a structured document somewhere?
4244
// E.g. next to: https://github.com/eclipse-simrel/.github/blob/main/wiki/SimRel/2025-09.md
43-
def m1Date = parseDate(params.M1_DATE)
44-
def m2Date = parseDate(params.M2_DATE)
45-
def m3Date = parseDate(params.M3_DATE)
46-
def rc1Date = parseDate(params.RC1_DATE)
47-
def rc2Date = parseDate(params.RC2_DATE)
48-
def gaDate = parseDate(params.GA_DATE)
49-
if (!(m1Date < m2Date && m2Date < m3Date && m3Date < rc1Date && rc1Date < rc2Date && rc1Date < gaDate)) {
50-
error "Dates are not in strictly ascending order: ${params.M1_DATE}, ${params.M2_DATE}, ${params.M3_DATE}, ${params.RC1_DATE}, ${params.RC2_DATE}, ${params.GA_DATE}"
45+
def m1Date = parseDate(readParameter('M1_DATE'))
46+
def m2Date = parseDate(readParameter('M2_DATE'))
47+
def m3Date = parseDate(readParameter('M3_DATE'))
48+
def rc1Date = parseDate(readParameter('RC1_DATE'))
49+
def rc2Date = parseDate(readParameter('RC2_DATE'))
50+
def gaDate = parseDate(readParameter('GA_DATE'))
51+
if (!(m1Date < m2Date && m2Date < m3Date && m3Date < rc1Date && rc1Date < rc2Date && rc2Date < gaDate)) {
52+
error "Dates are not in strictly ascending order: ${M1_DATE}, ${M2_DATE}, ${M3_DATE}, ${RC1_DATE}, ${RC2_DATE}, ${GA_DATE}"
5153
}
52-
env.NEXT_RELEASE_YEAR = gaDate.year
53-
env.NEXT_RELEASE_MONTH = String.format("%02d", gaDate.monthValue)
54-
sh '''#!/bin/sh +x
55-
echo 'Input parameters read successfully'
56-
echo "DRY_RUN='$DRY_RUN'"
57-
echo ''
58-
echo "NEXT_RELEASE_VERSION='$NEXT_RELEASE_VERSION'"
59-
echo "NEXT_RELEASE_VERSION_MAJOR='$NEXT_RELEASE_VERSION_MAJOR'"
60-
echo "NEXT_RELEASE_VERSION_MINOR='$NEXT_RELEASE_VERSION_MINOR'"
61-
echo ''
62-
echo "PREVIOUS_RELEASE_CANDIDATE_ID='$PREVIOUS_RELEASE_CANDIDATE_ID'"
63-
echo "PREVIOUS_RELEASE_VERSION='$PREVIOUS_RELEASE_VERSION'"
64-
echo "PREVIOUS_RELEASE_VERSION_MAJOR='$PREVIOUS_RELEASE_VERSION_MAJOR'"
65-
echo "PREVIOUS_RELEASE_VERSION_MINOR='$PREVIOUS_RELEASE_VERSION_MINOR'"
66-
echo "PREVIOUS_RELEASE_CANDIDATE_TAG='$PREVIOUS_RELEASE_CANDIDATE_TAG'"
67-
echo "PREVIOUS_RELEASE_CANDIDATE_I_BUILD='$PREVIOUS_RELEASE_CANDIDATE_I_BUILD'"
68-
echo ''
69-
echo "M1_DATE='$M1_DATE'"
70-
echo "M2_DATE='$M2_DATE'"
71-
echo "M3_DATE='$M3_DATE'"
72-
echo "RC1_DATE='$RC1_DATE'"
73-
echo "RC2_DATE='$RC2_DATE'"
74-
echo "GA_DATE='$GA_DATE'"
75-
echo "NEXT_RELEASE_YEAR='$NEXT_RELEASE_YEAR'"
76-
echo "NEXT_RELEASE_MONTH='$NEXT_RELEASE_MONTH'"
77-
'''
54+
assignEnvVariable('NEXT_RELEASE_YEAR', gaDate.year.toString())
55+
assignEnvVariable('NEXT_RELEASE_MONTH', String.format("%02d", gaDate.monthValue))
7856
}
7957
}
8058
}
@@ -314,6 +292,20 @@ def githubAPI = null
314292

315293
// --- utility methods
316294

295+
@NonCPS
296+
def readParameter(String name) {
297+
//TODO: let jenkins trim the parameters
298+
def value = (params[name] ?: '').trim()
299+
println("${name}: ${value}")
300+
return value
301+
}
302+
303+
@NonCPS
304+
def assignEnvVariable(String name, String value) {
305+
env."${name}" = value
306+
println("${name}=${value}")
307+
}
308+
317309
@NonCPS
318310
def parseDate(String dateString) {
319311
return java.time.LocalDate.parse(dateString.trim()) // expects format 'yyyy-MM-dd'

0 commit comments

Comments
 (0)