#!/bin/bash

# k8s-deploy - deploys Concourse on a K8S cluster using
# a helm charts provided under `./charts`.
#
# ps.: this script is meant to be used for smoke tests.

set -o errexit
set -o nounset
set -o pipefail

# Variables that can be either be configured
# by making use of environment variables when
# executing `k8s-deploy` or the default values.
readonly RELEASE_NAME="${RELEASE_NAME:-concourse-smoke}"
readonly CONCOURSE_IMAGE="${CONCOURSE_IMAGE:-concourse/dev}"
readonly CONCOURSE_DIGEST="${CONCOURSE_DIGEST:-$(cat ./image-info/digest)}"

main() {
  eventually_populate_kube_config
  run_helm_deploy
}

eventually_populate_kube_config() {
  mkdir -p ~/.kube

  if [[ -f ~/.kube/config ]]; then
    return 0
  fi

  if [[ -z $KUBE_CONFIG ]]; then
    echo "Error: KUBE_CONFIG must be specified when ~/.kube/config doesnt exist"
    exit 1
  fi

  echo "$KUBE_CONFIG" >~/.kube/config
}

run_helm_deploy() {
  local chart=./charts/stable/concourse

  helm init --upgrade --wait
  helm version
  helm dependency update $chart
  helm upgrade \
    --install \
    --recreate-pods \
    --wait \
    --namespace "$RELEASE_NAME" \
    --set "concourse.web.auth.mainTeam.localUser=admin" \
    --set "concourse.web.kubernetes.enabled=false" \
    --set "concourse.worker.baggageclaim.driver=naive" \
    --set "image=$CONCOURSE_IMAGE" \
    --set "imageDigest=$CONCOURSE_DIGEST" \
    --set "persistence.enabled=false" \
    --set "postgresql.persistence.enabled=false" \
    --set "secrets.localUsers=admin:admin\,guest:guest" \
    --set "web.livenessProbe.failureThreshold=3" \
    --set "web.livenessProbe.initialDelaySeconds=3" \
    --set "web.livenessProbe.periodSeconds=3" \
    --set "web.livenessProbe.timeoutSeconds=3" \
    --set "worker.replicas=1" \
    $RELEASE_NAME \
    $chart
}

main "$@"
