diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index a4971bbc9e..3e4486363a 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -2202,6 +2202,7 @@ vsonline vstemplate VSTHRD VSTT +vswhere vtable Vtbl wbem diff --git a/.pipelines/ci/templates/build-powertoys-steps.yml b/.pipelines/ci/templates/build-powertoys-steps.yml index 75cd720908..e52fd16188 100644 --- a/.pipelines/ci/templates/build-powertoys-steps.yml +++ b/.pipelines/ci/templates/build-powertoys-steps.yml @@ -7,6 +7,41 @@ steps: submodules: true clean: true +- task: PowerShell@2 + displayName: Verify Arm64 configuration for PowerToys.sln + inputs: + filePath: '$(build.sourcesdirectory)\.pipelines\verifyArm64Configuration.ps1' + arguments: -solution '$(build.sourcesdirectory)\PowerToys.sln' + pwsh: true + +- task: PowerShell@2 + displayName: Verify Arm64 configuration for BugReportTool.sln + inputs: + filePath: '$(build.sourcesdirectory)\.pipelines\verifyArm64Configuration.ps1' + arguments: -solution '$(build.sourcesdirectory)\tools\BugReportTool\BugReportTool.sln' + pwsh: true + +- task: PowerShell@2 + displayName: Verify Arm64 configuration for WebcamReportTool.sln + inputs: + filePath: '$(build.sourcesdirectory)\.pipelines\verifyArm64Configuration.ps1' + arguments: -solution '$(build.sourcesdirectory)\tools\WebcamReportTool\WebcamReportTool.sln' + pwsh: true + +- task: PowerShell@2 + displayName: Verify Arm64 configuration for StylesReportTool.sln + inputs: + filePath: '$(build.sourcesdirectory)\.pipelines\verifyArm64Configuration.ps1' + arguments: -solution '$(build.sourcesdirectory)\tools\StylesReportTool\StylesReportTool.sln' + pwsh: true + +- task: PowerShell@2 + displayName: Verify Arm64 configuration for PowerToysSetup.sln + inputs: + filePath: '$(build.sourcesdirectory)\.pipelines\verifyArm64Configuration.ps1' + arguments: -solution '$(build.sourcesdirectory)\installer\PowerToysSetup.sln' + pwsh: true + - task: UseDotNet@2 displayName: 'Use .NET 6 SDK' inputs: diff --git a/.pipelines/verifyArm64Configuration.ps1 b/.pipelines/verifyArm64Configuration.ps1 new file mode 100644 index 0000000000..6a9cdd3986 --- /dev/null +++ b/.pipelines/verifyArm64Configuration.ps1 @@ -0,0 +1,63 @@ +[CmdletBinding()] +Param( + [Parameter(Mandatory=$True,Position=1)] + [string]$solution +) + +Write-Output "Verifying Arm64 configuration for $solution" + +$errorTable = @{} + +$MSBuildLoc = & "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -prerelease -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\Microsoft.Build.dll +if ($null -eq $MSBuildLoc) { + throw "Unable to locate Microsoft.Build.dll" +} + +try { + Add-Type -Path $MSBuildLoc +} +catch { + # Catching because it may error on loading all the types from the assembly, but we only need one +} + +$solutionFile = [Microsoft.Build.Construction.SolutionFile]::Parse($solution); +$arm64SlnConfigs = $solutionFile.SolutionConfigurations | Where-Object { + $_.PlatformName -eq "ARM64" +}; + +# Should have two configurations. Debug and Release. +if($arm64SlnConfigs.Length -lt 2) { + Write-Host -ForegroundColor Red "Missing Solution-level Arm64 platforms" + exit 1; +} + +# List projects only. +$projects = $solutionFile.ProjectsInOrder | Where-Object { + $_.ProjectType -eq "KnownToBeMSBuildFormat" +}; + +# Enumerate through the projects and add any project with a mismatched platform and project configuration +foreach ($project in $projects) { + foreach ($slnConfig in $arm64SlnConfigs.FullName) { + if ($project.ProjectConfigurations.$slnConfig.FullName -ne $slnConfig) { + $errorTable[$project.ProjectName] += @("" + | Select-Object @{n = "Configuration"; e = { $project.ProjectConfigurations.$slnConfig.FullName } }, + @{n = "ExpectedConfiguration"; e = { $slnConfig } }) + } + } +} + +if ($errorTable.Count -gt 0) { + Write-Host -ForegroundColor Red "Verification failed for the following projects:`n" + $errorTable.Keys | ForEach-Object { + Write-Host -ForegroundColor Red $_`:; + $errorTable[$_] | ForEach-Object { + Write-Host -ForegroundColor Red "$($_.ExpectedConfiguration)=$($_.Configuration)"; + }; + Write-Host -ForegroundColor Red `r + } + exit 1; +} + +Write-Output "Verification Complete" +exit 0; \ No newline at end of file