From 5c00a692f6da20ad01111b0ea5f7e7e9497ee219 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Fri, 28 Jul 2023 21:57:20 +0200
Subject: [PATCH] Add container build pipeline

---
 .gitlab-ci.yml | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 .gitlab-ci.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..59a7a71
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,60 @@
+variables:
+    GIT_SUBMODULE_STRATEGY: recursive
+    GIT_SUBMODULE_FORCE_HTTPS: "true"
+    DOCKER_HOST: tcp://docker:2375
+    DOCKER_TLS_CERTDIR:
+    DOCKER_DRIVER: overlay2
+    DOCKERFILE: Dockerfile_ExerciceChecker
+    PLATFORMS: linux/amd64,linux/arm64/v8
+    CHECKER_PROJECT_FOLDER: ExerciceChecker
+
+stages:
+    - build
+    - release
+
+default:
+    tags:
+        - docker
+    image: docker:latest
+    services:
+        - docker:dind
+    before_script:
+        - apk update
+        - apk add git
+        - apk add jq
+        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+        - docker buildx create --use
+        - > 
+            VERSION=$(jq -r .version $CHECKER_PROJECT_FOLDER/package.json)
+        - >
+            CONTAINER_IMAGE=$CI_REGISTRY_IMAGE:$VERSION-dev
+
+build:
+    stage: build
+    tags:
+        - build
+    script:
+        - apk add curl
+        - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | sh
+        - mv .secure_files/env $CHECKER_PROJECT_FOLDER/.env
+        # Need to build for each platform separately because of multi-stage builds (docker buildx don't use cache same way as docker build)
+        - >
+            platform_array=$(echo $PLATFORMS | tr "," "\n");
+            for platform in $platform_array; do
+              echo "Buildind for : $platform"
+              docker buildx build --pull --platform $platform --file $DOCKERFILE --tag $CONTAINER_IMAGE .
+            done
+        # Here docker buildx can use cached images created in previous step
+        - docker buildx build --platform $PLATFORMS --file $DOCKERFILE --push --tag $CONTAINER_IMAGE .
+    rules:
+        - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH =~ /^v_[0-9]+(\.[0-9]+)*$/ || $CI_COMMIT_TAG =~ /^v_[0-9]+(\.[0-9]+)*$/'
+
+release-image:
+    stage: release
+    tags:
+        - release
+    script:
+        - docker buildx imagetools create $CONTAINER_IMAGE --tag $CI_REGISTRY_IMAGE:$VERSION
+        - docker buildx imagetools create $CONTAINER_IMAGE --tag $CI_REGISTRY_IMAGE:latest
+    rules:
+         - if: '$CI_COMMIT_BRANCH == "main"'
\ No newline at end of file
-- 
GitLab