diff --git a/JenkinsJobs/Releng/FOLDER.groovy b/JenkinsJobs/Releng/FOLDER.groovy
index bc6a3ee4873..1afd636dbb2 100644
--- a/JenkinsJobs/Releng/FOLDER.groovy
+++ b/JenkinsJobs/Releng/FOLDER.groovy
@@ -82,12 +82,7 @@ Useful for debugging and to very that the pipeline behaves as intended.
''')
stringParam('NEXT_RELEASE_VERSION', null, 'Version of the release to prepare, for example: 4.37')
stringParam('PREVIOUS_RELEASE_CANDIDATE_ID', null, 'Id of the current release-candiate for the previous release, for example: S-4.36RC2-202505281830')
- stringParam('M1_DATE', null, 'Milestone 1 end date in the format yyyy-mm-dd, for example: 2025-07-04')
- stringParam('M2_DATE', null, 'Milestone 2 end date in the format yyyy-mm-dd, for example: 2025-07-25')
- stringParam('M3_DATE', null, 'Milestone 3 end date in the format yyyy-mm-dd, for example: 2025-08-15')
- stringParam('RC1_DATE', null, 'Release-Candidate 1 end date in the format yyyy-mm-dd, for example: 2025-08-22')
- stringParam('RC2_DATE', null, 'Release-Candidate 2 end date in the format yyyy-mm-dd, for example: 2025-08-29')
- stringParam('GA_DATE', null, 'Final general availability release date in the format yyyy-mm-dd, for example: 2025-09-10')
+ stringParam('NEXT_SIMREL_NAME', null, 'The name of the Simultanious Release that is targeted by the prepared release in the format yyyy-mm, for example: 2026-03')
stringParam('NEXT_JAVA_RELEASE_DATE', null, 'Release date of the next Java version, if it is released shortly after the Eclipse release (i.e. shortly after the GA_DATE specified above, usual for odd release versions), else left blank (usual for even releases). Value is in the format yyyy-mm-dd, for example: 2025-09-16')
}
definition {
diff --git a/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile b/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile
index 41a46aa9218..27bcc7fa942 100644
--- a/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile
+++ b/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile
@@ -1,4 +1,6 @@
+def releaseEvents = [ M1: 'Milestone 1', M2: 'Milestone 2', M3: 'Milestone 3', RC1: 'Release Candidate 1', RC2: 'Release Candidate 2', GA: 'Release' ]
+
pipeline {
options {
timestamps()
@@ -55,25 +57,28 @@ pipeline {
assignEnvVariable('PREVIOUS_RELEASE_CANDIDATE_I_BUILD', "I${previousIdMatcher.group('date')}-${previousIdMatcher.group('time')}")
previousIdMatcher = null // release matcher as it's not serializable
- //TODO: Read the dates from the calender instead of provide a structured document somewhere?
- // E.g. next to: https://github.com/eclipse-simrel/.github/blob/main/wiki/SimRel/2025-09.md
- def m1Date = parseDate(readParameter('M1_DATE'))
- def m2Date = parseDate(readParameter('M2_DATE'))
- def m3Date = parseDate(readParameter('M3_DATE'))
- def rc1Date = parseDate(readParameter('RC1_DATE'))
- def rc2Date = parseDate(readParameter('RC2_DATE'))
- def gaDate = parseDate(readParameter('GA_DATE'))
- if (!(m1Date < m2Date && m2Date < m3Date && m3Date < rc1Date && rc1Date < rc2Date && rc2Date < gaDate)) {
- error "Dates are not in strictly ascending order: ${M1_DATE}, ${M2_DATE}, ${M3_DATE}, ${RC1_DATE}, ${RC2_DATE}, ${GA_DATE}"
+ env.NEXT_SIMREL_NAME = readParameter('NEXT_SIMREL_NAME')
+ def simRelMatcher = env.NEXT_SIMREL_NAME =~ /(?\d{4})-(?\d{2})/
+ if (!simRelMatcher.matches()) {
+ error "Unexpected format for NEXT_SIMREL_NAME: ${NEXT_SIMREL_NAME}"
+ }
+ assignEnvVariable('NEXT_RELEASE_YEAR', simRelMatcher.group('year'))
+ assignEnvVariable('NEXT_RELEASE_MONTH', simRelMatcher.group('month'))
+ assignEnvVariable('NEXT_RELEASE_NAME', "${NEXT_SIMREL_NAME}")
+ simRelMatcher = null // release matcher as it's not serializable
+
+ def simRelDatesRaw = sh(script: "curl --fail https://raw.githubusercontent.com/eclipse-simrel/.github/refs/heads/main/wiki/SimRel/${NEXT_SIMREL_NAME}_dates.json", returnStdout: true)
+ def simRelDates = readJSON(text: simRelDatesRaw)
+ def eclipseReleaseDates = releaseEvents.collectEntries{ name, _ ->
+ def date = parseDate(simRelDates[name]).minusDays(name == 'GA' ? 0 : 7) // All Eclipse-TLPs have offset -7 days
+ assignEnvVariable("${name}_DATE", date)
+ return [name, date]
}
- assignEnvVariable('NEXT_RELEASE_YEAR', gaDate.year.toString())
- assignEnvVariable('NEXT_RELEASE_MONTH', String.format("%02d", gaDate.monthValue))
- assignEnvVariable('NEXT_RELEASE_NAME', "${NEXT_RELEASE_YEAR}-${NEXT_RELEASE_MONTH}")
assignEnvVariable('MAINTENANCE_BRANCH', "R${PREVIOUS_RELEASE_VERSION_MAJOR}_${PREVIOUS_RELEASE_VERSION_MINOR}_maintenance")
// Compute new build schedule
def now = java.time.LocalDate.now()
- def rcEnd = rc2Date.minusDays(2) // Wednesday before RC2 is the last planned I-build and the cron-triggers should stop after
+ def rcEnd = eclipseReleaseDates.RC2.minusDays(2) // Wednesday before RC2 is the last planned I-build and the cron-triggers should stop after
assignEnvVariable('I_BUILD_SCHEDULE', createCronPattern(now, rcEnd, 18, '*').trim())
env.NEXT_JAVA_RELEASE_DATE = readParameter('NEXT_JAVA_RELEASE_DATE')
@@ -445,12 +450,10 @@ pipeline {
echo "Skipping .eclipsefdn repository of : ${organisation}"
continue
}
- githubAPI.createMilestone(organisation, repository, "${NEXT_RELEASE_VERSION} M1", "${NEXT_RELEASE_VERSION} Milestone 1", "${M1_DATE}")
- githubAPI.createMilestone(organisation, repository, "${NEXT_RELEASE_VERSION} M2", "${NEXT_RELEASE_VERSION} Milestone 2", "${M2_DATE}")
- githubAPI.createMilestone(organisation, repository, "${NEXT_RELEASE_VERSION} M3", "${NEXT_RELEASE_VERSION} Milestone 3", "${M3_DATE}")
- githubAPI.createMilestone(organisation, repository, "${NEXT_RELEASE_VERSION} RC1", "${NEXT_RELEASE_VERSION} Release Candidate 1", "${RC1_DATE}")
- githubAPI.createMilestone(organisation, repository, "${NEXT_RELEASE_VERSION} RC2", "${NEXT_RELEASE_VERSION} Release Candidate 2", "${RC2_DATE}")
- githubAPI.createMilestone(organisation, repository, "${NEXT_RELEASE_VERSION}", "${NEXT_RELEASE_VERSION} Release", "${GA_DATE}")
+ releaseEvents.each{ name, description ->
+ def title = "${NEXT_RELEASE_VERSION}" + (name != 'GA' ? " ${name}" : '')
+ githubAPI.createMilestone(organisation, repository, title, "${NEXT_RELEASE_VERSION} ${description}", env["${name}_DATE"])
+ }
}
}
}