@@ -32,59 +32,106 @@ if [ -d "$DotNetBuildToolsDir" ]; then
32
32
33
33
echo " Done initializing tools."
34
34
mkdir -p " $( dirname " $__BUILD_TOOLS_SEMAPHORE " ) " && touch $__BUILD_TOOLS_SEMAPHORE
35
- exit 0
35
+ return # return instead of exit because this script is inlined in other scripts which we don't want to exit
36
36
fi
37
37
38
38
echo " Running: $__scriptpath /init-tools.sh" > $__init_tools_log
39
39
40
+ display_error_message ()
41
+ {
42
+ echo " Please check the detailed log that follows." 1>&2
43
+ cat " $__init_tools_log " 1>&2
44
+ }
45
+
46
+ # Executes a command and retries if it fails.
47
+ execute_with_retry () {
48
+ local count=0
49
+ local retries=${retries:- 5}
50
+ local waitFactor=${waitFactor:- 6}
51
+ until " $@ " ; do
52
+ local exit=$?
53
+ count=$(( $count + 1 ))
54
+ if [ $count -lt $retries ]; then
55
+ local wait=$(( waitFactor ** (( count - 1 )) ))
56
+ echo " Retry $count /$retries exited $exit , retrying in $wait seconds..."
57
+ sleep $wait
58
+ else
59
+ say_err " Retry $count /$retries exited $exit , no more retries left."
60
+ return $exit
61
+ fi
62
+ done
63
+
64
+ return 0
65
+ }
66
+
40
67
if [ ! -e $__DOTNET_PATH ]; then
41
68
if [ -z " $__DOTNET_PKG " ]; then
42
69
if [ " $( uname -m | grep " i[3456]86" ) " = " i686" ]; then
43
70
echo " Warning: build not supported on 32 bit Unix"
44
71
fi
72
+
73
+ __PKG_ARCH=x64
74
+
45
75
OSName=$( uname -s)
46
76
case $OSName in
47
77
Darwin)
48
78
OS=OSX
49
- __DOTNET_PKG=dotnet-sdk- ${__DOTNET_TOOLS_VERSION} - osx-x64
79
+ __PKG_RID= osx
50
80
ulimit -n 2048
81
+ # Format x.y.z as single integer with three digits for each part
82
+ VERSION=` sw_vers -productVersion| sed -e ' s/\./ /g' | xargs printf " %03d%03d%03d" `
83
+ if [ " $VERSION " -lt 010012000 ]; then
84
+ echo error: macOS version ` sw_vers -productVersion` is too old. 10.12 is needed as minimum.
85
+ exit 1
86
+ fi
51
87
;;
52
88
53
89
Linux)
54
- __DOTNET_PKG=dotnet-sdk- ${__DOTNET_TOOLS_VERSION} - linux-x64
90
+ __PKG_RID= linux
55
91
OS=Linux
56
92
57
- if [ -e /etc/redhat-release ]; then
93
+ if [ -e /etc/os-release ]; then
94
+ source /etc/os-release
95
+ if [[ $ID == " alpine" ]]; then
96
+ # remove the last version digit
97
+ VERSION_ID=${VERSION_ID% .* }
98
+ __PKG_RID=alpine.$VERSION_ID
99
+ fi
100
+ elif [ -e /etc/redhat-release ]; then
58
101
redhatRelease=$( < /etc/redhat-release)
59
102
if [[ $redhatRelease == " CentOS release 6." * || $redhatRelease == " Red Hat Enterprise Linux Server release 6." * ]]; then
60
- __DOTNET_PKG=dotnet-sdk- ${__DOTNET_TOOLS_VERSION} - rhel.6-x64
103
+ __PKG_RID= rhel.6
61
104
fi
62
105
fi
63
106
64
107
;;
65
108
66
109
* )
67
- echo " Unsupported OS '$OSName ' detected. Downloading linux-x64 tools."
110
+ echo " Unsupported OS '$OSName ' detected. Downloading linux-$__PKG_ARCH tools."
68
111
OS=Linux
69
- __DOTNET_PKG=dotnet-sdk- ${__DOTNET_TOOLS_VERSION} - linux-x64
112
+ __PKG_RID= linux
70
113
;;
71
114
esac
115
+ __DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION} -$__PKG_RID -$__PKG_ARCH
72
116
fi
73
-
74
117
mkdir -p " $__DOTNET_PATH "
75
118
76
119
echo " Installing dotnet cli..."
77
120
__DOTNET_LOCATION=" https://dotnetcli.azureedge.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION} /${__DOTNET_PKG} .tar.gz"
78
- # curl has HTTPS CA trust-issues less often than wget, so lets try that first.
79
- echo " Installing '${__DOTNET_LOCATION} ' to '$__DOTNET_PATH /dotnet.tar'" >> $__init_tools_log
80
- which curl > /dev/null 2> /dev/null
81
- if [ $? -ne 0 ]; then
82
- wget -q -O $__DOTNET_PATH /dotnet.tar ${__DOTNET_LOCATION}
83
- else
84
- curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH /dotnet.tar ${__DOTNET_LOCATION}
85
- fi
86
- cd $__DOTNET_PATH
87
- tar -xf $__DOTNET_PATH /dotnet.tar
121
+
122
+ install_dotnet_cli () {
123
+ echo " Installing '${__DOTNET_LOCATION} ' to '$__DOTNET_PATH /dotnet.tar'" >> " $__init_tools_log "
124
+ rm -rf -- " $__DOTNET_PATH /*"
125
+ # curl has HTTPS CA trust-issues less often than wget, so lets try that first.
126
+ if command -v curl > /dev/null; then
127
+ curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH /dotnet.tar ${__DOTNET_LOCATION}
128
+ else
129
+ wget -q -O $__DOTNET_PATH /dotnet.tar ${__DOTNET_LOCATION}
130
+ fi
131
+ cd $__DOTNET_PATH
132
+ tar -xf $__DOTNET_PATH /dotnet.tar
133
+ }
134
+ execute_with_retry install_dotnet_cli >> " $__init_tools_log " 2>&1
88
135
89
136
cd $__scriptpath
90
137
fi
@@ -93,7 +140,10 @@ if [ ! -e $__BUILD_TOOLS_PATH ]; then
93
140
echo " Restoring BuildTools version $__BUILD_TOOLS_PACKAGE_VERSION ..."
94
141
echo " Running: $__DOTNET_CMD restore \" $__INIT_TOOLS_RESTORE_PROJECT \" --no-cache --packages $__PACKAGES_DIR --source $__BUILDTOOLS_SOURCE /p:BuildToolsPackageVersion=$__BUILD_TOOLS_PACKAGE_VERSION " >> $__init_tools_log
95
142
$__DOTNET_CMD restore " $__INIT_TOOLS_RESTORE_PROJECT " --no-cache --packages $__PACKAGES_DIR --source $__BUILDTOOLS_SOURCE /p:BuildToolsPackageVersion=$__BUILD_TOOLS_PACKAGE_VERSION >> $__init_tools_log
96
- if [ ! -e " $__BUILD_TOOLS_PATH /init-tools.sh" ]; then echo " ERROR: Could not restore build tools correctly. See '$__init_tools_log ' for more details." 1>&2 ; fi
143
+ if [ ! -e " $__BUILD_TOOLS_PATH /init-tools.sh" ]; then
144
+ echo " ERROR: Could not restore build tools correctly." 1>&2
145
+ display_error_message
146
+ fi
97
147
fi
98
148
99
149
echo " Initializing BuildTools..."
@@ -103,7 +153,8 @@ echo "Running: $__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__
103
153
chmod +x $__BUILD_TOOLS_PATH /init-tools.sh
104
154
$__BUILD_TOOLS_PATH /init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR >> $__init_tools_log
105
155
if [ " $? " != " 0" ]; then
106
- echo " ERROR: An error occured when trying to initialize the tools. Please check '$__init_tools_log ' for more details." 1>&2
156
+ echo " ERROR: An error occurred when trying to initialize the tools." 1>&2
157
+ display_error_message
107
158
exit 1
108
159
fi
109
160
0 commit comments