scripts: make Build-Pack and Deploy-Brass cross-platform
Two small fixes that surface when running the deploy pipeline on a non-Windows host (we now do this on glados via the Telegram bridge): - Build-Pack.ps1: fall back to launcher/ModpackLauncher.csproj <Version> when Get-Item.VersionInfo.FileVersion returns empty. Linux PowerShell can't parse PE FileVersion from a Windows .exe, so the previous code threw "set <Version> in ModpackLauncher.csproj and republish" -- but the csproj <Version> *was* set, just not readable from a foreign PE. Appends ".0" so the embedded value still matches the 4-part form the Windows compile bakes in. - Deploy-Brass.ps1: prefer rsync where available, fall back to robocopy otherwise. robocopy is Windows-only and bails on Linux/macOS hosts.
This commit is contained in:
+19
-2
@@ -163,8 +163,25 @@ if ($LauncherExePath) {
|
||||
}
|
||||
$launcherFile = Get-Item $LauncherExePath
|
||||
$launcherVersion = $launcherFile.VersionInfo.FileVersion
|
||||
$versionSource = 'PE FileVersion'
|
||||
|
||||
# Linux PowerShell can't read PE FileVersion from a Windows .exe. When that
|
||||
# happens, fall back to launcher/ModpackLauncher.csproj's <Version> (the
|
||||
# source of truth that the Windows compile bakes into FileVersion anyway).
|
||||
# Append ".0" so callers get the same 4-part form as the PE metadata.
|
||||
if ([string]::IsNullOrWhiteSpace($launcherVersion)) {
|
||||
throw "Launcher exe has no FileVersion -- set <Version> in ModpackLauncher.csproj and republish."
|
||||
$csprojPath = Join-Path $here '..\launcher\ModpackLauncher.csproj'
|
||||
if (Test-Path $csprojPath) {
|
||||
[xml]$csproj = Get-Content $csprojPath
|
||||
$csprojVersion = ($csproj.Project.PropertyGroup.Version | Where-Object { $_ }) | Select-Object -First 1
|
||||
if ($csprojVersion) {
|
||||
$launcherVersion = if ($csprojVersion -match '^\d+\.\d+\.\d+$') { "$csprojVersion.0" } else { $csprojVersion }
|
||||
$versionSource = "csproj <Version> (fallback)"
|
||||
}
|
||||
}
|
||||
}
|
||||
if ([string]::IsNullOrWhiteSpace($launcherVersion)) {
|
||||
throw "Launcher exe has no FileVersion and csproj <Version> couldn't be read either -- set <Version> in ModpackLauncher.csproj and republish."
|
||||
}
|
||||
# FileVersion is the four-component form (e.g. "0.1.0.0" for csproj <Version>0.1.0</Version>).
|
||||
# Embed as-is -- the launcher's Version.Parse handles it directly and avoids ambiguous
|
||||
@@ -174,7 +191,7 @@ if ($LauncherExePath) {
|
||||
|
||||
Write-Host ""
|
||||
Write-Host ("Launcher metadata embedded:")
|
||||
Write-Host (" Version: {0}" -f $launcherVersion)
|
||||
Write-Host (" Version: {0} ({1})" -f $launcherVersion, $versionSource)
|
||||
Write-Host (" Url: {0}" -f $LauncherPublicUrl)
|
||||
Write-Host (" Source: {0}" -f $launcherFile.FullName)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user