diff --git a/NuGet.config b/NuGet.config
index 6f447ede5c2..eb512c26422 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -22,6 +22,7 @@
+
diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props
index 233ed25ee33..def62c9b0fc 100644
--- a/eng/Baseline.Designer.props
+++ b/eng/Baseline.Designer.props
@@ -2,230 +2,230 @@
$(MSBuildAllProjects);$(MSBuildThisFileFullPath)
- 3.1.12
+ 3.1.13
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
-
+
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
+
-
+
-
+
-
+
- 3.1.12
+ 3.1.13
- 3.1.12
+ 3.1.13
-
+
- 3.1.12
+ 3.1.13
@@ -238,358 +238,358 @@
- 3.1.12
+ 3.1.13
-
-
-
+
+
+
-
-
-
+
+
+
- 3.1.12
+ 3.1.13
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
- 3.1.12
+ 3.1.13
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
- 3.1.12
+ 3.1.13
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
- 3.1.12
+ 3.1.13
-
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
-
+
+
+
-
-
-
+
+
+
- 3.1.12
+ 3.1.13
-
+
- 3.1.12
+ 3.1.13
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
- 3.1.12
+ 3.1.13
- 3.1.12
+ 3.1.13
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
- 3.1.12
+ 3.1.13
- 3.1.12
+ 3.1.13
-
-
-
-
-
+
+
+
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
-
+
+
+
-
-
-
+
+
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
-
+
-
+
- 3.1.12
+ 3.1.13
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
+
+
- 3.1.12
+ 3.1.13
@@ -598,20 +598,20 @@
- 3.1.12
+ 3.1.13
-
-
+
+
-
-
-
+
+
+
- 3.1.12
+ 3.1.13
@@ -619,7 +619,7 @@
- 3.1.12
+ 3.1.13
diff --git a/eng/Baseline.xml b/eng/Baseline.xml
index 627dd6ff5bf..bd2f4067580 100644
--- a/eng/Baseline.xml
+++ b/eng/Baseline.xml
@@ -4,58 +4,58 @@ This file contains a list of all the packages and their versions which were rele
build of Extensions. Update this list when preparing for a new patch.
-->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index a6ee155b94e..f09c50ff7bc 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -66,9 +66,9 @@
https://github.com/dotnet/corefx
0f7f38c4fd323b26da10cce95f857f77f0f09b48
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-corefx
- 059a4a19e602494bfbed473dbbb18f2dbfbd0878
+ 9299d909ff6c03c664a3f9a3ef995a9fa2eeec3e
https://dev.azure.com/dnceng/internal/_git/dotnet-corefx
@@ -82,21 +82,21 @@
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
All Runtime.$rid packages should have the same version.
-->
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup
- 0267ad09c6f2e2a37b23b7d230ffbf9e787dd388
+ 64df28ec4a52d6cc23efffbb918eab87ee42600f
https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup
3acd9b0cd16596bad450c82be08780875a73c05c
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup
- 0267ad09c6f2e2a37b23b7d230ffbf9e787dd388
+ 64df28ec4a52d6cc23efffbb918eab87ee42600f
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-corefx
- 50a99d5d3c6e68aecf70627897c0d862a92fc283
+ 9299d909ff6c03c664a3f9a3ef995a9fa2eeec3e
@@ -109,17 +109,17 @@
-
+
https://github.com/dotnet/arcade
- 251249a04a9686ca2660e2acaa3094446a48f10d
+ ab42d248928f65dd174a2383f3256e68d9379bb7
-
+
https://github.com/dotnet/arcade
- 251249a04a9686ca2660e2acaa3094446a48f10d
+ ab42d248928f65dd174a2383f3256e68d9379bb7
-
+
https://github.com/dotnet/arcade
- 251249a04a9686ca2660e2acaa3094446a48f10d
+ ab42d248928f65dd174a2383f3256e68d9379bb7
https://github.com/dotnet/roslyn
diff --git a/eng/Versions.props b/eng/Versions.props
index a4e8b002339..600c4ad0b29 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -9,8 +9,7 @@
3
1
14
- false
-
+ true
$(MajorVersion).$(MinorVersion).$(PatchVersion)
servicing
$(VersionPrefix).0
@@ -58,8 +57,8 @@
3.1.6
3.1.0
- 3.1.12
- 3.1.12-servicing.21069.9
+ 3.1.13
+ 3.1.13-servicing.21116.2
2.1.0
1.1.1
@@ -76,13 +75,13 @@
4.7.0
4.7.0
4.7.0
- 4.7.1
+ 4.7.2
4.7.2
4.7.1
- 3.1.4
+ 3.1.5
- 1.0.0-beta.21110.10
+ 1.0.0-beta.21158.9
3.4.1-beta4-20127-10
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index e001ccb481c..a2d79b4468c 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -22,6 +22,8 @@ Param(
[switch] $ci,
[switch] $prepareMachine,
[switch] $help,
+ [string] $runtimeSourceFeed = "",
+ [string] $runtimeSourceFeedKey = "",
[Parameter(ValueFromRemainingArguments=$true)][String[]]$properties
)
@@ -29,33 +31,35 @@ Param(
function Print-Usage() {
Write-Host "Common settings:"
- Write-Host " -configuration Build configuration: 'Debug' or 'Release' (short: -c)"
- Write-Host " -platform Platform configuration: 'x86', 'x64' or any valid Platform value to pass to msbuild"
- Write-Host " -verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)"
- Write-Host " -binaryLog Output binary log (short: -bl)"
- Write-Host " -help Print help and exit"
+ Write-Host " -configuration Build configuration: 'Debug' or 'Release' (short: -c)"
+ Write-Host " -platform Platform configuration: 'x86', 'x64' or any valid Platform value to pass to msbuild"
+ Write-Host " -verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)"
+ Write-Host " -binaryLog Output binary log (short: -bl)"
+ Write-Host " -help Print help and exit"
Write-Host ""
Write-Host "Actions:"
- Write-Host " -restore Restore dependencies (short: -r)"
- Write-Host " -build Build solution (short: -b)"
- Write-Host " -rebuild Rebuild solution"
- Write-Host " -deploy Deploy built VSIXes"
- Write-Host " -deployDeps Deploy dependencies (e.g. VSIXes for integration tests)"
- Write-Host " -test Run all unit tests in the solution (short: -t)"
- Write-Host " -integrationTest Run all integration tests in the solution"
- Write-Host " -performanceTest Run all performance tests in the solution"
- Write-Host " -pack Package build outputs into NuGet packages and Willow components"
- Write-Host " -sign Sign build outputs"
- Write-Host " -publish Publish artifacts (e.g. symbols)"
+ Write-Host " -restore Restore dependencies (short: -r)"
+ Write-Host " -build Build solution (short: -b)"
+ Write-Host " -rebuild Rebuild solution"
+ Write-Host " -deploy Deploy built VSIXes"
+ Write-Host " -deployDeps Deploy dependencies (e.g. VSIXes for integration tests)"
+ Write-Host " -test Run all unit tests in the solution (short: -t)"
+ Write-Host " -integrationTest Run all integration tests in the solution"
+ Write-Host " -performanceTest Run all performance tests in the solution"
+ Write-Host " -pack Package build outputs into NuGet packages and Willow components"
+ Write-Host " -sign Sign build outputs"
+ Write-Host " -publish Publish artifacts (e.g. symbols)"
Write-Host ""
Write-Host "Advanced settings:"
- Write-Host " -projects Semi-colon delimited list of sln/proj's to build. Globbing is supported (*.sln)"
- Write-Host " -ci Set when running on CI server"
- Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build"
- Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
- Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)."
+ Write-Host " -projects Semi-colon delimited list of sln/proj's to build. Globbing is supported (*.sln)"
+ Write-Host " -ci Set when running on CI server"
+ Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build"
+ Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
+ Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)."
+ Write-Host " -runtimeSourceFeed Alternate feed source for restoring .NET Runtimes and SDKs"
+ Write-Host " -runtimeSourceFeedKey Key value for non-public values of runtimeSourceFeed"
Write-Host ""
Write-Host "Command line arguments not listed above are passed thru to msbuild."
@@ -75,7 +79,7 @@ function InitializeCustomToolset {
}
function Build {
- $toolsetBuildProj = InitializeToolset
+ $toolsetBuildProj = InitializeToolset -runtimeSourceFeed $runtimeSourceFeed -runtimeSourceFeedKey $runtimeSourceFeedKey
InitializeCustomToolset
$bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" }
diff --git a/eng/common/build.sh b/eng/common/build.sh
index 6236fc4d38c..230e41ac2e9 100755
--- a/eng/common/build.sh
+++ b/eng/common/build.sh
@@ -29,11 +29,14 @@ usage()
echo ""
echo "Advanced settings:"
- echo " --projects Project or solution file(s) to build"
- echo " --ci Set when running on CI server"
- echo " --prepareMachine Prepare machine for CI run, clean up processes after build"
- echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')"
- echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
+ echo " --projects Project or solution file(s) to build"
+ echo " --ci Set when running on CI server"
+ echo " --prepareMachine Prepare machine for CI run, clean up processes after build"
+ echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')"
+ echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
+ echo " --runtimeSourceFeed Alternate (fallback) source for .NET Runtime and SDK installation"
+ echo " --runtimeSourceFeedKey Credentials (if needed) for authenticating to runtimeSourceFeed"
+
echo ""
echo "Command line arguments not listed above are passed thru to msbuild."
echo "Arguments can also be passed in with a single hyphen."
@@ -73,6 +76,9 @@ configuration='Debug'
prepare_machine=false
verbosity='minimal'
+runtimeSourceFeed=''
+runtimeSourceFeedKey=''
+
properties=''
while [[ $# > 0 ]]; do
@@ -141,6 +147,14 @@ while [[ $# > 0 ]]; do
node_reuse=$2
shift
;;
+ -runtimesourcefeed)
+ shift
+ runtimeSourceFeed="$1"
+ ;;
+ -runtimesourcefeedkey)
+ shift
+ runtimeSourceFeedKey="$1"
+ ;;
*)
properties="$properties $1"
;;
@@ -166,7 +180,7 @@ function InitializeCustomToolset {
}
function Build {
- InitializeToolset
+ InitializeToolset $runtimeSourceFeed $runtimeSourceFeedKey
InitializeCustomToolset
if [[ ! -z "$projects" ]]; then
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index 84651fea050..2205c9e8117 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -96,7 +96,7 @@ function Exec-Process([string]$command, [string]$commandArgs) {
}
}
-function InitializeDotNetCli([bool]$install) {
+function InitializeDotNetCli([bool]$install, [string] $runtimeSourceFeed, [string] $runtimeSourceFeedKey) {
if (Test-Path variable:global:_DotNetInstallDir) {
return $global:_DotNetInstallDir
}
@@ -138,7 +138,7 @@ function InitializeDotNetCli([bool]$install) {
if (-not (Test-Path(Join-Path $dotnetRoot "sdk\$dotnetSdkVersion"))) {
if ($install) {
- InstallDotNetSdk $dotnetRoot $dotnetSdkVersion
+ InstallDotNetSdk -dotnetRoot $dotnetRoot -version $dotnetSdkVersion -runtimeSourceFeed $runtimeSourceFeed -runtimeSourceFeedKey $runtimeSourceFeedKey
} else {
Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Unable to find dotnet with SDK version '$dotnetSdkVersion'"
ExitWithExitCode 1
@@ -207,8 +207,8 @@ function GetDotNetInstallScript([string] $dotnetRoot) {
return $installScript
}
-function InstallDotNetSdk([string] $dotnetRoot, [string] $version, [string] $architecture = "") {
- InstallDotNet $dotnetRoot $version $architecture
+function InstallDotNetSdk([string] $dotnetRoot, [string] $version, [string] $architecture = "", [string] $runtimeSourceFeed, [string] $runtimeSourceFeedKey ) {
+ InstallDotNet -dotnetRoot $dotnetRoot -version $version -architecture $architecture -skipNonVersionedFiles $false -runtimeSourceFeed $runtimeSourceFeed -runtimeSourceFeedKey $runtimeSourceFeedKey
}
function InstallDotNet([string] $dotnetRoot,
@@ -233,10 +233,9 @@ function InstallDotNet([string] $dotnetRoot,
& $installScript @installParameters
}
catch {
- Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Failed to install dotnet runtime '$runtime' from public location."
-
- # Only the runtime can be installed from a custom [private] location.
- if ($runtime -and ($runtimeSourceFeed -or $runtimeSourceFeedKey)) {
+ # If we fail, retry from a custom (possibly private) location.
+ if ($runtimeSourceFeed -or $runtimeSourceFeedKey) {
+ Write-Host "Failed to install dotnet runtime '$runtime' version '$version' from public location; trying specified alternate feed credentials"
if ($runtimeSourceFeed) { $installParameters.AzureFeed = $runtimeSourceFeed }
if ($runtimeSourceFeedKey) {
@@ -253,6 +252,7 @@ function InstallDotNet([string] $dotnetRoot,
ExitWithExitCode 1
}
} else {
+ Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Failed to install dotnet runtime '$runtime' version '$version' from public location."
ExitWithExitCode 1
}
}
@@ -439,7 +439,7 @@ function LocateVisualStudio([object]$vsRequirements = $null){
return $vsInfo[0]
}
-function InitializeBuildTool() {
+function InitializeBuildTool([string] $runtimeSourceFeed, [string] $runtimeSourceFeedKey) {
if (Test-Path variable:global:_BuildTool) {
return $global:_BuildTool
}
@@ -451,7 +451,7 @@ function InitializeBuildTool() {
# Initialize dotnet cli if listed in 'tools'
$dotnetRoot = $null
if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") {
- $dotnetRoot = InitializeDotNetCli -install:$restore
+ $dotnetRoot = InitializeDotNetCli -install:$restore -runtimeSourceFeed $runtimeSourceFeed -runtimeSourceFeedKey $runtimeSourceFeedKey
}
if ($msbuildEngine -eq "dotnet") {
@@ -523,7 +523,8 @@ function InitializeNativeTools() {
}
}
-function InitializeToolset() {
+function InitializeToolset([string] $runtimeSourceFeed, [string] $runtimeSourceFeedKey)
+{
if (Test-Path variable:global:_ToolsetBuildProj) {
return $global:_ToolsetBuildProj
}
@@ -545,7 +546,7 @@ function InitializeToolset() {
ExitWithExitCode 1
}
- $buildTool = InitializeBuildTool
+ $buildTool = InitializeBuildTool -runtimeSourceFeed $runtimeSourceFeed -runtimeSourceFeedKey $runtimeSourceFeedKey
$proj = Join-Path $ToolsetDir "restore.proj"
$bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "ToolsetRestore.binlog") } else { "" }
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
index acbb0c5b3ff..c50849b01d0 100755
--- a/eng/common/tools.sh
+++ b/eng/common/tools.sh
@@ -28,6 +28,10 @@ prepare_machine=${prepare_machine:-false}
# True to restore toolsets and dependencies.
restore=${restore:-true}
+# Allows restoring .NET Core Runtimes and SDKs from alternative feeds
+runtimeSourceFeed=${runtimeSourceFeed:-""}
+runtimeSourceFeedKey=${runtimeSourceFeedKey:-""}
+
# Adjusts msbuild verbosity level.
verbosity=${verbosity:-'minimal'}
@@ -95,6 +99,12 @@ function InitializeDotNetCli {
fi
local install=$1
+ local runtimeSourceFeedArg=""
+ local runtimeSourceFeedKeyArg=""
+ if [[ $# == 3 ]]; then
+ runtimeSourceFeedArg=$2
+ runtimeSourceFeedKeyArg=$3
+ fi
# Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism
export DOTNET_MULTILEVEL_LOOKUP=0
@@ -140,7 +150,7 @@ function InitializeDotNetCli {
if [[ ! -d "$DOTNET_INSTALL_DIR/sdk/$dotnet_sdk_version" ]]; then
if [[ "$install" == true ]]; then
- InstallDotNetSdk "$dotnet_root" "$dotnet_sdk_version"
+ InstallDotNetSdk "$dotnet_root" "$dotnet_sdk_version" "unset" $runtimeSourceFeedArg $runtimeSourceFeedKeyArg
else
Write-PipelineTelemetryError -category 'InitializeToolset' "Unable to find dotnet with SDK version '$dotnet_sdk_version'"
ExitWithExitCode 1
@@ -171,26 +181,26 @@ function InitializeDotNetCli {
function InstallDotNetSdk {
local root=$1
local version=$2
- local architecture=""
+ local architecture="unset"
if [[ $# == 3 ]]; then
architecture=$3
fi
- InstallDotNet "$root" "$version" $architecture
+ InstallDotNet "$root" "$version" $architecture "not-a-runtime" 0 $runtimeSourceFeed $runtimeSourceFeedKey
}
function InstallDotNet {
local root=$1
local version=$2
-
+
GetDotNetInstallScript "$root"
local install_script=$_GetDotNetInstallScript
local archArg=''
- if [[ -n "${3:-}" ]]; then
+ if [[ -n "${3:-}" && "$3" != "unset" ]]; then
archArg="--architecture $3"
fi
local runtimeArg=''
- if [[ -n "${4:-}" ]]; then
+ if [[ -n "${4:-}" && "$4" != "not-a-runtime" ]]; then
runtimeArg="--runtime $4"
fi
@@ -200,40 +210,61 @@ function InstallDotNet {
fi
bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg || {
local exit_code=$?
- Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from public location (exit code '$exit_code')."
- if [[ -n "$runtimeArg" ]]; then
- local runtimeSourceFeed=''
- if [[ -n "${6:-}" ]]; then
- runtimeSourceFeed="--azure-feed $6"
- fi
+ local runtimeSourceFeed=''
+ if [[ -n "${6:-}" ]]; then
+ runtimeSourceFeed="--azure-feed $6"
+ fi
- local runtimeSourceFeedKey=''
- if [[ -n "${7:-}" ]]; then
- # The 'base64' binary on alpine uses '-d' and doesn't support '--decode'
- # '-d'. To work around this, do a simple detection and switch the parameter
- # accordingly.
- decodeArg="--decode"
- if base64 --help 2>&1 | grep -q "BusyBox"; then
- decodeArg="-d"
- fi
- decodedFeedKey=`echo $7 | base64 $decodeArg`
- runtimeSourceFeedKey="--feed-credential $decodedFeedKey"
+ local runtimeSourceFeedKey=''
+ if [[ -n "${7:-}" ]]; then
+ # The 'base64' binary on alpine uses '-d' and doesn't support '--decode'
+ # '-d'. To work around this, do a simple detection and switch the parameter
+ # accordingly.
+ decodeArg="--decode"
+ if base64 --help 2>&1 | grep -q "BusyBox"; then
+ decodeArg="-d"
fi
+ decodedFeedKey=`echo $7 | base64 $decodeArg`
+ runtimeSourceFeedKey="--feed-credential $decodedFeedKey"
+ else
+ Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from public location (exit code '$exit_code')."
+ fi
- if [[ -n "$runtimeSourceFeed" || -n "$runtimeSourceFeedKey" ]]; then
- bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg $runtimeSourceFeed $runtimeSourceFeedKey || {
- local exit_code=$?
- Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from custom location '$runtimeSourceFeed' (exit code '$exit_code')."
- ExitWithExitCode $exit_code
- }
- else
+ if [[ -n "$runtimeSourceFeed" || -n "$runtimeSourceFeedKey" ]]; then
+ bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg $runtimeSourceFeed $runtimeSourceFeedKey || {
+ local exit_code=$?
+ Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from custom location '$runtimeSourceFeed' (exit code '$exit_code')."
ExitWithExitCode $exit_code
- fi
+ }
+ else
+ ExitWithExitCode $exit_code
fi
}
}
+function with_retries {
+ local maxRetries=5
+ local retries=1
+ echo "Trying to run '$@' for maximum of $maxRetries attempts."
+ while [[ $((retries++)) -le $maxRetries ]]; do
+ "$@"
+
+ if [[ $? == 0 ]]; then
+ echo "Ran '$@' successfully."
+ return 0
+ fi
+
+ timeout=$((3**$retries-1))
+ echo "Failed to execute '$@'. Waiting $timeout seconds before next attempt ($retries out of $maxRetries)." 1>&2
+ sleep $timeout
+ done
+
+ echo "Failed to execute '$@' for $maxRetries times." 1>&2
+
+ return 1
+}
+
function GetDotNetInstallScript {
local root=$1
local install_script="$root/dotnet-install.sh"
@@ -246,13 +277,21 @@ function GetDotNetInstallScript {
# Use curl if available, otherwise use wget
if command -v curl > /dev/null; then
+ # first, try directly, if this fails we will retry with verbose logging
curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || {
- local exit_code=$?
- Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
- ExitWithExitCode $exit_code
+ if command -v openssl &> /dev/null; then
+ echo "Curl failed; dumping some information about dotnet.microsoft.com for later investigation"
+ echo | openssl s_client -showcerts -servername dotnet.microsoft.com -connect dotnet.microsoft.com:443
+ fi
+ echo "Will now retry the same URL with verbose logging."
+ with_retries curl "$install_script_url" -sSL --verbose --retry 10 --create-dirs -o "$install_script" || {
+ local exit_code=$?
+ Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
+ ExitWithExitCode $exit_code
+ }
}
- else
- wget -q -O "$install_script" "$install_script_url" || {
+ else
+ with_retries wget -v -O "$install_script" "$install_script_url" || {
local exit_code=$?
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
ExitWithExitCode $exit_code
@@ -268,7 +307,7 @@ function InitializeBuildTool {
return
fi
- InitializeDotNetCli $restore
+ InitializeDotNetCli $restore $runtimeSourceFeed $runtimeSourceFeedKey
# return values
_InitializeBuildTool="$_InitializeDotNetCli/dotnet"
diff --git a/global.json b/global.json
index 953730c4413..e934f0bd95a 100644
--- a/global.json
+++ b/global.json
@@ -1,9 +1,9 @@
{
"sdk": {
- "version": "3.1.112"
+ "version": "3.1.113"
},
"tools": {
- "dotnet": "3.1.112",
+ "dotnet": "3.1.113",
"runtimes": {
"dotnet": [
"$(MicrosoftNETCoreAppInternalPackageVersion)"
@@ -11,7 +11,7 @@
}
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.21110.10",
- "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.21110.10"
+ "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.21158.9",
+ "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.21158.9"
}
}