---
variables:
  IMAGE_NAME: automatic
  IMAGE_CONTAINERFILE: automatic
  IMAGE_DEV_TAG: dev-${CI_COMMIT_SHORT_SHA} # to always be used for follow-up jobs
  IMAGE_CONTEXT: ${CI_PROJECT_DIR}
  IMAGE_CACHE: "true"

.image:rules:
  rules:
    # default branch
    - if: "$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $IMAGE_TAG == null"
      variables:
        IMAGE_TAG: latest
    # tags
    - if: "$CI_COMMIT_TAG && $IMAGE_TAG == null"
      variables:
        IMAGE_TAG: ${CI_COMMIT_TAG}
    # non-default branches
    - if: "$CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH && $IMAGE_TAG == null"
      variables:
        IMAGE_TAG: ${CI_COMMIT_REF_SLUG}
    # Always run if IMAGE_TAG is set by user
    - if: $IMAGE_TAG

.image:name:
  script:
    - |
      if [ "${IMAGE_CONTEXT}" = "${CI_PROJECT_DIR}" ]; then
        IMAGE_CONTEXT="."
      else
        IMAGE_CONTEXT=${IMAGE_CONTEXT/${CI_PROJECT_DIR}\/} # Remove prefixed path CI_PROJECT_DIR
      fi
    - |
      if [ "${IMAGE_NAME}" = "automatic" ]; then
        if [ "$(realpath ${IMAGE_CONTEXT})" != "$(realpath ${CI_PROJECT_DIR})" ]; then
          if [ "$(echo ${IMAGE_CONTEXT} | tr -cd '/' | wc -c)" -gt 2 ]; then
            echo "[!] Your context path is too deep. The limit is 2. Please set IMAGE_NAME to '\${CI_REGISTRY_IMAGE}/your_name/up_to_here'."
            exit 1
          fi
          IMAGE_NAME=$(echo ${CI_REGISTRY_IMAGE}/${IMAGE_CONTEXT} | tr [:upper:] [:lower:])  # Ensure lowercase
        else
          IMAGE_NAME=${CI_REGISTRY_IMAGE}
        fi
      fi
    - |
      if [ "${CI_JOB_NAME}" = "image:build" ]; then
        echo "[+] Setting IMAGE_NAME for subsequent jobs to ${IMAGE_NAME}."
        echo "IMAGE_NAME=${IMAGE_NAME}" > ${CI_PROJECT_DIR}/image.env
      fi
    - |
      if [ "${IMAGE_CONTAINERFILE}" = "automatic" ]; then
        IMAGE_CONTAINERFILE=${IMAGE_CONTEXT}/Dockerfile
      fi
    - |
      echo "[*] Build info:"
      echo "Context: ${IMAGE_CONTEXT}"
      echo "Containerfile: ${IMAGE_CONTAINERFILE#./}"
      echo "Name: ${IMAGE_NAME}"
      echo "Tags: ${IMAGE_TAG} ${IMAGE_DEV_TAG}"
      echo "Cache: ${IMAGE_CACHE}"
  artifacts:
    reports:
      dotenv: image.env

# Extend this one for a default image build in a monorepo
.image:build:
  extends: .kaniko # Default to kaniko.

# Don't extend this one, unless you intend to re-use your first image settings in a monorepo
image:build:
  extends: .image:build
