From 59213619ea37de63533bb6db482207493083bd3c Mon Sep 17 00:00:00 2001
From: Steffen Vogel <steffen.vogel@opal-rt.com>
Date: Tue, 12 Mar 2024 09:14:26 +0000
Subject: [PATCH] ci: Push/Pull images and remove docker tag

Signed-off-by: Steffen Vogel <steffen.vogel@opal-rt.com>
---
 .gitlab-ci.yml | 232 +++++++++++++++++++++++--------------------------
 1 file changed, 111 insertions(+), 121 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c7f785275..c1714f8a3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,12 +14,12 @@ variables:
   CMAKE_EXTRA_OPTS: "-DCMAKE_BUILD_TYPE=Release -DVILLAS_COMPILE_WARNING_AS_ERROR=ON"
 
 stages:
-- prepare
-- build
-- test
-- packaging
-- deploy
-- latest
+  - prepare
+  - build
+  - test
+  - packaging
+  - deploy
+  - latest
 
 # Stage: prepare
 
@@ -27,26 +27,29 @@ stages:
 prepare:docker:
   stage: prepare
   image: docker:20.10
+  before_script:
+    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
   script:
-  - docker build ${DOCKER_OPTS}
+    - docker build ${DOCKER_OPTS}
       --file ${DOCKER_FILE}
       --tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
       --target ${TARGET} .
+    - docker push ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
   variables:
     TARGET: dev
   parallel:
     matrix:
-    - DISTRO: [ ubuntu, debian, rocky ]
-    - DISTRO: fedora
-      DOCKER_OPTS: --tag ${DOCKER_IMAGE}/dev:${CI_COMMIT_REF_NAME}
-    - DISTRO: fedora
-      DOCKER_FILE: packaging/docker/Dockerfile.fedora-minimal
-      DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-fedora-minimal
-    - DISTRO: fedora
-      TARGET: dev-vscode
-      DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-vscode
+      - DISTRO: [ubuntu, debian, rocky]
+      - DISTRO: fedora
+        DOCKER_OPTS: --tag ${DOCKER_IMAGE}/dev:${CI_COMMIT_REF_NAME}
+      - DISTRO: fedora
+        DOCKER_FILE: packaging/docker/Dockerfile.fedora-minimal
+        DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-fedora-minimal
+      - DISTRO: fedora
+        TARGET: dev-vscode
+        DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-vscode
   tags:
-  - docker
+    - docker
 
 # Stage: build
 
@@ -54,61 +57,55 @@ build:source:
   stage: build
   image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
   script:
-  - cmake -S . -B build ${CMAKE_OPTS} ${CMAKE_EXTRA_OPTS}
-  - cmake --build build ${CMAKE_BUILD_OPTS}
+    - cmake -S . -B build ${CMAKE_OPTS} ${CMAKE_EXTRA_OPTS}
+    - cmake --build build ${CMAKE_BUILD_OPTS}
   artifacts:
     expire_in: 1 week
     paths:
-    - build/
+      - build/
   variables:
     CMAKE: cmake
   parallel:
     matrix:
-    - DISTRO: [ fedora, fedora-minimal, debian, rocky, ubuntu ]
-    - DISTRO: fedora-minimal
-      CMAKE_EXTRA_OPTS: -DVILLAS_COMPILE_WARNING_AS_ERROR=ON
-                  -DWITH_API=OFF
-                  -DWITH_CLIENTS=OFF
-                  -DWITH_CONFIG=OFF
-                  -DWITH_DOC=OFF
-                  -DWITH_FPGA=OFF
-                  -DWITH_GRAPHVIZ=OFF
-                  -DWITH_HOOKS=OFF
-                  -DWITH_LUA=OFF
-                  -DWITH_OPENMP=OFF
-                  -DWITH_PLUGINS=OFF
-                  -DWITH_SRC=OFF
-                  -DWITH_TESTS=OFF
-                  -DWITH_TOOLS=OFF
-                  -DWITH_WEB=OFF
-                  -DCMAKE_MODULE_PATH=/usr/local/lib64/cmake
-                  -DCMAKE_PREFIX_PATH=/usr/local
-  tags:
-  - docker
+      - DISTRO: [fedora, fedora-minimal, debian, rocky, ubuntu]
+      - DISTRO: fedora-minimal
+        CMAKE_EXTRA_OPTS: -DVILLAS_COMPILE_WARNING_AS_ERROR=ON
+          -DWITH_API=OFF
+          -DWITH_CLIENTS=OFF
+          -DWITH_CONFIG=OFF
+          -DWITH_DOC=OFF
+          -DWITH_FPGA=OFF
+          -DWITH_GRAPHVIZ=OFF
+          -DWITH_HOOKS=OFF
+          -DWITH_LUA=OFF
+          -DWITH_OPENMP=OFF
+          -DWITH_PLUGINS=OFF
+          -DWITH_SRC=OFF
+          -DWITH_TESTS=OFF
+          -DWITH_TOOLS=OFF
+          -DWITH_WEB=OFF
+          -DCMAKE_MODULE_PATH=/usr/local/lib64/cmake
+          -DCMAKE_PREFIX_PATH=/usr/local
 
 # Stage: test
 
 test:python:
   stage: test
   script:
-  - cd python
-  - /venv/bin/black --check .
-  - /venv/bin/mypy .
-  - /venv/bin/flake8 .
-  - /venv/bin/pytest -v .
+    - cd python
+    - /venv/bin/black --check .
+    - /venv/bin/mypy .
+    - /venv/bin/flake8 .
+    - /venv/bin/pytest -v .
   image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
-  tags:
-  - docker
 
 test:cppcheck:
   stage: test
   script:
-  - ./tools/run-cppcheck.sh | tee cppcheck.log
+    - ./tools/run-cppcheck.sh | tee cppcheck.log
   image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
-  tags:
-  - docker
   needs:
-  - job: "build:source: [fedora]"
+    - job: "build:source: [fedora]"
   artifacts:
     when: on_failure
     paths:
@@ -119,48 +116,42 @@ test:unit:
   stage: test
   image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
   script:
-  - cmake -S . -B build ${CMAKE_OPTS}
-  - cmake --build build ${CMAKE_BUILD_OPTS} --target run-unit-tests run-unit-tests-common
-  tags:
-  - docker
+    - cmake -S . -B build ${CMAKE_OPTS}
+    - cmake --build build ${CMAKE_BUILD_OPTS} --target run-unit-tests run-unit-tests-common
   needs:
-  - job: "build:source: [fedora]"
-    artifacts: true
+    - job: "build:source: [fedora]"
+      artifacts: true
 
 test:integration:
   stage: test
   image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
   script:
-  - cmake -S . -B build ${CMAKE_OPTS}
-  - cmake --build build ${CMAKE_BUILD_OPTS} --target run-integration-tests
+    - cmake -S . -B build ${CMAKE_OPTS}
+    - cmake --build build ${CMAKE_BUILD_OPTS} --target run-integration-tests
   artifacts:
     name: ${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF}
     when: always
     paths:
-    - build/tests/integration/
+      - build/tests/integration/
   services:
-  - name: eclipse-mosquitto:2.0
-    alias: mosquitto
-    command: [ mosquitto, -c, /mosquitto-no-auth.conf ]
-  - name: rwthacs/rabbitmq
-    alias: rabbitmq
-  - name: redis:6.2
-    alias: redis
-  tags:
-  - docker
+    - name: eclipse-mosquitto:2.0
+      alias: mosquitto
+      command: [mosquitto, -c, /mosquitto-no-auth.conf]
+    - name: rwthacs/rabbitmq
+      alias: rabbitmq
+    - name: redis:6.2
+      alias: redis
   needs:
-  - job: "build:source: [fedora]"
-    artifacts: true
+    - job: "build:source: [fedora]"
+      artifacts: true
 
 test:reuse:
   stage: test
   image:
     name: fsfe/reuse:latest
     entrypoint: [""]
-  tags:
-  - docker
   script:
-  - reuse lint
+    - reuse lint
 
 # Stage: packaging
 
@@ -168,14 +159,14 @@ pkg:docker:
   stage: packaging
   image: docker:20.10
   before_script:
-  - mkdir -p ~/.docker/cli-plugins/
-  - wget -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
-  - chmod a+x ~/.docker/cli-plugins/docker-buildx
-  - docker buildx create --use --name cross-platform-build --buildkitd-flags "--allow-insecure-entitlement security.insecure"
-  - docker buildx inspect --bootstrap cross-platform-build
-  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+    - mkdir -p ~/.docker/cli-plugins/
+    - wget -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
+    - chmod a+x ~/.docker/cli-plugins/docker-buildx
+    - docker buildx create --use --name cross-platform-build --buildkitd-flags "--allow-insecure-entitlement security.insecure"
+    - docker buildx inspect --bootstrap cross-platform-build
+    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
   script:
-  - docker buildx build ${DOCKER_OPTS}
+    - docker buildx build ${DOCKER_OPTS}
       --pull
       --allow security.insecure
       --output type=docker
@@ -186,9 +177,9 @@ pkg:docker:
       --platform ${PLATFORM}
       --file ${DOCKER_FILE}
       --tag ${DOCKER_IMAGE}:${DOCKER_TAG}-${ARCH} .
-  - docker push ${DOCKER_IMAGE}:${DOCKER_TAG}-${ARCH}
+    - docker push ${DOCKER_IMAGE}:${DOCKER_TAG}-${ARCH}
   tags:
-  - docker
+    - docker
   variables:
     TARGET: app
   parallel:
@@ -196,7 +187,7 @@ pkg:docker:
       - DISTRO: debian
         PLATFORM: linux/amd64
         ARCH: x86_64
-        TRIPLET:  x86_64-linux-gnu
+        TRIPLET: x86_64-linux-gnu
       - DISTRO: debian
         PLATFORM: linux/arm/v7
         ARCH: armhf
@@ -218,19 +209,19 @@ deploy:docker:
   variables:
     DOCKER_CLI_EXPERIMENTAL: enabled
   before_script:
-  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
   script:
-  - docker manifest create ${DOCKER_IMAGE}:${DOCKER_TAG}
-                           ${DOCKER_IMAGE}:${DOCKER_TAG}-x86_64
-                           ${DOCKER_IMAGE}:${DOCKER_TAG}-arm64
-                           ${DOCKER_IMAGE}:${DOCKER_TAG}-armhf
-  - docker manifest push   ${DOCKER_IMAGE}:${DOCKER_TAG}
+    - docker manifest create ${DOCKER_IMAGE}:${DOCKER_TAG}
+      ${DOCKER_IMAGE}:${DOCKER_TAG}-x86_64
+      ${DOCKER_IMAGE}:${DOCKER_TAG}-arm64
+      ${DOCKER_IMAGE}:${DOCKER_TAG}-armhf
+    - docker manifest push   ${DOCKER_IMAGE}:${DOCKER_TAG}
   tags:
-  - docker
+    - docker
   needs:
-  - job: "pkg:docker: [debian, linux/arm64/v8, arm64, aarch64-linux-gnu, packaging/docker/Dockerfile.debian-multiarch]"
-  - job: "pkg:docker: [debian, linux/arm/v7, armhf, arm-linux-gnueabihf, packaging/docker/Dockerfile.debian-multiarch]"
-  - job: "pkg:docker: [debian, linux/amd64, x86_64, x86_64-linux-gnu]"
+    - job: "pkg:docker: [debian, linux/arm64/v8, arm64, aarch64-linux-gnu, packaging/docker/Dockerfile.debian-multiarch]"
+    - job: "pkg:docker: [debian, linux/arm/v7, armhf, arm-linux-gnueabihf, packaging/docker/Dockerfile.debian-multiarch]"
+    - job: "pkg:docker: [debian, linux/amd64, x86_64, x86_64-linux-gnu]"
 
 deploy:docker-dev:
   stage: deploy
@@ -238,13 +229,13 @@ deploy:docker-dev:
   variables:
     DOCKER_CLI_EXPERIMENTAL: enabled
   before_script:
-  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
   script:
-  - docker push ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
+    - docker push ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
   tags:
-  - docker
+    - docker
   needs:
-  - job: "prepare:docker: [fedora, --tag ${DOCKER_IMAGE}/dev:${CI_COMMIT_REF_NAME}]"
+    - job: "prepare:docker: [fedora, --tag ${DOCKER_IMAGE}/dev:${CI_COMMIT_REF_NAME}]"
 
 deploy:docker-dev-vscode:
   stage: deploy
@@ -252,64 +243,63 @@ deploy:docker-dev-vscode:
   variables:
     DOCKER_CLI_EXPERIMENTAL: enabled
   before_script:
-  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
   script:
-  - docker push ${DOCKER_IMAGE}/dev-vscode:${DOCKER_TAG}
+    - docker push ${DOCKER_IMAGE}/dev-vscode:${DOCKER_TAG}
   tags:
-  - docker
+    - docker
   needs:
-  - job: "prepare:docker: [fedora, dev-vscode, ${DOCKER_IMAGE}/dev-vscode]"
+    - job: "prepare:docker: [fedora, dev-vscode, ${DOCKER_IMAGE}/dev-vscode]"
 
 # Stage: latest
 
-
 .latest:docker:latest: &deploy_latest_docker
   stage: latest
   image: docker:20.10
   before_script:
-  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
   script:
-  - docker manifest create ${DOCKER_IMAGE}:latest
-                           ${DOCKER_IMAGE}:${DOCKER_TAG}-x86_64
-                           ${DOCKER_IMAGE}:${DOCKER_TAG}-arm64
-                           ${DOCKER_IMAGE}:${DOCKER_TAG}-armhf
-  - docker manifest push   ${DOCKER_IMAGE}:latest
+    - docker manifest create ${DOCKER_IMAGE}:latest
+      ${DOCKER_IMAGE}:${DOCKER_TAG}-x86_64
+      ${DOCKER_IMAGE}:${DOCKER_TAG}-arm64
+      ${DOCKER_IMAGE}:${DOCKER_TAG}-armhf
+    - docker manifest push   ${DOCKER_IMAGE}:latest
   tags:
-  - docker
+    - docker
   needs:
-  - job: deploy:docker
+    - job: deploy:docker
 
 .latest:docker-dev:latest: &deploy_latest_docker_dev
   stage: latest
   image: docker:20.10
   before_script:
-  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
   script:
-  - docker tag  ${DOCKER_IMAGE}/dev:${DOCKER_TAG} ${DOCKER_IMAGE}/dev:latest
-  - docker push ${DOCKER_IMAGE}/dev:latest
+    - docker tag  ${DOCKER_IMAGE}/dev:${DOCKER_TAG} ${DOCKER_IMAGE}/dev:latest
+    - docker push ${DOCKER_IMAGE}/dev:latest
   tags:
-  - docker
+    - docker
   needs:
-  - job: deploy:docker-dev
+    - job: deploy:docker-dev
 
 latest:docker:
   <<: *deploy_latest_docker
   only:
-  - "/^v\\d+(\\.\\d+)+$/" # Only on version tags
+    - "/^v\\d+(\\.\\d+)+$/" # Only on version tags
 
 latest:docker-dev:
   <<: *deploy_latest_docker_dev
   only:
-  - "/^v\\d+(\\.\\d+)+$/" # Only on version tags
+    - "/^v\\d+(\\.\\d+)+$/" # Only on version tags
 
 latest:docker:manual:
   <<: *deploy_latest_docker
   when: manual
   except:
-  - "/^v\\d+(\\.\\d+)+$/" # Only on version tags
+    - "/^v\\d+(\\.\\d+)+$/" # Only on version tags
 
 latest:docker-dev:manual:
   <<: *deploy_latest_docker_dev
   when: manual
   except:
-  - "/^v\\d+(\\.\\d+)+$/" # Only on version tags
+    - "/^v\\d+(\\.\\d+)+$/" # Only on version tags