@Library('cloudbees-pipeline-libs') _

def dockerLabel = env.DOCKER_LABEL
def gcpEnvironment = env.GCP_ENVIRONMENT
def gkeCredentialsID = getCredentialsID()
def ecrPath = getECR()

pipeline {
  agent {
    kubernetes {
      label 'helm-deploy-' + UUID.randomUUID().toString()
      yaml """
apiVersion: v1
kind: Pod
metadata:
  name: honeyui-helm-deploy
spec:
  containers:
    - name: helm
      image: gcr.io/cloudbees-ops-gcr/common/helm:3.1.2
      tty: true
      command:
      - cat
"""
    }
  }

  options {
      disableConcurrentBuilds()
      timeout(time: 12, unit: 'MINUTES')
  }

  stages {
    stage('Deploy') {
      steps{
        container(name: "helm", shell: '/bin/sh') {
          script {
            currentBuild.description = dockerLabel
          }
          deployChart(dockerLabel, ecrPath, gkeCredentialsID, gcpEnvironment)
        }
      }
    }
  }
}

def getECR() {
    return "gcr.io/cloudbees-ops-gcr"
}

def getCredentialsID() {
  if (env.GCP_ENVIRONMENT == "staging") {
    return "gke-honeyui-staging-kube-config"
  } else if (env.GCP_ENVIRONMENT == "production") {
    return "gke-honeyui-production-kube-config"
  } else {
    return "unknown-environment"
  }
}


def deployChart(dockerLabel, ecrPath, gkeCredentialsID, gcpEnvironment) {
  withCredentials([file(credentialsId: "${gkeCredentialsID}", variable: 'kubernetessecrets')]) {
    withEnv(["KUBERNETES_CONFIG_FILE=${kubernetessecrets}"]) {
      def script = """
        /bin/sh -x
        echo "gkeCredentialsID is ${gkeCredentialsID}"
        mkdir -p /root/.kube
        cp ${KUBERNETES_CONFIG_FILE} /root/.kube/config
        echo "deploying worker as ${dockerLabel}"
        helm upgrade \
          --namespace honeyui \
          -f charts/honeyui-react-docs/values.yaml \
          -f charts/honeyui-react-docs/values-${gcpEnvironment}.yaml \
          --wait --timeout 600s --atomic --debug \
          --set image.tag="${dockerLabel}" "honeyui-react-docs" ./charts/honeyui-react-docs
        """
      sh script
    }
  }
}
