# Gitlab-CI Workflow
# stages:
#   build:
#     - Runs on commits on master or tags that match the pattern v1.0, v2.1rc1
#   deploy-staging:
#     - Runs on commits on master or tags that match the pattern v1.0, v2.1rc1 (continues deployment)
#   deploy-production:
#     - Runs on tags that match the pattern v1.0, v2.1rc1 (manual deployment)

variables:
  CONTAINER_REPO:             "docker.io/parity/substrate-api-sidecar"
  HELM_NAMESPACE:             "substrate-api-sidecar"
  HELM_RELEASE_NAME_1:        "kusama-sidecar"
  HELM_RELEASE_NAME_2:        "polkadot-sidecar"
  HELM_CUSTOM_VALUES_FILE_1:  "values-kusama.yaml"
  HELM_CUSTOM_VALUES_FILE_2:  "values-polkadot.yaml"
  HELM_REPO:                  "helm/"
  DOCKERFILE_DIRECTORY:       "./"

default:
  before_script:
    - |-
      if [[ $CI_COMMIT_TAG =~ ^v[0-9]+\.[0-9]+.*$ ]]; then
        export DOCKER_IMAGE_TAG="${CI_COMMIT_TAG}"
        export BUILD_LATEST_IMAGE="true"
      else
        export DOCKER_IMAGE_TAG="${CI_COMMIT_SHORT_SHA}-beta"
      fi

stages:
  - build
  - deploy-staging
  - deploy-production

.dockerize:               &dockerize
  stage:                  build
  image:                  quay.io/buildah/stable
  rules:
    - if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/'         # # i.e. v1.0, v2.1rc1
      when: always
    - if: '$CI_COMMIT_REF_NAME == "master"'
      when: always
  tags:
    - kubernetes-parity-build

.deploy-k8s:              &deploy-k8s
  image:                  paritytech/kubetools:3.5.3
  script:
    - |-
      kubectl get cm helm-custom-values -n $HELM_NAMESPACE -o jsonpath='{.data.values-kusama\.yaml}' > values-kusama.yaml
      kubectl get cm helm-custom-values -n $HELM_NAMESPACE -o jsonpath='{.data.values-polkadot\.yaml}' > values-polkadot.yaml
    - helm upgrade
        --install
        --atomic
        --timeout 120s
        --namespace $HELM_NAMESPACE
        --create-namespace
        --set image.repository="${CONTAINER_REPO}"
        --set image.tag="${DOCKER_IMAGE_TAG}"
        --values ${HELM_CUSTOM_VALUES_FILE_1}
        ${HELM_RELEASE_NAME_1} ${HELM_REPO}
    - helm upgrade
        --install
        --atomic
        --timeout 120s
        --namespace $HELM_NAMESPACE
        --create-namespace
        --set image.repository="${CONTAINER_REPO}"
        --set image.tag="${DOCKER_IMAGE_TAG}"
        --values ${HELM_CUSTOM_VALUES_FILE_2}
        ${HELM_RELEASE_NAME_2} ${HELM_REPO}
  tags:
    - kubernetes-parity-build

build:
  <<:                     *dockerize
  script:
    - echo building "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
    - |-
      if [[ $BUILD_LATEST_IMAGE ]]; then
        buildah bud \
        --format=docker \
        --tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" \
        --tag "$CONTAINER_REPO:latest" "$DOCKERFILE_DIRECTORY"
      else
        buildah bud \
        --format=docker \
        --tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" "$DOCKERFILE_DIRECTORY"
      fi
    - echo ${Docker_Hub_Pass_Parity} |
        buildah login --username ${Docker_Hub_User_Parity} --password-stdin docker.io
    - echo pushing "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
    - |-
      if [[ $BUILD_LATEST_IMAGE ]]; then
        buildah push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
        buildah push --format=v2s2 "$CONTAINER_REPO:latest"
      else
        buildah push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
      fi

deploy-staging:
  stage:                  deploy-staging
  <<:                     *deploy-k8s
  environment:
    name:                 parity-stg
  rules:
    - if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/'       # i.e. v1.0, v2.1rc1
    - if: '$CI_COMMIT_REF_NAME == "master"'

deploy-production:
  stage:                  deploy-production
  <<:                     *deploy-k8s
  environment:
    name:                 parity-chains
  rules:
    - if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/'       # i.e. v1.0, v2.1rc1
      when: manual
