# Copyright 2022 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.

steps:
  - id: server build
    name: buildpacksio/pack
    args:
      - build
      - us-docker.pkg.dev/$PROJECT_ID/containers/server
      - --builder=gcr.io/buildpacks/builder:v1
      - --path=server/

  # Because this image is immediately used in the next step, this action must happen now.
  - id: server push
    name: gcr.io/cloud-builders/docker
    args:
      - push
      - us-docker.pkg.dev/$PROJECT_ID/containers/server

  - id: terraform
    name: hashicorp/terraform
    dir: provisioning/terraform
    env:
      - PROJECT_ID=$PROJECT_ID
      - REGION=$_REGION
    script: |
      #!/bin/sh

      terraform init -backend-config="bucket=terraform-${PROJECT_ID}"
      terraform apply -auto-approve -no-color \
        -var project_id=${PROJECT_ID} \
        -var region=${REGION}

  - id: server migrate
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk:slim"
    env:
      - "CLOUDSDK_RUN_REGION=$_REGION"
    script: gcloud run jobs execute migrate --wait

  # Only since the client is also node-based can the firebase image can be used for this step.
  - id: client deploy
    name: us-docker.pkg.dev/$PROJECT_ID/containers/firebase
    dir: client
    env:
      - PROJECT_ID=$PROJECT_ID
      - AVOCANO_PURCHASE_MODE=$_PURCHASE_MODE
    script: |
      #!/bin/bash

      npm i
      npm run build
      firebase deploy --project $PROJECT_ID --only hosting

  # Optionally run tests, confirming deployment (run with '--substitutions=_RUN_TESTS=yes')
  # Use Debian 11 Bullseye until Playwright supports Debian 12 Bookworm
  #   - https://playwright.dev/python/docs/intro#system-requirements
  - id: "test deployment"
    name: python:3.13-bullseye
    dir: provisioning
    env:
      - _RUN_TESTS=$_RUN_TESTS
      - AVOCANO_PURCHASE_MODE=$_PURCHASE_MODE
    script: |
      #!/bin/bash
      if [ -z $_RUN_TESTS ]; then
        echo "_RUN_TESTS not defined, so not running tests."
        exit 0
      fi

      python -m pip install -r test/requirements.txt
      playwright install --with-deps
      python -m pytest

timeout: 1800s

substitutions:
  _REGION: us-central1
  _RUN_TESTS: ""
  _PURCHASE_MODE: ""
