# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

timeout: 1800s # 30m
options:
  workerPool: projects/${PROJECT_ID}/locations/us-central1/workerPools/gcb-workers-pool-e2
substitutions:
  _CLUSTER_NAME: marketplace-testing
  _CLUSTER_LOCATION: us-central1

steps:
- id: Pull Dev Image
  name: gcr.io/cloud-builders/docker
  dir: k8s
  entrypoint: bash
  args:
  - -exc
  - |
    TAG="$$(cat ./MARKETPLACE_TOOLS_TAG)"
    docker pull "gcr.io/cloud-marketplace-tools/k8s/dev:$$TAG"
    docker tag "gcr.io/cloud-marketplace-tools/k8s/dev:$$TAG" "gcr.io/cloud-marketplace-tools/k8s/dev:local"

- id: Setup Crane
  name: gcr.io/cloud-builders/curl
  entrypoint: sh
  args:
    - '-c'
    - |
      curl -L -o /workspace/crane.tar.gz "https://github.com/google/go-containerregistry/releases/download/v0.20.2/go-containerregistry_Linux_x86_64.tar.gz" \
        && tar -zxvf /workspace/crane.tar.gz crane \
        && chmod 755 /workspace/crane \
        && chmod +x /workspace/crane \
        && rm /workspace/crane.tar.gz \
        && echo "crane successfully installed"

- id: Initialize Credentials
  name: gcr.io/cloud-builders/gcloud
  waitFor:
  - '-'
  entrypoint: bash
  args:
  - -exc
  - |
    gcloud container clusters get-credentials '${_CLUSTER_NAME}' --zone '${_CLUSTER_LOCATION}' --project '$PROJECT_ID'
    mkdir -p /workspace/.kube/
    cp -r $$HOME/.kube/ /workspace/
    mkdir -p /workspace/.config/gcloud/
    cp -r $$HOME/.config/gcloud/ /workspace/.config/

- id: Install CRDs
  name: gcr.io/cloud-marketplace-tools/k8s/dev:local
  waitFor:
  - Initialize Credentials
  - Pull Dev Image
  env:
  - 'KUBE_CONFIG=/workspace/.kube'
  - 'GCLOUD_CONFIG=/workspace/.config/gcloud'
  # Use local Docker network named cloudbuild as described here:
  # https://cloud.google.com/cloud-build/docs/overview#build_configuration_and_build_steps
  - 'DOCKER_NETWORK=cloudbuild'
  - 'CRANE_BIN=/workspace/crane'
  dir: k8s/${_SOLUTION_NAME}
  entrypoint: bash
  args:
  - -exc
  - |
    gcloud container clusters get-credentials '${_CLUSTER_NAME}' --zone '${_CLUSTER_LOCATION}' --project '$PROJECT_ID'
    make crd/install

- id: Run diagnostic tool
  name: gcr.io/cloud-marketplace-tools/k8s/dev:local
  waitFor:
  - Install CRDs
  env:
  - 'KUBE_CONFIG=/workspace/.kube'
  - 'GCLOUD_CONFIG=/workspace/.config/gcloud'
  - 'VERIFICATION_LOGS_PATH=/workspace/k8s/${_SOLUTION_NAME}/.mpdev_logs'
  - 'CRANE_BIN=/workspace/crane'
  # Use local Docker network named cloudbuild as described here:
  # https://cloud.google.com/cloud-build/docs/overview#build_configuration_and_build_steps
  - 'DOCKER_NETWORK=cloudbuild'
  dir: k8s/${_SOLUTION_NAME}
  args:
  - make
  - app/doctor

- id: Build Solution
  name: gcr.io/cloud-marketplace-tools/k8s/dev:local
  waitFor:
  - Run diagnostic tool
  env:
  - 'KUBE_CONFIG=/workspace/.kube'
  - 'GCLOUD_CONFIG=/workspace/.config/gcloud'
  - 'VERIFICATION_LOGS_PATH=/workspace/k8s/${_SOLUTION_NAME}/.mpdev_logs'
  - 'CRANE_BIN=/workspace/crane'
  # Use local Docker network named cloudbuild as described here:
  # https://cloud.google.com/cloud-build/docs/overview#build_configuration_and_build_steps
  - 'DOCKER_NETWORK=cloudbuild'
  dir: k8s/${_SOLUTION_NAME}
  args:
  - make
  - -j4
  - app/build

- id: Verify Solution
  name: gcr.io/cloud-marketplace-tools/k8s/dev:local
  waitFor:
  - Build Solution
  env:
  - 'KUBE_CONFIG=/workspace/.kube'
  - 'GCLOUD_CONFIG=/workspace/.config/gcloud'
  - 'VERIFICATION_LOGS_PATH=/workspace/k8s/${_SOLUTION_NAME}/.mpdev_logs'
  - 'CRANE_BIN=/workspace/crane'
  # Use local Docker network named cloudbuild as described here:
  # https://cloud.google.com/cloud-build/docs/overview#build_configuration_and_build_steps
  - 'DOCKER_NETWORK=cloudbuild'
  dir: k8s/${_SOLUTION_NAME}
  args:
  - make
  - -j4
  - app/verify

- id: Verify Solution Extra Configs
  name: gcr.io/cloud-marketplace-tools/k8s/dev:local
  waitFor:
  - Build Solution
  env:
  - 'KUBE_CONFIG=/workspace/.kube'
  - 'GCLOUD_CONFIG=/workspace/.config/gcloud'
  - 'VERIFICATION_LOGS_PATH=/workspace/k8s/${_SOLUTION_NAME}/.mpdev_logs'
  # Use local Docker network named cloudbuild as described here:
  # https://cloud.google.com/cloud-build/docs/overview#build_configuration_and_build_steps
  - 'DOCKER_NETWORK=cloudbuild'
  - 'CRANE_BIN=/workspace/crane'
  dir: k8s/${_SOLUTION_NAME}
  entrypoint: bash
  args:
  - -exc
  - |
    bash <(jq -r --arg solution ${_SOLUTION_NAME} '.[$solution] | .[]? | "\(.env_vars | join(" ")) make -j4 app/verify"' ../../scripts/extra_configs.json)
