Use Microsoft.Net.Compilers.Toolset (#10415)

This commit is contained in:
Nate McMaster 2019-05-23 15:35:49 -07:00 committed by GitHub
parent c05244cda9
commit e01d713909
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 212 additions and 32 deletions

View File

@ -1,6 +1,15 @@
<Project> <Project>
<Import Project="version.props" /> <Import Project="version.props" />
<!--
These imports look funny.
Eventually they will be replaced by a simplified import that brings in
the entire Arcade SDK. For now, we're moving onto Arcade one piece at a time.
-->
<Import Project="../tools/DefaultVersions.Generated.props" Sdk="Microsoft.DotNet.Arcade.Sdk" />
<Import Project="eng\Versions.props" />
<Import Project="../tools/Compiler.props" Sdk="Microsoft.DotNet.Arcade.Sdk" Condition="'$(UsingToolMicrosoftNetCompilers)' == 'true'"/>
<PropertyGroup> <PropertyGroup>
<Product>Microsoft ASP.NET Core</Product> <Product>Microsoft ASP.NET Core</Product>
@ -121,7 +130,6 @@
<OutDirName Condition="'$(IsReferenceAssemblyProject)' == 'true'">$(MSBuildProjectName)-ref</OutDirName> <OutDirName Condition="'$(IsReferenceAssemblyProject)' == 'true'">$(MSBuildProjectName)-ref</OutDirName>
</PropertyGroup> </PropertyGroup>
<Import Project="eng\Versions.props" />
<Import Project="build\sources.props" /> <Import Project="build\sources.props" />
<!-- Artifacts layout --> <!-- Artifacts layout -->

View File

@ -14,6 +14,7 @@
https://dotnetfeed.blob.core.windows.net/aspnet-entityframeworkcore/index.json; https://dotnetfeed.blob.core.windows.net/aspnet-entityframeworkcore/index.json;
https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore-tooling/index.json; https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore-tooling/index.json;
https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json; https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json;
https://dotnet.myget.org/F/roslyn/api/v3/index.json;
https://grpc.jfrog.io/grpc/api/nuget/v3/grpc-nuget-dev; https://grpc.jfrog.io/grpc/api/nuget/v3/grpc-nuget-dev;
https://api.nuget.org/v3/index.json; https://api.nuget.org/v3/index.json;
</RestoreSources> </RestoreSources>

View File

@ -384,13 +384,17 @@
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha> <Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19270.1"> <Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19272.13">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>e913fb3b02d4089a91ff91c041c5f6e7c29038b0</Sha> <Sha>86e674361bdcefecbd8199ab62d0b1a6cb25703d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.19270.1"> <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.19272.13">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>e913fb3b02d4089a91ff91c041c5f6e7c29038b0</Sha> <Sha>86e674361bdcefecbd8199ab62d0b1a6cb25703d</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.19272.13">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>86e674361bdcefecbd8199ab62d0b1a6cb25703d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor"> <Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>

View File

@ -5,6 +5,10 @@
--> -->
<Project> <Project>
<PropertyGroup Label="Arcade settings">
<!-- Opt-in to using the version of the Roslyn compiler bundled with Arcade. -->
<UsingToolMicrosoftNetCompilers Condition="'$(MSBuildProjectExtension)' == '.csproj' or '$(MSBuildProjectExtension)' == '.fsproj' or '$(MSBuildProjectExtension)' == '.vbproj'">true</UsingToolMicrosoftNetCompilers>
</PropertyGroup>
<!-- <!--
These versions should ONLY be updated by automation. These versions should ONLY be updated by automation.
@ -17,7 +21,7 @@
--> -->
<PropertyGroup Label="Automated"> <PropertyGroup Label="Automated">
<!-- Packages from dotnet/arcade --> <!-- Packages from dotnet/arcade -->
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19270.1</MicrosoftDotNetGenAPIPackageVersion> <MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19272.13</MicrosoftDotNetGenAPIPackageVersion>
<!-- Packages from dotnet/core-setup --> <!-- Packages from dotnet/core-setup -->
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview6-27714-15</MicrosoftExtensionsDependencyModelPackageVersion> <MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview6-27714-15</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview6-27714-15</MicrosoftNETCoreAppPackageVersion> <MicrosoftNETCoreAppPackageVersion>3.0.0-preview6-27714-15</MicrosoftNETCoreAppPackageVersion>

View File

@ -53,6 +53,7 @@
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'TOOLSET'">https://dotnetfeed.blob.core.windows.net/dotnet-toolset/index.json</TargetStaticFeed> <TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'TOOLSET'">https://dotnetfeed.blob.core.windows.net/dotnet-toolset/index.json</TargetStaticFeed>
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'WINDOWSDESKTOP'">https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json</TargetStaticFeed> <TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'WINDOWSDESKTOP'">https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json</TargetStaticFeed>
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'NUGETCLIENT'">https://dotnetfeed.blob.core.windows.net/nuget-nugetclient/index.json</TargetStaticFeed> <TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'NUGETCLIENT'">https://dotnetfeed.blob.core.windows.net/nuget-nugetclient/index.json</TargetStaticFeed>
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETENTITYFRAMEWORK6'">https://dotnetfeed.blob.core.windows.net/aspnet-entityframework6/index.json</TargetStaticFeed>
</PropertyGroup> </PropertyGroup>
<Error <Error

View File

@ -1,6 +1,7 @@
[CmdletBinding(PositionalBinding=$false)] [CmdletBinding(PositionalBinding=$false)]
Param( Param(
[string][Alias('c')]$configuration = "Debug", [string][Alias('c')]$configuration = "Debug",
[string]$platform = $null,
[string] $projects, [string] $projects,
[string][Alias('v')]$verbosity = "minimal", [string][Alias('v')]$verbosity = "minimal",
[string] $msbuildEngine = $null, [string] $msbuildEngine = $null,
@ -29,6 +30,7 @@ Param(
function Print-Usage() { function Print-Usage() {
Write-Host "Common settings:" Write-Host "Common settings:"
Write-Host " -configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)" Write-Host " -configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)"
Write-Host " -platform <value> Platform configuration: 'x86', 'x64' or any valid Platform value to pass to msbuild"
Write-Host " -verbosity <value> Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)" Write-Host " -verbosity <value> 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 " -binaryLog Output binary log (short: -bl)"
Write-Host " -help Print help and exit" Write-Host " -help Print help and exit"
@ -77,6 +79,7 @@ function Build {
InitializeCustomToolset InitializeCustomToolset
$bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" } $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" }
$platformArg = if ($platform) { "/p:Platform=$platform" } else { "" }
if ($projects) { if ($projects) {
# Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons.
@ -88,6 +91,7 @@ function Build {
MSBuild $toolsetBuildProj ` MSBuild $toolsetBuildProj `
$bl ` $bl `
$platformArg `
/p:Configuration=$configuration ` /p:Configuration=$configuration `
/p:RepoRoot=$RepoRoot ` /p:RepoRoot=$RepoRoot `
/p:Restore=$restore ` /p:Restore=$restore `

View File

@ -66,6 +66,7 @@ ci=false
warn_as_error=true warn_as_error=true
node_reuse=true node_reuse=true
binary_log=false binary_log=false
pipelines_log=false
projects='' projects=''
configuration='Debug' configuration='Debug'
@ -92,6 +93,9 @@ while [[ $# > 0 ]]; do
-binarylog|-bl) -binarylog|-bl)
binary_log=true binary_log=true
;; ;;
-pipelineslog|-pl)
pipelines_log=true
;;
-restore|-r) -restore|-r)
restore=true restore=true
;; ;;
@ -146,6 +150,7 @@ while [[ $# > 0 ]]; do
done done
if [[ "$ci" == true ]]; then if [[ "$ci" == true ]]; then
pipelines_log=true
binary_log=true binary_log=true
node_reuse=false node_reuse=false
fi fi

View File

@ -0,0 +1,11 @@
deb http://deb.debian.org/debian buster main
deb-src http://deb.debian.org/debian buster main
deb http://deb.debian.org/debian-security/ buster/updates main
deb-src http://deb.debian.org/debian-security/ buster/updates main
deb http://deb.debian.org/debian buster-updates main
deb-src http://deb.debian.org/debian buster-updates main
deb http://deb.debian.org/debian buster-backports main contrib non-free
deb-src http://deb.debian.org/debian buster-backports main contrib non-free

View File

@ -0,0 +1,12 @@
deb http://deb.debian.org/debian stretch main
deb-src http://deb.debian.org/debian stretch main
deb http://deb.debian.org/debian-security/ stretch/updates main
deb-src http://deb.debian.org/debian-security/ stretch/updates main
deb http://deb.debian.org/debian stretch-updates main
deb-src http://deb.debian.org/debian stretch-updates main
deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free

View File

@ -2,7 +2,7 @@
usage() usage()
{ {
echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfs <directory>]" echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfsdir <directory>]"
echo "BuildArch can be: arm(default), armel, arm64, x86" echo "BuildArch can be: arm(default), armel, arm64, x86"
echo "LinuxCodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen." echo "LinuxCodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine" echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine"
@ -113,12 +113,12 @@ while :; do
__LinuxCodeName=trusty __LinuxCodeName=trusty
fi fi
;; ;;
xenial) # Ubunry 16.04 xenial) # Ubuntu 16.04
if [ "$__LinuxCodeName" != "jessie" ]; then if [ "$__LinuxCodeName" != "jessie" ]; then
__LinuxCodeName=xenial __LinuxCodeName=xenial
fi fi
;; ;;
zesty) # Ununtu 17.04 zesty) # Ubuntu 17.04
if [ "$__LinuxCodeName" != "jessie" ]; then if [ "$__LinuxCodeName" != "jessie" ]; then
__LinuxCodeName=zesty __LinuxCodeName=zesty
fi fi
@ -132,7 +132,16 @@ while :; do
__LinuxCodeName=jessie __LinuxCodeName=jessie
__UbuntuRepo="http://ftp.debian.org/debian/" __UbuntuRepo="http://ftp.debian.org/debian/"
;; ;;
# TBD Stretch -> Debian 9, Buster -> Debian 10 stretch) # Debian 9
__LinuxCodeName=stretch
__UbuntuRepo="http://ftp.debian.org/debian/"
__LLDB_Package="liblldb-6.0-dev"
;;
buster) # Debian 10
__LinuxCodeName=buster
__UbuntuRepo="http://ftp.debian.org/debian/"
__LLDB_Package="liblldb-6.0-dev"
;;
tizen) tizen)
if [ "$__BuildArch" != "armel" ]; then if [ "$__BuildArch" != "armel" ]; then
echo "Tizen is available only for armel." echo "Tizen is available only for armel."

View File

@ -1,5 +1,6 @@
param ( param (
$darcVersion = $null $darcVersion = $null,
$versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16"
) )
$verbosity = "m" $verbosity = "m"
@ -16,13 +17,13 @@ function InstallDarcCli ($darcVersion) {
Invoke-Expression "& `"$dotnet`" tool uninstall $darcCliPackageName -g" Invoke-Expression "& `"$dotnet`" tool uninstall $darcCliPackageName -g"
} }
# Until we can anonymously query the BAR API for the latest arcade-services # If the user didn't explicitly specify the darc version,
# build applied to the PROD channel, this is hardcoded. # query the Maestro API for the correct version of darc to install.
if (-not $darcVersion) { if (-not $darcVersion) {
$darcVersion = '1.1.0-beta.19205.4' $darcVersion = $(Invoke-WebRequest -Uri $versionEndpoint -UseBasicParsing).Content
} }
$arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-arcade/index.json' $arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json'
Write-Host "Installing Darc CLI version $darcVersion..." Write-Host "Installing Darc CLI version $darcVersion..."
Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed."

View File

@ -1,7 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source="${BASH_SOURCE[0]}" source="${BASH_SOURCE[0]}"
darcVersion="1.1.0-beta.19205.4" darcVersion=''
versionEndpoint="https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16"
while [[ $# > 0 ]]; do while [[ $# > 0 ]]; do
opt="$(echo "$1" | awk '{print tolower($0)}')" opt="$(echo "$1" | awk '{print tolower($0)}')"
@ -10,6 +11,10 @@ while [[ $# > 0 ]]; do
darcVersion=$2 darcVersion=$2
shift shift
;; ;;
--versionendpoint)
versionEndpoint=$2
shift
;;
*) *)
echo "Invalid argument: $1" echo "Invalid argument: $1"
usage usage
@ -33,6 +38,10 @@ verbosity=m
. "$scriptroot/tools.sh" . "$scriptroot/tools.sh"
if [ -z "$darcVersion" ]; then
darcVersion=$(curl -X GET "$versionEndpoint" -H "accept: text/plain")
fi
function InstallDarcCli { function InstallDarcCli {
local darc_cli_package_name="microsoft.dotnet.darc" local darc_cli_package_name="microsoft.dotnet.darc"
@ -45,9 +54,9 @@ function InstallDarcCli {
echo $($dotnet_root/dotnet tool uninstall $darc_cli_package_name -g) echo $($dotnet_root/dotnet tool uninstall $darc_cli_package_name -g)
fi fi
local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-arcade/index.json" local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json"
echo "Installing Darc CLI version $toolset_version..." echo "Installing Darc CLI version $darcVersion..."
echo "You may need to restart your command shell if this is the first dotnet tool you have installed." echo "You may need to restart your command shell if this is the first dotnet tool you have installed."
echo $($dotnet_root/dotnet tool install $darc_cli_package_name --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity -g) echo $($dotnet_root/dotnet tool install $darc_cli_package_name --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity -g)
} }

View File

@ -8,9 +8,14 @@ Param(
. $PSScriptRoot\tools.ps1 . $PSScriptRoot\tools.ps1
$dotnetRoot = Join-Path $RepoRoot ".dotnet"
$installdir = $dotnetRoot
try { try {
$dotnetRoot = Join-Path $RepoRoot ".dotnet" if ($architecture -and $architecture.Trim() -eq "x86") {
InstallDotNet $dotnetRoot $version $architecture $runtime $true $installdir = Join-Path $installdir "x86"
}
InstallDotNet $installdir $version $architecture $runtime $true
} }
catch { catch {
Write-Host $_ Write-Host $_
@ -19,4 +24,4 @@ catch {
ExitWithExitCode 1 ExitWithExitCode 1
} }
ExitWithExitCode 0 ExitWithExitCode 0

View File

@ -5,6 +5,7 @@ parameters:
HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number
HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues
HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group
HelixConfiguration: '' # optional -- additional property attached to a job
HelixPreCommands: '' # optional -- commands to run before Helix work item execution HelixPreCommands: '' # optional -- commands to run before Helix work item execution
HelixPostCommands: '' # optional -- commands to run after Helix work item execution HelixPostCommands: '' # optional -- commands to run after Helix work item execution
WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects
@ -35,6 +36,7 @@ steps:
HelixSource: ${{ parameters.HelixSource }} HelixSource: ${{ parameters.HelixSource }}
HelixType: ${{ parameters.HelixType }} HelixType: ${{ parameters.HelixType }}
HelixBuild: ${{ parameters.HelixBuild }} HelixBuild: ${{ parameters.HelixBuild }}
HelixConfiguration: ${{ parameters.HelixConfiguration }}
HelixTargetQueues: ${{ parameters.HelixTargetQueues }} HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixAccessToken: ${{ parameters.HelixAccessToken }}
HelixPreCommands: ${{ parameters.HelixPreCommands }} HelixPreCommands: ${{ parameters.HelixPreCommands }}
@ -64,6 +66,7 @@ steps:
HelixSource: ${{ parameters.HelixSource }} HelixSource: ${{ parameters.HelixSource }}
HelixType: ${{ parameters.HelixType }} HelixType: ${{ parameters.HelixType }}
HelixBuild: ${{ parameters.HelixBuild }} HelixBuild: ${{ parameters.HelixBuild }}
HelixConfiguration: ${{ parameters.HelixConfiguration }}
HelixTargetQueues: ${{ parameters.HelixTargetQueues }} HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixAccessToken: ${{ parameters.HelixAccessToken }}
HelixPreCommands: ${{ parameters.HelixPreCommands }} HelixPreCommands: ${{ parameters.HelixPreCommands }}

View File

@ -213,7 +213,11 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
if ($env:VSINSTALLDIR -ne $null) { if ($env:VSINSTALLDIR -ne $null) {
$msbuildCmd = Get-Command "msbuild.exe" -ErrorAction SilentlyContinue $msbuildCmd = Get-Command "msbuild.exe" -ErrorAction SilentlyContinue
if ($msbuildCmd -ne $null) { if ($msbuildCmd -ne $null) {
if ($msbuildCmd.Version -ge $vsMinVersion) { # Workaround for https://github.com/dotnet/roslyn/issues/35793
# Due to this issue $msbuildCmd.Version returns 0.0.0.0 for msbuild.exe 16.2+
$msbuildVersion = [Version]::new((Get-Item $msbuildCmd.Path).VersionInfo.ProductVersion.Split(@('-', '+'))[0])
if ($msbuildVersion -ge $vsMinVersion) {
return $global:_MSBuildExe = $msbuildCmd.Path return $global:_MSBuildExe = $msbuildCmd.Path
} }

View File

@ -1,8 +1,20 @@
#!/usr/bin/env bash
# Initialize variables if they aren't already defined. # Initialize variables if they aren't already defined.
# CI mode - set to true on CI server for PR validation build or official build. # CI mode - set to true on CI server for PR validation build or official build.
ci=${ci:-false} ci=${ci:-false}
# 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
# Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names. # Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names.
configuration=${configuration:-'Debug'} configuration=${configuration:-'Debug'}
@ -40,6 +52,78 @@ else
use_global_nuget_cache=${use_global_nuget_cache:-true} use_global_nuget_cache=${use_global_nuget_cache:-true}
fi fi
function EmitError {
if [[ "$ci" != true ]]; then
echo "$@" >&2
return
fi
message_type="error"
sourcepath=''
linenumber=''
columnnumber=''
error_code=''
while [[ $# -gt 0 ]]; do
opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')"
case "$opt" in
-type|-t)
message_type=$2
shift
;;
-sourcepath|-s)
sourcepath=$2
shift
;;
-linenumber|-l)
linenumber=$2
shift
;;
-columnnumber|-col)
columnnumber=$2
shift
;;
-code|-c)
error_code=$2
shift
;;
*)
break
;;
esac
shift
done
message='##vso[task.logissue'
message="$message type=$message_type"
if [ -n "$sourcepath" ]; then
message="$message;sourcepath=$sourcepath"
else
message="$message;sourcepath=${BASH_SOURCE[1]}"
fi
if [ -n "$linenumber" ]; then
message="$message;linenumber=$linenumber"
else
message="$message;linenumber=${BASH_LINENO[0]}"
fi
if [ -n "$columnnumber" ]; then
message="$message;columnnumber=$columnnumber"
fi
if [ -n "$error_code" ]; then
message="$message;code=$error_code"
fi
message="$message]$*"
echo "$message"
}
# Resolve any symlinks in the given path. # Resolve any symlinks in the given path.
function ResolvePath { function ResolvePath {
local path=$1 local path=$1
@ -65,7 +149,7 @@ function ReadGlobalVersion {
local pattern="\"$key\" *: *\"(.*)\"" local pattern="\"$key\" *: *\"(.*)\""
if [[ ! $line =~ $pattern ]]; then if [[ ! $line =~ $pattern ]]; then
echo "Error: Cannot find \"$key\" in $global_json_file" >&2 EmitError "Error: Cannot find \"$key\" in $global_json_file"
ExitWithExitCode 1 ExitWithExitCode 1
fi fi
@ -126,7 +210,7 @@ function InitializeDotNetCli {
if [[ "$install" == true ]]; then if [[ "$install" == true ]]; then
InstallDotNetSdk "$dotnet_root" "$dotnet_sdk_version" InstallDotNetSdk "$dotnet_root" "$dotnet_sdk_version"
else else
echo "Unable to find dotnet with SDK version '$dotnet_sdk_version'" >&2 EmitError "Unable to find dotnet with SDK version '$dotnet_sdk_version'"
ExitWithExitCode 1 ExitWithExitCode 1
fi fi
fi fi
@ -179,7 +263,7 @@ function InstallDotNet {
fi fi
bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg || { bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg || {
local exit_code=$? local exit_code=$?
echo "Failed to install dotnet SDK (exit code '$exit_code')." >&2 EmitError "Failed to install dotnet SDK (exit code '$exit_code')."
ExitWithExitCode $exit_code ExitWithExitCode $exit_code
} }
} }
@ -216,6 +300,7 @@ function InitializeBuildTool {
# return values # return values
_InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildTool="$_InitializeDotNetCli/dotnet"
_InitializeBuildToolCommand="msbuild" _InitializeBuildToolCommand="msbuild"
_InitializeBuildToolFramework="netcoreapp2.1"
} }
function GetNuGetPackageCachePath { function GetNuGetPackageCachePath {
@ -264,7 +349,7 @@ function InitializeToolset {
fi fi
if [[ "$restore" != true ]]; then if [[ "$restore" != true ]]; then
echo "Toolset version $toolsetVersion has not been restored." >&2 EmitError "Toolset version $toolsetVersion has not been restored."
ExitWithExitCode 2 ExitWithExitCode 2
fi fi
@ -276,12 +361,12 @@ function InitializeToolset {
fi fi
echo '<Project Sdk="Microsoft.DotNet.Arcade.Sdk"/>' > "$proj" echo '<Project Sdk="Microsoft.DotNet.Arcade.Sdk"/>' > "$proj"
MSBuild "$proj" $bl /t:__WriteToolsetLocation /clp:ErrorsOnly\;NoSummary /p:__ToolsetLocationOutputFile="$toolset_location_file" MSBuild-Core "$proj" $bl /t:__WriteToolsetLocation /clp:ErrorsOnly\;NoSummary /p:__ToolsetLocationOutputFile="$toolset_location_file"
local toolset_build_proj=`cat "$toolset_location_file"` local toolset_build_proj=`cat "$toolset_location_file"`
if [[ ! -a "$toolset_build_proj" ]]; then if [[ ! -a "$toolset_build_proj" ]]; then
echo "Invalid toolset path: $toolset_build_proj" >&2 EmitError "Invalid toolset path: $toolset_build_proj"
ExitWithExitCode 3 ExitWithExitCode 3
fi fi
@ -304,14 +389,26 @@ function StopProcesses {
} }
function MSBuild { function MSBuild {
args=$@
if [[ "$pipelines_log" == true ]]; then
InitializeBuildTool
InitializeToolset
_toolset_dir="${_InitializeToolset%/*}"
_loggerPath="$_toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll"
args=( "${args[@]}" "-logger:$_loggerPath" )
fi
MSBuild-Core ${args[@]}
}
function MSBuild-Core {
if [[ "$ci" == true ]]; then if [[ "$ci" == true ]]; then
if [[ "$binary_log" != true ]]; then if [[ "$binary_log" != true ]]; then
echo "Binary log must be enabled in CI build." >&2 EmitError "Binary log must be enabled in CI build."
ExitWithExitCode 1 ExitWithExitCode 1
fi fi
if [[ "$node_reuse" == true ]]; then if [[ "$node_reuse" == true ]]; then
echo "Node reuse must be disabled in CI build." >&2 EmitError "Node reuse must be disabled in CI build."
ExitWithExitCode 1 ExitWithExitCode 1
fi fi
fi fi
@ -325,7 +422,7 @@ function MSBuild {
"$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" || { "$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" || {
local exit_code=$? local exit_code=$?
echo "Build failed (exit code '$exit_code')." >&2 EmitError "Build failed (exit code '$exit_code')."
ExitWithExitCode $exit_code ExitWithExitCode $exit_code
} }
} }

View File

@ -3,10 +3,12 @@
"version": "3.0.100-preview5-011568" "version": "3.0.100-preview5-011568"
}, },
"tools": { "tools": {
"dotnet": "3.0.100-preview5-011568",
"jdk": "11.0.3" "jdk": "11.0.3"
}, },
"msbuild-sdks": { "msbuild-sdks": {
"Yarn.MSBuild": "1.15.2", "Yarn.MSBuild": "1.15.2",
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19270.1" "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19272.13",
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19272.13"
} }
} }