mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
89 lines
3.0 KiB
PowerShell
89 lines
3.0 KiB
PowerShell
|
|
[CmdletBinding()]
|
||
|
|
param(
|
||
|
|
[Parameter(Mandatory = $true)]
|
||
|
|
[string]$BuildPlatform,
|
||
|
|
|
||
|
|
[Parameter(Mandatory = $true)]
|
||
|
|
[string]$BuildConfiguration,
|
||
|
|
|
||
|
|
[Parameter()]
|
||
|
|
[string]$RepoRoot = (Get-Location).Path
|
||
|
|
)
|
||
|
|
|
||
|
|
$ErrorActionPreference = 'Stop'
|
||
|
|
|
||
|
|
function Resolve-PlatformDirectory {
|
||
|
|
param(
|
||
|
|
[string]$Root,
|
||
|
|
[string]$Platform
|
||
|
|
)
|
||
|
|
|
||
|
|
$normalized = $Platform.Trim()
|
||
|
|
$candidates = @()
|
||
|
|
$candidates += Join-Path $Root $normalized
|
||
|
|
$candidates += Join-Path $Root ($normalized.ToUpperInvariant())
|
||
|
|
$candidates += Join-Path $Root ($normalized.ToLowerInvariant())
|
||
|
|
$candidates = $candidates | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | Select-Object -Unique
|
||
|
|
|
||
|
|
foreach ($candidate in $candidates) {
|
||
|
|
if (Test-Path $candidate) {
|
||
|
|
return $candidate
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return $candidates[0]
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "Repo root: $RepoRoot"
|
||
|
|
Write-Host "Requested build platform: $BuildPlatform"
|
||
|
|
Write-Host "Requested configuration: $BuildConfiguration"
|
||
|
|
|
||
|
|
# Always use x64 PowerToys.DSC.exe since CI/CD machines are x64
|
||
|
|
$exePlatform = 'x64'
|
||
|
|
$exeRoot = Resolve-PlatformDirectory -Root $RepoRoot -Platform $exePlatform
|
||
|
|
$exeOutputDir = Join-Path $exeRoot $BuildConfiguration
|
||
|
|
$exePath = Join-Path $exeOutputDir 'PowerToys.DSC.exe'
|
||
|
|
|
||
|
|
Write-Host "Using x64 PowerToys.DSC.exe to generate DSC manifests for $BuildPlatform build"
|
||
|
|
|
||
|
|
if (-not (Test-Path $exePath)) {
|
||
|
|
throw "PowerToys.DSC.exe not found at '$exePath'. Make sure it has been built first."
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "Using PowerToys.DSC.exe at '$exePath'."
|
||
|
|
|
||
|
|
# Output DSC manifests to the target build platform directory (x64, ARM64, etc.)
|
||
|
|
$outputRoot = Resolve-PlatformDirectory -Root $RepoRoot -Platform $BuildPlatform
|
||
|
|
if (-not (Test-Path $outputRoot)) {
|
||
|
|
Write-Host "Creating missing platform output root at '$outputRoot'."
|
||
|
|
New-Item -Path $outputRoot -ItemType Directory -Force | Out-Null
|
||
|
|
}
|
||
|
|
|
||
|
|
$outputDir = Join-Path $outputRoot $BuildConfiguration
|
||
|
|
if (-not (Test-Path $outputDir)) {
|
||
|
|
Write-Host "Creating missing configuration output directory at '$outputDir'."
|
||
|
|
New-Item -Path $outputDir -ItemType Directory -Force | Out-Null
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "DSC manifests will be generated to: '$outputDir'"
|
||
|
|
|
||
|
|
Write-Host "Cleaning previously generated DSC manifest files from '$outputDir'."
|
||
|
|
Get-ChildItem -Path $outputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction SilentlyContinue | Remove-Item -Force
|
||
|
|
|
||
|
|
$arguments = @('manifest', '--resource', 'settings', '--outputDir', $outputDir)
|
||
|
|
Write-Host "Invoking DSC manifest generator: '$exePath' $($arguments -join ' ')"
|
||
|
|
& $exePath @arguments
|
||
|
|
if ($LASTEXITCODE -ne 0) {
|
||
|
|
throw "PowerToys.DSC.exe exited with code $LASTEXITCODE"
|
||
|
|
}
|
||
|
|
|
||
|
|
$generatedFiles = Get-ChildItem -Path $outputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction Stop
|
||
|
|
if ($generatedFiles.Count -eq 0) {
|
||
|
|
throw "No DSC manifest files were generated in '$outputDir'."
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "Generated $($generatedFiles.Count) DSC manifest file(s):"
|
||
|
|
foreach ($file in $generatedFiles) {
|
||
|
|
Write-Host " - $($file.FullName)"
|
||
|
|
}
|