major improvements
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
for %%I in ("%SCRIPT_DIR%..") do set "ROOT=%%~fI\"
|
||||
set "SERVER_SRC=%ROOT%Overlord-Server"
|
||||
set "CLIENT_SRC=%ROOT%Overlord-Client"
|
||||
set "RELEASE_DIR=%ROOT%release"
|
||||
|
||||
if not exist "%SERVER_SRC%\package.json" (
|
||||
echo [error] Overlord-Server not found at: %SERVER_SRC%
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if not exist "%CLIENT_SRC%\go.mod" (
|
||||
echo [error] Overlord-Client not found at: %CLIENT_SRC%
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
where bun >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo [error] bun was not found in PATH.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
where go >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo [error] go was not found in PATH.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [1/10] Building server bundle and web assets...
|
||||
pushd "%SERVER_SRC%"
|
||||
call bun install
|
||||
if errorlevel 1 goto :err
|
||||
call bun run build
|
||||
if errorlevel 1 goto :err
|
||||
echo [2/10] Compiling Windows production executable...
|
||||
call bun run build:prod:win
|
||||
if errorlevel 1 goto :err
|
||||
echo [3/10] Compiling Linux production executable...
|
||||
call bun run build:prod:linux
|
||||
if errorlevel 1 goto :err
|
||||
popd
|
||||
|
||||
echo [4/10] Skipping prebuilt client binaries ^(prod package exports client source only^)
|
||||
|
||||
echo [5/10] Preparing release folder...
|
||||
if exist "%RELEASE_DIR%" rmdir /s /q "%RELEASE_DIR%"
|
||||
mkdir "%RELEASE_DIR%"
|
||||
if errorlevel 1 goto :err
|
||||
|
||||
echo [6/10] Copying compiled server executables...
|
||||
copy /Y "%SERVER_SRC%\dist\overlord-server.exe" "%RELEASE_DIR%\overlord-server.exe" >nul
|
||||
if errorlevel 1 goto :err
|
||||
copy /Y "%SERVER_SRC%\dist\overlord-server-linux-x64" "%RELEASE_DIR%\overlord-server-linux-x64" >nul
|
||||
if errorlevel 1 goto :err
|
||||
|
||||
echo [6b/10] Copying sharp native module for runtime resolution...
|
||||
if exist "%SERVER_SRC%\node_modules\sharp" (
|
||||
robocopy "%SERVER_SRC%\node_modules\sharp" "%RELEASE_DIR%\node_modules\sharp" /E >nul
|
||||
if errorlevel 8 goto :robocopy_err
|
||||
)
|
||||
if exist "%SERVER_SRC%\node_modules\@img" (
|
||||
robocopy "%SERVER_SRC%\node_modules\@img" "%RELEASE_DIR%\node_modules\@img" /E >nul
|
||||
if errorlevel 8 goto :robocopy_err
|
||||
)
|
||||
|
||||
echo [7/10] Exporting Overlord-Client source for runtime builds...
|
||||
robocopy "%CLIENT_SRC%" "%RELEASE_DIR%\Overlord-Client" /E /XD build .git .vscode >nul
|
||||
if errorlevel 8 goto :robocopy_err
|
||||
|
||||
echo [8/10] Copying required public web assets...
|
||||
robocopy "%SERVER_SRC%\public" "%RELEASE_DIR%\public" /E >nul
|
||||
if errorlevel 8 goto :robocopy_err
|
||||
|
||||
echo [9/10] Minifying public JS, CSS, and HTML assets...
|
||||
pushd "%SERVER_SRC%"
|
||||
call bun run scripts/minify-public.ts --dir "%RELEASE_DIR%\public"
|
||||
if errorlevel 1 goto :err
|
||||
popd
|
||||
|
||||
echo [10/10] Creating runner scripts...
|
||||
|
||||
(
|
||||
echo @echo off
|
||||
echo setlocal
|
||||
echo set "ROOT=%%~dp0"
|
||||
echo if not defined HOST set HOST=0.0.0.0
|
||||
echo if not defined PORT set PORT=5173
|
||||
echo if not defined LOG_LEVEL set LOG_LEVEL=info
|
||||
echo if not defined NODE_ENV set NODE_ENV=production
|
||||
echo if not defined OVERLORD_ROOT set OVERLORD_ROOT=%%ROOT%%
|
||||
echo pushd "%%ROOT%%"
|
||||
echo call "%%ROOT%%overlord-server.exe"
|
||||
echo popd
|
||||
echo endlocal
|
||||
) > "%RELEASE_DIR%\start-prod-release.bat"
|
||||
|
||||
> "%RELEASE_DIR%\start-prod-release.sh" echo #!/usr/bin/env bash
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo set -euo pipefail
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo ROOT="${0%%/*}"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo [ "$ROOT" = "$0" ] ^&^& ROOT="."
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo cd "$ROOT"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo ROOT="$PWD"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo export HOST="${HOST:-0.0.0.0}"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo export PORT="${PORT:-5173}"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo export LOG_LEVEL="${LOG_LEVEL:-info}"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo export NODE_ENV="${NODE_ENV:-production}"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo export OVERLORD_ROOT="${OVERLORD_ROOT:-$ROOT}"
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo chmod +x "$ROOT/overlord-server-linux-x64" ^|^| true
|
||||
>> "%RELEASE_DIR%\start-prod-release.sh" echo "$ROOT/overlord-server-linux-x64"
|
||||
|
||||
echo.
|
||||
echo [ok] Production package created:
|
||||
echo %RELEASE_DIR%
|
||||
echo [ok] Compiled server executables:
|
||||
echo %RELEASE_DIR%\overlord-server.exe
|
||||
echo %RELEASE_DIR%\overlord-server-linux-x64
|
||||
echo [ok] Web assets:
|
||||
echo %RELEASE_DIR%\public
|
||||
echo.
|
||||
echo Run this from the package folder:
|
||||
echo start-prod-release.bat
|
||||
echo Or on Linux:
|
||||
echo chmod +x start-prod-release.sh overlord-server-linux-x64 ^&^& ./start-prod-release.sh
|
||||
endlocal
|
||||
exit /b 0
|
||||
|
||||
:robocopy_err
|
||||
echo [error] Copy operation failed ^(robocopy exit code %errorlevel%^)
|
||||
popd >nul 2>&1
|
||||
endlocal
|
||||
exit /b 1
|
||||
|
||||
:err
|
||||
popd >nul 2>&1
|
||||
echo [error] Build/package failed.
|
||||
endlocal
|
||||
exit /b 1
|
||||
Reference in New Issue
Block a user