fix(release): rename -Switch param to -NewVersion (silently broke channel resolution)

A script parameter named exactly $Switch collides with PowerShell's `switch`
statement keyword - confirmed by bisection - and made every `$X = switch (...)
{...}` in the script silently evaluate to empty instead of erroring. This is
what produced the malformed "v0.4.1-.0" tag on the last release attempt
(Channel resolved to "" instead of "stable", Iteration to 0). Renaming the
parameter is the only fix; nothing else about the switch statement itself
was wrong.
This commit is contained in:
ospab 2026-07-10 03:25:26 +03:00
parent 10ec253fa0
commit dee0288f2a
1 changed files with 14 additions and 7 deletions

View File

@ -34,14 +34,21 @@
.release-state.json at the repo root. Running with no arguments repeats .release-state.json at the repo root. Running with no arguments repeats
last time's branch, bumping that channel's iteration by one manifests last time's branch, bumping that channel's iteration by one manifests
are NOT touched (nothing to bump: the target version hasn't changed). are NOT touched (nothing to bump: the target version hasn't changed).
-Switch starts a new target version line and resets both iteration -NewVersion starts a new target version line and resets both iteration
counters to 0 THIS is the one case that bumps every manifest. counters to 0 THIS is the one case that bumps every manifest.
.PARAMETER Switch .PARAMETER NewVersion
Set a new target version (e.g. "0.4.2") instead of continuing the current Set a new target version (e.g. "0.4.2") instead of continuing the current
one. Resets both alpha_iteration and beta_iteration to 0. Defaults the one. Resets both alpha_iteration and beta_iteration to 0. Defaults the
channel back to alpha unless -Branch is also given this run. channel back to alpha unless -Branch is also given this run.
NOTE: this parameter is deliberately NOT named "Switch" PowerShell's
`switch` statement keyword is matched case-insensitively against variable
names in scope, and a script parameter named exactly $Switch silently
breaks every `switch (...) { ... }` expression later in the same script
(it evaluates to nothing, no error). Confirmed by bisection: renaming the
parameter is the only thing that fixes it. Do not rename this back.
.PARAMETER Branch .PARAMETER Branch
Which branch/channel to release from: master, pre-release (beta), or alpha. Which branch/channel to release from: master, pre-release (beta), or alpha.
Defaults to whatever was used last time (see .release-state.json). Defaults to whatever was used last time (see .release-state.json).
@ -51,7 +58,7 @@
Bumps the current channel's iteration by one and pushes v{target}-{channel}.{N}. Bumps the current channel's iteration by one and pushes v{target}-{channel}.{N}.
.EXAMPLE .EXAMPLE
.\scripts\gha.ps1 -Switch 0.4.2 .\scripts\gha.ps1 -NewVersion 0.4.2
Starts a fresh 0.4.2 cycle: manifests -> 0.4.2, alpha iteration resets to 1, Starts a fresh 0.4.2 cycle: manifests -> 0.4.2, alpha iteration resets to 1,
ships v0.4.2-alpha.1. ships v0.4.2-alpha.1.
@ -66,7 +73,7 @@
#> #>
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$Switch, [string]$NewVersion,
[ValidateSet('master', 'pre-release', 'alpha')] [ValidateSet('master', 'pre-release', 'alpha')]
[string]$Branch [string]$Branch
) )
@ -98,14 +105,14 @@ if (Test-Path $StateFile) {
} }
$PrevBranch = if ($State) { $State.branch } else { $null } $PrevBranch = if ($State) { $State.branch } else { $null }
$IsNewTarget = [bool]$Switch $IsNewTarget = [bool]$NewVersion
$ResolvedBranch = if ($Branch) { $Branch } elseif ($PrevBranch) { $PrevBranch } else { "alpha" } $ResolvedBranch = if ($Branch) { $Branch } elseif ($PrevBranch) { $PrevBranch } else { "alpha" }
# -- Resolve the target version + per-channel iteration counters ------------ # -- Resolve the target version + per-channel iteration counters ------------
if ($IsNewTarget) { if ($IsNewTarget) {
if ($Switch -notmatch '^[0-9]+\.[0-9]+\.[0-9]+$') { Fail "-Switch must be a bare X.Y.Z version, got '$Switch'." } if ($NewVersion -notmatch '^[0-9]+\.[0-9]+\.[0-9]+$') { Fail "-NewVersion must be a bare X.Y.Z version, got '$NewVersion'." }
$TargetVersion = $Switch $TargetVersion = $NewVersion
$AlphaIter = 0 $AlphaIter = 0
$BetaIter = 0 $BetaIter = 0
# A fresh target version starts a fresh cycle at the bottom of the chain, # A fresh target version starts a fresh cycle at the bottom of the chain,