---
variables:
  S3_ENDPOINT: "https://s3.embl.de"
  S3_BUCKET: "annelids"
  JBROWSE_HOSTNAME: "genomes-testing.arendt.embl.de"
  RELEASE_LABEL: "testing"
  INGRESS_CLASS: "internal-users"

stages:
  - build
  - deploy
  - clean

s3_access_test:
  stage: deploy
  image: minio/mc
  rules:
    - when: always  # TODO change where necessary
  allow_failure: true  # Don't care if we are not uploading anything yet
  before_script:
    - mc alias set genomes $S3_ENDPOINT $S3_ACCESS_KEY $S3_SECRET_KEY
  script:
    - mc ls genomes/$S3_BUCKET

cluster_access_test:
  stage: deploy
  image: line/kubectl-kustomize:1.30.1-5.4.2
  before_script:
    - echo $KUBECONFIG | base64 -d > /tmp/kubeconf
    - export KUBECONFIG=/tmp/kubeconf
  script:
    - kubectl config current-context
  rules:
    - when: always  # TODO change where necessary

build_nginx_with_jbrowse_config_file:
  stage: build
  image: gcr.io/kaniko-project/executor:debug-v0.21.0
  before_script:
    # yamllint disable-line rule:line-length
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
  script:
    - /kaniko/executor --cache=true --context $CI_PROJECT_DIR/image
      --dockerfile $CI_PROJECT_DIR/image/Dockerfile
      --destination $CI_REGISTRY_IMAGE:jbrowse2-$CI_COMMIT_SHORT_SHA
    - echo "Destination follows"
    - echo $CI_REGISTRY_IMAGE:jbrowse2-$CI_COMMIT_SHORT_SHA

build_export_artifacts_via_inception:
  stage: build
  image:
    name: $CI_REGISTRY_IMAGE:jbrowse2-$CI_COMMIT_SHORT_SHA
  needs:
    - build_nginx_with_jbrowse_config_file
  script:
    - ls /usr/share/nginx/html
    - cp /usr/share/nginx/html/index.html .
    - cp /usr/share/nginx/html/config.json .
  artifacts:
    paths:
    - index.html
    - config.json

deploy_to_k8s:
  stage: deploy
  image: dtzar/helm-kubectl:3.8.2
  needs:
    - cluster_access_test
    - s3_access_test
    - build_nginx_with_jbrowse_config_file
  before_script:
    - echo $KUBECONFIG | base64 -d > /tmp/kubeconf
    - export KUBECONFIG=/tmp/kubeconf
  script:
    - echo "You are on branch $CI_COMMIT_REF_NAME"
    - envsubst < deployment/jbrowse2-dep.yml > deployment/jbrowse2-dep.yaml
    - cat deployment/jbrowse2-dep.yaml
    - kubectl apply -k deployment
    - kubectl -n $NS rollout restart deployment/jbrowse2-$RELEASE_LABEL
    - kubectl -n $NS wait --for=condition=available
      --timeout=60s deploy/jbrowse2-$RELEASE_LABEL
    - kubectl -n $NS rollout status deployment/jbrowse2-$RELEASE_LABEL
  rules:
    - if: '$CI_COMMIT_REF_NAME  == "main"'
      variables:
        JBROWSE_HOSTNAME: "genomes.arendt.embl.de"
        RELEASE_LABEL: "prod"
        INGRESS_CLASS: "external-users"
      when: on_success
    - if: '$CI_COMMIT_REF_NAME  == "dev"'
      variables:
        JBROWSE_HOSTNAME: "genomes-dev.arendt.embl.de"
        RELEASE_LABEL: "dev"
        INGRESS_CLASS: "internal-users"
      when: on_success
    - when: on_success

clean_up_k8s_deployment:
  stage: clean
  image: dtzar/helm-kubectl:3.8.2
  needs:
    - deploy_to_k8s
  before_script:
    - echo $KUBECONFIG | base64 -d > /tmp/kubeconf
    - export KUBECONFIG=/tmp/kubeconf
  script:
    - echo 'Failed job, deleting resources'
    - envsubst < deployment/jbrowse2-dep.yml > deployment/jbrowse2-dep.yaml
    - kubectl delete -k deployment
  rules:
    - if: '$CI_COMMIT_REF_NAME  == "main"'
      when: on_failure
      variables:
        JBROWSE_HOSTNAME: "genomes.arendt.embl.de"
        RELEASE_LABEL: "prod"
        INGRESS_CLASS: "external-users"
    - if: '$CI_COMMIT_REF_NAME  == "dev"'
      when: on_failure
      variables:
        JBROWSE_HOSTNAME: "genomes-dev.arendt.embl.de"
        RELEASE_LABEL: "dev"
        INGRESS_CLASS: "internal-users"
    - when: on_failure
