67 lines
2.1 KiB
PowerShell
67 lines
2.1 KiB
PowerShell
#Requires -Version 5.1
|
|
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string] $CutRoot
|
|
)
|
|
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$modulePath = Join-Path $PSScriptRoot 'LegacyCutCoverage.psm1'
|
|
$manifestPath = Join-Path $PSScriptRoot 'LegacyCutRequirements.json'
|
|
Import-Module -Name $modulePath -Force
|
|
|
|
if (-not (Test-Path -LiteralPath $manifestPath -PathType Leaf)) {
|
|
throw 'The closed legacy cut requirement manifest is missing.'
|
|
}
|
|
|
|
$manifest = Get-Content -LiteralPath $manifestPath -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
if ($manifest.schemaVersion -ne 1 -or
|
|
$manifest.reachableBuilders -le 0 -or
|
|
@($manifest.activeAliases).Count -eq 0 -or
|
|
@($manifest.assets).Count -eq 0) {
|
|
throw 'The closed legacy cut requirement manifest is invalid.'
|
|
}
|
|
|
|
$report = Test-LegacyCutCoverageState `
|
|
-CutRoot $CutRoot `
|
|
-Aliases @($manifest.activeAliases) `
|
|
-AssetRequirements @($manifest.assets) `
|
|
-ReachableBuilders $manifest.reachableBuilders
|
|
|
|
$failedAliases = @($report.AliasFindings | Where-Object Status -ne 'Present')
|
|
$failedAssets = @($report.AssetFindings | Where-Object Status -ne 'Present')
|
|
foreach ($finding in $failedAliases) {
|
|
Write-Warning ("CutAlias {0} ({1}) => {2}" -f
|
|
$finding.Alias,
|
|
$finding.RelativePath,
|
|
$finding.Status)
|
|
}
|
|
foreach ($finding in $failedAssets) {
|
|
Write-Warning ("BuilderAsset {0} {1} ({2}) => {3}" -f
|
|
$finding.Builder,
|
|
$finding.Kind,
|
|
$finding.RelativePath,
|
|
$finding.Status)
|
|
}
|
|
|
|
$report
|
|
if ($report.Status -ne 'Passed') {
|
|
$assetSummary = @($failedAssets | ForEach-Object {
|
|
"{0}|{1}|{2}|{3}" -f $_.Builder, $_.Kind, $_.RelativePath, $_.Status
|
|
}) -join '; '
|
|
$messageFormat = "Legacy cut coverage failed. Missing={0}, Unsafe={1}, " +
|
|
"MissingAssets={2}, UnsafeAssets={3}, RootEscapes={4}, " +
|
|
"ReparseAssets={5}. AssetFindings=[{6}]"
|
|
throw ($messageFormat -f
|
|
$report.Missing,
|
|
$report.Unsafe,
|
|
$report.MissingAssets,
|
|
$report.UnsafeAssets,
|
|
$report.RootEscapes,
|
|
$report.ReparseAssets,
|
|
$assetSummary)
|
|
}
|