214 lines
8.4 KiB
YAML
214 lines
8.4 KiB
YAML
parameters:
|
|
additionalBuildArguments: ''
|
|
testLogPath: '$(Build.BinariesDirectory)\$(BuildPlatform)\$(BuildConfiguration)\testsOnBuildMachine.wtl'
|
|
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
clean: true
|
|
|
|
- task: NuGetToolInstaller@0
|
|
displayName: 'Use NuGet 5.2.0'
|
|
inputs:
|
|
versionSpec: 5.2.0
|
|
|
|
# In the Microsoft Azure DevOps tenant, NuGetCommand is ambiguous.
|
|
# This should be `task: NuGetCommand@2`
|
|
- task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2
|
|
displayName: Restore NuGet packages for solution
|
|
inputs:
|
|
command: restore
|
|
feedsToUse: config
|
|
configPath: NuGet.config
|
|
restoreSolution: OpenConsole.sln
|
|
restoreDirectory: '$(Build.SourcesDirectory)\packages'
|
|
|
|
- task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2
|
|
displayName: Restore NuGet packages for extraneous build actions
|
|
inputs:
|
|
command: restore
|
|
feedsToUse: config
|
|
configPath: NuGet.config
|
|
restoreSolution: build/packages.config
|
|
restoreDirectory: '$(Build.SourcesDirectory)\packages'
|
|
|
|
# The environment variable VCToolsInstallDir isn't defined on lab machines, so we need to retrieve it ourselves.
|
|
- script: |
|
|
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -Latest -requires Microsoft.Component.MSBuild -property InstallationPath > %TEMP%\vsinstalldir.txt
|
|
set /p _VSINSTALLDIR15=<%TEMP%\vsinstalldir.txt
|
|
del %TEMP%\vsinstalldir.txt
|
|
call "%_VSINSTALLDIR15%\Common7\Tools\VsDevCmd.bat"
|
|
echo VCToolsInstallDir = %VCToolsInstallDir%
|
|
echo ##vso[task.setvariable variable=VCToolsInstallDir]%VCToolsInstallDir%
|
|
displayName: 'Retrieve VC tools directory'
|
|
|
|
- task: CmdLine@1
|
|
displayName: 'Display build machine environment variables'
|
|
inputs:
|
|
filename: 'set'
|
|
|
|
- task: powershell@2
|
|
displayName: 'Restore PGO database'
|
|
condition: eq(variables['PGOBuildMode'], 'Optimize')
|
|
inputs:
|
|
targetType: filePath
|
|
workingDirectory: $(Build.SourcesDirectory)\tools\PGODatabase
|
|
filePath: $(Build.SourcesDirectory)\tools\PGODatabase\restore-pgodb.ps1
|
|
|
|
- task: VSBuild@1
|
|
displayName: 'Build solution **\OpenConsole.sln'
|
|
inputs:
|
|
solution: '**\OpenConsole.sln'
|
|
vsVersion: 16.0
|
|
platform: '$(BuildPlatform)'
|
|
configuration: '$(BuildConfiguration)'
|
|
msbuildArgs: "${{ parameters.additionalBuildArguments }}"
|
|
clean: true
|
|
maximumCpuCount: true
|
|
|
|
- task: PowerShell@2
|
|
displayName: 'Check MSIX for common regressions'
|
|
# PGO runtime needs its own CRT and it's in the package for convenience.
|
|
# That will make this script mad so skip since we're not shipping the PGO Instrumentation one anyway.
|
|
condition: ne(variables['PGOBuildMode'], 'Instrument')
|
|
inputs:
|
|
targetType: inline
|
|
script: |
|
|
$Package = Get-ChildItem -Recurse -Filter "CascadiaPackage_*.msix"
|
|
.\build\scripts\Test-WindowsTerminalPackage.ps1 -Verbose -Path $Package.FullName
|
|
|
|
- task: powershell@2
|
|
displayName: 'Source Index PDBs'
|
|
condition: ne(variables['PGOBuildMode'], 'Instrument')
|
|
inputs:
|
|
targetType: filePath
|
|
filePath: build\scripts\Index-Pdbs.ps1
|
|
arguments: -SearchDir '$(Build.SourcesDirectory)' -SourceRoot '$(Build.SourcesDirectory)' -recursive -Verbose -CommitId $(Build.SourceVersion)
|
|
errorActionPreference: silentlyContinue
|
|
|
|
- task: PowerShell@2
|
|
displayName: 'Rationalize build platform'
|
|
inputs:
|
|
targetType: inline
|
|
script: |
|
|
$Arch = "$(BuildPlatform)"
|
|
If ($Arch -Eq "x86") { $Arch = "Win32" }
|
|
Write-Host "##vso[task.setvariable variable=RationalizedBuildPlatform]${Arch}"
|
|
|
|
- task: PowerShell@2
|
|
displayName: 'Validate binaries are optimized'
|
|
condition: eq(variables['pgoBuildMode'], 'Optimize')
|
|
inputs:
|
|
targetType: inline
|
|
script: |
|
|
$Binaries = 'OpenConsole.exe', 'WindowsTerminal.exe', 'TerminalApp.dll', 'TerminalConnection.dll', 'Microsoft.Terminal.Control.dll', 'Microsoft.Terminal.Remoting.dll', 'Microsoft.Terminal.Settings.Editor.dll', 'Microsoft.Terminal.Settings.Model.dll'
|
|
foreach ($BinFile in $Binaries)
|
|
{
|
|
& "$(Build.SourcesDirectory)\tools\PGODatabase\verify-pgo.ps1" "$(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/$BinFile"
|
|
}
|
|
|
|
- task: PowerShell@2
|
|
displayName: 'Run Unit Tests'
|
|
inputs:
|
|
targetType: filePath
|
|
filePath: build\scripts\Run-Tests.ps1
|
|
arguments: -MatchPattern '*unit.test*.dll' -Platform '$(RationalizedBuildPlatform)' -Configuration '$(BuildConfiguration)' -LogPath '${{ parameters.testLogPath }}'
|
|
condition: and(succeeded(), ne(variables['PGOBuildMode'], 'Instrument'), or(eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildPlatform'], 'x86')))
|
|
|
|
- task: PowerShell@2
|
|
displayName: 'Run Feature Tests (x64 only)'
|
|
inputs:
|
|
targetType: filePath
|
|
filePath: build\scripts\Run-Tests.ps1
|
|
arguments: -MatchPattern '*feature.test*.dll' -Platform '$(RationalizedBuildPlatform)' -Configuration '$(BuildConfiguration)' -LogPath '${{ parameters.testLogPath }}'
|
|
condition: and(succeeded(), ne(variables['PGOBuildMode'], 'Instrument'), eq(variables['BuildPlatform'], 'x64'))
|
|
|
|
- task: PowerShell@2
|
|
displayName: 'Convert Test Logs from WTL to xUnit format'
|
|
inputs:
|
|
targetType: filePath
|
|
filePath: build\Helix\ConvertWttLogToXUnit.ps1
|
|
arguments: -WttInputPath '${{ parameters.testLogPath }}' -WttSingleRerunInputPath 'unused.wtl' -WttMultipleRerunInputPath 'unused2.wtl' -XUnitOutputPath 'onBuildMachineResults.xml' -TestNamePrefix '$(BuildConfiguration).$(BuildPlatform)'
|
|
condition: and(ne(variables['PGOBuildMode'], 'Instrument'), or(eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildPlatform'], 'x86')))
|
|
|
|
- task: PublishTestResults@2
|
|
displayName: 'Upload converted test logs'
|
|
condition: ne(variables['PGOBuildMode'], 'Instrument')
|
|
inputs:
|
|
testResultsFormat: 'xUnit' # Options: JUnit, NUnit, VSTest, xUnit, cTest
|
|
testResultsFiles: '**/onBuildMachineResults.xml'
|
|
#searchFolder: '$(System.DefaultWorkingDirectory)' # Optional
|
|
#mergeTestResults: false # Optional
|
|
#failTaskOnFailedTests: false # Optional
|
|
testRunTitle: 'On Build Machine Tests' # Optional
|
|
buildPlatform: $(BuildPlatform) # Optional
|
|
buildConfiguration: $(BuildConfiguration) # Optional
|
|
#publishRunAttachments: true # Optional
|
|
|
|
- task: CopyFiles@2
|
|
displayName: 'Copy result logs to Artifacts'
|
|
inputs:
|
|
Contents: |
|
|
**/*.wtl
|
|
**/*onBuildMachineResults.xml
|
|
${{ parameters.testLogPath }}
|
|
TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/test'
|
|
OverWrite: true
|
|
flattenFolders: true
|
|
|
|
- task: CopyFiles@2
|
|
displayName: 'Copy *.appx/*.msix to Artifacts (Non-PR builds only)'
|
|
inputs:
|
|
Contents: |
|
|
**/*.appx
|
|
**/*.msix
|
|
**/*.appxsym
|
|
!**/Microsoft.VCLibs*.appx
|
|
TargetFolder: '$(Build.ArtifactStagingDirectory)/appx'
|
|
OverWrite: true
|
|
flattenFolders: true
|
|
condition: succeeded()
|
|
|
|
- task: CopyFiles@2
|
|
displayName: 'Copy outputs needed for test runs to Artifacts'
|
|
inputs:
|
|
Contents: |
|
|
$(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.exe
|
|
$(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.dll
|
|
$(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.xml
|
|
**/Microsoft.VCLibs.*.appx
|
|
**/TestHostApp/*.exe
|
|
**/TestHostApp/*.dll
|
|
**/TestHostApp/*.xml
|
|
!**/*.pdb
|
|
!**/*.ipdb
|
|
!**/*.obj
|
|
!**/*.pch
|
|
TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/test'
|
|
OverWrite: true
|
|
flattenFolders: true
|
|
condition: succeeded()
|
|
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish All Build Artifacts'
|
|
inputs:
|
|
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
|
ArtifactName: 'drop'
|
|
|
|
- task: CopyFiles@2
|
|
displayName: 'Copy PGO databases needed for PGO instrumentation run'
|
|
inputs:
|
|
Contents: |
|
|
**/*.pgd
|
|
TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/PGO/$(BuildPlatform)'
|
|
OverWrite: true
|
|
flattenFolders: true
|
|
condition: and(succeeded(), eq(variables['PGOBuildMode'], 'Instrument'))
|
|
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish All PGO Artifacts'
|
|
inputs:
|
|
PathtoPublish: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/PGO'
|
|
ArtifactName: 'PGO'
|
|
condition: and(succeeded(), eq(variables['PGOBuildMode'], 'Instrument'))
|