@echo off chcp 65001 >nul REM Build Windows artifacts on the build machine (Meowhome). REM Output: REM dist\scoreboard.exe server (frontend embedded via go:embed) REM dist\console\ Scoreboard Console installer + portable dir REM REM IMPORTANT: keep this file ASCII-only. cmd.exe mis-parses UTF-8 non-ASCII text REM inside batch files (especially inside if(...) blocks). Anything that needs a REM non-ASCII path is done by a Node script under deploy\. setlocal REM electron / electron-builder downloads: use mirrors so GitHub is reachable set "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/" set "ELECTRON_BUILDER_BINARIES_MIRROR=https://gh-proxy.com/https://github.com/electron-userland/electron-builder-binaries/releases/download/" set "CSC_IDENTITY_AUTO_DISCOVERY=false" cd /d "%~dp0.." echo === [1/4] git pull === git pull || exit /b 1 echo === [2/4] web deps + build === cd web call pnpm install --frozen-lockfile || exit /b 1 call pnpm build || exit /b 1 cd .. echo === [3/4] server build === cd server if not exist ..\dist mkdir ..\dist REM internal signature is injected from a machine-local file (gitignored, never in repo) set "INTERNAL_SIGNATURE=" if exist "..\deploy\signature.local.txt" set /p INTERNAL_SIGNATURE=<"..\deploy\signature.local.txt" if defined INTERNAL_SIGNATURE ( REM single quotes keep spaces inside the value intact for go's ldflags parser go build -ldflags "-X 'git.yeij.top/AskaEth/Scoreboard/server/internal/version.InternalSignature=%INTERNAL_SIGNATURE%'" -o ..\dist\scoreboard.exe . || exit /b 1 echo internal signature injected ) else ( go build -o ..\dist\scoreboard.exe . || exit /b 1 echo no internal signature ) cd .. echo === [4/4] console package (electron-builder) === REM win.icon is written into the PE resources by electron-builder (via rcedit); REM it needs winCodeSign / nsis, fetched through the gh proxy above. taskkill /im "Scoreboard Console.exe" /f >nul 2>&1 taskkill /im scoreboard.exe /f >nul 2>&1 if not exist "rules" echo [warn] rules dir missing node deploy\prepare-extra.mjs || exit /b 1 cd console REM pnpm 11 blocks postinstall by default (ERR_PNPM_IGNORED_BUILDS), so the electron REM runtime binary is fetched explicitly below instead of relying on the install script. call pnpm install --frozen-lockfile --ignore-scripts || exit /b 1 call :ensure_electron || exit /b 1 call pnpm run dist || exit /b 1 cd .. echo. echo === BUILD OK === echo dist\scoreboard.exe server echo dist\console\ console installer + portable dir dir /b dist\console endlocal exit /b 0 REM ---- ensure the electron runtime binary is present (pnpm skips its postinstall) -- :ensure_electron REM path.txt tells the electron package where the binary is; without it REM electron-builder tries to download the runtime and hits a Node 24 bug. if not exist node_modules\electron\path.txt echo electron.exe> node_modules\electron\path.txt if exist node_modules\electron\dist\electron.exe exit /b 0 set "EV=38.8.6" echo downloading electron %EV% ... curl -L --fail --max-time 900 -o electron-dl.zip "%ELECTRON_MIRROR%%EV%/electron-v%EV%-win32-x64.zip" || exit /b 1 powershell -NoProfile -Command "Expand-Archive -LiteralPath 'electron-dl.zip' -DestinationPath 'node_modules/electron/dist' -Force" || exit /b 1 del /q electron-dl.zip echo electron.exe> node_modules\electron\path.txt echo electron runtime ready exit /b 0