image: docker:19.03
services:
  - docker:19.03-dind

stages:
  - build
  - release

variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2
  # DOCKER_TLS_CERTDIR: "/certs"
  DOCKER_TLS_CERTDIR: ""
  CONTAINER_BUILDER_IMAGE: $CI_REGISTRY_IMAGE:builder-latest
  CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest

before_script:
  - export CONTAINER_TAG_IMAGE="$CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:1}"
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

build:
  stage: build
  script:
    - docker pull $CONTAINER_TEST_IMAGE || true
    - docker pull $CONTAINER_RELEASE_IMAGE || true
    - docker pull $CONTAINER_TAG_IMAGE || true
    - docker pull $CONTAINER_BUILDER_IMAGE || true
    - docker build --pull -t $CONTAINER_BUILDER_IMAGE --target builder .
    - docker build --pull -t $CONTAINER_TEST_IMAGE .
    - docker push $CONTAINER_BUILDER_IMAGE
    - docker push $CONTAINER_TEST_IMAGE

release-image:
  stage: release
  script:
    - docker pull $CONTAINER_TEST_IMAGE
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
    - docker push $CONTAINER_RELEASE_IMAGE
  only:
    - master

release-tag:
  stage: release
  script:
    - docker pull $CONTAINER_TEST_IMAGE
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_TAG_IMAGE
    - docker push $CONTAINER_TAG_IMAGE
  only:
    - /^v\d+\.\d+\.\d+/
  except:
    - branch