From 60fbb5713ae9655e74c398d0fcedef753ce7b16e Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Tue, 7 Jan 2025 17:04:47 +0100
Subject: [PATCH] pipeline publishes images

---
 .gitlab-ci.yml | 46 +++++++++++++++++++++++++++++++++++++++++++---
 pom.xml        |  4 +++-
 2 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b7e24209..50b114bf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -40,32 +40,72 @@ verify:
   script:
     - mvn verify $MAVEN_CLI_OPTS
 
+.get-version:
+  before_script:
+    - export PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout $MAVEN_CLI_OPTS)
+    - export PROJECT_ARTIFACTID=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout $MAVEN_CLI_OPTS)
+    - export NEXUS_IMAGE_PREFIX="docker.ozg-sh.de/${PROJECT_ARTIFACTID}"
+
+# Merge request jobs
+push-merge-request-image-gitlab:
+  stage: publish
+  extends: .get-version
+  script:
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
+    - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+      # when: never  # Step disabled until gitlab container registry works
+
+push-merge-request-image-nexus:
+  stage: publish
+  extends: .get-version
+  script:
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
+    - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+  # when: manual
+
+# Snapshot jobs
 push-snapshot-image-gitlab:
   stage: publish
+  extends: .get-version
   script:
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:main-${PROJECT_VERSION},${CI_REGISTRY_IMAGE}:snapshot-latest"
     - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   only:
     - main
+  # rules:
+  #  - when: never  # Step disabled until gitlab container registry works
 
 push-snapshot-image-nexus:
   stage: publish
+  extends: .get-version
   script:
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:main-${PROJECT_VERSION},${NEXUS_IMAGE_PREFIX}:snapshot-latest"
     - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   only:
     - main
 
+# Release jobs
 push-release-image-gitlab:
   stage: publish
+  extends: .get-version
   script:
-    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG}
+    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG} $MAVEN_CLI_OPTS
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:release-${CI_COMMIT_TAG},${CI_REGISTRY_IMAGE}:latest"
     - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   rules:
     - if: $CI_COMMIT_TAG
+      # when: never  # Step disabled until gitlab container registry works
 
 push-release-image-nexus:
   stage: publish
+  extends: .get-version
   script:
-    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG}
-    - mvn mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG} $MAVEN_CLI_OPTS
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:release-${CI_COMMIT_TAG},${NEXUS_IMAGE_PREFIX}:latest"
+    - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   rules:
     - if: $CI_COMMIT_TAG
diff --git a/pom.xml b/pom.xml
index 68d57529..018a4c82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -210,7 +210,8 @@
 						<artifactId>spring-boot-maven-plugin</artifactId>
 						<configuration>
 							<image>
-								<name>${CI_REGISTRY_IMAGE}/${project.artifactId}:${project.version}</name>
+								<name>${CI_REGISTRY_IMAGE}/${project.artifactId}</name>
+								<tags>${IMAGE_TAGS}</tags>
 								<publish>true</publish>
 							</image>
 							<docker>
@@ -224,6 +225,7 @@
 					</plugin>
 				</plugins>
 			</build>
+
 		</profile>
 		<profile>
 			<id>nexus-deploy</id>
-- 
GitLab