Files
runner-images/images/linux/scripts/installers/dotnetcore-sdk.sh
T

95 lines
3.4 KiB
Bash
Raw Normal View History

2020-10-07 13:49:40 +05:00
#!/bin/bash -e
2019-11-15 15:23:41 -05:00
################################################################################
## File: dotnetcore-sdk.sh
## Desc: Installs .NET Core SDK
################################################################################
2020-07-08 22:28:23 +03:00
source $HELPER_SCRIPTS/etc-environment.sh
2020-07-08 22:28:23 +03:00
source $HELPER_SCRIPTS/install.sh
+13
2020-05-26 18:45:48 +03:00
source $HELPER_SCRIPTS/os.sh
2019-11-15 15:23:41 -05:00
+13
2020-05-26 18:45:48 +03:00
# Ubuntu 20 doesn't support EOL versions
LATEST_DOTNET_PACKAGES=$(get_toolset_value '.dotnet.aptPackages[]')
DOTNET_VERSIONS=$(get_toolset_value '.dotnet.versions[]')
2019-11-15 15:23:41 -05:00
mksamples()
{
sdk=$1
sample=$2
mkdir "$sdk"
cd "$sdk" || exit
dotnet new globaljson --sdk-version "$sdk"
dotnet new "$sample"
dotnet restore
dotnet build
set +e
cd .. || exit
rm -rf "$sdk"
}
# Disable telemetry
export DOTNET_CLI_TELEMETRY_OPTOUT=1
2020-01-28 12:37:57 -06:00
for latest_package in ${LATEST_DOTNET_PACKAGES[@]}; do
echo "Determing if .NET Core ($latest_package) is installed"
2020-07-09 15:14:28 +03:00
if ! IsPackageInstalled $latest_package; then
2020-01-28 12:37:57 -06:00
echo "Could not find .NET Core ($latest_package), installing..."
+13
2020-05-26 18:45:48 +03:00
apt-get install $latest_package -y
2020-01-28 12:37:57 -06:00
else
echo ".NET Core ($latest_package) is already installed"
fi
done
2019-11-15 15:23:41 -05:00
# Get list of all released SDKs from channels which are not end-of-life or preview
sdks=()
for version in ${DOTNET_VERSIONS[@]}; do
2020-11-05 19:35:43 +03:00
release_url="https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/${version}/releases.json"
download_with_retries "${release_url}" "." "${version}.json"
releases=$(cat "./${version}.json")
2019-11-15 15:23:41 -05:00
sdks=("${sdks[@]}" $(echo "${releases}" | jq '.releases[]' | jq '.sdk.version'))
sdks=("${sdks[@]}" $(echo "${releases}" | jq '.releases[]' | jq '.sdks[]?' | jq '.version'))
rm ./${version}.json
2019-11-15 15:23:41 -05:00
done
2020-06-02 17:52:30 +05:00
sortedSdks=$(echo ${sdks[@]} | tr ' ' '\n' | grep -v preview | grep -v rc | grep -v display | cut -d\" -f2 | sort -u -r)
extract_dotnet_sdk() {
local ARCHIVE_NAME="$1"
set -e
dest="./tmp-$(basename -s .tar.gz $ARCHIVE_NAME)"
echo "Extracting $ARCHIVE_NAME to $dest"
mkdir "$dest" && tar -C "$dest" -xzf "$ARCHIVE_NAME"
rsync -qav --remove-source-files "$dest/shared/" /usr/share/dotnet/shared/
rsync -qav --remove-source-files "$dest/host/" /usr/share/dotnet/host/
rsync -qav --remove-source-files "$dest/sdk/" /usr/share/dotnet/sdk/
rm -rf "$dest" "$ARCHIVE_NAME"
}
2019-11-15 15:23:41 -05:00
# Download/install additional SDKs in parallel
export -f download_with_retries
export -f extract_dotnet_sdk
2019-11-15 15:23:41 -05:00
parallel --jobs 0 --halt soon,fail=1 \
'url="https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{}/dotnet-sdk-{}-linux-x64.tar.gz"; \
download_with_retries $url' ::: "${sortedSdks[@]}"
find . -name "*.tar.gz" | parallel --halt soon,fail=1 'extract_dotnet_sdk {}'
2019-11-15 15:23:41 -05:00
# Smoke test each SDK
for sdk in $sortedSdks; do
mksamples "$sdk" "console"
mksamples "$sdk" "mstest"
mksamples "$sdk" "xunit"
mksamples "$sdk" "web"
mksamples "$sdk" "mvc"
mksamples "$sdk" "webapi"
done
# NuGetFallbackFolder at /usr/share/dotnet/sdk/NuGetFallbackFolder is warmed up by smoke test
# Additional FTE will just copy to ~/.dotnet/NuGet which provides no benefit on a fungible machine
setEtcEnvironmentVariable DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
setEtcEnvironmentVariable DOTNET_NOLOGO 1
2020-08-15 19:28:58 +07:00
setEtcEnvironmentVariable DOTNET_MULTILEVEL_LOOKUP 0
prependEtcEnvironmentPath /home/runner/.dotnet/tools
2020-02-10 21:16:11 +03:00
echo 'export PATH="$PATH:$HOME/.dotnet/tools"' | tee -a /etc/skel/.bashrc
invoke_tests "DotnetSDK"