Files
runner-images/images/ubuntu/scripts/build/install-dotnetcore-sdk.sh
T

101 lines
3.8 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
################################################################################
2023-11-22 21:49:23 +01:00
## File: install-dotnetcore-sdk.sh
## Desc: Install .NET Core SDK
2019-11-15 15:23:41 -05:00
################################################################################
2020-07-08 22:28:23 +03:00
2023-12-29 12:36:27 +01:00
# Source the helpers for use with the script
source $HELPER_SCRIPTS/etc-environment.sh
2020-07-08 22:28:23 +03:00
source $HELPER_SCRIPTS/install.sh
+15
2020-05-26 18:45:48 +03:00
source $HELPER_SCRIPTS/os.sh
2019-11-15 15:23:41 -05:00
2023-12-29 12:36:27 +01:00
extract_dotnet_sdk() {
local archive_name=$1
set -e
destination="./tmp-$(basename -s .tar.gz $archive_name)"
echo "Extracting $archive_name to $destination"
mkdir "$destination" && tar -C "$destination" -xzf "$archive_name"
rsync -qav --remove-source-files "$destination/shared/" /usr/share/dotnet/shared/
rsync -qav --remove-source-files "$destination/host/" /usr/share/dotnet/host/
rsync -qav --remove-source-files "$destination/sdk/" /usr/share/dotnet/sdk/
rm -rf "$destination" "$archive_name"
}
+15
2020-05-26 18:45:48 +03:00
# Ubuntu 20 doesn't support EOL versions
2023-12-29 12:36:27 +01:00
latest_dotnet_packages=$(get_toolset_value '.dotnet.aptPackages[]')
dotnet_versions=$(get_toolset_value '.dotnet.versions[]')
dotnet_tools=$(get_toolset_value '.dotnet.tools[].name')
2019-11-15 15:23:41 -05:00
# Disable telemetry
export DOTNET_CLI_TELEMETRY_OPTOUT=1
2023-12-29 12:36:27 +01:00
# Install .NET SDK from apt
# There is a versions conflict, that leads to
# Microsoft <-> Canonical repos dependencies mix up.
# Give Microsoft's repo higher priority to avoid collisions.
# See: https://github.com/dotnet/core/issues/7699
cat << EOF > /etc/apt/preferences.d/dotnet
Package: *net*
Pin: origin packages.microsoft.com
Pin-Priority: 1001
EOF
apt-get update
2023-12-29 12:36:27 +01:00
for latest_package in ${latest_dotnet_packages[@]}; do
2024-03-14 10:53:11 +01:00
echo "Determining if .NET Core ($latest_package) is installed"
2023-12-26 12:50:52 +01:00
if ! dpkg -S $latest_package &> /dev/null; then
2020-01-28 12:37:57 -06:00
echo "Could not find .NET Core ($latest_package), installing..."
2024-05-29 13:43:07 +02:00
apt-get install $latest_package
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
rm /etc/apt/preferences.d/dotnet
apt-get update
2023-12-29 12:36:27 +01:00
# Install .NET SDK from home repository
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=()
2023-12-29 12:36:27 +01:00
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"
releases=$(cat "$(download_with_retry "$release_url")")
2022-01-29 19:28:21 +03:00
if [[ $version == "6.0" ]]; then
sdks=("${sdks[@]}" $(echo "${releases}" | jq -r 'first(.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not))'))
else
sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdk.version | select(contains("preview") or contains("rc") | not)'))
sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not)'))
fi
2019-11-15 15:23:41 -05:00
done
2023-12-29 12:36:27 +01:00
sorted_sdks=$(echo ${sdks[@]} | tr ' ' '\n' | sort -r | uniq -w 5)
2019-11-15 15:23:41 -05:00
# Download/install additional SDKs in parallel
export -f download_with_retry
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"; \
2023-12-29 12:36:27 +01:00
download_with_retry $url' ::: "${sorted_sdks[@]}"
find . -name "*.tar.gz" | parallel --halt soon,fail=1 'extract_dotnet_sdk {}'
2019-11-15 15:23:41 -05:00
# 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
2023-12-26 12:50:52 +01:00
set_etc_environment_variable DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
set_etc_environment_variable DOTNET_NOLOGO 1
set_etc_environment_variable DOTNET_MULTILEVEL_LOOKUP 0
prepend_etc_environment_path '$HOME/.dotnet/tools'
2023-12-29 12:36:27 +01:00
# Install .Net tools
for dotnet_tool in ${dotnet_tools[@]}; do
2022-01-18 13:31:51 +00:00
echo "Installing dotnet tool $dotnet_tool"
dotnet tool install $dotnet_tool --tool-path '/etc/skel/.dotnet/tools'
done
invoke_tests "DotnetSDK"