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

options:
  machineType: 'N1_HIGHCPU_8'
  substitutionOption: 'MUST_MATCH'
  requestedVerifyOption: VERIFIED

substitutions:
  _BUILD_TOOLS_CACHE: 'https://storage.googleapis.com/cos-infra-prod_cloudbuild/cos-tools-cache'
  _IMAGE_NAME: cos-customizer
  _IMAGE_FOLDER_NAME: cos_customizer
  _RUN_PATH: .

steps:
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    cat <<EOF | docker build -t bazel -
    FROM gcr.io/cloud-builders/bazel
    RUN apt-get update && apt-get install -y mtools dosfstools
    EOF
- name: 'bazel'
  args: ['test', '--remote_cache=${_BUILD_TOOLS_CACHE}', '--google_default_credentials', '--spawn_strategy=standalone','--','...','-//src/pkg/tools/...']
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      TAGS=""
      if [ "$_BUILD_TYPE" == "presubmit" ]; then
        # For presubmit build, we push presubmit-{BUILD_ID} tag.
        TAGS="${_BUILD_TYPE}-${_TAG_NAME}"
      elif [ "$_BUILD_TYPE" == "official" ]; then
        # For official build, we push presubmit-{BUILD_ID} and latest tag.
        TAGS="${_BUILD_TYPE}-${_TAG_NAME} latest"
      else
        echo "Invalid BUILD_TYPE: $_BUILD_TYPE"
        exit 1
      fi

      # Build and tag for gcr-io-dev. BUILD_ID tag is pushed by default.
      docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}"
      for TAG in $$TAGS; do
        docker tag "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG"
        docker push "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG"
      done
images:
- 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}'
# 25 minute timeout; concurrent arm64/amd64 builds take time
timeout: '1500s'
