Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 3118e7f

Browse files
committed
Align init-tools scripts with the versions from master
1 parent 7abf70d commit 3118e7f

File tree

2 files changed

+99
-39
lines changed

2 files changed

+99
-39
lines changed

init-tools.cmd

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,18 @@ if [%BUILDTOOLS_SOURCE%]==[] set BUILDTOOLS_SOURCE=https://dotnet.myget.org/F/do
1010
set /P BUILDTOOLS_VERSION=< "%~dp0BuildToolsVersion.txt"
1111
set BUILD_TOOLS_PATH=%PACKAGES_DIR%Microsoft.DotNet.BuildTools\%BUILDTOOLS_VERSION%\lib\
1212
set INIT_TOOLS_RESTORE_PROJECT=%~dp0init-tools.msbuild
13-
set BUILD_TOOLS_SEMAPHORE=%TOOLRUNTIME_DIR%\%BUILDTOOLS_VERSION%\init-tools.completed
13+
set BUILD_TOOLS_SEMAPHORE_DIR=%TOOLRUNTIME_DIR%\%BUILDTOOLS_VERSION%
14+
set BUILD_TOOLS_SEMAPHORE=%BUILD_TOOLS_SEMAPHORE_DIR%\init-tools.completed
1415

1516
:: if force option is specified then clean the tool runtime and build tools package directory to force it to get recreated
1617
if [%1]==[force] (
1718
if exist "%TOOLRUNTIME_DIR%" rmdir /S /Q "%TOOLRUNTIME_DIR%"
1819
if exist "%PACKAGES_DIR%Microsoft.DotNet.BuildTools" rmdir /S /Q "%PACKAGES_DIR%Microsoft.DotNet.BuildTools"
1920
)
2021

21-
:: If sempahore exists do nothing
22+
:: If semaphore exists do nothing
2223
if exist "%BUILD_TOOLS_SEMAPHORE%" (
23-
echo Tools are already initialized.
24+
echo %__MsgPrefix%Tools are already initialized.
2425
goto :EOF
2526
)
2627

@@ -45,41 +46,49 @@ echo Running %0 > "%INIT_TOOLS_LOG%"
4546
set /p DOTNET_VERSION=< "%~dp0DotnetCLIVersion.txt"
4647
if exist "%DOTNET_CMD%" goto :afterdotnetrestore
4748

48-
echo Installing dotnet cli...
49+
echo %__MsgPrefix%Installing dotnet cli...
4950
if NOT exist "%DOTNET_PATH%" mkdir "%DOTNET_PATH%"
5051
set DOTNET_ZIP_NAME=dotnet-sdk-%DOTNET_VERSION%-win-x64.zip
5152
set DOTNET_REMOTE_PATH=https://dotnetcli.azureedge.net/dotnet/Sdk/%DOTNET_VERSION%/%DOTNET_ZIP_NAME%
5253
set DOTNET_LOCAL_PATH=%DOTNET_PATH%%DOTNET_ZIP_NAME%
53-
echo Installing '%DOTNET_REMOTE_PATH%' to '%DOTNET_LOCAL_PATH%' >> "%INIT_TOOLS_LOG%"
54+
echo %__MsgPrefix%Installing '%DOTNET_REMOTE_PATH%' to '%DOTNET_LOCAL_PATH%' >> "%INIT_TOOLS_LOG%"
5455
powershell -NoProfile -ExecutionPolicy unrestricted -Command "$retryCount = 0; $success = $false; do { try { (New-Object Net.WebClient).DownloadFile('%DOTNET_REMOTE_PATH%', '%DOTNET_LOCAL_PATH%'); $success = $true; } catch { if ($retryCount -ge 6) { throw; } else { $retryCount++; Start-Sleep -Seconds (5 * $retryCount); } } } while ($success -eq $false); Add-Type -Assembly 'System.IO.Compression.FileSystem' -ErrorVariable AddTypeErrors; if ($AddTypeErrors.Count -eq 0) { [System.IO.Compression.ZipFile]::ExtractToDirectory('%DOTNET_LOCAL_PATH%', '%DOTNET_PATH%') } else { (New-Object -com shell.application).namespace('%DOTNET_PATH%').CopyHere((new-object -com shell.application).namespace('%DOTNET_LOCAL_PATH%').Items(),16) }" >> "%INIT_TOOLS_LOG%"
5556
if NOT exist "%DOTNET_LOCAL_PATH%" (
56-
echo ERROR: Could not install dotnet cli correctly. See '%INIT_TOOLS_LOG%' for more details. 1>&2
57-
exit /b 1
57+
echo %__MsgPrefix%ERROR: Could not install dotnet cli correctly. 1>&2
58+
goto :error
5859
)
5960

6061
:afterdotnetrestore
6162

6263
if exist "%BUILD_TOOLS_PATH%" goto :afterbuildtoolsrestore
63-
echo Restoring BuildTools version %BUILDTOOLS_VERSION%...
64-
echo Running: "%DOTNET_CMD%" restore "%INIT_TOOLS_RESTORE_PROJECT%" --no-cache --packages %PACKAGES_DIR% --source "%BUILDTOOLS_SOURCE%" /p:BuildToolsPackageVersion=%BUILDTOOLS_VERSION% >> "%INIT_TOOLS_LOG%"
64+
echo %__MsgPrefix%Restoring BuildTools version %BUILDTOOLS_VERSION%...
65+
echo %__MsgPrefix%Running: "%DOTNET_CMD%" restore "%INIT_TOOLS_RESTORE_PROJECT%" --no-cache --packages %PACKAGES_DIR% --source "%BUILDTOOLS_SOURCE%" /p:BuildToolsPackageVersion=%BUILDTOOLS_VERSION% >> "%INIT_TOOLS_LOG%"
6566
call "%DOTNET_CMD%" restore "%INIT_TOOLS_RESTORE_PROJECT%" --no-cache --packages %PACKAGES_DIR% --source "%BUILDTOOLS_SOURCE%" /p:BuildToolsPackageVersion=%BUILDTOOLS_VERSION% >> "%INIT_TOOLS_LOG%"
6667
if NOT exist "%BUILD_TOOLS_PATH%init-tools.cmd" (
67-
echo ERROR: Could not restore build tools correctly. See '%INIT_TOOLS_LOG%' for more details. 1>&2
68-
exit /b 1
68+
%__MsgPrefix%echo ERROR: Could not restore build tools correctly. 1>&2
69+
goto :error
6970
)
7071

7172
:afterbuildtoolsrestore
7273

73-
echo Initializing BuildTools...
74-
echo Running: "%BUILD_TOOLS_PATH%init-tools.cmd" "%~dp0" "%DOTNET_CMD%" "%TOOLRUNTIME_DIR%" >> "%INIT_TOOLS_LOG%"
74+
echo %__MsgPrefix%Initializing BuildTools...
75+
echo %__MsgPrefix%Running: "%BUILD_TOOLS_PATH%init-tools.cmd" "%~dp0" "%DOTNET_CMD%" "%TOOLRUNTIME_DIR%" >> "%INIT_TOOLS_LOG%"
7576
call "%BUILD_TOOLS_PATH%init-tools.cmd" "%~dp0" "%DOTNET_CMD%" "%TOOLRUNTIME_DIR%" >> "%INIT_TOOLS_LOG%"
7677
set INIT_TOOLS_ERRORLEVEL=%ERRORLEVEL%
7778
if not [%INIT_TOOLS_ERRORLEVEL%]==[0] (
78-
echo ERROR: An error occured when trying to initialize the tools. Please check '%INIT_TOOLS_LOG%' for more details. 1>&2
79-
exit /b %INIT_TOOLS_ERRORLEVEL%
79+
echo ERROR: An error occured when trying to initialize the tools. 1>&2
80+
goto :error
8081
)
8182

82-
:: Create sempahore file
83-
echo Done initializing tools.
84-
echo Init-Tools.cmd completed for BuildTools Version: %BUILDTOOLS_VERSION% > "%BUILD_TOOLS_SEMAPHORE%"
85-
exit /b 0
83+
:: Create semaphore file
84+
echo %__MsgPrefix%Done initializing tools.
85+
if NOT exist "%BUILD_TOOLS_SEMAPHORE_DIR%" (
86+
mkdir "%BUILD_TOOLS_SEMAPHORE_DIR%"
87+
)
88+
echo %__MsgPrefix%Init-Tools.cmd completed for BuildTools Version: %BUILDTOOLS_VERSION% > "%BUILD_TOOLS_SEMAPHORE%"
89+
exit /b 0
90+
91+
:error
92+
echo %__MsgPrefix%Please check the detailed log that follows. 1>&2
93+
type "%INIT_TOOLS_LOG%" 1>&2
94+
exit /b 1

init-tools.sh

Lines changed: 71 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,59 +32,106 @@ if [ -d "$DotNetBuildToolsDir" ]; then
3232

3333
echo "Done initializing tools."
3434
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
3636
fi
3737

3838
echo "Running: $__scriptpath/init-tools.sh" > $__init_tools_log
3939

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+
4067
if [ ! -e $__DOTNET_PATH ]; then
4168
if [ -z "$__DOTNET_PKG" ]; then
4269
if [ "$(uname -m | grep "i[3456]86")" = "i686" ]; then
4370
echo "Warning: build not supported on 32 bit Unix"
4471
fi
72+
73+
__PKG_ARCH=x64
74+
4575
OSName=$(uname -s)
4676
case $OSName in
4777
Darwin)
4878
OS=OSX
49-
__DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-osx-x64
79+
__PKG_RID=osx
5080
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
5187
;;
5288

5389
Linux)
54-
__DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-linux-x64
90+
__PKG_RID=linux
5591
OS=Linux
5692

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
58101
redhatRelease=$(</etc/redhat-release)
59102
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
61104
fi
62105
fi
63106

64107
;;
65108

66109
*)
67-
echo "Unsupported OS '$OSName' detected. Downloading linux-x64 tools."
110+
echo "Unsupported OS '$OSName' detected. Downloading linux-$__PKG_ARCH tools."
68111
OS=Linux
69-
__DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-linux-x64
112+
__PKG_RID=linux
70113
;;
71114
esac
115+
__DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-$__PKG_RID-$__PKG_ARCH
72116
fi
73-
74117
mkdir -p "$__DOTNET_PATH"
75118

76119
echo "Installing dotnet cli..."
77120
__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
88135

89136
cd $__scriptpath
90137
fi
@@ -93,7 +140,10 @@ if [ ! -e $__BUILD_TOOLS_PATH ]; then
93140
echo "Restoring BuildTools version $__BUILD_TOOLS_PACKAGE_VERSION..."
94141
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
95142
$__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
97147
fi
98148

99149
echo "Initializing BuildTools..."
@@ -103,7 +153,8 @@ echo "Running: $__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__
103153
chmod +x $__BUILD_TOOLS_PATH/init-tools.sh
104154
$__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR >> $__init_tools_log
105155
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
107158
exit 1
108159
fi
109160

0 commit comments

Comments
 (0)