@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 setlocal REM electron / electron-builder 的下载走国内镜像 + gh 代理,避免 GitHub 直连超时 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 版本号注入 /api/health:优先取最近的 git tag,没有 tag 时退到短哈希 set "APP_VERSION=dev" for /f "delims=" %%I in ('git describe --tags --always 2^>nul') do set "APP_VERSION=%%I" REM 内部署名从构建机本地文件注入(deploy\signature.local.txt 已 gitignore,不进公开仓库); REM 文件不存在时二进制里也是空的,源码永远不含真实署名。 set "INTERNAL_SIGNATURE=" if exist "..\deploy\signature.local.txt" set /p INTERNAL_SIGNATURE=<"..\deploy\signature.local.txt" if defined INTERNAL_SIGNATURE ( REM 单引号包裹整个 -X:署名里的空格不会被 ldflags 拆开(go 的 ldflags 解析器认单引号) go build -ldflags "-X 'git.yeij.top/AskaEth/Scoreboard/server/internal/version.InternalSignature=%INTERNAL_SIGNATURE%' -X main.version=%APP_VERSION%" -o ..\dist\scoreboard.exe . || exit /b 1 echo internal signature injected ) else ( go build -ldflags "-X main.version=%APP_VERSION%" -o ..\dist\scoreboard.exe . || exit /b 1 echo no internal signature ) cd .. echo === [4/4] console package (electron-builder) === REM 安装器许可页顶部文案由本机署名生成(.nsh 是生成物,已 gitignore) set "SIGNATURE_TEXT=" if exist "deploy\signature.local.txt" set /p SIGNATURE_TEXT=<"deploy\signature.local.txt" > "console\resources\installer-signature.nsh" echo !macro customHeader if defined SIGNATURE_TEXT ( >> "console\resources\installer-signature.nsh" echo !define MUI_LICENSEPAGE_TEXT_TOP "内部署名:%SIGNATURE_TEXT%" ) else ( >> "console\resources\installer-signature.nsh" echo !define MUI_LICENSEPAGE_TEXT_TOP "请阅读并接受许可协议" ) >> "console\resources\installer-signature.nsh" echo !macroend REM win.icon 由 electron-builder 内部调 rcedit 写进 PE 资源; REM 它需要的 winCodeSign / nsis 从 gh-proxy 取,签名关闭。 taskkill /im "Scoreboard Console.exe" /f >nul 2>&1 taskkill /im scoreboard.exe /f >nul 2>&1 REM 部署包根目录要带 rules\ 与 使用说明.txt(devdocs 10 §4.4)。 REM rules\ 由 package.json 的 extraFiles 直接从仓库根拷入; REM 使用说明.txt 是可选文档,只在 docs\ 下存在时才暂存到 console\extra\, REM electron-builder 的 extraFiles 会把该目录内容平铺到部署包根目录。 if not exist "rules" echo 警告:rules\ 不存在,部署包将缺少规则包目录 if not exist "console\extra" mkdir "console\extra" if exist "console\extra\使用说明.txt" del /q "console\extra\使用说明.txt" if exist "docs\使用说明.txt" ( copy /y "docs\使用说明.txt" "console\extra\使用说明.txt" >nul echo 使用说明.txt 已加入部署包(来源:docs\使用说明.txt) ) else ( if exist "docs\使用手册.md" ( REM 文档目录里只有 Markdown 版手册时,按部署包约定的文件名落盘 copy /y "docs\使用手册.md" "console\extra\使用说明.txt" >nul echo 使用说明.txt 已加入部署包(来源:docs\使用手册.md) ) else ( echo docs\ 下没有 使用说明.txt / 使用手册.md,跳过(部署包不含使用说明.txt) ) ) cd console call pnpm install --frozen-lockfile || exit /b 1 call pnpm run dist || exit /b 1 cd .. echo. echo === 构建完成 === echo dist\scoreboard.exe 服务端 echo dist\console\ Console 安装包 + 免安装目录 dir /b dist\console endlocal exit /b 0