From ac1191f1c63263e753f1985072c28671d9a6512c Mon Sep 17 00:00:00 2001
From: Andreas Romeyke <andreas.romeyke@slub-dresden.de>
Date: Tue, 13 Dec 2022 12:53:54 +0100
Subject: [PATCH] - added CI/CD support

---
 .gitlab-ci.yml       | 89 ++++++++++++++++++++++++++++++++++++++++++++
 Makefile             | 18 ++++-----
 gitlab-ci/Dockerfile | 26 +++++++++++++
 3 files changed, 124 insertions(+), 9 deletions(-)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 gitlab-ci/Dockerfile

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..7a5649f
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,89 @@
+# This file is a template, and might need editing before it works on your project.
+# To contribute improvements to CI/CD templates, please follow the Development guide at:
+# https://docs.gitlab.com/ee/development/cicd/templates.html
+# This specific template is located at:
+# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml
+
+# This is a sample GitLab CI/CD configuration file that should run without any modifications.
+# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts,
+# it uses echo commands to simulate the pipeline execution.
+#
+# A pipeline is composed of independent jobs that run scripts, grouped into stages.
+# Stages run in sequential order, but jobs within stages run in parallel.
+#
+# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages
+
+stages:          # List of stages for jobs, and their order of execution
+  - build
+  - test
+  - packaging
+
+variables:
+  EXLIBRIS_SDK_DIR: "/exlibris"
+  ROSETTASDK: "${EXLIBRIS_SDK_DIR}/7.3/lib/"
+  IMAGE_TARGET: "$CI_REGISTRY_IMAGE/bullseye_subapp"
+  FF_USE_FASTZIP: "true"
+  # These can be specified per job or per pipeline
+  ARTIFACT_COMPRESSION_LEVEL: "fast"
+  CACHE_COMPRESSION_LEVEL: "fast"
+#  CI_DEBUG_TRACE: "true"
+
+default:
+  image:
+    # use this image for all later stages that happen after the build stage
+    name: "${IMAGE_TARGET}:latest"
+
+before_script:    # These steps are run before EACH job.
+  - export ROSETTASDK="${ROSETTASDK}"
+
+build-env-job:       # This job runs in the build stage, which runs first.
+  stage: build
+  timeout: 30m
+  tags:
+    - "docker"
+  image:
+    # Use Kaniko base image to build a Docker image to use as the base image for later jobs.
+    name: gcr.io/kaniko-project/executor:debug
+    entrypoint: [""]
+  # Do not run the before_script tasks here, they wouldn't be included in the Docker image. Instead, provide an empty list of tasks.
+  before_script: []
+  # docu: https://docs.gitlab.com/ee/ci/docker/using_kaniko.html, this is basically copy-pasted from there
+  script:
+    - mkdir -p /kaniko/.docker
+    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "$CI_REGISTRY_USER" "$CI_REGISTRY_PASSWORD" | base64 | tr -d '\n')\"},\"$(printf "%s" "$CI_DEPENDENCY_PROXY_SERVER" | cut -d':' -f1)\":{\"auth\":\"$(printf "%s:%s" "$CI_DEPENDENCY_PROXY_USER" "$CI_DEPENDENCY_PROXY_PASSWORD" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
+    # In this task, Kaniko executor is called to build the Image based on the Dockerfile provided with "--dockerfile".
+    - echo "CI_PROJECT_DIR=${CI_PROJECT_DIR}"
+    - >-
+      /kaniko/executor
+      --context "${CI_PROJECT_DIR}"
+      --dockerfile "${CI_PROJECT_DIR}/gitlab-ci/Dockerfile"
+      --destination "${IMAGE_TARGET}:latest"
+      --build-arg "GITDIR=${CI_PROJECT_DIR}"
+      --cache=true
+      --cache-repo=${CI_REGISTRY_IMAGE}
+      --cache-copy-layers=true
+      --snapshotMode=redo
+      --use-new-run
+      --ignore-var-run
+
+test-job:
+  stage: test
+  timeout: 3h
+  tags:
+    - "docker"
+  script:
+    - ls -lha /exlibris/
+    - ROSETTASDK=$ROSETTASDK make -e check_prerequisites
+    - ROSETTASDK=$ROSETTASDK make -e test
+
+
+packaging-job:
+  stage: packaging
+  timeout: 3h
+  tags:
+    - "docker"
+  script:
+    - ROSETTASDK=$ROSETTASDK make -e
+  artifacts:
+    paths:
+      - SLUBRetroMonographieTIFFFormatValidationPlugin.jar
diff --git a/Makefile b/Makefile
index 3872367..3c51479 100644
--- a/Makefile
+++ b/Makefile
@@ -7,26 +7,26 @@ JAVAPATH=/usr/lib/jvm/java-1.17.0-openjdk-*/bin/
 JAVARELEASE=17
 
 # Verwendete Rosetta-Version
-ROSETTAVERSION=7.3.0
+ROSETTAVERSION:=7.3.0
 
 # Pfad zum Rosetta-SDK
 ROSETTASDK=/exlibris/dps/d4_1/system.dir/dps-sdk-${ROSETTAVERSION}/lib/
 # Pfad zum Rosetta-SDK, Deposit-Module
-ROSETTASDKDEPOSIT=${ROSETTASDK}/../dps-sdk-projects/dps-sdk-deposit/lib
-ROSETTASDKPLUGINS=${ROSETTASDK}/../../bundled_plugins/
+ROSETTASDKDEPOSIT:=${ROSETTASDK}/../dps-sdk-projects/dps-sdk-deposit/lib
+ROSETTASDKPLUGINS:=${ROSETTASDK}/../../bundled_plugins/
 
 
 # classpath
-JUNITCLASSPATH=/usr/share/java/junit4.jar
+JUNITCLASSPATH:=/usr/share/java/junit4.jar
 #SOURCESCLASSPATH=org/slub/rosetta/dps/repository/plugin/storage/nfs
-CLASSPATH=${ROSETTASDKDEPOSIT}/dps-sdk-${ROSETTAVERSION}.jar
+CLASSPATH:=${ROSETTASDKDEPOSIT}/dps-sdk-${ROSETTAVERSION}.jar
 #BUILDPATH=$(CLASSPATH)
 
 # sources
-SOURCES=java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java
-OBJS=$(SOURCES:.java=.class)
-JAR=SLUBRetroMonographieTIFFFormatValidationPlugin.jar
-BUILD=build/
+SOURCES:=java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java
+OBJS:=$(SOURCES:.java=.class)
+JAR:=SLUBRetroMonographieTIFFFormatValidationPlugin.jar
+BUILD:=build/
 
 all: $(BUILD) $(JAR)
 
diff --git a/gitlab-ci/Dockerfile b/gitlab-ci/Dockerfile
new file mode 100644
index 0000000..71b05e8
--- /dev/null
+++ b/gitlab-ci/Dockerfile
@@ -0,0 +1,26 @@
+FROM git.slub-dresden.de/debian-packaging/dependency_proxy/containers/debian:bullseye-slim
+
+ARG GITDIR
+ENV DEBIAN_FRONTEND=noninteractive
+ENV EXLIBRIS_REPO=https://github.com/ExLibrisGroup/Rosetta.dps-sdk-projects.git
+ENV EXLIBRIS_REPODIR=Rosetta.dps-sdk-projects
+ENV EXLIBRIS_PATH=/exlibris
+
+RUN apt-get update; \
+    apt-get install -y --no-install-recommends gnupg wget; \
+    wget -O - http://sdvdebianrepo.slub-dresden.de/deb-repository/pub.gpg.key | apt-key add - ; \
+    echo "deb http://sdvdebianrepo.slub-dresden.de/deb-repository bullseye main" > /etc/apt/sources.list.d/slub.list;
+
+RUN apt-get update; \
+    apt-get -y upgrade; \
+    apt-get install -y \
+      apt-file \
+      apt-utils \
+      make \
+      openjdk-17-jdk \
+      junit4 \
+      git \
+    ;
+RUN apt-file update;
+RUN git clone https://github.com/ExLibrisGroup/Rosetta.dps-sdk-projects.git
+RUN ln -s ${EXLIBRIS_REPODIR} ${EXLIBRIS_PATH}
-- 
GitLab