From 99102f2cb262fcbd536522b28e59a9bdafdf2e4b Mon Sep 17 00:00:00 2001
From: Konrad Botor <kbotor@syncad.com>
Date: Fri, 16 Dec 2022 11:36:49 +0100
Subject: [PATCH] Reworked docker build jobs - ref. hive/hive#406

---
 .gitlab-ci.yml                          |  93 ++++++-----------
 Dockerfile.docker-builder               |   1 -
 scripts/bash/build-data.sh              |  40 --------
 scripts/bash/build-data4commit.sh       |  32 ------
 scripts/bash/build-instance.sh          | 128 ------------------------
 scripts/bash/common.sh                  |   4 +-
 scripts/bash/export-binaries.sh         |  17 ----
 scripts/bash/get-image4submodule.sh     |  75 --------------
 templates/data_image_jobs.gitlab-ci.yml |  71 -------------
 templates/docker_jobs.gitlab-ci.yml     |  38 +++++++
 10 files changed, 70 insertions(+), 429 deletions(-)
 delete mode 100755 scripts/bash/build-data.sh
 delete mode 100755 scripts/bash/build-data4commit.sh
 delete mode 100755 scripts/bash/build-instance.sh
 delete mode 100755 scripts/bash/export-binaries.sh
 delete mode 100755 scripts/bash/get-image4submodule.sh
 delete mode 100644 templates/data_image_jobs.gitlab-ci.yml
 create mode 100644 templates/docker_jobs.gitlab-ci.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2159ec0..80ac964 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,7 +15,7 @@ stages:
 
 include:
   - template: Workflows/Branch-Pipelines.gitlab-ci.yml
-  - local: templates/data_image_jobs.gitlab-ci.yml
+  - local: templates/docker_jobs.gitlab-ci.yml
   - local: templates/test_jobs.gitlab-ci.yml
 
 .validation_job:
@@ -74,11 +74,12 @@ lint_python_scripts:
       junit: pylint-junit-result.xml
 
 .build_docker_image:
-  extends: .docker_image_builder_job
+  extends: .docker_image_builder_job_template
   image: docker:20.10.21
   variables:
     BUILD_TARGET: ""
   before_script:
+    - !reference [.docker_image_builder_job_template, before_script]
     - |
       echo -e "\e[0Ksection_start:$(date +%s):login[collapsed=true]\r\e[0KLogging to Docker registry..."
       docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
@@ -95,41 +96,30 @@ lint_python_scripts:
       fi
       echo -e "\e[0Ksection_end:$(date +%s):tag\r\e[0K"
       echo -e "\e[0Ksection_start:$(date +%s):build[collapsed=true]\r\e[0KBaking image "$CI_REGISTRY_IMAGE/$BUILD_TARGET:${tag}"..."
-      docker context create builder-context
-      docker buildx create --driver docker-container --name docker-container-builder builder-context
-      docker buildx bake --progress=plain --builder docker-container-builder --push "$BUILD_TARGET"
+      docker buildx bake --progress=plain --push "$BUILD_TARGET"
       echo -e "\e[0Ksection_end:$(date +%s):build\r\e[0K"
-  needs:
-    - build_docker_dind_image
   tags:
     - public-runner-docker
 
 build_docker_dind_image:
+  extends: .build_docker_image
   stage: pre-build
-  image: docker:20.10.21
   variables:
-    DOCKER_BUILDKIT: 1
-    DOCKER_DRIVER: overlay2
-    DOCKER_TLS_CERTDIR: "/certs"
     BUILD_TARGET: "docker-dind"
-  before_script:
-    - !reference [.build_docker_image, before_script]
-  script:
-    - !reference [.build_docker_image, script]
   rules:
     - if: $CI_COMMIT_BRANCH
       exists:
         - Dockerfile.docker-dind
   services:
     - docker:20.10.21-dind
-  tags:
-    - public-runner-docker
 
 build_docker_builder_image:
   extends: .build_docker_image
   stage: build
   variables:
     BUILD_TARGET: "docker-builder"
+  needs:
+    - build_docker_dind_image
   rules:
     - if: $CI_COMMIT_BRANCH
       exists:
@@ -140,6 +130,8 @@ build_image_remover_image:
   stage: build
   variables:
     BUILD_TARGET: "image-remover"
+  needs:
+    - build_docker_dind_image
   rules:
     - if: $CI_COMMIT_BRANCH
       exists:
@@ -150,6 +142,8 @@ build_benchmark_test_runner_image:
   stage: build
   variables:
     BUILD_TARGET: "benchmark-test-runner"
+  needs:
+    - build_docker_dind_image
   rules:
     - if: $CI_COMMIT_BRANCH
       exists:
@@ -160,39 +154,27 @@ build_tox_test_runner_image:
   stage: build
   variables:
     BUILD_TARGET: "tox-test-runner"
+  needs:
+    - build_docker_dind_image
   rules:
     - if: $CI_COMMIT_BRANCH
       exists:
         - Dockerfile.tox-test-runner
 
-prepare_example_hived_data_5m_image:
-  extends: .prepare_hived_data_5m_image
+example_docker_image_builder_job:
+  extends: .docker_image_builder_job_template
   stage: example-build
-  variables:
-    REGISTRY_USER: "$CI_REGISTRY_USER"
-    REGISTRY_PASS: "$CI_REGISTRY_PASSWORD"
-    REGISTRY_URL: "registry.gitlab.syncad.com/hive/common-ci-configuration/hive/"
   before_script:
-    - LOG_FILE=tmp.log source /usr/local/bin/common.sh
-    - do_clone_commit 9f39eae9ef35642445ae63e8c0a681f1376334ed $SUBDIRECTORY $REPOSITORY_URL 
-  after_script:
-    - cat docker_image_name.env
-  when: manual
-  tags:
-    - public-runner-docker
-
-prepare_example_haf_data_5m_image:
-  extends: .prepare_haf_data_5m_image
-  stage: example-build
-  variables:
-    REGISTRY_USER: "$CI_REGISTRY_USER"
-    REGISTRY_PASS: "$CI_REGISTRY_PASSWORD"
-    REGISTRY_URL: "registry.gitlab.syncad.com/hive/common-ci-configuration/haf/"
-  before_script:
-    - LOG_FILE=tmp.log source /usr/local/bin/common.sh
-    - do_clone_commit c21bdf1937c1cbd2781aa86816f159285a1909bf $SUBDIRECTORY $REPOSITORY_URL
-  after_script:
-    - cat docker_image_name.env
+    - !reference [.build_docker_image, before_script]
+  script:
+    - |
+      docker buildx build --progress=plain --push \
+        --cache-from type=registry,ref=$CI_REGISTRY_IMAGE/alpine-example:latest-cache \
+        --cache-to type=registry,mode=max,ref=$CI_REGISTRY_IMAGE/alpine-example:latest-cache \
+        --tag $CI_REGISTRY_IMAGE/alpine-example:latest \
+        https://github.com/alpinelinux/docker-alpine.git
+  needs:
+    - build_docker_dind_image
   when: manual
   tags:
     - public-runner-docker
@@ -232,28 +214,15 @@ example_tox_test_job:
   tags:
     - public-runner-docker
 
-example_hived_data_image_cleanup:
-  extends: .docker_image_cleanup_job
-  stage: example-cleanup
-  variables:
-    REGISTRY_PASS: "$REGISTRY_PASS"
-    IMAGE_PATH: $HIVED_IMAGE_NAME_REGISTRY_PATH
-    IMAGE_TAG: $HIVED_IMAGE_NAME_REGISTRY_TAG
-  needs:
-    - prepare_example_hived_data_5m_image
-  when: manual
-  tags:
-    - public-runner-docker
-
-example_haf_data_image_cleanup:
-  extends: .docker_image_cleanup_job
+example_image_cleanup_job:
+  extends: .docker_image_cleanup_job_template
   stage: example-cleanup
   variables:
     REGISTRY_PASS: "$REGISTRY_PASS"
-    IMAGE_PATH: $HAF_IMAGE_NAME_REGISTRY_PATH
-    IMAGE_TAG: $HAF_IMAGE_NAME_REGISTRY_TAG
+    IMAGE_PATH: $CI_REGISTRY_IMAGE/alpine-example
+    IMAGE_TAG: latest
   needs:
-    - prepare_example_haf_data_5m_image
+    - example_docker_image_builder_job
   when: manual
   tags:
-    - public-runner-docker
+    - public-runner-docker
\ No newline at end of file
diff --git a/Dockerfile.docker-builder b/Dockerfile.docker-builder
index c28a018..9fd571f 100644
--- a/Dockerfile.docker-builder
+++ b/Dockerfile.docker-builder
@@ -1,4 +1,3 @@
 FROM docker:20.10.21 AS docker-builder
 
-COPY scripts/bash/*.sh /usr/local/bin
 RUN apk add --no-cache bash git ca-certificates curl
\ No newline at end of file
diff --git a/scripts/bash/build-data.sh b/scripts/bash/build-data.sh
deleted file mode 100755
index c13e6f7..0000000
--- a/scripts/bash/build-data.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/bash
-# shellcheck source-path=SCRIPTDIR
-
-SCRIPTPATH=$(realpath "$0")
-SCRIPTDIR=$(dirname "$SCRIPTPATH")
-
-export LOG_FILE=build_data.log
-source "$SCRIPTDIR/common.sh"
-
-echo -e "\e[0Ksection_start:$(date +%s):input_processing[collapsed=true]\r\e[0KChecking build-data.sh script input..."
-BUILD_IMAGE_TAG=${1:?"Missing argument #1: build image tag"}
-shift
-SRCROOTDIR=${1:?"Missing argument #2: source directory"}
-shift
-REGISTRY=${1:?"Missing argument #3: target image registry"}
-shift 
-
-# Supplement a registry path by trailing slash (if needed)
-[[ "${REGISTRY}" != */ ]] && REGISTRY="${REGISTRY}/"
-
-BUILD_HIVE_TESTNET=OFF
-HIVE_CONVERTER_BUILD=OFF
-echo -e "\e[0Ksection_end:$(date +%s):input_processing\r\e[0K"
-
-"$SCRIPTDIR/build-instance.sh" "${BUILD_IMAGE_TAG}" "${SRCROOTDIR}" "${REGISTRY}" "$@"
-
-echo -e "\e[0Ksection_start:$(date +%s):data_image_docker_build[collapsed=true]\r\e[0KBuilding data image..."
-echo "Instance image built. Attempting to build a data image based on it..."
-
-pushd "$SRCROOTDIR" ||exit 1 
-
-docker build --target=data \
-  --build-arg CI_REGISTRY_IMAGE="$REGISTRY" \
-  --build-arg BUILD_HIVE_TESTNET=$BUILD_HIVE_TESTNET \
-  --build-arg HIVE_CONVERTER_BUILD=$HIVE_CONVERTER_BUILD \
-  --build-arg BUILD_IMAGE_TAG="$BUILD_IMAGE_TAG" \
-  -t "${REGISTRY}data:data-${BUILD_IMAGE_TAG}" -f Dockerfile .
-
-popd || exit 1
-echo -e "\e[0Ksection_end:$(date +%s):data_image_docker_build\r\e[0K"
\ No newline at end of file
diff --git a/scripts/bash/build-data4commit.sh b/scripts/bash/build-data4commit.sh
deleted file mode 100755
index 27b5e60..0000000
--- a/scripts/bash/build-data4commit.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#! /bin/bash
-# shellcheck source-path=SCRIPTDIR
-
-SCRIPTPATH=$(realpath "$0")
-SCRIPTDIR=$(dirname "$SCRIPTPATH")
-
-export LOG_FILE=build_data4commit.log
-source "$SCRIPTDIR/common.sh"
-
-echo -e "\e[0Ksection_start:$(date +%s):input_processing[collapsed=true]\r\e[0KChecking build-data4commit.sh script input..."
-COMMIT=${1:?"Missing argument #1: commit SHA"}
-shift
-REGISTRY=${1:?"Missing argument #2: target image registry"}
-shift
-REPOSITORY=${1:?"Missing argument #3: repository URL"}
-shift
-BRANCH="master"
-
-BUILD_IMAGE_TAG=$COMMIT
-
-readarray -d "/" -t REPOSITORY_URL_ARRAY <<< "$REPOSITORY"
-REPOSITORY_ARRAY_LENGTH=${#REPOSITORY_URL_ARRAY[*]}
-readarray -d "." -t SPLIT_REPOSITORY_NAME <<< "${REPOSITORY_URL_ARRAY[$REPOSITORY_ARRAY_LENGTH-1]}"
-PROJECT_NAME=${SPLIT_REPOSITORY_NAME[0]}
-echo -e "\e[0Ksection_end:$(date +%s):input_processing\r\e[0K"
-
-echo -e "\e[0Ksection_start:$(date +%s):cloning[collapsed=true]\r\e[0KCloning repository $REPOSITORY into directory ${PROJECT_NAME}-${COMMIT}..."
-do_clone "$BRANCH" "./${PROJECT_NAME}-${COMMIT}" "$REPOSITORY" "$COMMIT"
-echo -e "\e[0Ksection_end:$(date +%s):cloning\r\e[0K"
-
-"$SCRIPTDIR/build-data.sh" "$BUILD_IMAGE_TAG" "./${PROJECT_NAME}-${COMMIT}" "$REGISTRY" "$@"
-
diff --git a/scripts/bash/build-instance.sh b/scripts/bash/build-instance.sh
deleted file mode 100755
index 2b6a024..0000000
--- a/scripts/bash/build-instance.sh
+++ /dev/null
@@ -1,128 +0,0 @@
-#! /bin/bash
-# shellcheck source-path=SCRIPTDIR
-
-SCRIPTPATH=$(realpath "$0")
-SCRIPTDIR=$(dirname "$SCRIPTPATH")
-
-export LOG_FILE=build_instance.log
-source "$SCRIPTDIR/common.sh"
-
-BUILD_IMAGE_TAG=""
-REGISTRY=""
-SRCROOTDIR=""
-IMAGE_TAG_PREFIX=""
-BUILD_HIVE_TESTNET=OFF
-HIVE_CONVERTER_BUILD=OFF
-
-
-print_help () {
-    echo "Usage: $0 <image_tag> <src_dir> <registry_url> [OPTION[=VALUE]]..."
-    echo
-    echo "Allows to build docker image containing Hived installation"
-    echo "OPTIONS:"
-    echo "  --network-type=TYPE       Allows to specify type of blockchain network supported by built hived. Allowed values: mainnet, testnet, mirrornet"
-    echo "  --export-binaries=PATH    Allows to specify a path where binaries shall be exported from built image."
-    echo "  --help                    Display this help screen and exit"
-    echo
-}
-
-EXPORT_PATH=""
-
-echo -e "\e[0Ksection_start:$(date +%s):input_processing[collapsed=true]\r\e[0KChecking build-instance.sh script input..."
-while [ $# -gt 0 ]; do
-  case "$1" in
-    --network-type=*)
-        type="${1#*=}"
-
-        case $type in
-          "testnet"*)
-            BUILD_HIVE_TESTNET=ON
-            IMAGE_TAG_PREFIX=testnet-
-            ;;
-          "mirrornet"*)
-            BUILD_HIVE_TESTNET=OFF
-            HIVE_CONVERTER_BUILD=ON
-            IMAGE_TAG_PREFIX=mirror-
-            ;;
-          "mainnet"*)
-            BUILD_HIVE_TESTNET=OFF
-            HIVE_CONVERTER_BUILD=OFF
-            IMAGE_TAG_PREFIX=
-            ;;
-           *)
-            echo "ERROR: '$type' is not a valid network type"
-            echo
-            exit 3
-        esac
-        ;;
-    --export-binaries=*)
-        arg="${1#*=}"
-        EXPORT_PATH="$arg"
-        ;;
-    --help)
-        print_help
-        exit 0
-        ;;
-    *)
-        if [ -z "$BUILD_IMAGE_TAG" ];
-        then
-          BUILD_IMAGE_TAG="${1}"
-        elif [ -z "$SRCROOTDIR" ];
-        then
-          SRCROOTDIR="${1}"
-        elif [ -z "$REGISTRY" ];
-        then
-          REGISTRY=${1}
-        else
-          echo "ERROR: '$1' is not a valid option/positional argument"
-          echo
-          print_help
-          exit 2
-        fi
-        ;;
-    esac
-    shift
-done
-
-[[ -z "$BUILD_IMAGE_TAG" ]] && echo "Missing argument #1: build image tag." && exit 1
-[[ -z "$SRCROOTDIR" ]] && echo "Missing argument #2: source directory. Exiting." && exit 1
-[[ -z "$REGISTRY" ]] && echo "Missing argument #3: target image registry. Exiting." && exit 1
-echo -e "\e[0Ksection_end:$(date +%s):input_processing\r\e[0K"
-
-echo -e "\e[0Ksection_start:$(date +%s):base_instance_image_docker_build[collapsed=true]\r\e[0KBuilding base instance image..."
-# Supplement a registry path by trailing slash (if needed)
-[[ "${REGISTRY}" != */ ]] && REGISTRY="${REGISTRY}/"
-
-echo "Moving into source root directory: ${SRCROOTDIR}"
-pushd "$SRCROOTDIR" || exit 1
-
-export DOCKER_BUILDKIT=1
-
-docker build --target=base_instance \
-  --build-arg CI_REGISTRY_IMAGE="$REGISTRY" \
-  --build-arg BUILD_HIVE_TESTNET=$BUILD_HIVE_TESTNET \
-  --build-arg HIVE_CONVERTER_BUILD=$HIVE_CONVERTER_BUILD \
-  --build-arg BUILD_IMAGE_TAG="$BUILD_IMAGE_TAG" \
-  -t "${REGISTRY}base_instance:base_instance-${BUILD_IMAGE_TAG}" \
-  -f Dockerfile .
-echo -e "\e[0Ksection_end:$(date +%s):base_instance_image_docker_build\r\e[0K"
-
-echo -e "\e[0Ksection_start:$(date +%s):instance_image_docker_build[collapsed=true]\r\e[0KBuilding instance image..."
-# Build the image containing only binaries and be ready to start running hived instance, operating on mounted volumes pointing instance datadir and shm_dir
-docker build --target=instance \
-  --build-arg CI_REGISTRY_IMAGE="$REGISTRY" \
-  --build-arg BUILD_HIVE_TESTNET=$BUILD_HIVE_TESTNET \
-  --build-arg HIVE_CONVERTER_BUILD=$HIVE_CONVERTER_BUILD \
-  --build-arg BUILD_IMAGE_TAG="$BUILD_IMAGE_TAG" \
-  -t "${REGISTRY}${IMAGE_TAG_PREFIX}instance:instance-${BUILD_IMAGE_TAG}" \
-  -f Dockerfile .
-
-popd || exit 1
-
-echo -e "\e[0Ksection_end:$(date +%s):instance_image_docker_build\r\e[0K"
-
-if [ -n "${EXPORT_PATH}" ] ;
-then
-  "$SCRIPTDIR/export-binaries.sh" "${REGISTRY}${IMAGE_TAG_PREFIX}instance:instance-${BUILD_IMAGE_TAG}" "${EXPORT_PATH}"
-fi
-
diff --git a/scripts/bash/common.sh b/scripts/bash/common.sh
index e4bed60..07a6b97 100755
--- a/scripts/bash/common.sh
+++ b/scripts/bash/common.sh
@@ -1,8 +1,6 @@
 #! /bin/bash
 
-set -euo pipefail 
-
-exec > >(tee "${LOG_FILE}") 2>&1
+set -euo pipefail
 
 log_exec_params() {
   echo
diff --git a/scripts/bash/export-binaries.sh b/scripts/bash/export-binaries.sh
deleted file mode 100755
index 31c2237..0000000
--- a/scripts/bash/export-binaries.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#! /bin/bash
-
-set -euo pipefail
-
-echo -e "\e[0Ksection_start:$(date +%s):binaries_export[collapsed=true]\r\e[0KExporting binaries..."
-IMAGE_TAGGED_NAME=${1:-"Missing image name"}
-EXPORT_PATH=${2:-"Missing export target directory"}
-
-echo "Attempting to export built binaries from image: ${IMAGE_TAGGED_NAME} into directory: ${EXPORT_PATH}"
-
-export DOCKER_BUILDKIT=1
-
-docker build -o "${EXPORT_PATH}" - << EOF
-    FROM scratch
-    COPY --from=${IMAGE_TAGGED_NAME} /home/hived/bin/ /
-EOF
-echo -e "\e[0Ksection_end:$(date +%s):binaries_export\r\e[0K"
\ No newline at end of file
diff --git a/scripts/bash/get-image4submodule.sh b/scripts/bash/get-image4submodule.sh
deleted file mode 100755
index addde11..0000000
--- a/scripts/bash/get-image4submodule.sh
+++ /dev/null
@@ -1,75 +0,0 @@
-#! /bin/bash
-# shellcheck source-path=SCRIPTDIR
-
-set -euo pipefail
-
-SCRIPTPATH=$(realpath "$0")
-SCRIPTDIR=$(dirname "$SCRIPTPATH")
-
-IMGNAME="data"
-
-source "$SCRIPTDIR/docker-image-utils.sh"
-
-echo -e "\e[0Ksection_start:$(date +%s):input_check[collapsed=true]\r\e[0KChecking get-image4submodule.sh script input..."
-SUBMODULE_PATH=${1:?"Missing argument #1: submodule path"}
-shift
-REGISTRY=${1:?"Missing argument #2: image registry"}
-shift
-DOTENV_VAR_NAME=${1:?"Missing argument #3: dot-env name"}
-shift
-REGISTRY_USER=${1:?"Missing argument #4: registry user"}
-shift
-REGISTRY_PASSWORD=${1:?"Missing argument #5: registry password"}
-shift
-BINARY_CACHE_PATH=${1:?"Missing argument #6: binary cache path"}
-shift
-REPOSITORY=${1:?"Missing argument #7: repository URL"}
-shift
-echo -e "\e[0Ksection_end:$(date +%s):input_check\r\e[0K"
-
-retrieve_submodule_commit () {
-  local -r p="${1}"
-  pushd "$p" >/dev/null 2>&1
-  local -r commit=$( git rev-parse HEAD )
-
-  popd >/dev/null 2>&1
-
-  echo "$commit"
-}
-
-echo -e "\e[0Ksection_start:$(date +%s):retrieve_submodule_commit[collapsed=true]\r\e[0KRetrieving submodule commit..."
-echo "Attempting to get commit for: $SUBMODULE_PATH"
-commit=$( retrieve_submodule_commit "${SUBMODULE_PATH}" )
-img=$( build_image_name $IMGNAME "$commit" "$REGISTRY" )
-img_path=$( build_image_registry_path $IMGNAME "$commit" "$REGISTRY" )
-img_tag=$( build_image_registry_tag $IMGNAME "$commit" "$REGISTRY" )
-echo -e "\e[0Ksection_end:$(date +%s):retrieve_submodule_commit\r\e[0K"
-
-echo -e "\e[0Ksection_start:$(date +%s):docker_login[collapsed=true]\r\e[0KLogging in to Docker repository..."
-echo "$REGISTRY_PASSWORD" | docker login -u "$REGISTRY_USER" "$REGISTRY" --password-stdin
-echo -e "\e[0Ksection_end:$(date +%s):docker_login\r\e[0K"
-
-echo -e "\e[0Ksection_start:$(date +%s):image_exists[collapsed=true]\r\e[0KChecking if image exists..."
-image_exists=0
-docker_image_exists "$IMGNAME" "$commit" "$REGISTRY" image_exists
-echo -e "\e[0Ksection_end:$(date +%s):image_exists\r\e[0K"
-
-if [ "$image_exists" -eq 1 ];
-then
-  echo "Image already exists..."
-  "$SCRIPTDIR/export-binaries.sh" "${img}" "${BINARY_CACHE_PATH}"
-else
-  # Here continue an image build.
-  echo "Image ${img} is missing. Building it..."
-  "$SCRIPTDIR/build-data4commit.sh" "$commit" "$REGISTRY" "$REPOSITORY" --export-binaries="${BINARY_CACHE_PATH}"
-  echo -e "\e[0Ksection_start:$(date +%s):image_push[collapsed=true]\r\e[0KPusing data image to Docker repository..."
-  time docker push "$img"
-  echo -e "\e[0Ksection_end:$(date +%s):image_push\r\e[0K"
-fi
-
-echo -e "\e[0Ksection_start:$(date +%s):dot_env[collapsed=true]\r\e[0KGenerating dotenv file..."
-echo "$DOTENV_VAR_NAME=$img" > docker_image_name.env
-echo "${DOTENV_VAR_NAME}_REGISTRY_PATH=$img_path" >> docker_image_name.env
-echo "${DOTENV_VAR_NAME}_REGISTRY_TAG=$img_tag" >> docker_image_name.env
-cat docker_image_name.env
-echo -e "\e[0Ksection_end:$(date +%s):dot_env\r\e[0K"
\ No newline at end of file
diff --git a/templates/data_image_jobs.gitlab-ci.yml b/templates/data_image_jobs.gitlab-ci.yml
deleted file mode 100644
index af63a02..0000000
--- a/templates/data_image_jobs.gitlab-ci.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-variables:
-  DOCKER_BUILDER_TAG: "latest"
-  DOCKER_DIND_TAG: "latest"
-  IMAGE_REMOVER_TAG: "latest"
-
-.docker_image_builder_job:
-  variables:
-    DOCKER_BUILDKIT: 1
-    DOCKER_DRIVER: overlay2
-    DOCKER_TLS_CERTDIR: "/certs"
-  image: registry.gitlab.syncad.com/hive/common-ci-configuration/docker-builder:${DOCKER_BUILDER_TAG}
-  interruptible: true
-  services:
-    - name: registry.gitlab.syncad.com/hive/common-ci-configuration/docker-dind:${DOCKER_DIND_TAG}
-      alias: docker
-
-.docker_image_cleanup_job:
-  image: registry.gitlab.syncad.com/hive/common-ci-configuration/image-remover:${IMAGE_REMOVER_TAG}
-  interruptible: true
-  variables:
-    REGISTRY: $CI_REGISTRY_IMAGE
-    REGISTRY_PASS: ""
-    IMAGE_PATH: ""
-    IMAGE_TAG: ""
-  script:
-    - echo "Attempting to cleanup an image $IMAGE_PATH using tag $IMAGE_TAG from $REGISTRY"
-    - python /delete-image.py "$REGISTRY_PASS" "$CI_PROJECT_ID" "$IMAGE_PATH" "$IMAGE_TAG"
-  when: always
-
-.prepare_data_5m_image:
-  extends: .docker_image_builder_job
-  variables:
-    DOTENV_NAME: ""
-    REGISTRY_USER: "$CI_IMG_BUILDER_USER"
-    REGISTRY_PASS: "$CI_IMG_BUILDER_PASSWORD"
-    REGISTRY_URL: ""
-    REPOSITORY_URL: ""
-    SUBDIRECTORY: ""
-  script:
-    - |
-      get-image4submodule.sh "$SUBDIRECTORY" \
-        "$REGISTRY_URL" \
-        "$DOTENV_NAME" \
-        "$REGISTRY_USER" \
-        "$REGISTRY_PASS" \
-        "hived-mainnet-binaries" \
-        "$REPOSITORY_URL"
-    - ls -la ./hived-mainnet-binaries/*
-  artifacts:
-    reports:
-      dotenv: docker_image_name.env
-    paths:
-      - ./hived-mainnet-binaries/*
-    expire_in: 6 hours
-    when: always
-
-.prepare_hived_data_5m_image:
-  extends: .prepare_data_5m_image
-  variables:
-    DOTENV_NAME: "HIVED_IMAGE_NAME"
-    REGISTRY_URL: "registry.gitlab.syncad.com/hive/hive/"
-    REPOSITORY_URL: "https://gitlab.syncad.com/hive/hive.git"
-    SUBDIRECTORY: "hive"
-
-.prepare_haf_data_5m_image:
-  extends: .prepare_data_5m_image
-  variables:
-    DOTENV_NAME: "HAF_IMAGE_NAME"
-    REGISTRY_URL: "registry.gitlab.syncad.com/hive/haf/"
-    REPOSITORY_URL: "https://gitlab.syncad.com/hive/haf.git"
-    SUBDIRECTORY: "haf"
diff --git a/templates/docker_jobs.gitlab-ci.yml b/templates/docker_jobs.gitlab-ci.yml
new file mode 100644
index 0000000..60cfac3
--- /dev/null
+++ b/templates/docker_jobs.gitlab-ci.yml
@@ -0,0 +1,38 @@
+variables:
+  DOCKER_BUILDER_TAG: "latest"
+  DOCKER_DIND_TAG: "latest"
+  IMAGE_REMOVER_TAG: "latest"
+
+.artifact_policy:
+  artifacts:
+    when: always
+    expire_in: 6 hours
+
+.docker_image_builder_job_template:
+  variables:
+    DOCKER_DRIVER: overlay2
+    DOCKER_TLS_CERTDIR: "/certs"
+  image: registry.gitlab.syncad.com/hive/common-ci-configuration/docker-builder:${DOCKER_BUILDER_TAG}
+  interruptible: true
+  before_script:
+    - |
+      echo -e "\e[0Ksection_start:$(date +%s):buildkit_config[collapsed=true]\r\e[0KConfiguring Docker BuildKit..."
+      docker context create builder-context
+      docker buildx create --driver docker-container --name docker-container-builder --use builder-context
+      echo -e "\e[0Ksection_end:$(date +%s):buildkit_config\r\e[0K"
+  services:
+    - name: registry.gitlab.syncad.com/hive/common-ci-configuration/docker-dind:${DOCKER_DIND_TAG}
+      alias: docker
+
+.docker_image_cleanup_job_template:
+  image: registry.gitlab.syncad.com/hive/common-ci-configuration/image-remover:${IMAGE_REMOVER_TAG}
+  interruptible: true
+  variables:
+    REGISTRY: $CI_REGISTRY_IMAGE
+    REGISTRY_PASS: ""
+    IMAGE_PATH: ""
+    IMAGE_TAG: ""
+  script:
+    - echo "Attempting to cleanup an image $IMAGE_PATH using tag $IMAGE_TAG from $REGISTRY"
+    - python /delete-image.py "$REGISTRY_PASS" "$CI_PROJECT_ID" "$IMAGE_PATH" "$IMAGE_TAG"
+  when: always
-- 
GitLab