Go:Add build pipeline for go server and fix web login bug
This commit is contained in:
103
build.ps1
103
build.ps1
@@ -15,11 +15,110 @@ param(
|
||||
|
||||
[switch]$ServerOnly, # Only build main server (Yama), skip client projects
|
||||
[switch]$Clean, # Clean before build
|
||||
[switch]$Publish # Publish mode: rebuild all deps + x64 Release + UPX compress
|
||||
[switch]$Publish, # Publish mode: rebuild all deps + x64 Release + UPX compress
|
||||
[switch]$GoServer # Build Go fallback server (server/go) -> Bin/YamaGo_x64.exe
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$rootDir = $PSScriptRoot
|
||||
$binDir = Join-Path $rootDir "Bin"
|
||||
$upxPath = Join-Path $rootDir "server\2015Remote\res\3rd\upx.exe"
|
||||
|
||||
# Build Go fallback server. No-op (with warning) if Go compiler is not installed.
|
||||
# When -Compress is set, run UPX --best on the output (mirrors C++ publish flow).
|
||||
function Build-GoServer {
|
||||
param(
|
||||
[string]$Configuration,
|
||||
[switch]$Compress
|
||||
)
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Building Go server (server/go)..." -ForegroundColor Magenta
|
||||
|
||||
$goCmd = Get-Command go -ErrorAction SilentlyContinue
|
||||
if (-not $goCmd) {
|
||||
Write-Host "WARNING: Go compiler not found in PATH. Skipping Go server build." -ForegroundColor Yellow
|
||||
Write-Host " Install from https://go.dev/dl/ and ensure 'go' is in PATH." -ForegroundColor DarkGray
|
||||
return $false
|
||||
}
|
||||
|
||||
Write-Host "Using Go: $($goCmd.Source)" -ForegroundColor Cyan
|
||||
|
||||
$goDir = Join-Path $rootDir "server\go"
|
||||
if (-not (Test-Path $goDir)) {
|
||||
Write-Host "ERROR: Go source directory not found at $goDir" -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
|
||||
# Sync web assets (mirrors Makefile `sync` target — single source is server/web/index.html)
|
||||
$webSrc = Join-Path $rootDir "server\web\index.html"
|
||||
$webDstDir = Join-Path $goDir "web\assets"
|
||||
if (Test-Path $webSrc) {
|
||||
if (-not (Test-Path $webDstDir)) { New-Item -ItemType Directory -Path $webDstDir -Force | Out-Null }
|
||||
Copy-Item -Path $webSrc -Destination (Join-Path $webDstDir "index.html") -Force
|
||||
}
|
||||
|
||||
if (-not (Test-Path $binDir)) { New-Item -ItemType Directory -Path $binDir -Force | Out-Null }
|
||||
|
||||
$outFile = Join-Path $binDir "YamaGo_x64.exe"
|
||||
# Release strips debug info for smaller binary; Debug keeps symbols.
|
||||
$ldflags = if ($Configuration -eq "Debug") { "" } else { "-s -w" }
|
||||
|
||||
Push-Location $goDir
|
||||
try {
|
||||
$env:GOOS = "windows"
|
||||
$env:GOARCH = "amd64"
|
||||
if ($ldflags) {
|
||||
& go build -ldflags $ldflags -o $outFile ./cmd
|
||||
} else {
|
||||
& go build -o $outFile ./cmd
|
||||
}
|
||||
$code = $LASTEXITCODE
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
if ($code -ne 0) {
|
||||
Write-Host "ERROR: Go build failed (exit $code)" -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
|
||||
$size = (Get-Item $outFile).Length / 1MB
|
||||
Write-Host "OK: $outFile ($($size.ToString('F2')) MB)" -ForegroundColor Green
|
||||
|
||||
# In-place UPX compression. Failure is a warning, not an error — the
|
||||
# uncompressed binary is still usable, and UPX occasionally refuses on
|
||||
# certain PE sections.
|
||||
if ($Compress) {
|
||||
Write-Host ""
|
||||
Write-Host "UPX compressing Go server..." -ForegroundColor Magenta
|
||||
if (-not (Test-Path $upxPath)) {
|
||||
Write-Host "WARNING: UPX not found at $upxPath — skipping compression" -ForegroundColor Yellow
|
||||
} else {
|
||||
$sizeBefore = (Get-Item $outFile).Length / 1MB
|
||||
Write-Host " Before: $($sizeBefore.ToString('F2')) MB" -ForegroundColor DarkGray
|
||||
& $upxPath --best $outFile
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "WARNING: UPX compression failed, uncompressed binary kept" -ForegroundColor Yellow
|
||||
} else {
|
||||
$sizeAfter = (Get-Item $outFile).Length / 1MB
|
||||
$ratio = (1 - $sizeAfter / $sizeBefore) * 100
|
||||
Write-Host " After: $($sizeAfter.ToString('F2')) MB (-$($ratio.ToString('F1'))%)" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
}
|
||||
return $true
|
||||
}
|
||||
|
||||
# Go-only fast path: skip MSBuild entirely. -Publish here means "compress the
|
||||
# Go binary too" (not the full C++ publish flow).
|
||||
if ($GoServer) {
|
||||
$ok = Build-GoServer -Configuration $Config -Compress:$Publish
|
||||
if (-not $ok) { exit 1 }
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Find MSBuild (VS2019 or VS2022, including Insiders/Preview)
|
||||
# Order: Prefer installations with v142 toolset (VS2019) over VS2022 BuildTools
|
||||
$msBuildPaths = @(
|
||||
@@ -72,9 +171,7 @@ elseif ($msBuild -match "\\18\\") { $vsYear = "2019 Insiders" }
|
||||
|
||||
Write-Host "Using MSBuild: $msBuild" -ForegroundColor Cyan
|
||||
|
||||
$rootDir = $PSScriptRoot
|
||||
$slnFile = Join-Path $rootDir "YAMA.sln"
|
||||
$upxPath = Join-Path $rootDir "server\2015Remote\res\3rd\upx.exe"
|
||||
|
||||
# Publish mode overrides
|
||||
if ($Publish) {
|
||||
|
||||
Reference in New Issue
Block a user