| # Copyright 2020 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: |
| |
| - name: 'gcr.io/cloud-builders/gcloud' |
| entrypoint: '/bin/bash' |
| args: |
| - '-c' |
| - | |
| set +o histexpand |
| test_list=("gcloud builds submit --config=testing/gpu_test/gpu_test.yaml\ |
| --substitutions=_DRIVER_VERSION=470.223.02,_INPUT_IMAGE=cos-97-16919-450-16,_PROJECT_NAME=${_PROJECT_NAME},_ZONE=ZONE_SUB\ |
| --async --format='value(ID)' ." |
| "gcloud builds submit --config=testing/gpu_test/gpu_test.yaml\ |
| --substitutions=_DRIVER_VERSION=470.223.02,_INPUT_IMAGE=cos-101-17162-386-22,_PROJECT_NAME=${_PROJECT_NAME},_ZONE=ZONE_SUB\ |
| --async --format='value(ID)' ." |
| "gcloud builds submit --config=testing/gpu_test/gpu_test.yaml\ |
| --substitutions=_DRIVER_VERSION=470.223.02,_INPUT_IMAGE=cos-105-17412-294-29,_PROJECT_NAME=${_PROJECT_NAME},_ZONE=ZONE_SUB\ |
| --async --format='value(ID)' ." |
| "gcloud builds submit --config=testing/gpu_test/gpu_test.yaml\ |
| --substitutions=_DRIVER_VERSION=535.154.05,_INPUT_IMAGE=cos-109-17800-147-15,_PROJECT_NAME=${_PROJECT_NAME},_ZONE=ZONE_SUB\ |
| --async --format='value(ID)' .") |
| |
| primary_zone=us-central1-a |
| secondary_zone=us-west1-b |
| exit_code=0 |
| build_ids=() |
| declare -A build_statuses |
| declare -A build_ids_map |
| declare -A retries |
| for i in "${!test_list[@]}"; do |
| test_name=test-"${i}" |
| build_id="$(eval "${test_list[$i]//ZONE_SUB/$primary_zone}")" |
| build_ids+=($build_id) |
| build_ids_map[${build_id}]=${test_name} |
| done |
| for ((i=0; i < "${#build_ids[@]}"; i++ )); do |
| build_id=${build_ids[$i]} |
| test_name=${build_ids_map[$build_id]} |
| status="" |
| while true; do |
| status="$(gcloud builds describe "${build_id}" --format='value(status)')" |
| case "${status}" in |
| "SUCCESS"|"INTERNAL_ERROR"|"TIMEOUT"|"CANCELLED") |
| echo "${status}" |
| break |
| ;; |
| "FAILURE") |
| echo "Build ${build_id} failed" |
| log_url="$(gcloud builds describe "${build_id}" --format='value(logUrl)')" |
| echo "Logs: ${log_url}" |
| if [[ -v retries[$test_name] ]]; then |
| echo "Build failed in all zones, exiting" |
| break |
| fi |
| echo "Retrying with different zone for test $test_name" |
| new_build_id="$(eval "${test_list[${test_name##*-}]//ZONE_SUB/$secondary_zone}")" |
| build_ids_map[${new_build_id}]=${test_name} |
| build_ids+=($new_build_id) |
| retries[${test_name}]=1 |
| break |
| ;; |
| "QUEUED"|"WORKING") |
| sleep 5 |
| ;; |
| "STATUS_UNKNOWN") |
| echo "Received STATUS_UNKNOWN for build ${build_id}" 1>&2 |
| sleep 5 |
| ;; |
| *) |
| echo "Unknown status for build ${build_id}: ${status}" 1>&2 |
| break |
| ;; |
| esac |
| done |
| build_statuses[${test_name}]=${status} |
| done |
| for test in "${!build_statuses[@]}"; do |
| status="${build_statuses[$test]}" |
| if [[ "${status}" == "SUCCESS" ]]; then |
| echo "Test ${test} succeeded" |
| else |
| echo "Test ${test} failed" |
| exit_code=1 |
| fi |
| done |
| exit "${exit_code}" |
| options: |
| machineType: 'N1_HIGHCPU_32' |
| timeout: "7200s" |