2026-07-14 21:47:46 +02:00
|
|
|
@echo off
|
|
|
|
|
setlocal enabledelayedexpansion
|
|
|
|
|
echo ===================================
|
|
|
|
|
echo Eleri - Build, Upload and Notify
|
|
|
|
|
echo ===================================
|
|
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
:: ---- CONFIG - edit these ----
|
2026-07-14 21:47:46 +02:00
|
|
|
set UE_VERSION=5.8
|
|
|
|
|
set PROJECT_PATH=C:\Projects\ProjectEleri\ProjectEleri.uproject
|
|
|
|
|
set PROJECT_NAME=Eleri
|
2026-07-17 23:49:40 +02:00
|
|
|
set OUTPUT_DIR=C:\Projects\ProjectEleri\BUILD
|
2026-07-14 21:47:46 +02:00
|
|
|
set MAX_BUILDS=10
|
|
|
|
|
set UAT_PATH=C:\Program Files\Epic Games\UE_%UE_VERSION%\Engine\Build\BatchFiles\RunUAT.bat
|
|
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
:: ---- STEAM CONFIG - edit these ----
|
|
|
|
|
set STEAMCMD_PATH=C:\Users\adnan\Downloads\steamworks_sdk_161\sdk\tools\ContentBuilder\builder\steamcmd.exe
|
|
|
|
|
set STEAM_USERNAME=adodev
|
|
|
|
|
set STEAM_APP_ID=3528720
|
|
|
|
|
:: Only Shipping gets uploaded to Steam - DebugGame builds are local-only
|
|
|
|
|
set STEAM_DEPOT_SHIPPING=3528721
|
|
|
|
|
:: Folder where generated Steam VDF scripts will be written (temp working files, safe to keep in OUTPUT_DIR)
|
|
|
|
|
set STEAM_VDF_DIR=%OUTPUT_DIR%\steam_vdf
|
|
|
|
|
|
2026-07-14 21:47:46 +02:00
|
|
|
:: ---- ARGUMENTS ----
|
|
|
|
|
set BUILD_VERSION=%1
|
|
|
|
|
set CHANGELOG=%~2
|
|
|
|
|
|
|
|
|
|
:: ---- PROMPT IF MISSING ----
|
|
|
|
|
if "%BUILD_VERSION%"=="" set /p BUILD_VERSION="Build version (e.g. 1.0.0-build.42): "
|
|
|
|
|
if "%CHANGELOG%"=="" set /p CHANGELOG="Changelog / notes (optional, press Enter to skip): "
|
|
|
|
|
|
|
|
|
|
:: ---- STEP SELECTION ----
|
|
|
|
|
echo.
|
|
|
|
|
echo Which steps would you like to run?
|
|
|
|
|
echo 1 - Build only
|
2026-07-17 23:49:40 +02:00
|
|
|
echo 2 - Build + Upload to Steam
|
2026-07-14 21:47:46 +02:00
|
|
|
echo.
|
|
|
|
|
set /p RUN_STEPS="Enter choice (1-2): "
|
2026-07-17 23:49:40 +02:00
|
|
|
if "%RUN_STEPS%"=="" set RUN_STEPS=1
|
|
|
|
|
if "%RUN_STEPS%" LSS "1" set RUN_STEPS=1
|
|
|
|
|
if "%RUN_STEPS%" GTR "2" set RUN_STEPS=1
|
2026-07-14 21:47:46 +02:00
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
:: ---- CONFIG SELECTION ----
|
|
|
|
|
echo.
|
|
|
|
|
echo Which configuration(s) would you like to build?
|
|
|
|
|
echo 1 - DebugGame
|
|
|
|
|
echo 2 - Shipping
|
|
|
|
|
echo 3 - Both
|
|
|
|
|
echo.
|
|
|
|
|
set /p CFG_CHOICE="Enter choice (1-3): "
|
|
|
|
|
if "%CFG_CHOICE%"=="" set CFG_CHOICE=1
|
|
|
|
|
if "%CFG_CHOICE%"=="1" set CONFIGS=DebugGame
|
|
|
|
|
if "%CFG_CHOICE%"=="2" set CONFIGS=Shipping
|
|
|
|
|
if "%CFG_CHOICE%"=="3" set CONFIGS=DebugGame Shipping
|
|
|
|
|
if not defined CONFIGS set CONFIGS=DebugGame
|
2026-07-14 21:47:46 +02:00
|
|
|
|
|
|
|
|
echo.
|
2026-07-17 23:49:40 +02:00
|
|
|
echo Running steps 1 through %RUN_STEPS% for configuration(s): %CONFIGS%
|
|
|
|
|
echo.
|
|
|
|
|
|
|
|
|
|
:: ====================================
|
|
|
|
|
:: MAIN LOOP - one pass per selected config
|
|
|
|
|
:: ====================================
|
|
|
|
|
for %%C in (%CONFIGS%) do (
|
|
|
|
|
call :build_one_config %%C
|
|
|
|
|
if !errorlevel! neq 0 (
|
|
|
|
|
echo ERROR: Pipeline failed for config %%C.
|
|
|
|
|
pause
|
|
|
|
|
exit /b 1
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
echo.
|
|
|
|
|
echo ===================================
|
|
|
|
|
echo All done! (ran steps 1-%RUN_STEPS% for: %CONFIGS%)
|
|
|
|
|
echo ===================================
|
|
|
|
|
pause
|
|
|
|
|
exit /b 0
|
2026-07-14 21:47:46 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
:: ====================================
|
2026-07-17 23:49:40 +02:00
|
|
|
:: SUBROUTINE - build/upload a single config
|
|
|
|
|
:: %1 = config name (DebugGame or Shipping)
|
2026-07-14 21:47:46 +02:00
|
|
|
:: ====================================
|
2026-07-17 23:49:40 +02:00
|
|
|
:build_one_config
|
|
|
|
|
set THIS_CONFIG=%~1
|
|
|
|
|
set BUILD_OUTPUT=%OUTPUT_DIR%\%BUILD_VERSION%\%THIS_CONFIG%
|
|
|
|
|
|
|
|
|
|
:: ---- STEP 1: BUILD ----
|
2026-07-14 21:47:46 +02:00
|
|
|
echo.
|
2026-07-17 23:49:40 +02:00
|
|
|
echo [1/2] Building %PROJECT_NAME% in %THIS_CONFIG% mode...
|
2026-07-14 21:47:46 +02:00
|
|
|
echo.
|
|
|
|
|
call "%UAT_PATH%" BuildCookRun ^
|
|
|
|
|
-project="%PROJECT_PATH%" ^
|
|
|
|
|
-noP4 ^
|
|
|
|
|
-platform=Win64 ^
|
2026-07-17 23:49:40 +02:00
|
|
|
-clientconfig=%THIS_CONFIG% ^
|
2026-07-14 21:47:46 +02:00
|
|
|
-cook ^
|
|
|
|
|
-build ^
|
|
|
|
|
-stage ^
|
|
|
|
|
-pak ^
|
|
|
|
|
-archive ^
|
|
|
|
|
-archivedirectory="%BUILD_OUTPUT%" ^
|
|
|
|
|
-prereqs ^
|
|
|
|
|
-nodebuginfo
|
|
|
|
|
set BUILD_EXIT=%errorlevel%
|
|
|
|
|
echo.
|
|
|
|
|
echo UAT exited with code: %BUILD_EXIT%
|
|
|
|
|
if %BUILD_EXIT% neq 0 (
|
2026-07-17 23:49:40 +02:00
|
|
|
echo ERROR: Build failed for %THIS_CONFIG%!
|
2026-07-14 21:47:46 +02:00
|
|
|
exit /b 1
|
|
|
|
|
)
|
2026-07-17 23:49:40 +02:00
|
|
|
echo Build succeeded for %THIS_CONFIG%!
|
|
|
|
|
echo Build folder: %BUILD_OUTPUT%
|
2026-07-14 21:47:46 +02:00
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
if %RUN_STEPS% EQU 1 exit /b 0
|
2026-07-14 21:47:46 +02:00
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
:: ---- STEP 2: UPLOAD TO STEAM ----
|
|
|
|
|
if /I "%THIS_CONFIG%"=="DebugGame" (
|
|
|
|
|
echo.
|
|
|
|
|
echo DebugGame is local-only - skipping Steam upload for this config.
|
|
|
|
|
exit /b 0
|
|
|
|
|
)
|
2026-07-14 21:47:46 +02:00
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
echo.
|
|
|
|
|
echo [2/2] Uploading %THIS_CONFIG% build to Steam...
|
2026-07-14 21:47:46 +02:00
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
set STEAM_DEPOT=%STEAM_DEPOT_SHIPPING%
|
2026-07-14 21:47:46 +02:00
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
if "%STEAM_DEPOT%"=="" (
|
|
|
|
|
echo ERROR: No Steam depot ID configured for Shipping. Skipping upload.
|
|
|
|
|
exit /b 1
|
2026-07-14 21:47:46 +02:00
|
|
|
)
|
|
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
if not exist "%STEAM_VDF_DIR%" mkdir "%STEAM_VDF_DIR%"
|
|
|
|
|
set APP_VDF=%STEAM_VDF_DIR%\app_build_%THIS_CONFIG%.vdf
|
|
|
|
|
set DEPOT_VDF=%STEAM_VDF_DIR%\depot_build_%THIS_CONFIG%.vdf
|
|
|
|
|
|
|
|
|
|
:: Generate depot script - points at the build output directly
|
|
|
|
|
(
|
|
|
|
|
echo "DepotBuildConfig"
|
|
|
|
|
echo {
|
|
|
|
|
echo "DepotID" "%STEAM_DEPOT%"
|
2026-07-18 00:32:42 +02:00
|
|
|
echo "ContentRoot" "%BUILD_OUTPUT%\Windows"
|
2026-07-17 23:49:40 +02:00
|
|
|
echo "FileMapping"
|
|
|
|
|
echo {
|
|
|
|
|
echo "LocalPath" "*"
|
|
|
|
|
echo "DepotPath" "."
|
|
|
|
|
echo "recursive" "1"
|
|
|
|
|
echo }
|
|
|
|
|
echo }
|
|
|
|
|
) > "%DEPOT_VDF%"
|
|
|
|
|
|
|
|
|
|
:: Generate app build script
|
|
|
|
|
(
|
|
|
|
|
echo "AppBuild"
|
|
|
|
|
echo {
|
|
|
|
|
echo "AppID" "%STEAM_APP_ID%"
|
|
|
|
|
echo "Desc" "%PROJECT_NAME% %BUILD_VERSION% [%THIS_CONFIG%] - %CHANGELOG%"
|
2026-07-18 00:32:42 +02:00
|
|
|
echo "ContentRoot" "%BUILD_OUTPUT%\Windows"
|
2026-07-17 23:49:40 +02:00
|
|
|
echo "BuildOutput" "%STEAM_VDF_DIR%\output_%THIS_CONFIG%"
|
|
|
|
|
echo "Depots"
|
|
|
|
|
echo {
|
|
|
|
|
echo "%STEAM_DEPOT%" "%DEPOT_VDF%"
|
|
|
|
|
echo }
|
|
|
|
|
echo }
|
|
|
|
|
) > "%APP_VDF%"
|
|
|
|
|
|
|
|
|
|
"%STEAMCMD_PATH%" +login %STEAM_USERNAME% +run_app_build "%APP_VDF%" +quit
|
|
|
|
|
set STEAM_EXIT=%errorlevel%
|
|
|
|
|
if %STEAM_EXIT% neq 0 (
|
|
|
|
|
echo ERROR: Steam upload failed for %THIS_CONFIG% ^(exit code %STEAM_EXIT%^).
|
|
|
|
|
exit /b 1
|
|
|
|
|
)
|
|
|
|
|
echo Steam upload succeeded for %THIS_CONFIG%!
|
2026-07-14 21:47:46 +02:00
|
|
|
|
2026-07-17 23:49:40 +02:00
|
|
|
exit /b 0
|