variables:
  GIT_SUBMODULE_STRATEGY: recursive

stages:
  - test
  - build
  - deploy

zola check:
  stage: test
  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/alpine:latest
  before_script:
  - apk add --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/community/ zola
  - apk add yarn
  - yarn install
  script:
  - zola check
  allow_failure: true

.build:
  stage: build
  interruptible: true
  needs: []
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" >/kaniko/.docker/config.json
    - /kaniko/executor
       --context $CI_PROJECT_DIR
       --dockerfile $CI_PROJECT_DIR/Dockerfile
       --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
       --digest-file DIGESTFILE
       --build-arg BASE_URL=$BASE_URL
       --cache=true
       --cleanup
  artifacts:
    paths:
      - DIGESTFILE


build production:
  extends: .build
  variables:
    BASE_URL: https://teckids.org
  only:
    - master

build review:
  extends: .build
  variables:
    BASE_URL: https://$CI_COMMIT_REF_SLUG.review.teckids.org
  only:
    - merge_requests

.deploy:
  stage: deploy
  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/line/kubectl-kustomize:latest
  tags:
    - teckids-trusted
  before_script:
    - echo $KUBECONFIG | base64 -d > /tmp/kubeconfig

deploy production:
  extends: .deploy
  environment:
    name: production
    url: https://teckids.org
  script:
    - cd deploy/overlays/production
    - kustomize edit set image registry.edugit.org/teckids/team-pr/teckids.org:$CI_COMMIT_REF_NAME@$(cat ../../../DIGESTFILE)
    - kustomize build > output.yaml
    - kubectl --kubeconfig=/tmp/kubeconfig apply -f output.yaml
  only:
    - master

deploy review:
  extends: .deploy
  script: deploy_review
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    url: https://$CI_COMMIT_REF_SLUG.review.teckids.org
    on_stop: delete review
    auto_stop_in: 3 days
  only:
    - merge_requests
  when: manual
  script:
    - cd deploy/overlays/review
    - kustomize edit set image registry.edugit.org/teckids/team-pr/teckids.org:$CI_COMMIT_REF_NAME@$(cat ../../../DIGESTFILE)
    - kustomize edit set nameprefix $CI_COMMIT_REF_SLUG
    - kustomize build | sed s/__REVIEW_NAME__/$CI_COMMIT_REF_SLUG/g > output.yaml
    - kubectl --kubeconfig=/tmp/kubeconfig apply -f output.yaml

delete review:
  extends: .deploy
  script: delete_review
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    action: stop
  before_script:
    - echo $KUBECONFIG | base64 -d > /tmp/kubeconfig
    - cd deploy/overlays/review
    - kustomize edit set image registry.edugit.org/teckids/team-pr/teckids.org:$CI_COMMIT_REF_NAME@$(cat ../../../DIGESTFILE)
    - kustomize edit set nameprefix $CI_COMMIT_REF_SLUG
    - kustomize build | sed s/__REVIEW_NAME__/$CI_COMMIT_REF_SLUG/g > output.yaml
  script:
    - kubectl --kubeconfig=/tmp/kubeconfig delete -f output.yaml
  when: manual
  only:
    - merge_requests