diff --git a/JenkinsJobs/AutomatedTests/I_unit_cen64_gtk3_java23.groovy b/JenkinsJobs/AutomatedTests/I_unit_cen64_gtk3_java23.groovy
new file mode 100644
index 00000000000..0878ad36081
--- /dev/null
+++ b/JenkinsJobs/AutomatedTests/I_unit_cen64_gtk3_java23.groovy
@@ -0,0 +1,159 @@
+def config = new groovy.json.JsonSlurper().parseText(readFileFromWorkspace('JenkinsJobs/JobDSL.json'))
+def STREAMS = config.Streams
+
+for (STREAM in STREAMS){
+ def MAJOR = STREAM.split('\\.')[0]
+ def MINOR = STREAM.split('\\.')[1]
+
+ pipelineJob('AutomatedTests/ep' + MAJOR + MINOR + 'I-unit-cen64-gtk3-java23'){
+ description('Run Eclipse SDK Tests for the platform implied by this job\'s name')
+ parameters { // Define parameters in job configuration to make them available from the very first build onwards
+ stringParam('buildId', null, 'Build Id to test (such as I20240611-1800, N20120716-0800).')
+ }
+
+ definition {
+ cps {
+ sandbox()
+ script('''
+pipeline {
+ options {
+ timeout(time: 600, unit: 'MINUTES')
+ timestamps()
+ buildDiscarder(logRotator(numToKeepStr:'5'))
+ }
+ agent {
+ kubernetes {
+ label 'centos-unitpod23'
+ defaultContainer 'custom'
+ yaml """
+apiVersion: v1
+kind: Pod
+spec:
+ containers:
+ - name: "jnlp"
+ resources:
+ limits:
+ memory: "2048Mi"
+ cpu: "2000m"
+ requests:
+ memory: "512Mi"
+ cpu: "1000m"
+ - name: "custom"
+ image: "eclipse/platformreleng-centos-gtk3-metacity:8"
+ imagePullPolicy: "Always"
+ resources:
+ limits:
+ memory: "4096Mi"
+ cpu: "1000m"
+ requests:
+ # memory needs to be at least 1024Mi, see https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/issues/2478
+ memory: "1024Mi"
+ cpu: "1000m"
+ securityContext:
+ privileged: false
+ tty: true
+ command:
+ - cat
+ volumeMounts:
+ - mountPath: "/opt/tools"
+ name: "volume-0"
+ readOnly: false
+ workingDir: "/home/jenkins/agent"
+ nodeSelector: {}
+ restartPolicy: "Never"
+ volumes:
+ - name: "volume-0"
+ persistentVolumeClaim:
+ claimName: "tools-claim-jiro-releng"
+ readOnly: true
+ - configMap:
+ name: "known-hosts"
+ name: "volume-1"
+ - emptyDir:
+ medium: ""
+ name: "workspace-volume"
+ - emptyDir:
+ medium: ""
+ name: "volume-3"
+"""
+ }
+ }
+
+ stages {
+ stage('Run tests'){
+ environment {
+ // Declaring a jdk and ant the usual way in the 'tools' section, because of unknown reasons, breaks the usage of system commands like xvnc, pkill and sh
+ ANT_HOME = tool(type:'ant', name:'apache-ant-latest')
+ PATH = "${JAVA_HOME}/bin:${ANT_HOME}/bin:${PATH}"
+ }
+ steps {
+ container ('custom'){
+ xvnc(useXauthority: true) {
+ sh \'\'\'#!/bin/bash -x
+
+ buildId=$(echo $buildId|tr -d ' ')
+ RAW_DATE_START="$(date +%s )"
+
+ export LANG=en_US.UTF-8
+ cat /etc/*release
+ echo -e "\\n\\tRAW Date Start: ${RAW_DATE_START} \\n"
+ echo -e "\\n\\t whoami: $( whoami )\\n"
+ echo -e "\\n\\t uname -a: $(uname -a)\\n"
+
+ # 0002 is often the default for shell users, but it is not when ran from
+ # a cron job, so we set it explicitly, to be sure of value, so releng group has write access to anything
+ # we create on shared area.
+ oldumask=$(umask)
+ umask 0002
+
+ echo "umask explicitly set to 0002, old value was $oldumask"
+
+ # we want java.io.tmpdir to be in $WORKSPACE, but must already exist, for Java to use it.
+ mkdir -p ${WORKSPACE}/tmp
+
+ wget -O ${WORKSPACE}/getEBuilder.xml --no-verbose --no-check-certificate https://download.eclipse.org/eclipse/relengScripts/production/testScripts/hudsonBootstrap/getEBuilder.xml 2>&1
+ wget -O ${WORKSPACE}/buildproperties.shsource --no-check-certificate https://download.eclipse.org/eclipse/downloads/drops4/${buildId}/buildproperties.shsource
+ cat ${WORKSPACE}/buildproperties.shsource
+ source ${WORKSPACE}/buildproperties.shsource
+
+ echo JAVA_HOME: $JAVA_HOME
+ echo ANT_HOME: $ANT_HOME
+ echo PATH: $PATH
+ export ANT_OPTS="${ANT_OPTS} -Djava.io.tmpdir=${WORKSPACE}/tmp -Djava.security.manager=allow"
+
+ env 1>envVars.txt 2>&1
+ ant -diagnostics 1>antDiagnostics.txt 2>&1
+ java -XshowSettings -version 1>javaSettings.txt 2>&1
+
+ ant -f getEBuilder.xml -Djava.io.tmpdir=${WORKSPACE}/tmp -DbuildId=$buildId -DeclipseStream=$STREAM -DEBUILDER_HASH=${EBUILDER_HASH} \\
+ -DdownloadURL=https://download.eclipse.org/eclipse/downloads/drops4/${buildId} \\
+ -Dosgi.os=linux -Dosgi.ws=gtk -Dosgi.arch=x86_64 \\
+ -DtestSuite=all \\
+ -Djvm=${JAVA_HOME}/bin/java
+
+ RAW_DATE_END="$(date +%s )"
+
+ echo -e "\\n\\tRAW Date End: ${RAW_DATE_END} \\n"
+
+ TOTAL_TIME=$((${RAW_DATE_END} - ${RAW_DATE_START}))
+
+ echo -e "\\n\\tTotal elapsed time: ${TOTAL_TIME} \\n"
+ \'\'\'
+ }
+ }
+ archiveArtifacts '**/eclipse-testing/results/**, **/eclipse-testing/directorLogs/**, *.properties, *.txt'
+ junit keepLongStdio: true, testResults: '**/eclipse-testing/results/xml/*.xml'
+ build job: 'Releng/ep-collectResults', wait: false, parameters: [
+ string(name: 'triggeringJob', value: "${JOB_BASE_NAME}"),
+ string(name: 'buildURL', value: "${BUILD_URL}"),
+ string(name: 'buildID', value: "${params.buildId}")
+ ]
+ }
+ }
+ }
+}
+ ''')
+ }
+ }
+ }
+}
diff --git a/JenkinsJobs/Builds/I_build.groovy b/JenkinsJobs/Builds/I_build.groovy
index f9273552236..9d23e86b935 100644
--- a/JenkinsJobs/Builds/I_build.groovy
+++ b/JenkinsJobs/Builds/I_build.groovy
@@ -420,6 +420,7 @@ spec:
build job: 'AutomatedTests/ep''' + MAJOR + MINOR + '''I-unit-cen64-gtk3-java17', parameters: [string(name: 'buildId', value: "${env.BUILD_IID.trim()}")], wait: false
build job: 'AutomatedTests/ep''' + MAJOR + MINOR + '''I-unit-cen64-gtk3-java21', parameters: [string(name: 'buildId', value: "${env.BUILD_IID.trim()}")], wait: false
build job: 'AutomatedTests/ep''' + MAJOR + MINOR + '''I-unit-cen64-gtk3-java22', parameters: [string(name: 'buildId', value: "${env.BUILD_IID.trim()}")], wait: false
+ build job: 'AutomatedTests/ep''' + MAJOR + MINOR + '''I-unit-cen64-gtk3-java23', parameters: [string(name: 'buildId', value: "${env.BUILD_IID.trim()}")], wait: false
build job: 'AutomatedTests/ep''' + MAJOR + MINOR + '''I-unit-macM1-java17', parameters: [string(name: 'buildId', value: "${env.BUILD_IID.trim()}")], wait: false
build job: 'AutomatedTests/ep''' + MAJOR + MINOR + '''I-unit-mac64-java17', parameters: [string(name: 'buildId', value: "${env.BUILD_IID.trim()}")], wait: false
build job: 'AutomatedTests/ep''' + MAJOR + MINOR + '''I-unit-win32-java17', parameters: [string(name: 'buildId', value: "${env.BUILD_IID.trim()}")], wait: false
diff --git a/cje-production/scripts/publish.xml b/cje-production/scripts/publish.xml
index 88014579efd..fe1eb832211 100644
--- a/cje-production/scripts/publish.xml
+++ b/cje-production/scripts/publish.xml
@@ -184,7 +184,7 @@
+ value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-mac64-java17_macosx.cocoa.x86_64_17,ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-macM1-java17_macosx.cocoa.aarch64_17,ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-win32-java17_win32.win32.x86_64_17,ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java17_linux.gtk.x86_64_17,ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java21_linux.gtk.x86_64_21,ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java22_linux.gtk.x86_64_22,ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java23_linux.gtk.x86_64_23" />