Files
Scoreboard/deploy/build.bat
T
AskaEth 2c9ff65fc4 feat: 补齐第一批已知缺口(关闭握手 / 定时备份 / Origin 白名单 / DTO 收敛)
- httpapi:新增 POST /api/shutdown(admin 会话或 X-Shutdown-Token 常量时间比对)
  与 GET /api/rules/switches(recorder 可读,只回布尔开关);settings/standings 的
  重复 DTO 收敛到 internal/dto;standings.showIndividualMedals 贯通到设置读写与前端
- export:抽出 export.Service,新增自动备份定时任务(backup.intervalMinutes/keep),
  自动、手动、发布前三类备份共用同一把互斥锁与滚动清理
- realtime:/ws 去掉 InsecureSkipVerify,改用 OriginPatterns(同源与无 Origin 放行,
  跨站需命中 server.allowedOrigins)
- console:停止服务改走 POST /api/shutdown 优雅关闭(5 秒宽限后回退强杀),
  服务管理器新增「已连接的大屏实例」卡片
- deploy:build.bat 改用 for /f 读内部署名——set /p 在 chcp 65001 下返回空,
  导致最近这次构建的 exe 里根本没注入署名
- docs:备份策略、关闭超时、Origin 配置的说明与实现对齐
2026-09-09 21:41:08 +08:00

85 lines
3.7 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, so read the first line with for /f instead.
set "INTERNAL_SIGNATURE="
if exist "..\deploy\signature.local.txt" for /f "usebackq delims= eol=" %%A in ("..\deploy\signature.local.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
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 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