#!/bin/bash # 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. function retry_with_backoff { attempts_left=$1 sleep_seconds=$2 shift 2 command=$@ # store current flag state flags=$- # allow a failures to continue set +e ${command} exit_code=$? # restore "e" flag if [[ ${flags} =~ e ]] then set -e else set +e fi if [[ $exit_code == 0 ]] then return 0 fi # failure if [[ ${attempts_left} > 0 ]] then echo "failure (${exit_code}), sleeping ${sleep_seconds}..." sleep ${sleep_seconds} new_attempts=$((${attempts_left} - 1)) new_sleep=$((${sleep_seconds} * 2)) retry_with_backoff ${new_attempts} ${new_sleep} ${command} fi return $exit_code } ## Helper functionss function now() { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n'; } function msg() { println "$*" >&2; } function println() { printf '%s\n' "$(now) $*"; } ## Helper comment to trigger updated repo dependency release