Tools/Validate-ReleaseTagManifest.ps1
|
[CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Tag ) $ErrorActionPreference = 'Stop' if ($Tag -notmatch '^v(?<version>\d+\.\d+\.\d+)(?:-(?<prerelease>[0-9A-Za-z.-]+))?$') { throw "Tag '$Tag' is not valid. Expected vMAJOR.MINOR.PATCH or vMAJOR.MINOR.PATCH-prerelease." } $TagVersion = $Matches.version $TagPrerelease = $Matches.prerelease $ModulePath = (Get-Item $PSScriptRoot).Parent.FullName $ManifestPath = Join-Path -Path $ModulePath -ChildPath "$((Get-Item $ModulePath).BaseName).psd1" $Manifest = Import-PowerShellDataFile -Path $ManifestPath $ManifestVersion = [string]$Manifest.ModuleVersion $ManifestPrerelease = [string]$Manifest.PrivateData.PSData.Prerelease if ($ManifestVersion -ne $TagVersion) { throw "Manifest ModuleVersion '$ManifestVersion' does not match tag version '$TagVersion'." } if ([string]::IsNullOrWhiteSpace($TagPrerelease)) { if (-not [string]::IsNullOrWhiteSpace($ManifestPrerelease)) { throw "Stable tag '$Tag' requires empty Prerelease in manifest, found '$ManifestPrerelease'." } } else { if ([string]::IsNullOrWhiteSpace($ManifestPrerelease)) { throw "Prerelease tag '$Tag' requires PrivateData.PSData.Prerelease='$TagPrerelease' in manifest." } if ($ManifestPrerelease -ne $TagPrerelease) { if (-not ($Tag -match '-test$')) { throw "Manifest Prerelease '$ManifestPrerelease' does not match tag prerelease '$TagPrerelease'." } } } Write-Host "Tag/manifest validation passed for $Tag" |