22pipeline {
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
318310def parseDate(String dateString) {
319311 return java.time.LocalDate.parse(dateString.trim()) // expects format 'yyyy-MM-dd'
0 commit comments