diff --git a/scripts/azure-pipelines/azure-pipelines.yml b/scripts/azure-pipelines/azure-pipelines.yml index c0cda8432..9c66be5a3 100644 --- a/scripts/azure-pipelines/azure-pipelines.yml +++ b/scripts/azure-pipelines/azure-pipelines.yml @@ -5,7 +5,36 @@ variables: windows-pool: 'PrWin-2020-06-30' linux-pool: 'PrLin-2020-06-30' -jobs: +stages: +- stage: check_cxx_formatting + displayName: 'Check the formatting of the C++' + pool: $(windows-pool) + jobs: + - job: + steps: + - task: Powershell@2 + displayName: 'Check C++ Formatting' + inputs: + filePath: 'scripts/azure-pipelines/windows/Check-CxxFormatting.ps1' + arguments: '-Root .' +- stage: check_manifest_formatting + displayName: Check the formatting of port manifests + pool: $(windows-pool) + dependsOn: [] + jobs: + - job: + steps: + - task: Powershell@2 + displayName: 'Check port manifest Formatting' + inputs: + filePath: 'scripts/azure-pipelines/windows/Check-ManifestFormatting.ps1' + arguments: '-Root . -Downloads D:\Downloads' +- stage: run_port_ci + displayName: 'Run the Port CI' + dependsOn: + - check_cxx_formatting + - check_manifest_formatting + jobs: - template: windows/azure-pipelines.yml parameters: triplet: x86-windows diff --git a/scripts/azure-pipelines/windows/check-formatting.ps1 b/scripts/azure-pipelines/windows/Check-CxxFormatting.ps1 similarity index 69% rename from scripts/azure-pipelines/windows/check-formatting.ps1 rename to scripts/azure-pipelines/windows/Check-CxxFormatting.ps1 index e3c3d213e..7f300164f 100644 --- a/scripts/azure-pipelines/windows/check-formatting.ps1 +++ b/scripts/azure-pipelines/windows/Check-CxxFormatting.ps1 @@ -1,7 +1,7 @@ [CmdletBinding()] Param( [Parameter(Mandatory=$True)] - [string]$Toolsrc, + [string]$Root, [Parameter()] [switch]$IgnoreErrors # allows one to just format ) @@ -13,23 +13,20 @@ if (-not (Test-Path $clangFormat)) throw } -$Toolsrc = Get-Item $Toolsrc -Push-Location $Toolsrc +$toolsrc = Get-Item "$Root/toolsrc" +Push-Location $toolsrc try { - $files = Get-ChildItem -Recurse -LiteralPath "$Toolsrc/src" -Filter '*.cpp' - $files += Get-ChildItem -Recurse -LiteralPath "$Toolsrc/include/vcpkg" -Filter '*.h' - $files += Get-ChildItem -Recurse -LiteralPath "$Toolsrc/include/vcpkg-test" -Filter '*.h' - $files += Get-Item "$Toolsrc/include/pch.h" + $files = Get-ChildItem -Recurse -LiteralPath "$toolsrc/src" -Filter '*.cpp' + $files += Get-ChildItem -Recurse -LiteralPath "$toolsrc/include/vcpkg" -Filter '*.h' + $files += Get-ChildItem -Recurse -LiteralPath "$toolsrc/include/vcpkg-test" -Filter '*.h' + $files += Get-Item "$toolsrc/include/pch.h" $fileNames = $files.FullName & $clangFormat -style=file -i @fileNames - $changedFiles = git status --porcelain $Toolsrc | ForEach-Object { - (-split $_)[1] - } - + $changedFiles = & "$PSScriptRoot/Get-ChangedFiles.ps1" -Directory $toolsrc if (-not $IgnoreErrors -and $null -ne $changedFiles) { $msg = @( @@ -42,7 +39,7 @@ try $msg += "" $msg += "clang-format should produce the following diff:" - $msg += git diff $Toolsrc + $msg += git diff $toolsrc Write-Error ($msg -join "`n") throw diff --git a/scripts/azure-pipelines/windows/Check-ManifestFormatting.ps1 b/scripts/azure-pipelines/windows/Check-ManifestFormatting.ps1 new file mode 100644 index 000000000..e4f52ae7b --- /dev/null +++ b/scripts/azure-pipelines/windows/Check-ManifestFormatting.ps1 @@ -0,0 +1,51 @@ +[CmdletBinding()] +Param( + [Parameter(Mandatory=$True)] + [string]$Root, + [Parameter()] + [string]$DownloadsDirectory, + [Parameter()] + [switch]$IgnoreErrors # allows one to just format +) + +$portsTree = Get-Item "$Root/ports" + +if (-not (Test-Path "$Root/.vcpkg-root")) +{ + Write-Error "The vcpkg root was not at $Root" + throw +} + +if (-not [string]::IsNullOrEmpty($DownloadsDirectory)) +{ + $env:VCPKG_DOWNLOADS = $DownloadsDirectory +} + +if (-not (Test-Path "$Root/vcpkg.exe")) +{ + & "$Root/bootstrap-vcpkg.bat" + if (-not $?) + { + Write-Error "Bootstrapping vcpkg failed" + throw + } +} + +& "$Root/vcpkg.exe" 'x-format-manifest' '--all' +$changedFiles = & "$PSScriptRoot/Get-ChangedFiles.ps1" -Directory $portsTree +if (-not $IgnoreErrors -and $null -ne $changedFiles) +{ + $msg = @( + "", + "The formatting of the manifest files didn't match our expectation.", + "If your build fails here, you need to run:" + ) + $msg += " vcpkg x-format-manifest --all" + $msg += "" + + $msg += "vcpkg should produce the following diff:" + $msg += git diff $portsTree + + Write-Error ($msg -join "`n") + throw +} diff --git a/scripts/azure-pipelines/windows/Get-ChangedFiles.ps1 b/scripts/azure-pipelines/windows/Get-ChangedFiles.ps1 new file mode 100644 index 000000000..e299369a0 --- /dev/null +++ b/scripts/azure-pipelines/windows/Get-ChangedFiles.ps1 @@ -0,0 +1,9 @@ +[CmdletBinding()] +Param( + [Parameter(Mandatory=$True)] + [string]$Directory +) + +git status --porcelain $Directory | ForEach-Object { + (-split $_)[1] +} diff --git a/scripts/azure-pipelines/windows/azure-pipelines.yml b/scripts/azure-pipelines/windows/azure-pipelines.yml index 1d18c0339..4136615c7 100644 --- a/scripts/azure-pipelines/windows/azure-pipelines.yml +++ b/scripts/azure-pipelines/windows/azure-pipelines.yml @@ -20,13 +20,7 @@ jobs: condition: always() inputs: filePath: 'scripts/azure-pipelines/windows/disk-space.ps1' - - task: Powershell@2 - displayName: 'Check C++ Formatting' - condition: eq('${{ parameters.triplet }}', 'x86-windows') - inputs: - filePath: 'scripts/azure-pipelines/windows/check-formatting.ps1' - arguments: '-Toolsrc ./toolsrc' - # Note: D: is the Azure machines' temporary disk. + # Note: D: is the Azure machines' temporary disk. - task: CmdLine@2 displayName: 'Build vcpkg' inputs: