|
|
@@ -92,6 +92,68 @@ function Exec-Process([string]$command, [string]$commandArgs) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+function Write-PipelineTaskError {
|
|
|
+ [CmdletBinding()]
|
|
|
+ param(
|
|
|
+ [Parameter(Mandatory = $true)]
|
|
|
+ [string]$Message,
|
|
|
+ [Parameter(Mandatory = $false)]
|
|
|
+ [string]$Type = 'error',
|
|
|
+ [string]$ErrCode,
|
|
|
+ [string]$SourcePath,
|
|
|
+ [string]$LineNumber,
|
|
|
+ [string]$ColumnNumber,
|
|
|
+ [switch]$AsOutput)
|
|
|
+
|
|
|
+ if(!$ci) {
|
|
|
+ if($Type -eq 'error') {
|
|
|
+ Write-Error $Message
|
|
|
+ return
|
|
|
+ }
|
|
|
+ elseif ($Type -eq 'warning') {
|
|
|
+ Write-Warning $Message
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(($Type -ne 'error') -and ($Type -ne 'warning')) {
|
|
|
+ Write-Host $Message
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(-not $PSBoundParameters.ContainsKey('Type')) {
|
|
|
+ $PSBoundParameters.Add('Type', 'error')
|
|
|
+ }
|
|
|
+ Write-LogIssue @PSBoundParameters
|
|
|
+}
|
|
|
+
|
|
|
+function Write-PipelineSetVariable {
|
|
|
+ [CmdletBinding()]
|
|
|
+ param(
|
|
|
+ [Parameter(Mandatory = $true)]
|
|
|
+ [string]$Name,
|
|
|
+ [string]$Value,
|
|
|
+ [switch]$Secret,
|
|
|
+ [switch]$AsOutput)
|
|
|
+
|
|
|
+ if($ci) {
|
|
|
+ Write-LoggingCommand -Area 'task' -Event 'setvariable' -Data $Value -Properties @{
|
|
|
+ 'variable' = $Name
|
|
|
+ 'issecret' = $Secret
|
|
|
+ } -AsOutput:$AsOutput
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function Write-PipelinePrependPath {
|
|
|
+ [CmdletBinding()]
|
|
|
+ param(
|
|
|
+ [Parameter(Mandatory=$true)]
|
|
|
+ [string]$Path,
|
|
|
+ [switch]$AsOutput)
|
|
|
+ if($ci) {
|
|
|
+ Write-LoggingCommand -Area 'task' -Event 'prependpath' -Data $Path -AsOutput:$AsOutput
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
function InitializeDotNetCli([bool]$install) {
|
|
|
if (Test-Path variable:global:_DotNetInstallDir) {
|
|
|
return $global:_DotNetInstallDir
|
|
|
@@ -134,7 +196,7 @@ function InitializeDotNetCli([bool]$install) {
|
|
|
if ($install) {
|
|
|
InstallDotNetSdk $dotnetRoot $dotnetSdkVersion
|
|
|
} else {
|
|
|
- Write-Host "Unable to find dotnet with SDK version '$dotnetSdkVersion'" -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError "Unable to find dotnet with SDK version '$dotnetSdkVersion'"
|
|
|
ExitWithExitCode 1
|
|
|
}
|
|
|
}
|
|
|
@@ -147,12 +209,10 @@ function InitializeDotNetCli([bool]$install) {
|
|
|
# It also ensures that VS msbuild will use the downloaded sdk targets.
|
|
|
$env:PATH = "$dotnetRoot;$env:PATH"
|
|
|
|
|
|
- if ($ci) {
|
|
|
- # Make Sure that our bootstrapped dotnet cli is avaliable in future steps of the Azure Pipelines build
|
|
|
- Write-Host "##vso[task.prependpath]$dotnetRoot"
|
|
|
- Write-Host "##vso[task.setvariable variable=DOTNET_MULTILEVEL_LOOKUP]0"
|
|
|
- Write-Host "##vso[task.setvariable variable=DOTNET_SKIP_FIRST_TIME_EXPERIENCE]1"
|
|
|
- }
|
|
|
+ # Make Sure that our bootstrapped dotnet cli is avaliable in future steps of the Azure Pipelines build
|
|
|
+ Write-PipelinePrependPath -Path $dotnetRoot
|
|
|
+ Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0'
|
|
|
+ Write-PipelineSetVariable -Name 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE' -Value '1'
|
|
|
|
|
|
return $global:_DotNetInstallDir = $dotnetRoot
|
|
|
}
|
|
|
@@ -184,7 +244,7 @@ function InstallDotNet([string] $dotnetRoot, [string] $version, [string] $archit
|
|
|
|
|
|
& $installScript @installParameters
|
|
|
if ($lastExitCode -ne 0) {
|
|
|
- Write-Host "Failed to install dotnet cli (exit code '$lastExitCode')." -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError -Message "Failed to install dotnet cli (exit code '$lastExitCode')."
|
|
|
ExitWithExitCode $lastExitCode
|
|
|
}
|
|
|
}
|
|
|
@@ -358,7 +418,7 @@ function InitializeBuildTool() {
|
|
|
|
|
|
if ($msbuildEngine -eq "dotnet") {
|
|
|
if (!$dotnetRoot) {
|
|
|
- Write-Host "/global.json must specify 'tools.dotnet'." -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError "/global.json must specify 'tools.dotnet'."
|
|
|
ExitWithExitCode 1
|
|
|
}
|
|
|
|
|
|
@@ -367,13 +427,13 @@ function InitializeBuildTool() {
|
|
|
try {
|
|
|
$msbuildPath = InitializeVisualStudioMSBuild -install:$restore
|
|
|
} catch {
|
|
|
- Write-Host $_ -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError $_
|
|
|
ExitWithExitCode 1
|
|
|
}
|
|
|
|
|
|
$buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472" }
|
|
|
} else {
|
|
|
- Write-Host "Unexpected value of -msbuildEngine: '$msbuildEngine'." -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError "Unexpected value of -msbuildEngine: '$msbuildEngine'."
|
|
|
ExitWithExitCode 1
|
|
|
}
|
|
|
|
|
|
@@ -390,7 +450,7 @@ function GetDefaultMSBuildEngine() {
|
|
|
return "dotnet"
|
|
|
}
|
|
|
|
|
|
- Write-Host "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'."
|
|
|
ExitWithExitCode 1
|
|
|
}
|
|
|
|
|
|
@@ -441,7 +501,7 @@ function InitializeToolset() {
|
|
|
}
|
|
|
|
|
|
if (-not $restore) {
|
|
|
- Write-Host "Toolset version $toolsetVersion has not been restored." -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError "Toolset version $toolsetVersion has not been restored."
|
|
|
ExitWithExitCode 1
|
|
|
}
|
|
|
|
|
|
@@ -526,7 +586,7 @@ function MSBuild-Core() {
|
|
|
$exitCode = Exec-Process $buildTool.Path $cmdArgs
|
|
|
|
|
|
if ($exitCode -ne 0) {
|
|
|
- Write-Host "Build failed." -ForegroundColor Red
|
|
|
+ Write-PipelineTaskError "Build failed."
|
|
|
|
|
|
$buildLog = GetMSBuildBinaryLogCommandLineArgument $args
|
|
|
if ($buildLog -ne $null) {
|
|
|
@@ -554,6 +614,8 @@ function GetMSBuildBinaryLogCommandLineArgument($arguments) {
|
|
|
return $null
|
|
|
}
|
|
|
|
|
|
+. $PSScriptRoot\LoggingCommandFunctions.ps1
|
|
|
+
|
|
|
$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..\..")
|
|
|
$EngRoot = Resolve-Path (Join-Path $PSScriptRoot "..")
|
|
|
$ArtifactsDir = Join-Path $RepoRoot "artifacts"
|
|
|
@@ -569,11 +631,8 @@ Create-Directory $ToolsetDir
|
|
|
Create-Directory $TempDir
|
|
|
Create-Directory $LogDir
|
|
|
|
|
|
-if ($ci) {
|
|
|
- Write-Host "##vso[task.setvariable variable=Artifacts]$ArtifactsDir"
|
|
|
- Write-Host "##vso[task.setvariable variable=Artifacts.Toolset]$ToolsetDir"
|
|
|
- Write-Host "##vso[task.setvariable variable=Artifacts.Log]$LogDir"
|
|
|
-
|
|
|
- $env:TEMP = $TempDir
|
|
|
- $env:TMP = $TempDir
|
|
|
-}
|
|
|
+Write-PipelineSetVariable -Name 'Artifacts' -Value $ArtifactsDir
|
|
|
+Write-PipelineSetVariable -Name 'Artifacts.Toolset' -Value $ToolsetDir
|
|
|
+Write-PipelineSetVariable -Name 'Artifacts.Log' -Value $LogDir
|
|
|
+Write-PipelineSetVariable -Name 'TEMP' -Value $TempDir
|
|
|
+Write-PipelineSetVariable -Name 'TMP' -Value $TempDir
|