- Pool preset checkboxes with failover in Calibrate and Forge - Tier 1/2 UX: setup banner, forge next worker, LAN defaults, blueprint prompt - USB: auto-install forge tools, seed config.json, sync LAUNCH.bat
213 lines
7.0 KiB
Batchfile
213 lines
7.0 KiB
Batchfile
@echo off
|
|
setlocal EnableExtensions EnableDelayedExpansion
|
|
title AetherForge Control Deck
|
|
cd /d "%~dp0"
|
|
|
|
:: Portable deck root = folder that contains AetherForge.exe (repo usb\ or copied USB drive)
|
|
if exist "%CD%\AetherForge.exe" (
|
|
set "ROOT=!CD!"
|
|
) else if exist "%CD%\usb\AetherForge.exe" (
|
|
cd /d "%CD%\usb"
|
|
set "ROOT=!CD!"
|
|
) else (
|
|
echo.
|
|
echo ERROR: AetherForge.exe not found.
|
|
echo Expected next to this script, or in usb\AetherForge.exe
|
|
echo Run pack-usb.bat from the repo to build the portable bundle.
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
if not exist "%ROOT%\AetherForge.exe" (
|
|
echo ERROR: AetherForge.exe missing in %ROOT%
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo ================================================================
|
|
echo AetherForge - Portable Control Deck
|
|
echo ================================================================
|
|
echo Deck: %ROOT%
|
|
echo.
|
|
|
|
:: ----------------------------------------------------------------
|
|
:: 1. Locate Go - prefer bundled toolchain, fall back to system Go
|
|
:: ----------------------------------------------------------------
|
|
set "BUNDLED_GO=%ROOT%\toolchain\go\bin\go.exe"
|
|
set "GO_BIN="
|
|
|
|
if exist "%ROOT%\toolchain\go" if not exist "%BUNDLED_GO%" (
|
|
echo [Go] Incomplete toolchain folder — removing broken install...
|
|
rd /s /q "%ROOT%\toolchain\go" 2>nul
|
|
)
|
|
|
|
if exist "%BUNDLED_GO%" (
|
|
echo [Go] Using bundled toolchain: %ROOT%\toolchain\go
|
|
set "GO_BIN=%ROOT%\toolchain\go\bin\go.exe"
|
|
set "GOROOT=%ROOT%\toolchain\go"
|
|
set "PATH=%ROOT%\toolchain\go\bin;%ROOT%\toolchain\gopath\bin;%PATH%"
|
|
goto go_ready
|
|
)
|
|
|
|
:: Check if Go is installed system-wide
|
|
where go >nul 2>nul
|
|
if not errorlevel 1 (
|
|
echo [Go] Using system Go installation.
|
|
set "GO_BIN=go"
|
|
goto go_ready
|
|
)
|
|
|
|
:: Go not found - extract bundled zip or download once
|
|
echo [Go] Not found. Setting up portable Go toolchain...
|
|
echo Saved under: %ROOT%\toolchain\go\
|
|
echo.
|
|
|
|
if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
|
|
set "GO_ARCH=amd64"
|
|
) else if /i "%PROCESSOR_ARCHITECTURE%"=="ARM64" (
|
|
set "GO_ARCH=arm64"
|
|
) else (
|
|
set "GO_ARCH=386"
|
|
)
|
|
set "GO_VERSION=1.26.3"
|
|
set "GO_ZIP=go%GO_VERSION%.windows-%GO_ARCH%.zip"
|
|
set "GO_PACK_ZIP=%ROOT%\toolchain\pack\%GO_ZIP%"
|
|
set "GO_DEST=%ROOT%\toolchain\%GO_ZIP%"
|
|
|
|
if not exist "%ROOT%\toolchain" mkdir "%ROOT%\toolchain"
|
|
if not exist "%ROOT%\toolchain\pack" mkdir "%ROOT%\toolchain\pack"
|
|
|
|
if exist "%GO_PACK_ZIP%" (
|
|
echo [Go] Extracting bundled %GO_ZIP%...
|
|
copy /y "%GO_PACK_ZIP%" "%GO_DEST%" >nul
|
|
) else (
|
|
echo [Go] Downloading %GO_ZIP% from go.dev...
|
|
set "GO_URL=https://go.dev/dl/%GO_ZIP%"
|
|
powershell -NoProfile -Command "& { [Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%GO_URL%' -OutFile '%GO_DEST%' }"
|
|
if errorlevel 1 (
|
|
echo.
|
|
echo ERROR: Could not download Go. Copy toolchain\go\ from a PC that has it,
|
|
echo or add toolchain\pack\%GO_ZIP% to this folder, then re-run LAUNCH.bat.
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
)
|
|
|
|
if not exist "%GO_DEST%" (
|
|
echo ERROR: Go archive missing after copy/download.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo [Go] Extracting toolchain...
|
|
powershell -NoProfile -Command "Expand-Archive -LiteralPath '%GO_DEST%' -DestinationPath '%ROOT%\toolchain' -Force"
|
|
if errorlevel 1 (
|
|
echo ERROR: Extraction failed. Check free disk space and path: %ROOT%\toolchain
|
|
pause
|
|
exit /b 1
|
|
)
|
|
del "%GO_DEST%" 2>nul
|
|
|
|
if not exist "%BUNDLED_GO%" (
|
|
echo ERROR: Extraction failed — %BUNDLED_GO% not found.
|
|
echo Delete toolchain\go and toolchain\pack, then re-run LAUNCH.bat.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
set "GO_BIN=%ROOT%\toolchain\go\bin\go.exe"
|
|
set "GOROOT=%ROOT%\toolchain\go"
|
|
set "PATH=%ROOT%\toolchain\go\bin;%ROOT%\toolchain\gopath\bin;%PATH%"
|
|
echo [Go] Toolchain ready.
|
|
|
|
:go_ready
|
|
|
|
:: ----------------------------------------------------------------
|
|
:: 2. Pin all Go caches to the USB so module downloads travel with you
|
|
:: ----------------------------------------------------------------
|
|
set "GOPATH=%ROOT%\toolchain\gopath"
|
|
set "GOMODCACHE=%ROOT%\toolchain\gopath\pkg\mod"
|
|
set "GOCACHE=%ROOT%\toolchain\gocache"
|
|
set "GOENV=off"
|
|
|
|
:: ----------------------------------------------------------------
|
|
:: 3. Install optional Forge tools if missing (non-fatal)
|
|
:: ----------------------------------------------------------------
|
|
if /i not "%AF_INSTALL_TOOLS%"=="0" (
|
|
if not exist "%ROOT%\toolchain\gopath\bin\garble.exe" (
|
|
echo [Tools] Installing garble...
|
|
"%GO_BIN%" install mvdan.cc/garble@latest
|
|
if errorlevel 1 echo [Tools] WARN: garble install failed.
|
|
)
|
|
|
|
if not exist "%ROOT%\toolchain\gopath\bin\go-winres.exe" (
|
|
echo [Tools] Installing go-winres...
|
|
"%GO_BIN%" install github.com/tc-hib/go-winres@v0.3.1
|
|
if errorlevel 1 echo [Tools] WARN: go-winres install failed.
|
|
)
|
|
) else (
|
|
echo [Tools] Auto-install disabled (AF_INSTALL_TOOLS=0).
|
|
)
|
|
|
|
:: ----------------------------------------------------------------
|
|
:: 4. Ensure data directories exist
|
|
:: ----------------------------------------------------------------
|
|
if not exist "%ROOT%\data\builds" mkdir "%ROOT%\data\builds"
|
|
if not exist "%ROOT%\data\logs" mkdir "%ROOT%\data\logs"
|
|
if not exist "%ROOT%\data\spread-kits" mkdir "%ROOT%\data\spread-kits"
|
|
if not exist "%ROOT%\data\uploads" mkdir "%ROOT%\data\uploads"
|
|
if not exist "%ROOT%\data\blueprints" mkdir "%ROOT%\data\blueprints"
|
|
if not exist "%ROOT%\data\preps" mkdir "%ROOT%\data\preps"
|
|
|
|
:: ----------------------------------------------------------------
|
|
:: 5. Detect LAN IP for display
|
|
:: ----------------------------------------------------------------
|
|
set "SERVER_PORT=8989"
|
|
for /f "tokens=2 delims=:" %%I in ('ipconfig ^| findstr /i "IPv4" ^| findstr /v "127.0.0.1"') do (
|
|
set "LAN_IP=%%I"
|
|
goto lan_done
|
|
)
|
|
set "LAN_IP=localhost"
|
|
:lan_done
|
|
set "LAN_IP=%LAN_IP: =%"
|
|
|
|
:: ----------------------------------------------------------------
|
|
:: 6. Kill any stale server process
|
|
:: ----------------------------------------------------------------
|
|
taskkill /F /IM AetherForge.exe >nul 2>nul
|
|
ping -n 2 127.0.0.1 >nul
|
|
|
|
echo.
|
|
echo ================================================================
|
|
echo STARTING CONTROL DECK
|
|
echo ================================================================
|
|
echo Local: http://localhost:%SERVER_PORT%
|
|
echo LAN: http://%LAN_IP%:%SERVER_PORT%
|
|
echo Data: %ROOT%\data\
|
|
echo.
|
|
echo Login credentials printed below.
|
|
echo Press Ctrl+C to stop.
|
|
echo ================================================================
|
|
echo.
|
|
|
|
:: Open browser after short delay
|
|
start "" powershell -NoProfile -WindowStyle Hidden -Command "Start-Sleep -Seconds 3; Start-Process 'http://localhost:%SERVER_PORT%/'"
|
|
|
|
:: Launch server
|
|
"%ROOT%\AetherForge.exe" -port %SERVER_PORT% -data "%ROOT%\data"
|
|
set "EC=!ERRORLEVEL!"
|
|
|
|
echo.
|
|
if "!EC!"=="0" (
|
|
echo [Server] Stopped normally.
|
|
) else (
|
|
echo [Server] Exited with code !EC!.
|
|
echo If port %SERVER_PORT% is in use, close other AetherForge windows and retry.
|
|
)
|
|
|
|
echo.
|
|
pause
|
|
endlocal
|