diff --git a/JenkinsJobs/Releng/FOLDER.groovy b/JenkinsJobs/Releng/FOLDER.groovy index a4c419384cb..c561214a10f 100644 --- a/JenkinsJobs/Releng/FOLDER.groovy +++ b/JenkinsJobs/Releng/FOLDER.groovy @@ -95,29 +95,23 @@ pipelineJob('Releng/prepareNextDevCycle'){ } } -pipelineJob('Releng/renameAndPromote'){ - displayName('Rename and Promote') +pipelineJob('Releng/promoteBuild'){ + displayName('Promote Build') description('''\ This job does the "stage 1" or first part of a promotion. -It renames the files for Equinox and Eclipse, creates an appropriate repo on 'downloads', rsync's everything to 'downloads', but leave everything "invisible" -- unless someone knows the exact URL. +It renames the files for Equinox and Eclipse, creates an appropriate repo on 'downloads', sync's everything to 'downloads', but leave everything "invisible" -- unless someone knows the exact URL. This allows two things. First, allows artifacts some time to "mirror" when that is needed. But also, allows the sites and repositories to be examined for correctness before making them visible to the world. The second (deferred) step that makes things visible works, in part, based on some output of this first step. Hence, they must "share a workspace". ''') parameters { stringParam('DROP_ID', null, '''\ -The name (or, build id) of the build to rename and promote. Typically would be a value such as I20160530-2000 or M20160912-1000. +The name (or, build id) of the build to promote. Typically would be a value such as 'I20250714-1800'. It must match the name of the build on the build machine. ''') stringParam('CHECKPOINT', null, 'M1, M3, RC1, RC2, RC3 etc (blank for final releases).') stringParam('SIGNOFF_BUG', null, 'The issue that was used to "signoff" the checkpoint. If there are no unit test failures, this can be left blank. Otherwise a link is added to test page explaining that "failing unit tests have been investigated".') stringParam('TRAIN_NAME', null, 'The name of the release stream, typically yyyy-mm. For example: 2022-09') - stringParam('STREAM', null, 'Needs to be all three files of primary version for the release, such as 4.7.1 or 4.8.0.') - stringParam('DL_TYPE', null, "This is the build type we are promoting TO. I-builds promote to 'S' until 'R'.") - stringParam('TAG', null, ''' For passing to the tagEclipseRelease job. -R is used for release builds. For example: R4_25 -S is used for milestones and includes the milestone version. For example: S4_25_0_RC2 -''') } definition { cpsScm { @@ -125,7 +119,7 @@ S is used for milestones and includes the milestone version. For example: S4_25_ scm { github('eclipse-platform/eclipse.platform.releng.aggregator', 'master') } - scriptPath('JenkinsJobs/Releng/renameAndPromote.jenkinsfile') + scriptPath('JenkinsJobs/Releng/promoteBuild.jenkinsfile') } } } @@ -155,11 +149,11 @@ GitHub issue to track tagging the release, for example: } } -pipelineJob('Releng/makeVisible'){ - displayName('Make Visible') +pipelineJob('Releng/publishPromotedBuild'){ + displayName('Publish Promoted Build') description('''\ -Make a 'release build', which was previously declared by running the 'Rename And Promote' job, visible. -The first part of a promotion -- the 'Rename And Promote' job -- puts the build at its final location, but keeps it hidden. +Make a 'release build', which was previously declared by running the 'Promote Build' job, visible. +The first part of a promotion -- the 'Promote Build' job -- puts the build at its final location, but keeps it hidden. Therefore, both jobs have to share a 'workspace', and the output of the first job must remain in place until its time to "make visible". ''') parameters { @@ -175,7 +169,7 @@ It must match the name of the build on the download server. scm { github('eclipse-platform/eclipse.platform.releng.aggregator', 'master') } - scriptPath('JenkinsJobs/Releng/makeVisible.jenkinsfile') + scriptPath('JenkinsJobs/Releng/publishPromotedBuild.jenkinsfile') } } } diff --git a/JenkinsJobs/Releng/promoteBuild.jenkinsfile b/JenkinsJobs/Releng/promoteBuild.jenkinsfile new file mode 100644 index 00000000000..49468c450f6 --- /dev/null +++ b/JenkinsJobs/Releng/promoteBuild.jenkinsfile @@ -0,0 +1,163 @@ +pipeline { + options { + skipDefaultCheckout() + timestamps() + timeout(time: 120, unit: 'MINUTES') + buildDiscarder(logRotator(numToKeepStr:'5')) + } + agent { + label 'basic' + } + environment { + HIDE_SITE = 'true' + // Download Server locations (would very seldom change) + BUILD_ROOT = '/home/data/httpd/download.eclipse.org' + EP_ECLIPSE_ROOT = "${BUILD_ROOT}/eclipse" + EP_EQUINOX_ROOT = "${BUILD_ROOT}/equinox" + } + stages { + stage('Process input') { + steps { + script { + env.DROP_ID = readParameter('DROP_ID') + if (!"${DROP_ID}") { + error("Parameter 'DROP_ID' is not specified") + } + env.CHECKPOINT = readParameter('CHECKPOINT') + env.SIGNOFF_BUG = readParameter('SIGNOFF_BUG') + env.TRAIN_NAME = readParameter('TRAIN_NAME') + if (!"${TRAIN_NAME}") { + error("Parameter 'TRAIN_NAME' is not specified") + } + def idMatcher = null + if ((idMatcher = env.DROP_ID =~ /(?I)(?\d{8})-(?