From 122d61d446dd14db67330fdb44fa073daa3ff83c Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Wed, 5 Mar 2025 10:28:12 +0100
Subject: [PATCH 1/3] add pipeline scripts

---
 .../build_and_push_docker_image.sh            | 13 +++++++++++++
 pipeline-scripts/check_version.sh             | 17 +++++++++++++++++
 pipeline-scripts/configure_git.sh             |  8 ++++++++
 pipeline-scripts/configure_helm.sh            |  5 +++++
 pipeline-scripts/configure_maven.sh           |  6 ++++++
 pipeline-scripts/configure_python.sh          |  7 +++++++
 pipeline-scripts/deploy_maven_artifact.sh     |  5 +++++
 .../deploy_sbom_to_dependency_track.sh        |  5 +++++
 pipeline-scripts/get_tag_version.sh           |  3 +++
 pipeline-scripts/perform_gitops_rollout.sh    | 19 +++++++++++++++++++
 pipeline-scripts/run_mvn.sh                   |  6 ++++++
 pipeline-scripts/set_version.py               | 16 ++++++++++++++++
 .../test_build_deploy_helm_chart.sh           | 15 +++++++++++++++
 set_up_scripts.sh                             |  3 +++
 14 files changed, 128 insertions(+)
 create mode 100755 pipeline-scripts/build_and_push_docker_image.sh
 create mode 100755 pipeline-scripts/check_version.sh
 create mode 100755 pipeline-scripts/configure_git.sh
 create mode 100755 pipeline-scripts/configure_helm.sh
 create mode 100755 pipeline-scripts/configure_maven.sh
 create mode 100755 pipeline-scripts/configure_python.sh
 create mode 100755 pipeline-scripts/deploy_maven_artifact.sh
 create mode 100755 pipeline-scripts/deploy_sbom_to_dependency_track.sh
 create mode 100755 pipeline-scripts/get_tag_version.sh
 create mode 100755 pipeline-scripts/perform_gitops_rollout.sh
 create mode 100755 pipeline-scripts/run_mvn.sh
 create mode 100755 pipeline-scripts/set_version.py
 create mode 100755 pipeline-scripts/test_build_deploy_helm_chart.sh
 create mode 100644 set_up_scripts.sh

diff --git a/pipeline-scripts/build_and_push_docker_image.sh b/pipeline-scripts/build_and_push_docker_image.sh
new file mode 100755
index 0000000..e36a7aa
--- /dev/null
+++ b/pipeline-scripts/build_and_push_docker_image.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+
+export IMAGE_TAG=$($SCRIPT_DIR/get_tag_version.sh)
+export DOCKER_REGISTRY_IMAGE=$DOCKER_REGISTRY_IMAGE
+
+if [[ "$CI_COMMIT_REF_NAME" == "main" ]]; then
+  profile="main"
+elif [[ "$CI_COMMIT_REF_NAME" == "release" ]]; then
+  profile="release"
+else
+  profile="dev"
+fi
+run_mvn.sh spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3 -P $profile -Ddocker.publishRegistry.username=${NEXUS_USER} -Ddocker.publishRegistry.password=${NEXUS_PASSWORD}
diff --git a/pipeline-scripts/check_version.sh b/pipeline-scripts/check_version.sh
new file mode 100755
index 0000000..6edafe4
--- /dev/null
+++ b/pipeline-scripts/check_version.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+release_regex='\d+.\d+.\d+'
+snapshot_regex='\d+.\d+.\d+-SNAPSHOT'
+rootVersion=$(run_mvn.sh help:evaluate -Dexpression=project.version -q -DforceStdout)
+
+if [[ "$CI_COMMIT_REF_NAME" == "release" ]]; then
+    if ! [[ "$rootVersion" =~ $release_regex ]]; then
+        echo "Keine Release Version für Branch $CI_COMMIT_REF_NAME."
+        exit 1
+    fi
+else
+    if ! [[ "$rootVersion" =~ $snapshot_regex ]]; then
+        echo "Keine Snapshot Version für Branch $CI_COMMIT_REF_NAME."
+        exit 1
+    fi
+fi
\ No newline at end of file
diff --git a/pipeline-scripts/configure_git.sh b/pipeline-scripts/configure_git.sh
new file mode 100755
index 0000000..fe0738a
--- /dev/null
+++ b/pipeline-scripts/configure_git.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+## install prerequisites
+apk add --no-cache git
+
+## configure git
+git config --global user.email "ozgcloud@mgm-tp.com"
+git config --global user.name "OZGCloud"
\ No newline at end of file
diff --git a/pipeline-scripts/configure_helm.sh b/pipeline-scripts/configure_helm.sh
new file mode 100755
index 0000000..65fd54f
--- /dev/null
+++ b/pipeline-scripts/configure_helm.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+## install helm
+apk add --no-cache helm curl
+helm plugin install https://github.com/helm-unittest/helm-unittest.git
\ No newline at end of file
diff --git a/pipeline-scripts/configure_maven.sh b/pipeline-scripts/configure_maven.sh
new file mode 100755
index 0000000..c08519b
--- /dev/null
+++ b/pipeline-scripts/configure_maven.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+## create maven settings file
+echo "${MAVEN_SETTINGS_BASE64}" | base64 -d > "${CI_PROJECT_DIR}/settings.xml"
+
+mv $SCRIPT_DIR/run_mvn.sh /usr/bin
\ No newline at end of file
diff --git a/pipeline-scripts/configure_python.sh b/pipeline-scripts/configure_python.sh
new file mode 100755
index 0000000..0bddcc6
--- /dev/null
+++ b/pipeline-scripts/configure_python.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+apk add --no-cache python3 py3-pip
+# install pyyaml in a virtual environment
+python3 -m venv $PYTHON_VENV_PATH
+. $PYTHON_VENV_PATH/bin/activate
+pip3 install pyyaml
\ No newline at end of file
diff --git a/pipeline-scripts/deploy_maven_artifact.sh b/pipeline-scripts/deploy_maven_artifact.sh
new file mode 100755
index 0000000..e6c4ef8
--- /dev/null
+++ b/pipeline-scripts/deploy_maven_artifact.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+jar_version=$(run_mvn.sh help:evaluate -Dexpression=project.version -q -DforceStdout | sed "s/SNAPSHOT/${CI_COMMIT_REF_NAME:0:20}-SNAPSHOT/")
+run_mvn.sh versions:set -DnewVersion=$jar_version -DprocessAllModules=true
+run_mvn.sh deploy -DskipTests -Dmaven.wagon.http.retryHandler.count=3
\ No newline at end of file
diff --git a/pipeline-scripts/deploy_sbom_to_dependency_track.sh b/pipeline-scripts/deploy_sbom_to_dependency_track.sh
new file mode 100755
index 0000000..2047443
--- /dev/null
+++ b/pipeline-scripts/deploy_sbom_to_dependency_track.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+image_tag=$($SCRIPT_DIR/get_tag_version.sh)
+run_mvn.sh -P ci-build package -DskipTests
+run_mvn.sh io.github.pmckeown:dependency-track-maven-plugin:upload-bom -Ddependency-track.apiKey=$dependency_track_api_key -Ddependency-track.projectVersion=$image_tag -Ddependency-track.dependencyTrackBaseUrl=https://dependency-track.ozg-sh.de
diff --git a/pipeline-scripts/get_tag_version.sh b/pipeline-scripts/get_tag_version.sh
new file mode 100755
index 0000000..15d7220
--- /dev/null
+++ b/pipeline-scripts/get_tag_version.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+printf $(run_mvn.sh help:evaluate -Dexpression=project.version -q -DforceStdout | sed "s/SNAPSHOT/${CI_COMMIT_REF_NAME:0:20}-SNAPSHOT-${CI_PIPELINE_ID}/")
\ No newline at end of file
diff --git a/pipeline-scripts/perform_gitops_rollout.sh b/pipeline-scripts/perform_gitops_rollout.sh
new file mode 100755
index 0000000..34dd684
--- /dev/null
+++ b/pipeline-scripts/perform_gitops_rollout.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+clone_gitops_repo() {
+  git clone https://$GITEA_USER:$GITEA_PASSWORD@git.ozg-sh.de/ozgcloud-devops/gitops.git
+  cd gitops
+}
+
+environment="$1"
+service_name="$2"
+service_value=$(echo $service_name | sed  "s/-/_/g")
+new_version=$($SCRIPT_DIR/get_tag_version.sh)
+
+clone_gitops_repo
+. $PYTHON_VENV_PATH/bin/activate
+python3 $SCRIPT_DIR/set_version.py "$environment/application/values/$service_name-values.yaml" "$service_value" "$new_version" || exit 1
+
+git add $environment/application/values/$service_name-values.yaml
+git commit -m "gitlab rollout $environment $service_name version $new_version"
+git push https://$GITEA_USER:$GITEA_PASSWORD@git.ozg-sh.de/ozgcloud-devops/gitops.git
\ No newline at end of file
diff --git a/pipeline-scripts/run_mvn.sh b/pipeline-scripts/run_mvn.sh
new file mode 100755
index 0000000..cabd0f0
--- /dev/null
+++ b/pipeline-scripts/run_mvn.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+mvn -s "${CI_PROJECT_DIR}/settings.xml" -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn --no-transfer-progress "$@"
+if [[ "$?" -ne 0 ]] ; then
+  echo 'Maven command failed!'; exit 1
+fi
diff --git a/pipeline-scripts/set_version.py b/pipeline-scripts/set_version.py
new file mode 100755
index 0000000..51f1bea
--- /dev/null
+++ b/pipeline-scripts/set_version.py
@@ -0,0 +1,16 @@
+#!/usr/bin/python3
+
+import yaml
+import sys
+
+values_file = sys.argv[1]
+service_name = sys.argv[2]
+new_version = sys.argv[3]
+
+with open(values_file) as file:
+    ymldoc = yaml.safe_load(file)
+    ymldoc[service_name]['image']['tag'] = new_version
+    ymldoc[service_name]['helm']['version'] = new_version
+
+with open(values_file, "w") as ostream:
+    yaml.dump(ymldoc, ostream, default_flow_style=False, sort_keys=False)
\ No newline at end of file
diff --git a/pipeline-scripts/test_build_deploy_helm_chart.sh b/pipeline-scripts/test_build_deploy_helm_chart.sh
new file mode 100755
index 0000000..5d2e919
--- /dev/null
+++ b/pipeline-scripts/test_build_deploy_helm_chart.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+service_name="$1"
+
+helm_chart_version=$($SCRIPT_DIR/get_tag_version.sh)
+./run_helm_test.sh
+cd src/main/helm
+helm package --version=$helm_chart_version .
+
+if [[ "$CI_COMMIT_REF_NAME" == "release" ]]; then
+  repository=ozg-base-apps
+else
+  repository=ozg-base-apps-snapshot
+fi
+curl -u $NEXUS_USER:$NEXUS_PASSWORD -F file=@$service_name-$helm_chart_version.tgz https://nexus.ozg-sh.de/service/rest/v1/components?repository=$repository
diff --git a/set_up_scripts.sh b/set_up_scripts.sh
new file mode 100644
index 0000000..abfb236
--- /dev/null
+++ b/set_up_scripts.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+source_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+export SCRIPT_DIR="$source_dir/pipeline-scripts"
\ No newline at end of file
-- 
GitLab


From 476a68ac505fa69c5ef0c39670d047efb64d9b48 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Wed, 5 Mar 2025 10:29:41 +0100
Subject: [PATCH 2/3] add build_maven_project script

---
 pipeline-scripts/build_maven_project.sh | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100755 pipeline-scripts/build_maven_project.sh

diff --git a/pipeline-scripts/build_maven_project.sh b/pipeline-scripts/build_maven_project.sh
new file mode 100755
index 0000000..f4ff759
--- /dev/null
+++ b/pipeline-scripts/build_maven_project.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+run_mvn.sh clean install -Dmaven.wagon.http.retryHandler.count=3 -DelasticTests.disabled=true
\ No newline at end of file
-- 
GitLab


From 27f96909b4bf209f176934d2a3c64e2f51942561 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Thu, 27 Mar 2025 16:02:40 +0100
Subject: [PATCH 3/3] remove unnecessary script

---
 pipeline-scripts/configure_git.sh | 8 --------
 1 file changed, 8 deletions(-)
 delete mode 100755 pipeline-scripts/configure_git.sh

diff --git a/pipeline-scripts/configure_git.sh b/pipeline-scripts/configure_git.sh
deleted file mode 100755
index fe0738a..0000000
--- a/pipeline-scripts/configure_git.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-
-## install prerequisites
-apk add --no-cache git
-
-## configure git
-git config --global user.email "ozgcloud@mgm-tp.com"
-git config --global user.name "OZGCloud"
\ No newline at end of file
-- 
GitLab