Files
MBN_STOCK_WEBVIEW/scripts/Test-LegacyCutCoverage.ps1

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)
}