44 lines
1.3 KiB
Bash
44 lines
1.3 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
#
|
||
|
# SPDX-License-Identifier: GPL-2.0
|
||
|
#
|
||
|
# Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com
|
||
|
#
|
||
|
# This file is a part of the Armbian Build Framework
|
||
|
# https://github.com/armbian/build/
|
||
|
|
||
|
# Auto retries the number of times passed on first argument to run all the other arguments.
|
||
|
function do_with_retries() {
|
||
|
local retries="${1}"
|
||
|
shift
|
||
|
|
||
|
local sleep_seconds="${sleep_seconds:-5}"
|
||
|
local silent_retry="${silent_retry:-no}"
|
||
|
|
||
|
local counter=0
|
||
|
while [[ $counter -lt $retries ]]; do
|
||
|
counter=$((counter + 1))
|
||
|
declare -i RETRY_RUNS=${counter}
|
||
|
declare -i IS_A_RETRY=0
|
||
|
declare RETRY_FMT_MORE_THAN_ONCE=""
|
||
|
if [[ ${RETRY_RUNS} -gt 1 ]]; then
|
||
|
IS_A_RETRY=1
|
||
|
RETRY_FMT_MORE_THAN_ONCE=" (attempt ${RETRY_RUNS})"
|
||
|
fi
|
||
|
|
||
|
"$@" && return 0 # execute and return 0 if success; if not, let it loop;
|
||
|
if [[ "${silent_retry}" == "yes" ]]; then
|
||
|
: # do nothing
|
||
|
else
|
||
|
# skip_ci_special="yes": don't write this warning to CI/GHA summary. retries are normal in GHA and pollute the Summary view
|
||
|
skip_ci_special="yes" display_alert "Command failed, retrying in ${sleep_seconds}s" "$*" "warn"
|
||
|
fi
|
||
|
unset IS_A_RETRY
|
||
|
unset RETRY_RUNS
|
||
|
unset RETRY_FMT_MORE_THAN_ONCE
|
||
|
sleep "${sleep_seconds}"
|
||
|
done
|
||
|
display_alert "Command failed ${counter} times, giving up" "$*" "warn"
|
||
|
return 1
|
||
|
}
|