48 lines
1.3 KiB
PowerShell
48 lines
1.3 KiB
PowerShell
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string]$Tag
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
Set-StrictMode -Version Latest
|
|
|
|
function Test-SemVer {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Version
|
|
)
|
|
|
|
$match = [regex]::Match(
|
|
$Version,
|
|
'^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$'
|
|
)
|
|
if (-not $match.Success) {
|
|
return $false
|
|
}
|
|
|
|
$preRelease = $match.Groups[4].Value
|
|
return @($preRelease -split '\.' | Where-Object {
|
|
$_ -match '^0\d+$'
|
|
}).Count -eq 0
|
|
}
|
|
|
|
$workspaceRoot = Split-Path -Parent $PSScriptRoot
|
|
$cargoToml = Get-Content -Raw -LiteralPath (Join-Path $workspaceRoot 'Cargo.toml')
|
|
$match = [regex]::Match($cargoToml, '(?ms)^\[workspace\.package\].*?^version\s*=\s*"([^"]+)"')
|
|
if (-not $match.Success) {
|
|
throw 'Could not resolve [workspace.package].version from Cargo.toml.'
|
|
}
|
|
|
|
$version = $match.Groups[1].Value
|
|
if (-not (Test-SemVer -Version $version)) {
|
|
throw "Workspace version is not valid SemVer: $version"
|
|
}
|
|
|
|
if ($Tag -ne "v$version") {
|
|
throw "Tag $Tag does not match workspace version v$version."
|
|
}
|
|
|
|
Write-Host "SemVer release tag verified: $Tag"
|