2020-06-26 07:36:28 +08:00
|
|
|
# Copyright (c) Microsoft Corporation.
|
|
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
#
|
|
|
|
|
|
|
|
<#
|
|
|
|
.SYNOPSIS
|
|
|
|
Runs the 'Test Modified Ports' part of the vcpkg CI system for all platforms.
|
|
|
|
|
|
|
|
.PARAMETER Triplet
|
|
|
|
The triplet to test.
|
|
|
|
|
|
|
|
.PARAMETER WorkingRoot
|
|
|
|
The location used as scratch space for 'installed', 'packages', and 'buildtrees' vcpkg directories.
|
|
|
|
|
2020-09-22 08:27:35 +08:00
|
|
|
.PARAMETER ArtifactStagingDirectory
|
2020-06-26 07:36:28 +08:00
|
|
|
The Azure Pipelines artifacts directory. If not supplied, defaults to the current directory.
|
|
|
|
|
2020-09-29 04:54:10 +08:00
|
|
|
.PARAMETER ArchivesRoot
|
2020-11-19 04:21:23 +08:00
|
|
|
Equivalent to '-BinarySourceStub "files,$ArchivesRoot"'
|
|
|
|
|
|
|
|
.PARAMETER BinarySourceStub
|
|
|
|
The type and parameters of the binary source. Shared across runs of this script. If
|
|
|
|
this parameter is not set, binary caching will not be used. Example: "files,W:\"
|
2020-09-29 04:54:10 +08:00
|
|
|
|
2020-06-26 07:36:28 +08:00
|
|
|
.PARAMETER BuildReason
|
2021-11-02 03:18:28 +08:00
|
|
|
The reason Azure Pipelines is running this script. For invocations caused by `PullRequest`,
|
|
|
|
modified ports are identified by changed hashes with regard to git HEAD~1 (subject to NoParentHashes),
|
|
|
|
and ports marked as failing in the CI baseline (or which depend on such ports) are skipped.
|
|
|
|
If BinarySourceStub is set and this parameter is set to a non-empty value other than `PullRequest`,
|
|
|
|
binary caching will be in write-only mode.
|
|
|
|
|
|
|
|
.PARAMETER NoParentHashes
|
|
|
|
Indicates to not use parent hashes even for pull requests.
|
2021-07-20 10:55:00 +08:00
|
|
|
|
|
|
|
.PARAMETER PassingIsPassing
|
|
|
|
Indicates that 'Passing, remove from fail list' results should not be emitted as failures. (For example, this is used
|
|
|
|
when using vcpkg to test a prerelease MSVC++ compiler)
|
2020-06-26 07:36:28 +08:00
|
|
|
#>
|
|
|
|
|
2020-11-19 04:21:23 +08:00
|
|
|
[CmdletBinding(DefaultParameterSetName="ArchivesRoot")]
|
2020-06-26 07:36:28 +08:00
|
|
|
Param(
|
2020-06-27 03:37:53 +08:00
|
|
|
[Parameter(Mandatory = $true)]
|
2020-06-26 07:36:28 +08:00
|
|
|
[ValidateNotNullOrEmpty()]
|
|
|
|
[string]$Triplet,
|
2020-06-27 03:37:53 +08:00
|
|
|
[Parameter(Mandatory = $true)]
|
2020-06-26 07:36:28 +08:00
|
|
|
[ValidateNotNullOrEmpty()]
|
|
|
|
$WorkingRoot,
|
|
|
|
[ValidateNotNullOrEmpty()]
|
2020-09-22 08:27:35 +08:00
|
|
|
$ArtifactStagingDirectory = '.',
|
2020-11-19 04:21:23 +08:00
|
|
|
[Parameter(ParameterSetName='ArchivesRoot')]
|
2020-09-29 04:54:10 +08:00
|
|
|
$ArchivesRoot = $null,
|
2020-11-19 04:21:23 +08:00
|
|
|
[Parameter(ParameterSetName='BinarySourceStub')]
|
|
|
|
$BinarySourceStub = $null,
|
2021-09-30 04:15:25 +08:00
|
|
|
[String]$BuildReason = $null,
|
2021-11-02 03:18:28 +08:00
|
|
|
[switch]$NoParentHashes = $false,
|
2021-09-30 04:15:25 +08:00
|
|
|
[switch]$PassingIsPassing = $false
|
2020-06-26 07:36:28 +08:00
|
|
|
)
|
|
|
|
|
2021-01-09 03:55:31 +08:00
|
|
|
if (-Not ((Test-Path "triplets/$Triplet.cmake") -or (Test-Path "triplets/community/$Triplet.cmake"))) {
|
2020-06-26 07:36:28 +08:00
|
|
|
Write-Error "Incorrect triplet '$Triplet', please supply a valid triplet."
|
2020-07-02 01:53:10 +08:00
|
|
|
throw
|
2020-06-26 07:36:28 +08:00
|
|
|
}
|
|
|
|
|
2021-09-03 15:02:29 +08:00
|
|
|
if ((-Not [string]::IsNullOrWhiteSpace($ArchivesRoot))) {
|
|
|
|
if ((-Not [string]::IsNullOrWhiteSpace($BinarySourceStub))) {
|
|
|
|
Write-Error "Only one binary caching setting may be used."
|
|
|
|
throw
|
2020-12-23 06:52:58 +08:00
|
|
|
}
|
2021-09-03 15:02:29 +08:00
|
|
|
|
|
|
|
$BinarySourceStub = "files,$ArchivesRoot"
|
2020-12-23 06:52:58 +08:00
|
|
|
}
|
|
|
|
|
2020-06-26 07:36:28 +08:00
|
|
|
$env:VCPKG_DOWNLOADS = Join-Path $WorkingRoot 'downloads'
|
|
|
|
$buildtreesRoot = Join-Path $WorkingRoot 'buildtrees'
|
|
|
|
$installRoot = Join-Path $WorkingRoot 'installed'
|
|
|
|
$packagesRoot = Join-Path $WorkingRoot 'packages'
|
2020-09-29 04:54:10 +08:00
|
|
|
|
2021-09-03 15:02:29 +08:00
|
|
|
$commonArgs = @(
|
2020-06-26 07:36:28 +08:00
|
|
|
"--x-buildtrees-root=$buildtreesRoot",
|
|
|
|
"--x-install-root=$installRoot",
|
2020-08-01 07:48:52 +08:00
|
|
|
"--x-packages-root=$packagesRoot",
|
|
|
|
"--overlay-ports=scripts/test_ports"
|
2020-06-26 07:36:28 +08:00
|
|
|
)
|
2021-11-02 03:18:28 +08:00
|
|
|
$cachingArgs = @()
|
2020-06-26 07:36:28 +08:00
|
|
|
|
2022-04-01 10:08:09 +08:00
|
|
|
$skipFailuresArg = @()
|
2021-09-03 15:02:29 +08:00
|
|
|
if ([string]::IsNullOrWhiteSpace($BinarySourceStub)) {
|
2021-11-02 03:18:28 +08:00
|
|
|
$cachingArgs = @('--no-binarycaching')
|
2021-09-03 15:02:29 +08:00
|
|
|
} else {
|
2021-11-02 03:18:28 +08:00
|
|
|
$cachingArgs = @('--binarycaching')
|
2020-09-29 04:54:10 +08:00
|
|
|
$binaryCachingMode = 'readwrite'
|
|
|
|
if ([string]::IsNullOrWhiteSpace($BuildReason)) {
|
|
|
|
Write-Host 'Build reason not specified, defaulting to using binary caching in read write mode.'
|
|
|
|
}
|
|
|
|
elseif ($BuildReason -eq 'PullRequest') {
|
|
|
|
Write-Host 'Build reason was Pull Request, using binary caching in read write mode, skipping failures.'
|
2022-04-01 10:08:09 +08:00
|
|
|
$skipFailuresArg = @('--skip-failures')
|
2020-09-29 04:54:10 +08:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
Write-Host "Build reason was $BuildReason, using binary caching in write only mode."
|
|
|
|
$binaryCachingMode = 'write'
|
|
|
|
}
|
2020-12-23 06:52:58 +08:00
|
|
|
|
2021-11-02 03:18:28 +08:00
|
|
|
$cachingArgs += @("--binarysource=clear;$BinarySourceStub,$binaryCachingMode")
|
2020-09-29 04:54:10 +08:00
|
|
|
}
|
2020-06-27 03:37:53 +08:00
|
|
|
|
2020-06-26 07:36:28 +08:00
|
|
|
if ($Triplet -eq 'x64-linux') {
|
|
|
|
$env:HOME = '/home/agent'
|
|
|
|
$executableExtension = [string]::Empty
|
2020-06-27 03:37:53 +08:00
|
|
|
}
|
|
|
|
elseif ($Triplet -eq 'x64-osx') {
|
2020-06-26 07:36:28 +08:00
|
|
|
$executableExtension = [string]::Empty
|
2020-06-27 03:37:53 +08:00
|
|
|
}
|
|
|
|
else {
|
2020-06-26 07:36:28 +08:00
|
|
|
$executableExtension = '.exe'
|
|
|
|
}
|
|
|
|
|
2020-09-22 08:27:35 +08:00
|
|
|
$xmlResults = Join-Path $ArtifactStagingDirectory 'xml-results'
|
2020-06-26 07:36:28 +08:00
|
|
|
mkdir $xmlResults
|
|
|
|
$xmlFile = Join-Path $xmlResults "$Triplet.xml"
|
|
|
|
|
2020-09-22 08:27:35 +08:00
|
|
|
$failureLogs = Join-Path $ArtifactStagingDirectory 'failure-logs'
|
2020-07-03 11:20:07 +08:00
|
|
|
|
2021-10-21 13:51:29 +08:00
|
|
|
if ($IsWindows)
|
|
|
|
{
|
|
|
|
mkdir empty
|
|
|
|
cmd /c "robocopy.exe empty `"$buildtreesRoot`" /MIR /NFL /NDL /NC /NP > nul"
|
|
|
|
cmd /c "robocopy.exe empty `"$packagesRoot`" /MIR /NFL /NDL /NC /NP > nul"
|
|
|
|
cmd /c "robocopy.exe empty `"$installRoot`" /MIR /NFL /NDL /NC /NP > nul"
|
|
|
|
rmdir empty
|
|
|
|
}
|
|
|
|
|
2020-06-26 07:36:28 +08:00
|
|
|
& "./vcpkg$executableExtension" x-ci-clean @commonArgs
|
2021-09-15 08:46:38 +08:00
|
|
|
if ($LASTEXITCODE -ne 0)
|
|
|
|
{
|
|
|
|
throw "vcpkg clean failed"
|
|
|
|
}
|
|
|
|
|
2021-12-14 04:54:16 +08:00
|
|
|
$parentHashes = @()
|
|
|
|
if (($BuildReason -eq 'PullRequest') -and -not $NoParentHashes)
|
|
|
|
{
|
|
|
|
# Prefetch tools for better output
|
2022-03-08 03:39:32 +08:00
|
|
|
foreach ($tool in @('cmake', 'ninja', 'git')) {
|
|
|
|
& "./vcpkg$executableExtension" fetch $tool
|
|
|
|
if ($LASTEXITCODE -ne 0)
|
|
|
|
{
|
|
|
|
throw "Failed to fetch $tool"
|
|
|
|
}
|
|
|
|
}
|
2021-12-14 04:54:16 +08:00
|
|
|
|
|
|
|
Write-Host "Determining parent hashes using HEAD~1"
|
2022-03-10 06:29:15 +08:00
|
|
|
$parentHashesFile = Join-Path $ArtifactStagingDirectory 'parent-hashes.json'
|
2021-12-14 04:54:16 +08:00
|
|
|
$parentHashes = @("--parent-hashes=$parentHashesFile")
|
2022-03-08 03:39:32 +08:00
|
|
|
& git revert -n -m 1 HEAD | Out-Null
|
2022-03-24 07:16:17 +08:00
|
|
|
# The vcpkg.cmake toolchain file is not part of ABI hashing,
|
|
|
|
# but changes must trigger at least some testing.
|
|
|
|
Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake"
|
|
|
|
Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake-user"
|
Update vcpkg-tool to 2022-03-25 (#23757)
* Update vcpkg-tool to 2022-03-24
* Hook up https://github.com/microsoft/vcpkg-tool/pull/345
* Hook up https://github.com/microsoft/vcpkg-tool/pull/442
* Update vcpkg-tool to 2022-03-25
* Analysis of failures.
* [Most recent nightly build failed](https://dev.azure.com/vcpkg/public/_build/results?buildId=69427)
* [Validation of this tool update failed](https://dev.azure.com/vcpkg/public/_build/results?buildId=69417)
## Common to both:
PASSING, REMOVE FROM FAIL LIST: chartdir:x64-windows (.\scripts\ci.baseline.txt)
PASSING, REMOVE FROM FAIL LIST: chartdir:x64-windows-static-md (.\scripts\ci.baseline.txt)
PASSING, REMOVE FROM FAIL LIST: chartdir:x86-windows (.\scripts\ci.baseline.txt)
Probably fixed by https://github.com/microsoft/vcpkg/pull/23701
PASSING, REMOVE FROM FAIL LIST: gmp:x64-uwp (.\scripts\ci.baseline.txt)
PASSING, REMOVE FROM FAIL LIST: gmp:x64-windows-static-md (.\scripts\ci.baseline.txt)
Probably fixed by https://github.com/microsoft/vcpkg/pull/23466 ?
REGRESSION: colmap:x64-windows-static-md failed with BUILD_FAILED. If expected, add colmap:x64-windows-static-md=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
I don't know exactly what changed. I observe that
* this thing depends on a *lot* of stuff
* on March 14 we didn't even attempt to build this
* the x64-windows ones are already in the baseline
so I skipped it.
REGRESSION: qtdeclarative:x64-windows. If expected, add qtdeclarative:x64-windows=fail to .\scripts\ci.baseline.txt.
REGRESSION: qtdeclarative:x64-windows failed with BUILD_FAILED. If expected, add qtdeclarative:x64-windows=fail to C:\a\1\s\scripts\azure-pipelines/../ci.baseline.txt.
REGRESSION: qtdeclarative:x64-windows failed with BUILD_FAILED. If expected, add qtdeclarative:x64-windows=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
REGRESSION: qtdeclarative:x64-windows failed with BUILD_FAILED. If expected, add qtdeclarative:x64-windows=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
REGRESSION: qtdeclarative:x64-windows failed with BUILD_FAILED. If expected, add qtdeclarative:x64-windows=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
REGRESSION: qtdeclarative:x64-windows failed with BUILD_FAILED. If expected, add qtdeclarative:x64-windows=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
REGRESSION: qtdeclarative:x64-windows failed with BUILD_FAILED. If expected, add qtdeclarative:x64-windows=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
REGRESSION: qtdeclarative:x64-windows failed with BUILD_FAILED. If expected, add qtdeclarative:x64-windows=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
This is a reporting change: The new world order also includes host build failures which is why it's duplicated.
See also https://github.com/microsoft/vcpkg/issues/23714
See also https://github.com/microsoft/vcpkg/issues/23490
I'm nervous about baslining this because it seems most of the qt world is built on top of this port
I filed https://github.com/microsoft/vcpkg/issues/23824 about this and @Neumann-A indicated this should be fixed by https://github.com/microsoft/vcpkg/pull/23755
REGRESSION: nettle:x64-uwp. If expected, add nettle:x64-uwp=fail to .\scripts\ci.baseline.txt.
REGRESSION: nettle:x64-windows-static-md. If expected, add nettle:x64-windows-static-md=fail to .\scripts\ci.baseline.txt.
REGRESSION: nettle:x64-uwp failed with BUILD_FAILED. If expected, add nettle:x64-uwp=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
REGRESSION: nettle:x64-windows-static-md failed with POST_BUILD_CHECKS_FAILED. If expected, add nettle:x64-windows-static-md=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
Didn't analyze, probably fixed by https://github.com/microsoft/vcpkg/pull/23519 ?
REGRESSION: libgpg-error:x64-uwp. If expected, add libgpg-error:x64-uwp=fail to .\scripts\ci.baseline.txt.
REGRESSION: libgpg-error:x64-uwp failed with BUILD_FAILED. If expected, add libgpg-error:x64-uwp=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
This was broken by VS2022 update:
```
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VisualStudio\v17.0\AppxPackage\Microsoft.AppXPackage.Targets(892,25): error MSB4086: A numeric comparison was attempted on "$(TargetPlatformMinVersion)" that evaluates to "" instead of a number, in condition "'$(TargetPlatformMinVersion)' >= '10.0.17200.0'". [C:\Dev\vcpkg\buildtrees\libgpg-error\x64-uwp-rel\error-1.42-2324ddbc71.clean\SMP\libgpg-error_winrt.vcxproj]
```
REGRESSION: libmikmod:x64-osx. If expected, add libmikmod:x64-osx=fail to .\scripts\ci.baseline.txt.
REGRESSION: libmikmod:x64-osx failed with BUILD_FAILED. If expected, add libmikmod:x64-osx=fail to /Users/vagrant/Data/work/2/s/scripts/azure-pipelines/../ci.baseline.txt.
Broken between [2022-03-16](https://dev.azure.com/vcpkg/public/_build/results?buildId=68947) and [2022-03-18](https://dev.azure.com/vcpkg/public/_build/results?buildId=69051). Unfortunately I don't see obvious reasons why. Nothing else depends on this and nobody has noticed in 2 weeks, so I'm baslining it for now. (Will investigate shortly...)
## Only broken in tool update:
REGRESSION: mesa:x64-windows failed with BUILD_FAILED. If expected, add mesa:x64-windows=fail to C:\a\2\s\scripts\azure-pipelines/../ci.baseline.txt.
```
-- Downloading https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-21.2.5/mesa-mesa-21.2.5.tar.gz -> mesa-mesa-mesa-21.2.5-1.tar.gz...
-- Extracting source /Users/vagrant/Data/downloads/mesa-mesa-mesa-21.2.5-1.tar.gz
-- Applying patch swravx512-post-static-link.patch
-- Applying patch swr-msvc-2.patch
-- Applying patch swr-llvm13.patch
-- Applying patch radv-msvc-llvm13-2.patch
-- Applying patch d3d10sw.patch
-- Using source at /Users/vagrant/Data/buildtrees/mesa/src/esa-21.2.5-2df234d2b1.clean
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'mako'
CMake Error at ports/mesa/portfile.cmake:85 (message):
Python package 'mako' needs to be installed for port 'mesa'.
Complete list of required python packages: setuptools;mako
Call Stack (most recent call first):
ports/mesa/portfile.cmake:91 (vcpkg_get_python_package)
scripts/ports.cmake:145 (include)
```
Looks like this is being tracked by https://github.com/microsoft/vcpkg/pull/23089 ; perhaps that we don't have as aggressive a recycling strategy for macos boxes as we do for the others has let different machines give different results?
## Only broken without tool update:
REGRESSION: chromium-base:x64-osx. If expected, add chromium-base:x64-osx=fail to .\scripts\ci.baseline.txt.
This one has been constantly flaky; I baselined it.
REGRESSION: libxml2:x64-osx. If expected, add libxml2:x64-osx=fail to .\scripts\ci.baseline.txt.
This port uses vcpkg_from_git and the upstream server was down during the build.
* Restore chartdir to the baseline, I thought https://github.com/microsoft/vcpkg/pull/23732 had been merged.
2022-03-29 04:17:35 +08:00
|
|
|
& "./vcpkg$executableExtension" ci "--triplet=$Triplet" --dry-run "--ci-baseline=$PSScriptRoot/../ci.baseline.txt" @commonArgs --no-binarycaching "--output-hashes=$parentHashesFile"
|
2022-03-24 07:16:17 +08:00
|
|
|
|
2021-12-14 04:54:16 +08:00
|
|
|
Write-Host "Running CI using parent hashes"
|
2022-03-08 03:39:32 +08:00
|
|
|
& git reset --hard HEAD
|
2021-12-14 04:54:16 +08:00
|
|
|
}
|
2021-11-02 03:18:28 +08:00
|
|
|
|
2022-03-24 07:16:17 +08:00
|
|
|
# The vcpkg.cmake toolchain file is not part of ABI hashing,
|
|
|
|
# but changes must trigger at least some testing.
|
|
|
|
Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake"
|
|
|
|
Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake-user"
|
2022-04-01 10:08:09 +08:00
|
|
|
& "./vcpkg$executableExtension" ci "--triplet=$Triplet" --x-xunit=$xmlFile --failure-logs=$failureLogs "--ci-baseline=$PSScriptRoot/../ci.baseline.txt" @commonArgs @cachingArgs @parentHashes @skipFailuresArg
|
2021-09-29 05:00:33 +08:00
|
|
|
|
2021-12-14 04:54:16 +08:00
|
|
|
$failureLogsEmpty = (-Not (Test-Path $failureLogs) -Or ((Get-ChildItem $failureLogs).count -eq 0))
|
|
|
|
Write-Host "##vso[task.setvariable variable=FAILURE_LOGS_EMPTY]$failureLogsEmpty"
|
2021-09-15 08:46:38 +08:00
|
|
|
|
2021-12-14 04:54:16 +08:00
|
|
|
if ($LASTEXITCODE -ne 0)
|
|
|
|
{
|
|
|
|
throw "vcpkg ci failed"
|
2021-09-30 04:15:25 +08:00
|
|
|
}
|