2019-05-22 12:11:57 +00:00
#!/usr/bin/env bash
2018-12-19 12:55:42 -08:00
# Initialize variables if they aren't already defined.
# CI mode - set to true on CI server for PR validation build or official build.
2018-10-21 22:07:26 -07:00
ci = ${ ci :- false }
2018-12-19 12:55:42 -08:00
2019-05-22 12:11:57 +00:00
# Set to true to use the pipelines logger which will enable Azure logging output.
# https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md
# This flag is meant as a temporary opt-opt for the feature while validate it across
# our consumers. It will be deleted in the future.
if [ [ " $ci " = = true ] ] ; then
pipelines_log = ${ pipelines_log :- true }
else
pipelines_log = ${ pipelines_log :- false }
fi
2018-12-19 12:55:42 -08:00
# Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names.
2018-10-21 22:07:26 -07:00
configuration = ${ configuration :- 'Debug' }
2018-12-19 12:55:42 -08:00
2020-05-12 12:48:04 +00:00
# Set to true to opt out of outputting binary log while running in CI
exclude_ci_binary_log = ${ exclude_ci_binary_log :- false }
if [ [ " $ci " = = true && " $exclude_ci_binary_log " = = false ] ] ; then
binary_log_default = true
else
binary_log_default = false
fi
2018-12-19 12:55:42 -08:00
# Set to true to output binary log from msbuild. Note that emitting binary log slows down the build.
2020-05-12 12:48:04 +00:00
binary_log = ${ binary_log :- $binary_log_default }
2018-12-19 12:55:42 -08:00
# Turns on machine preparation/clean up code that changes the machine state (e.g. kills build processes).
2018-10-21 22:07:26 -07:00
prepare_machine = ${ prepare_machine :- false }
2018-12-19 12:55:42 -08:00
# True to restore toolsets and dependencies.
2018-10-21 22:07:26 -07:00
restore = ${ restore :- true }
2018-12-19 12:55:42 -08:00
# Adjusts msbuild verbosity level.
2018-10-21 22:07:26 -07:00
verbosity = ${ verbosity :- 'minimal' }
2018-12-19 12:55:42 -08:00
# Set to true to reuse msbuild nodes. Recommended to not reuse on CI.
if [ [ " $ci " = = true ] ] ; then
node_reuse = ${ node_reuse :- false }
else
node_reuse = ${ node_reuse :- true }
2018-12-05 17:48:17 -08:00
fi
2018-12-19 12:55:42 -08:00
# Configures warning treatment in msbuild.
warn_as_error = ${ warn_as_error :- true }
2018-10-21 22:07:26 -07:00
2020-02-08 00:51:24 +00:00
# True to attempt using .NET Core already that meets requirements specified in global.json
2018-12-19 12:55:42 -08:00
# installed on the machine instead of downloading one.
use_installed_dotnet_cli = ${ use_installed_dotnet_cli :- true }
2019-08-02 12:38:38 +00:00
# Enable repos to use a particular version of the on-line dotnet-install scripts.
# default URL: https://dot.net/v1/dotnet-install.sh
dotnetInstallScriptVersion = ${ dotnetInstallScriptVersion :- 'v1' }
2018-12-19 12:55:42 -08:00
# True to use global NuGet cache instead of restoring packages to repository-local directory.
if [ [ " $ci " = = true ] ] ; then
use_global_nuget_cache = ${ use_global_nuget_cache :- false }
else
use_global_nuget_cache = ${ use_global_nuget_cache :- true }
fi
2018-10-21 22:07:26 -07:00
2020-08-26 13:09:20 +00:00
# Used when restoring .NET SDK from alternative feeds
runtime_source_feed = ${ runtime_source_feed :- '' }
runtime_source_feed_key = ${ runtime_source_feed_key :- '' }
2018-12-19 12:55:42 -08:00
# Resolve any symlinks in the given path.
2018-10-21 22:07:26 -07:00
function ResolvePath {
local path = $1
while [ [ -h $path ] ] ; do
local dir = " $( cd -P " $( dirname " $path " ) " && pwd ) "
path = " $( readlink " $path " ) "
# if $path was a relative symlink, we need to resolve it relative to the path where the
# symlink file was located
[ [ $path != /* ] ] && path = " $dir / $path "
done
# return value
_ResolvePath = " $path "
}
# ReadVersionFromJson [json key]
function ReadGlobalVersion {
local key = $1
2021-01-09 13:53:15 +00:00
if command -v jq & > /dev/null; then
_ReadGlobalVersion = " $( jq -r " .[] | select(has(\" $key \")) | .\" $key \" " " $global_json_file " ) "
elif [ [ " $( cat " $global_json_file " ) " = ~ \" $key \" [ [ :space:] \: ] *\" ( [ ^\" ] +) ] ] ; then
_ReadGlobalVersion = ${ BASH_REMATCH [1] }
fi
2018-10-21 22:07:26 -07:00
2021-01-09 13:53:15 +00:00
if [ [ -z " $_ReadGlobalVersion " ] ] ; then
2019-11-22 13:41:58 +00:00
Write-PipelineTelemetryError -category 'Build' " Error: Cannot find \" $key \" in $global_json_file "
2018-10-21 22:07:26 -07:00
ExitWithExitCode 1
fi
}
function InitializeDotNetCli {
2018-12-19 12:55:42 -08:00
if [ [ -n " ${ _InitializeDotNetCli :- } " ] ] ; then
return
fi
2018-10-21 22:07:26 -07:00
local install = $1
# Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism
export DOTNET_MULTILEVEL_LOOKUP = 0
# Disable first run since we want to control all package sources
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1
2018-12-19 12:55:42 -08:00
# Disable telemetry on CI
if [ [ $ci = = true ] ] ; then
export DOTNET_CLI_TELEMETRY_OPTOUT = 1
fi
# LTTNG is the logging infrastructure used by Core CLR. Need this variable set
# so it doesn't output warnings to the console.
export LTTNG_HOME = " $HOME "
2018-10-21 22:07:26 -07:00
# Source Build uses DotNetCoreSdkDir variable
if [ [ -n " ${ DotNetCoreSdkDir :- } " ] ] ; then
export DOTNET_INSTALL_DIR = " $DotNetCoreSdkDir "
fi
# Find the first path on $PATH that contains the dotnet.exe
2019-05-07 12:30:40 +00:00
if [ [ " $use_installed_dotnet_cli " = = true && $global_json_has_runtimes = = false && -z " ${ DOTNET_INSTALL_DIR :- } " ] ] ; then
2018-10-21 22:07:26 -07:00
local dotnet_path = ` command -v dotnet`
if [ [ -n " $dotnet_path " ] ] ; then
ResolvePath " $dotnet_path "
export DOTNET_INSTALL_DIR = ` dirname " $_ResolvePath " `
fi
fi
ReadGlobalVersion "dotnet"
local dotnet_sdk_version = $_ReadGlobalVersion
local dotnet_root = ""
# Use dotnet installation specified in DOTNET_INSTALL_DIR if it contains the required SDK version,
# otherwise install the dotnet CLI and SDK to repo local .dotnet directory to avoid potential permission issues.
2019-05-07 12:30:40 +00:00
if [ [ $global_json_has_runtimes = = false && -n " ${ DOTNET_INSTALL_DIR :- } " && -d " $DOTNET_INSTALL_DIR /sdk/ $dotnet_sdk_version " ] ] ; then
2018-10-21 22:07:26 -07:00
dotnet_root = " $DOTNET_INSTALL_DIR "
else
dotnet_root = " $repo_root /.dotnet "
2019-05-07 12:30:40 +00:00
2018-10-21 22:07:26 -07:00
export DOTNET_INSTALL_DIR = " $dotnet_root "
if [ [ ! -d " $DOTNET_INSTALL_DIR /sdk/ $dotnet_sdk_version " ] ] ; then
if [ [ " $install " = = true ] ] ; then
InstallDotNetSdk " $dotnet_root " " $dotnet_sdk_version "
else
2019-06-14 12:10:56 +00:00
Write-PipelineTelemetryError -category 'InitializeToolset' " Unable to find dotnet with SDK version ' $dotnet_sdk_version ' "
2018-10-21 22:07:26 -07:00
ExitWithExitCode 1
fi
fi
fi
2018-12-19 12:55:42 -08:00
# Add dotnet to PATH. This prevents any bare invocation of dotnet in custom
# build steps from using anything other than what we've downloaded.
2019-07-19 12:39:46 +00:00
Write-PipelinePrependPath -path " $dotnet_root "
2018-12-19 12:55:42 -08:00
2019-07-19 12:39:46 +00:00
Write-PipelineSetVariable -name "DOTNET_MULTILEVEL_LOOKUP" -value "0"
Write-PipelineSetVariable -name "DOTNET_SKIP_FIRST_TIME_EXPERIENCE" -value "1"
2019-01-11 13:12:40 +00:00
2018-10-21 22:07:26 -07:00
# return value
_InitializeDotNetCli = " $dotnet_root "
}
function InstallDotNetSdk {
local root = $1
local version = $2
2020-08-26 13:09:20 +00:00
local architecture = "unset"
if [ [ $# -ge 3 ] ] ; then
2019-05-07 12:30:40 +00:00
architecture = $3
fi
2020-08-26 13:09:20 +00:00
InstallDotNet " $root " " $version " $architecture 'sdk' 'false' $runtime_source_feed $runtime_source_feed_key
2019-05-07 12:30:40 +00:00
}
2018-10-21 22:07:26 -07:00
2019-05-07 12:30:40 +00:00
function InstallDotNet {
local root = $1
local version = $2
2020-02-08 00:51:24 +00:00
2018-10-21 22:07:26 -07:00
GetDotNetInstallScript " $root "
local install_script = $_GetDotNetInstallScript
2019-05-07 12:30:40 +00:00
local archArg = ''
2020-08-26 13:09:20 +00:00
if [ [ -n " ${ 3 :- } " ] ] && [ " $3 " != 'unset' ] ; then
2019-05-07 12:30:40 +00:00
archArg = " --architecture $3 "
fi
local runtimeArg = ''
2020-08-26 13:09:20 +00:00
if [ [ -n " ${ 4 :- } " ] ] && [ " $4 " != 'sdk' ] ; then
2019-05-07 12:30:40 +00:00
runtimeArg = " --runtime $4 "
2019-02-06 13:45:20 +00:00
fi
2019-05-07 12:30:40 +00:00
local skipNonVersionedFilesArg = ""
2020-08-26 13:09:20 +00:00
if [ [ " $# " -ge "5" ] ] && [ [ " $5 " != 'false' ] ] ; then
2019-05-07 12:30:40 +00:00
skipNonVersionedFilesArg = "--skip-non-versioned-files"
fi
bash " $install_script " --version $version --install-dir " $root " $archArg $runtimeArg $skipNonVersionedFilesArg || {
2019-01-09 13:14:18 +00:00
local exit_code = $?
2020-08-26 13:09:20 +00:00
echo " Failed to install dotnet SDK from public location (exit code ' $exit_code '). "
2019-10-24 22:05:36 +00:00
2020-08-26 13:09:20 +00:00
local runtimeSourceFeed = ''
if [ [ -n " ${ 6 :- } " ] ] ; then
runtimeSourceFeed = " --azure-feed $6 "
fi
2019-10-24 22:05:36 +00:00
2020-08-26 13:09:20 +00:00
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"
2019-10-24 22:05:36 +00:00
fi
2020-08-26 13:09:20 +00:00
decodedFeedKey = ` echo $7 | base64 $decodeArg `
runtimeSourceFeedKey = " --feed-credential $decodedFeedKey "
fi
2019-10-24 22:05:36 +00:00
2020-08-26 13:09:20 +00:00
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 '). "
2019-12-12 13:30:39 +00:00
ExitWithExitCode $exit_code
2020-08-26 13:09:20 +00:00
}
else
if [ [ $exit_code != 0 ] ] ; then
Write-PipelineTelemetryError -category 'InitializeToolset' " Failed to install dotnet SDK from public location (exit code ' $exit_code '). "
2019-10-24 22:05:36 +00:00
fi
2020-08-26 13:09:20 +00:00
ExitWithExitCode $exit_code
2019-10-24 22:05:36 +00:00
fi
2019-01-09 13:14:18 +00:00
}
2018-10-21 22:07:26 -07:00
}
2020-02-08 00:51:24 +00:00
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
2020-12-03 14:19:38 +00:00
timeout = $(( 3 * * $retries - 1 ))
2020-02-08 00:51:24 +00:00
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
}
2018-10-21 22:07:26 -07:00
function GetDotNetInstallScript {
local root = $1
local install_script = " $root /dotnet-install.sh "
2019-08-02 12:38:38 +00:00
local install_script_url = " https://dot.net/ $dotnetInstallScriptVersion /dotnet-install.sh "
2018-10-21 22:07:26 -07:00
if [ [ ! -a " $install_script " ] ] ; then
mkdir -p " $root "
2020-10-28 15:07:45 +00:00
echo " Downloading ' $install_script_url ' "
2018-10-21 22:07:26 -07:00
2020-10-28 15:07:45 +00:00
# Use curl if available, otherwise use wget
if command -v curl > /dev/null; then
2020-12-03 14:19:38 +00:00
# first, try directly, if this fails we will retry with verbose logging
curl " $install_script_url " -sSL --retry 10 --create-dirs -o " $install_script " || {
2021-01-09 13:53:15 +00:00
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
2020-12-31 14:01:40 +00:00
echo "Will now retry the same URL with verbose logging."
2020-12-03 14:19:38 +00:00
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
}
2020-10-28 15:07:45 +00:00
}
2020-02-08 00:51:24 +00:00
else
2020-10-28 15:07:45 +00:00
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
}
2018-10-21 22:07:26 -07:00
fi
fi
# return value
_GetDotNetInstallScript = " $install_script "
}
2018-12-19 12:55:42 -08:00
function InitializeBuildTool {
if [ [ -n " ${ _InitializeBuildTool :- } " ] ] ; then
return
fi
2020-02-08 00:51:24 +00:00
2018-12-19 12:55:42 -08:00
InitializeDotNetCli $restore
2019-01-06 13:08:39 +00:00
# return values
2020-02-08 00:51:24 +00:00
_InitializeBuildTool = " $_InitializeDotNetCli /dotnet "
2019-01-06 13:08:39 +00:00
_InitializeBuildToolCommand = "msbuild"
2021-02-10 23:17:22 +00:00
_InitializeBuildToolFramework = "netcoreapp3.1"
2018-12-19 12:55:42 -08:00
}
[master] Update dependencies from dotnet/arcade (#8726)
* Update dependencies from https://github.com/dotnet/arcade build 20200924.4
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 5.0.0-beta.20474.4
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20200928.3
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 5.0.0-beta.20478.3
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20201006.7
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 5.0.0-beta.20506.7
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks,Microsoft.SourceLink.GitHub,XliffTasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20201009.12
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 6.0.0-beta.20509.12
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks,Microsoft.SourceLink.GitHub,XliffTasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20201020.8
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 6.0.0-beta.20520.8
Dependency coherency updates
Microsoft.SourceLink.GitHub,XliffTasks
From Version 1.1.0-beta-20464-02 -> To Version 1.1.0-beta-20519-02 (parent: Microsoft.DotNet.Arcade.Sdk
* Update FileInfoAssertions.cs
* Update FileInfoAssertions.cs
* Use tasks provided by Microsoft.DotNet.Build.Tasks.Installers when provided.
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>
Co-authored-by: Jeremy Koritzinsky <jekoritz@microsoft.com>
2020-10-23 09:44:02 +02:00
# Set RestoreNoCache as a workaround for https://github.com/NuGet/Home/issues/3116
2018-12-19 12:55:42 -08:00
function GetNuGetPackageCachePath {
if [ [ -z ${ NUGET_PACKAGES :- } ] ] ; then
if [ [ " $use_global_nuget_cache " = = true ] ] ; then
export NUGET_PACKAGES = " $HOME /.nuget/packages "
else
export NUGET_PACKAGES = " $repo_root /.packages "
[master] Update dependencies from dotnet/arcade (#8726)
* Update dependencies from https://github.com/dotnet/arcade build 20200924.4
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 5.0.0-beta.20474.4
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20200928.3
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 5.0.0-beta.20478.3
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20201006.7
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 5.0.0-beta.20506.7
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks,Microsoft.SourceLink.GitHub,XliffTasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20201009.12
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 6.0.0-beta.20509.12
Dependency coherency updates
Microsoft.WindowsDesktop.App.Ref,Microsoft.WindowsDesktop.App,Microsoft.AspNetCore.App.Ref,Microsoft.AspNetCore.App.Ref.Internal,Microsoft.AspNetCore.App.Runtime.win-x64,VS.Redist.Common.AspNetCore.TargetingPack.x64.5.0,dotnet-dev-certs,dotnet-user-secrets,dotnet-watch,Microsoft.Dotnet.WinForms.ProjectTemplates,Microsoft.WindowsDesktop.App.Runtime.win-x64,Microsoft.DotNet.Wpf.ProjectTemplates,Microsoft.FSharp.Compiler,Microsoft.NET.Test.Sdk,Microsoft.NET.ILLink.Tasks,Microsoft.Net.Compilers.Toolset,Microsoft.Build,NuGet.Build.Tasks,Microsoft.SourceLink.GitHub,XliffTasks
From Version 5.0.0-rc.2.20474.5 -> To Version 5.0.0-rc.1.20417.4 (parent: Microsoft.NET.Sdk
* Update dependencies from https://github.com/dotnet/arcade build 20201020.8
Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Arcade.Sdk
From Version 5.0.0-beta.20471.1 -> To Version 6.0.0-beta.20520.8
Dependency coherency updates
Microsoft.SourceLink.GitHub,XliffTasks
From Version 1.1.0-beta-20464-02 -> To Version 1.1.0-beta-20519-02 (parent: Microsoft.DotNet.Arcade.Sdk
* Update FileInfoAssertions.cs
* Update FileInfoAssertions.cs
* Use tasks provided by Microsoft.DotNet.Build.Tasks.Installers when provided.
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>
Co-authored-by: Jeremy Koritzinsky <jekoritz@microsoft.com>
2020-10-23 09:44:02 +02:00
export RESTORENOCACHE = true
2018-12-19 12:55:42 -08:00
fi
fi
# return value
_GetNuGetPackageCachePath = $NUGET_PACKAGES
}
2019-05-02 12:26:55 +00:00
function InitializeNativeTools( ) {
2019-11-02 12:56:53 +00:00
if [ [ -n " ${ DisableNativeToolsetInstalls :- } " ] ] ; then
2019-10-24 22:05:36 +00:00
return
fi
2019-05-02 12:26:55 +00:00
if grep -Fq "native-tools" $global_json_file
then
local nativeArgs = ""
if [ [ " $ci " = = true ] ] ; then
2019-07-27 12:35:24 +00:00
nativeArgs = " --installDirectory $tools_dir "
2019-05-02 12:26:55 +00:00
fi
" $_script_dir /init-tools-native.sh " $nativeArgs
fi
}
2018-10-21 22:07:26 -07:00
function InitializeToolset {
2018-12-19 12:55:42 -08:00
if [ [ -n " ${ _InitializeToolset :- } " ] ] ; then
return
fi
GetNuGetPackageCachePath
2018-10-21 22:07:26 -07:00
ReadGlobalVersion "Microsoft.DotNet.Arcade.Sdk"
local toolset_version = $_ReadGlobalVersion
local toolset_location_file = " $toolset_dir / $toolset_version .txt "
if [ [ -a " $toolset_location_file " ] ] ; then
local path = ` cat " $toolset_location_file " `
if [ [ -a " $path " ] ] ; then
2018-12-19 12:55:42 -08:00
# return value
_InitializeToolset = " $path "
2018-10-21 22:07:26 -07:00
return
fi
fi
if [ [ " $restore " != true ] ] ; then
2019-06-14 12:10:56 +00:00
Write-PipelineTelemetryError -category 'InitializeToolset' " Toolset version $toolset_version has not been restored. "
2018-10-21 22:07:26 -07:00
ExitWithExitCode 2
fi
local proj = " $toolset_dir /restore.proj "
2019-02-15 13:37:10 +00:00
local bl = ""
if [ [ " $binary_log " = = true ] ] ; then
bl = " /bl: $log_dir /ToolsetRestore.binlog "
fi
2020-02-08 00:51:24 +00:00
2018-10-21 22:07:26 -07:00
echo '<Project Sdk="Microsoft.DotNet.Arcade.Sdk"/>' > " $proj "
2019-05-22 12:11:57 +00:00
MSBuild-Core " $proj " $bl /t:__WriteToolsetLocation /clp:ErrorsOnly\; NoSummary /p:__ToolsetLocationOutputFile= " $toolset_location_file "
2018-10-21 22:07:26 -07:00
2018-12-19 12:55:42 -08:00
local toolset_build_proj = ` cat " $toolset_location_file " `
2018-10-21 22:07:26 -07:00
if [ [ ! -a " $toolset_build_proj " ] ] ; then
2019-11-22 13:41:58 +00:00
Write-PipelineTelemetryError -category 'Build' " Invalid toolset path: $toolset_build_proj "
2018-10-21 22:07:26 -07:00
ExitWithExitCode 3
fi
2018-12-19 12:55:42 -08:00
# return value
_InitializeToolset = " $toolset_build_proj "
2018-10-21 22:07:26 -07:00
}
function ExitWithExitCode {
if [ [ " $ci " = = true && " $prepare_machine " = = true ] ] ; then
StopProcesses
fi
exit $1
}
function StopProcesses {
echo "Killing running build processes..."
2019-01-09 13:14:18 +00:00
pkill -9 "dotnet" || true
pkill -9 "vbcscompiler" || true
2018-10-21 22:07:26 -07:00
return 0
}
function MSBuild {
2019-05-24 12:12:50 +00:00
local args = $@
2019-05-22 12:11:57 +00:00
if [ [ " $pipelines_log " = = true ] ] ; then
InitializeBuildTool
InitializeToolset
2019-09-13 12:37:37 +00:00
if [ [ " $ci " = = true ] ] ; then
2019-10-24 22:05:36 +00:00
export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20
export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS = 20
Write-PipelineSetVariable -name "NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS" -value "20"
Write-PipelineSetVariable -name "NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS" -value "20"
2019-09-13 12:37:37 +00:00
fi
2019-05-24 12:12:50 +00:00
local toolset_dir = " ${ _InitializeToolset %/* } "
2021-02-10 23:17:22 +00:00
# new scripts need to work with old packages, so we need to look for the old names/versions
local selectedPath =
local possiblePaths = ( )
possiblePaths += ( " $toolset_dir / $_InitializeBuildToolFramework /Microsoft.DotNet.ArcadeLogging.dll " )
possiblePaths += ( " $toolset_dir / $_InitializeBuildToolFramework /Microsoft.DotNet.Arcade.Sdk.dll " )
possiblePaths += ( " $toolset_dir /netcoreapp2.1/Microsoft.DotNet.ArcadeLogging.dll " )
possiblePaths += ( " $toolset_dir /netcoreapp2.1/Microsoft.DotNet.Arcade.Sdk.dll " )
for path in " ${ possiblePaths [@] } " ; do
if [ [ -f $path ] ] ; then
selectedPath = $path
break
fi
done
if [ [ -z " $selectedPath " ] ] ; then
Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly."
ExitWithExitCode 1
2021-01-09 13:53:15 +00:00
fi
2021-02-10 23:17:22 +00:00
args += ( " -logger: $selectedPath " )
2019-05-22 12:11:57 +00:00
fi
2019-05-24 12:12:50 +00:00
2019-05-22 12:11:57 +00:00
MSBuild-Core ${ args [@] }
}
function MSBuild-Core {
2018-12-19 12:55:42 -08:00
if [ [ " $ci " = = true ] ] ; then
2020-05-12 12:48:04 +00:00
if [ [ " $binary_log " != true && " $exclude_ci_binary_log " != true ] ] ; then
Write-PipelineTelemetryError -category 'Build' "Binary log must be enabled in CI build, or explicitly opted-out from with the -noBinaryLog switch."
2018-12-19 12:55:42 -08:00
ExitWithExitCode 1
fi
if [ [ " $node_reuse " = = true ] ] ; then
2019-11-22 13:41:58 +00:00
Write-PipelineTelemetryError -category 'Build' "Node reuse must be disabled in CI build."
2018-12-19 12:55:42 -08:00
ExitWithExitCode 1
fi
fi
InitializeBuildTool
2018-10-21 22:07:26 -07:00
local warnaserror_switch = ""
2018-12-19 12:55:42 -08:00
if [ [ $warn_as_error = = true ] ] ; then
2018-10-21 22:07:26 -07:00
warnaserror_switch = "/warnaserror"
fi
2020-04-24 10:34:25 -07:00
function RunBuildTool {
export ARCADE_BUILD_TOOL_COMMAND = " $_InitializeBuildTool $@ "
" $_InitializeBuildTool " " $@ " || {
local exit_code = $?
2020-12-09 03:11:38 +00:00
# We should not Write-PipelineTaskError here because that message shows up in the build summary
# The build already logged an error, that's the reason it failed. Producing an error here only adds noise.
echo " Build failed with exit code $exit_code . Check errors above. "
if [ [ " $ci " = = "true" ] ] ; then
Write-PipelineSetResult -result "Failed" -message "msbuild execution failed."
# Exiting with an exit code causes the azure pipelines task to log yet another "noise" error
# The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error
ExitWithExitCode 0
else
ExitWithExitCode $exit_code
fi
2020-04-24 10:34:25 -07:00
}
2019-01-09 13:14:18 +00:00
}
2020-04-24 10:34:25 -07:00
RunBuildTool " $_InitializeBuildToolCommand " /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors= $warn_as_error /p:ContinuousIntegrationBuild= $ci " $@ "
2018-10-21 22:07:26 -07:00
}
2018-12-19 12:55:42 -08:00
ResolvePath " ${ BASH_SOURCE [0] } "
_script_dir = ` dirname " $_ResolvePath " `
2019-06-22 12:29:08 +00:00
. " $_script_dir /pipeline-logging-functions.sh "
2018-12-19 12:55:42 -08:00
eng_root = ` cd -P " $_script_dir /.. " && pwd `
repo_root = ` cd -P " $_script_dir /../.. " && pwd `
artifacts_dir = " $repo_root /artifacts "
toolset_dir = " $artifacts_dir /toolset "
2019-05-02 12:26:55 +00:00
tools_dir = " $repo_root /.tools "
2018-12-19 12:55:42 -08:00
log_dir = " $artifacts_dir /log/ $configuration "
temp_dir = " $artifacts_dir /tmp/ $configuration "
global_json_file = " $repo_root /global.json "
2019-05-07 12:30:40 +00:00
# determine if global.json contains a "runtimes" entry
global_json_has_runtimes = false
2021-01-09 13:53:15 +00:00
if command -v jq & > /dev/null; then
if jq -er '. | select(has("runtimes"))' " $global_json_file " & > /dev/null; then
global_json_has_runtimes = true
fi
elif [ [ " $( cat " $global_json_file " ) " = ~ \" runtimes\" [ [ :space:] \: ] *\{ ] ] ; then
2019-05-07 12:30:40 +00:00
global_json_has_runtimes = true
fi
2018-12-19 12:55:42 -08:00
2018-10-21 22:07:26 -07:00
# HOME may not be defined in some scenarios, but it is required by NuGet
if [ [ -z $HOME ] ] ; then
export HOME = " $repo_root /artifacts/.home/ "
mkdir -p " $HOME "
fi
mkdir -p " $toolset_dir "
2018-12-19 12:55:42 -08:00
mkdir -p " $temp_dir "
2018-10-21 22:07:26 -07:00
mkdir -p " $log_dir "
2019-07-19 12:39:46 +00:00
Write-PipelineSetVariable -name "Artifacts" -value " $artifacts_dir "
Write-PipelineSetVariable -name "Artifacts.Toolset" -value " $toolset_dir "
Write-PipelineSetVariable -name "Artifacts.Log" -value " $log_dir "
Write-PipelineSetVariable -name "Temp" -value " $temp_dir "
Write-PipelineSetVariable -name "TMP" -value " $temp_dir "
2019-10-24 22:05:36 +00:00
# Import custom tools configuration, if present in the repo.
2019-11-22 13:41:58 +00:00
if [ -z " ${ disable_configure_toolset_import :- } " ] ; then
2019-10-24 22:05:36 +00:00
configure_toolset_script = " $eng_root /configure-toolset.sh "
if [ [ -a " $configure_toolset_script " ] ] ; then
. " $configure_toolset_script "
fi
fi
# TODO: https://github.com/dotnet/arcade/issues/1468
# Temporary workaround to avoid breaking change.
# Remove once repos are updated.
if [ [ -n " ${ useInstalledDotNetCli :- } " ] ] ; then
use_installed_dotnet_cli = " $useInstalledDotNetCli "
fi