part #2
This commit is contained in:
94
scripts/build-all-solutions.ps1
Normal file
94
scripts/build-all-solutions.ps1
Normal file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env pwsh
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Builds (and optionally tests) all module solutions under src/.
|
||||
|
||||
.DESCRIPTION
|
||||
Discovers all *.sln files under src/ (excluding the root StellaOps.sln)
|
||||
and runs dotnet build on each. Pass -Test to also run dotnet test.
|
||||
|
||||
.PARAMETER Test
|
||||
Also run dotnet test on each solution after building.
|
||||
|
||||
.PARAMETER Configuration
|
||||
Build configuration. Defaults to Debug.
|
||||
|
||||
.EXAMPLE
|
||||
.\scripts\build-all-solutions.ps1
|
||||
.\scripts\build-all-solutions.ps1 -Test
|
||||
.\scripts\build-all-solutions.ps1 -Test -Configuration Release
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[switch]$Test,
|
||||
[ValidateSet('Debug', 'Release')]
|
||||
[string]$Configuration = 'Debug'
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Continue'
|
||||
|
||||
$repoRoot = Split-Path -Parent $PSScriptRoot
|
||||
$srcDir = Join-Path $repoRoot 'src'
|
||||
|
||||
$solutions = Get-ChildItem -Path $srcDir -Filter '*.sln' -Recurse |
|
||||
Where-Object { $_.Name -ne 'StellaOps.sln' } |
|
||||
Sort-Object FullName
|
||||
|
||||
if ($solutions.Count -eq 0) {
|
||||
Write-Error 'No solution files found under src/.'
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Found $($solutions.Count) solution(s) to build." -ForegroundColor Cyan
|
||||
Write-Host ''
|
||||
|
||||
$buildPass = @()
|
||||
$buildFail = @()
|
||||
$testPass = @()
|
||||
$testFail = @()
|
||||
$testSkipped = @()
|
||||
|
||||
foreach ($sln in $solutions) {
|
||||
$rel = [System.IO.Path]::GetRelativePath($repoRoot, $sln.FullName)
|
||||
Write-Host "--- BUILD: $rel ---" -ForegroundColor Yellow
|
||||
|
||||
dotnet build $sln.FullName --configuration $Configuration --nologo -v quiet
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
$buildPass += $rel
|
||||
} else {
|
||||
$buildFail += $rel
|
||||
Write-Host " FAILED" -ForegroundColor Red
|
||||
continue # skip test if build failed
|
||||
}
|
||||
|
||||
if ($Test) {
|
||||
Write-Host "--- TEST: $rel ---" -ForegroundColor Yellow
|
||||
dotnet test $sln.FullName --configuration $Configuration --nologo --no-build -v quiet
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
$testPass += $rel
|
||||
} else {
|
||||
$testFail += $rel
|
||||
Write-Host " TEST FAILED" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ''
|
||||
Write-Host '========== Summary ==========' -ForegroundColor Cyan
|
||||
Write-Host "Build passed : $($buildPass.Count)" -ForegroundColor Green
|
||||
if ($buildFail.Count -gt 0) {
|
||||
Write-Host "Build failed : $($buildFail.Count)" -ForegroundColor Red
|
||||
$buildFail | ForEach-Object { Write-Host " - $_" -ForegroundColor Red }
|
||||
}
|
||||
if ($Test) {
|
||||
Write-Host "Test passed : $($testPass.Count)" -ForegroundColor Green
|
||||
if ($testFail.Count -gt 0) {
|
||||
Write-Host "Test failed : $($testFail.Count)" -ForegroundColor Red
|
||||
$testFail | ForEach-Object { Write-Host " - $_" -ForegroundColor Red }
|
||||
}
|
||||
}
|
||||
|
||||
if ($buildFail.Count -gt 0 -or $testFail.Count -gt 0) {
|
||||
exit 1
|
||||
}
|
||||
Reference in New Issue
Block a user