stages:
- build
- tag

build:
  stage: build
  allow_failure: false
  image:
    name: gcr.io/kaniko-project/executor:v1.20.0-debug
    entrypoint: [""]
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
    - /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"


.tag-template:
  stage: tag
  image: docker:24.0.7
  rules:
    - if: $CI_COMMIT_TAG
      when: manual
  before_script:
  - mkdir -p $HOME/.docker
  - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > $HOME/.docker/config.json

tag-latest:
  extends: .tag-template
  script:
  - docker buildx imagetools create --tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG 

tag-major:
  extends: .tag-template
  script:
  - export newtag=$(echo $CI_COMMIT_TAG | cut -d. -f 1)
  - docker buildx imagetools create --tag $CI_REGISTRY_IMAGE:$newtag $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG 

tag-minor:
  extends: .tag-template
  script:
  - export newtag=$(echo $CI_COMMIT_TAG | cut -d. -f 1-2)
  - docker buildx imagetools create --tag $CI_REGISTRY_IMAGE:$newtag $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG