Skip to content

Commit

Permalink
Add retry logic for setup of dotnet cli
Browse files Browse the repository at this point in the history
  • Loading branch information
dseefeld committed Oct 31, 2017
1 parent 9e186c8 commit 3bdd29c
Showing 1 changed file with 35 additions and 9 deletions.
44 changes: 35 additions & 9 deletions init-tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,27 @@ display_error_message()
cat "$__init_tools_log" 1>&2
}

# Executes a command and retries if it fails.
execute_with_retry() {
local count=0
local retries=${retries:-5}
local waitFactor=${waitFactor:-6}
until "$@"; do
local exit=$?
count=$(( $count + 1 ))
if [ $count -lt $retries ]; then
local wait=$(( waitFactor ** (( count - 1 )) ))
echo "Retry $count/$retries exited $exit, retrying in $wait seconds..."
sleep $wait
else
say_err "Retry $count/$retries exited $exit, no more retries left."
return $exit
fi
done

return 0
}

if [ ! -e $__DOTNET_PATH ]; then
if [ -z "$__DOTNET_PKG" ]; then
if [ "$(uname -m | grep "i[3456]86")" = "i686" ]; then
Expand Down Expand Up @@ -97,15 +118,20 @@ if [ ! -e $__DOTNET_PATH ]; then

echo "Installing dotnet cli..."
__DOTNET_LOCATION="https://dotnetcli.azureedge.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.tar.gz"
# curl has HTTPS CA trust-issues less often than wget, so lets try that first.
echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> $__init_tools_log
if command -v curl > /dev/null; then
curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
else
wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
fi
cd $__DOTNET_PATH
tar -xf $__DOTNET_PATH/dotnet.tar

install_dotnet_cli() {
echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> "$__init_tools_log"
rm -rf -- "$__DOTNET_PATH/*"
# curl has HTTPS CA trust-issues less often than wget, so lets try that first.
if command -v curl > /dev/null; then
curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
else
wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
fi
cd $__DOTNET_PATH
tar -xf $__DOTNET_PATH/dotnet.tar
}
execute_with_retry install_dotnet_cli >> "$__init_tools_log" 2>&1

cd $__scriptpath
fi
Expand Down

0 comments on commit 3bdd29c

Please sign in to comment.