@@ -52,7 +52,8 @@ param (
5252 [switch ]$Addons ,
5353 [switch ]$Installer ,
5454 [switch ]$All ,
55- [switch ]$LocalDev
55+ [switch ]$LocalDev ,
56+ [int ]$BuildNumber = 0
5657)
5758
5859$ErrorActionPreference = " Stop"
@@ -66,6 +67,7 @@ $IsWinBuild = $env:OS -match 'Windows_NT' -or $PSVersionTable.Platform -eq 'Win3
6667$IsLinBuild = $PSVersionTable.Platform -eq ' Unix' -and -not ($IsMacBuild = (uname) -eq ' Darwin' )
6768$IsMacBuild = $IsMacBuild -or ($PSVersionTable.Platform -eq ' Unix' -and (uname) -eq ' Darwin' )
6869
70+
6971Write-Host " ==========================================" - ForegroundColor Cyan
7072Write-Host " SwitchCraft Release Builder " - ForegroundColor Cyan
7173Write-Host " ==========================================" - ForegroundColor Cyan
@@ -153,13 +155,14 @@ Write-Host "Project Root: $RepoRoot" -ForegroundColor Gray
153155# --- Version Extraction ---
154156function Extract-VersionInfo {
155157 param (
156- [string ]$VersionString
158+ [string ]$VersionString ,
159+ [int ]$BuildNum = 0
157160 )
158161 # Extract numeric version only (remove .dev0, +build, -dev, etc.) for VersionInfoVersion
159162 # Pattern: extract MAJOR.MINOR.PATCH from any version format
160163 $Numeric = if ($VersionString -match ' ^(\d+\.\d+\.\d+)' ) { $Matches [1 ] } else { $VersionString -replace ' [^0-9.].*' , ' ' }
161164 # VersionInfoVersion requires 4 numeric components (Major.Minor.Patch.Build)
162- $Info = " $Numeric .0 "
165+ $Info = " $Numeric .$BuildNum "
163166 return @ {
164167 Full = $VersionString
165168 Numeric = $Numeric
@@ -174,21 +177,21 @@ $RawFallbackVersion = if ($env:SWITCHCRAFT_VERSION) { $env:SWITCHCRAFT_VERSION }
174177# Strip common prefixes like "v" and whitespace
175178$CleanedFallbackVersion = $RawFallbackVersion.Trim () -replace ' ^v' , ' '
176179# Extract version info from cleaned value
177- $FallbackVersionInfo = Extract- VersionInfo - VersionString $CleanedFallbackVersion
180+ $FallbackVersionInfo = Extract- VersionInfo - VersionString $CleanedFallbackVersion - BuildNum $BuildNumber
178181# Validate that the numeric component is non-empty and matches MAJOR.MINOR.PATCH pattern
179182$IsValidFallback = -not [string ]::IsNullOrWhiteSpace($FallbackVersionInfo.Numeric ) -and
180183 $FallbackVersionInfo.Numeric -match ' ^\d+\.\d+\.\d+$'
181184if (-not $IsValidFallback ) {
182185 Write-Warning " Fallback version from SWITCHCRAFT_VERSION is malformed (got: '$ ( $FallbackVersionInfo.Numeric ) '), expected MAJOR.MINOR.PATCH format. Using hardcoded default: 2026.1.5"
183186 $FallbackVersion = " 2026.1.5"
184- $VersionInfo = Extract- VersionInfo - VersionString $FallbackVersion
187+ $VersionInfo = Extract- VersionInfo - VersionString $FallbackVersion - BuildNum $BuildNumber
185188} else {
186189 $FallbackVersion = $CleanedFallbackVersion
187190 $VersionInfo = $FallbackVersionInfo
188191}
189192# Ensure Info still appends a fourth component (Build number)
190193if (-not $VersionInfo.Info -match ' \.\d+$' ) {
191- $VersionInfo.Info = " $ ( $VersionInfo.Numeric ) .0 "
194+ $VersionInfo.Info = " $ ( $VersionInfo.Numeric ) .$BuildNumber "
192195}
193196$AppVersion = $VersionInfo.Full
194197$AppVersionNumeric = $VersionInfo.Numeric
@@ -198,13 +201,13 @@ if (Test-Path $PyProjectFile) {
198201 try {
199202 $VersionLine = Get-Content - Path $PyProjectFile | Select-String " version = " | Select-Object - First 1
200203 if ($VersionLine -match ' version = "(.*)"' ) {
201- $VersionInfo = Extract- VersionInfo - VersionString $Matches [1 ]
204+ $VersionInfo = Extract- VersionInfo - VersionString $Matches [1 ] - BuildNum $BuildNumber
202205 # Validate that the parsed version is non-empty and well-formed (MAJOR.MINOR.PATCH format)
203206 $IsValidVersion = -not [string ]::IsNullOrWhiteSpace($VersionInfo.Numeric ) -and
204207 $VersionInfo.Numeric -match ' ^\d+\.\d+\.\d+$'
205208 if (-not $IsValidVersion ) {
206209 Write-Warning " Parsed version from pyproject.toml is malformed (got: '$ ( $VersionInfo.Numeric ) '), expected MAJOR.MINOR.PATCH format. Using fallback: $FallbackVersion "
207- $VersionInfo = Extract- VersionInfo - VersionString $FallbackVersion
210+ $VersionInfo = Extract- VersionInfo - VersionString $FallbackVersion - BuildNum $BuildNumber
208211 }
209212 $AppVersion = $VersionInfo.Full
210213 $AppVersionNumeric = $VersionInfo.Numeric
0 commit comments