findstr 会误报 NOT found,而实测 exe 里署名是存在的。改成 verify-signature.mjs 读字节 includes 比对,缺失时让构建硬失败。
92 lines
4.0 KiB
Batchfile
92 lines
4.0 KiB
Batchfile
@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).
|
|
REM set /p returns empty under chcp 65001; PowerShell piping re-encodes the text and
|
|
REM corrupts non-ASCII. So a Node script normalizes it (BOM/whitespace stripped) into
|
|
REM deploy\signature.build.txt, and for /f reads that file directly (no re-encoding).
|
|
node ..\deploy\prepare-signature.mjs || exit /b 1
|
|
set "INTERNAL_SIGNATURE="
|
|
if exist "..\deploy\signature.build.txt" for /f "usebackq delims= eol=" %%A in ("..\deploy\signature.build.txt") do if not defined INTERNAL_SIGNATURE set "INTERNAL_SIGNATURE=%%A"
|
|
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
|
|
node ..\deploy\verify-signature.mjs || 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 [ERROR] rules dir missing - electron-builder extraFiles needs it
|
|
exit /b 1
|
|
)
|
|
node deploy\prepare-extra.mjs || exit /b 1
|
|
cd console
|
|
REM console\pnpm-workspace.yaml uses allowBuilds so electron's install script is
|
|
REM allowed to run; do NOT add --ignore-scripts here, it makes pnpm run fail its
|
|
REM dependency check with ERR_PNPM_IGNORED_BUILDS.
|
|
REM Keep this file ASCII-only: cmd.exe mis-parses UTF-8 text inside .bat files.
|
|
call pnpm install --frozen-lockfile || 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 (fallback for mirror failures) --
|
|
: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
|