From b1c099a14b4c11a52462789f44ec3d53ca7c4e39 Mon Sep 17 00:00:00 2001 From: Rado Date: Tue, 9 Jun 2026 15:13:08 +0300 Subject: [PATCH 1/4] ci: build and publish EOS docker image --- jenkinsfiles/eos | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/jenkinsfiles/eos b/jenkinsfiles/eos index dc93934357de..10f1b77e8e7a 100644 --- a/jenkinsfiles/eos +++ b/jenkinsfiles/eos @@ -13,11 +13,18 @@ pipeline { options { buildDiscarder(logRotator(numToKeepStr: '5')) - timeout(time: 30) + timeout(time: 60) } environment { MAVEN_OPTS = '-Xms1024m -Xmx4096m -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3 -Dmaven.wagon.httpconnectionManager.ttlSeconds=125' + DHIS2_VERSION = readMavenPom(file: 'dhis-2/pom.xml').getVersion() + DOCKER_IMAGE_NAME = "${DOCKER_HUB_OWNER}/core" + DOCKER_IMAGE_TAG = "${env.GIT_BRANCH}-eos" + DOCKER_IMAGE_NAME_FULL = "${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}" + IMAGE_REPOSITORY = "${DOCKER_IMAGE_NAME}" + // THIS MUST be kept in sync with the jib.from.image in the dhis-web-portal pom.xml + BASE_IMAGE = "tomcat:9.0-jre11" } stages { @@ -33,6 +40,42 @@ pipeline { } } + stage ('Build and publish Docker image') { + steps { + withDockerRegistry([credentialsId: "docker-hub-credentials", url: ""]) { + withMaven(options: [artifactsPublisher(disabled: true)]) { + // EOS maintenance build: publish a single rolling "-eos" tag. + // -d skips the immutable timestamp and rolling M/M.m tags (reserved for releases). + sh './dhis-2/build-docker-image.sh -t "${DOCKER_IMAGE_TAG}" -d' + } + } + } + } + + stage ('Smoke test') { + steps { + // Non-blocking: a stale e2e suite must not block publishing the EOS image. + catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE', message: 'EOS smoke test failed') { + dir('dhis-2/dhis-e2e-test') { + sh "docker pull ${DOCKER_IMAGE_NAME_FULL}" + sh "DHIS2_IMAGE=${DOCKER_IMAGE_NAME_FULL} docker-compose --file docker-compose.yml --file docker-compose.e2e.yml up --remove-orphans --exit-code-from test" + } + } + } + + post { + always { + script { + dir('dhis-2/dhis-e2e-test') { + archiveArtifacts artifacts: 'coverage.csv', allowEmptyArchive: true + sh 'docker-compose logs web > web-logs.txt || true' + archiveArtifacts artifacts: 'web-logs.txt', allowEmptyArchive: true + } + } + } + } + } + stage ('Sync WAR') { steps { echo 'Syncing WAR ...' From 50c6b5a4f49cd0c9b6e5e19fe3b9251f2a16ce3d Mon Sep 17 00:00:00 2001 From: Philip-Larsen-Donnelly <35666657+Philip-Larsen-Donnelly@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:55:43 +0200 Subject: [PATCH 2/4] Format code for consistency in DefaultObjectBundleService --- .../metadata/objectbundle/DefaultObjectBundleService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/DefaultObjectBundleService.java b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/DefaultObjectBundleService.java index 8f116baa5150..27804368dfc2 100644 --- a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/DefaultObjectBundleService.java +++ b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/DefaultObjectBundleService.java @@ -220,7 +220,7 @@ private TypeReport handleCreates( Session session preheatService.connectReferences( object, bundle.getPreheat(), bundle.getPreheatIdentifier() ); - session.save(object); + session.save( object ); bundle.getPreheat().replace( bundle.getPreheatIdentifier(), object ); @@ -291,7 +291,7 @@ private TypeReport handleUpdates( Session session .setSkipTranslation( bundle.isSkipTranslation() ) ); } - session.update(persistedObject); + session.update( persistedObject ); bundle.getPreheat().replace( bundle.getPreheatIdentifier(), persistedObject ); From 79ba1c69d4d9037d1b1b83432663dad309695796 Mon Sep 17 00:00:00 2001 From: Philip-Larsen-Donnelly <35666657+Philip-Larsen-Donnelly@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:57:09 +0200 Subject: [PATCH 3/4] Fix comment formatting for objectBundleMode --- .../hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java index 04441cacd403..954781ef7d33 100644 --- a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java +++ b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java @@ -67,8 +67,8 @@ public class ObjectBundle implements ObjectIndexProvider private final User user; /** - * Should import be imported or just validated. - */ + * Should import be imported or just validated. + */ private final ObjectBundleMode objectBundleMode; /** From eb2cfdb587b8f836468f3f2aacaf0b0448de8ea0 Mon Sep 17 00:00:00 2001 From: Philip-Larsen-Donnelly <35666657+Philip-Larsen-Donnelly@users.noreply.github.com> Date: Tue, 9 Jun 2026 17:00:23 +0200 Subject: [PATCH 4/4] Clean up ObjectBundle.java by removing blank lines Removed unnecessary blank lines in getUser method. --- .../org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java index 954781ef7d33..b0742e5cf5f0 100644 --- a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java +++ b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/objectbundle/ObjectBundle.java @@ -195,8 +195,6 @@ public User getUser() return user; } - - public String getUsername() { return user != null ? user.getUsername() : "system-process";