Files
AetherForge/devrun.bat
AetherForge 615034554c
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
One-click LAUNCH.bat: pull, UI build, tunnel, and server start.
Operators double-click LAUNCH for git pull, npm build, data prep, cloudflared, and AetherForge or dev miner-server; devrun shares launch-prep.
2026-06-09 04:03:02 -07:00

255 lines
8.5 KiB
Batchfile

@echo off
setlocal EnableExtensions EnableDelayedExpansion
title AetherForge Control Server (dev)
cd /d "%~dp0"
set "ROOT=%CD%"
if /i "%~1"=="release" (
set "AETHERFORGE_RELEASE=1"
echo Release mode: Garble obfuscation default ON for new forges.
)
:: Remove corrupt empty Go file that breaks server builds (accidental placeholder).
if exist "server\internal\ollama\main.go" (
for %%F in ("server\internal\ollama\main.go") do if %%~zF==0 del "server\internal\ollama\main.go"
)
echo.
echo ==============================================================
echo AetherForge - Dev Build + Control Server
echo ==============================================================
echo This window stays open and shows live server logs.
echo Press Ctrl+C to stop the server.
echo Portable/USB: use LAUNCH.bat instead of devrun.bat.
echo ==============================================================
echo.
:: Common tool paths (Go/Node installs + user Go bin for garble)
set "PATH=C:\Program Files\Go\bin;%USERPROFILE%\go\bin;C:\Program Files\nodejs;%PATH%"
:: ============================================================
:: STEP 1: Go
:: ============================================================
echo [1/5] Checking Go...
where go >nul 2>nul
if errorlevel 1 goto install_go
echo Go found:
call go version
goto go_ready
:install_go
echo Go not found. Checking for existing installation...
if exist "C:\Program Files\Go\bin\go.exe" (
echo Found Go at C:\Program Files\Go\bin
set "PATH=C:\Program Files\Go\bin;%PATH%"
goto go_ready
)
echo Downloading and installing Go...
if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
set "GO_ARCH=amd64"
) else (
set "GO_ARCH=386"
)
set "GO_VERSION=1.22.2"
set "GO_URL=https://go.dev/dl/go%GO_VERSION%.windows-%GO_ARCH%.msi"
set "GO_MSI=%TEMP%\go-installer.msi"
powershell -NoProfile -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%GO_URL%' -OutFile '%GO_MSI%' }"
if errorlevel 1 (
echo ERROR: Failed to download Go. Get it from https://go.dev/dl/
goto fatal_exit
)
msiexec /i "%GO_MSI%" /quiet /norestart
if errorlevel 1 (
echo ERROR: Go install failed. Run this script as Administrator.
goto fatal_exit
)
del "%GO_MSI%" 2>nul
set "PATH=C:\Program Files\Go\bin;%USERPROFILE%\go\bin;%PATH%"
echo Go installed.
:go_ready
:: Garble + go-winres (Forge pipeline tools ??? failure is non-fatal)
echo [1.5/5] Checking Forge tools (Garble, go-winres)...
where garble >nul 2>nul
if errorlevel 1 (
echo Installing garble via go install...
go install mvdan.cc/garble@latest
if errorlevel 1 echo WARNING: Garble install failed; Forge obfuscation may be unavailable.
)
where go-winres >nul 2>nul
if errorlevel 1 (
echo Installing go-winres via go install...
go install github.com/tc-hib/go-winres@v0.3.1
if errorlevel 1 echo WARNING: go-winres install failed; Fusion icon patch may need network on first forge.
)
:: ============================================================
:: STEP 2: Node.js
:: ============================================================
echo [2/5] Checking Node.js...
where node >nul 2>nul
if errorlevel 1 goto install_node
echo Node.js found:
call node --version
goto node_ready
:install_node
echo Node.js not found. Checking for existing installation...
if exist "C:\Program Files\nodejs\node.exe" (
echo Found Node.js at C:\Program Files\nodejs
set "PATH=C:\Program Files\nodejs;%PATH%"
goto node_ready
)
echo Downloading and installing Node.js...
set "NODE_VERSION=20.12.2"
set "NODE_URL=https://nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%-x64.msi"
set "NODE_MSI=%TEMP%\node-installer.msi"
powershell -NoProfile -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%NODE_URL%' -OutFile '%NODE_MSI%' }"
if errorlevel 1 (
echo WARNING: Node.js download failed. Frontend build will be skipped.
set "SKIP_FRONTEND=1"
goto node_ready
)
msiexec /i "%NODE_MSI%" /quiet /norestart
if errorlevel 1 (
echo WARNING: Node.js install failed. Frontend build will be skipped.
set "SKIP_FRONTEND=1"
goto node_ready
)
set "PATH=C:\Program Files\nodejs;%PATH%"
del "%NODE_MSI%" 2>nul
echo Node.js installed.
:node_ready
:: ============================================================
:: STEP 2b: Git pull + UI build (shared with LAUNCH.bat)
:: ============================================================
if defined SKIP_FRONTEND (
echo.
echo Pulling latest ^(UI build skipped - Node.js unavailable^)...
git -C "%ROOT%" pull origin main 2>nul
if errorlevel 1 echo Note: git pull skipped or failed.
) else (
echo.
echo Pulling latest + building UI...
set "PREP=%ROOT%\scripts\launch-prep.bat"
if exist "%PREP%" (
call "%PREP%" "%ROOT%"
if errorlevel 1 goto fatal_exit
) else (
echo WARNING: scripts\launch-prep.bat missing - skipping pull/UI prep.
)
)
:: ============================================================
:: STEP 3: Data directories
:: ============================================================
echo [3/5] Preparing data directories...
if not exist "data\builds" mkdir "data\builds"
if not exist "data\logs" mkdir "data\logs"
if not exist "data\blueprints" mkdir "data\blueprints"
if not exist "data\preps" mkdir "data\preps"
if not exist "bin" mkdir "bin"
echo OK: data\ and bin\
:: ============================================================
:: STEP 5: Server binary
:: ============================================================
echo [5/5] Building control server...
cd /d "%ROOT%\server"
go mod download
if errorlevel 1 echo WARNING: go mod download had issues; continuing...
echo go build...
go build -ldflags="-s -w" -o "..\bin\miner-server.exe" .
if errorlevel 1 (
cd /d "%ROOT%"
echo ERROR: Server build failed.
goto fatal_exit
)
cd /d "%ROOT%"
if defined AETHERFORGE_RELEASE (
echo Release mode active ??? set AETHERFORGE_RELEASE=1 for server process.
)
if not exist "bin\miner-server.exe" (
echo ERROR: bin\miner-server.exe was not created.
goto fatal_exit
)
echo Server binary: bin\miner-server.exe
:: ============================================================
:: LAUNCH (foreground ??? logs stay in this window)
:: ============================================================
echo.
echo Stopping any previous miner-server.exe...
taskkill /F /IM miner-server.exe >nul 2>nul
timeout /t 1 /nobreak >nul
set "SERVER_PORT=8989"
set "CONFIG_FILE=%ROOT%\data\config.json"
if exist "%CONFIG_FILE%" (
for /f "usebackq delims=" %%P in (`powershell -NoProfile -Command "try { $j = Get-Content -Raw '%CONFIG_FILE%' | ConvertFrom-Json; if ($j.port) { $j.port } } catch { }"`) do (
if not "%%P"=="" set "SERVER_PORT=%%P"
)
)
set "LAN_IP=localhost"
for /f "usebackq delims=" %%I in (`powershell -NoProfile -Command "(Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.IPAddress -notlike '127.*' -and $_.PrefixOrigin -ne 'WellKnown' } | Select-Object -First 1 -ExpandProperty IPAddress) 2>$null"`) do set "LAN_IP=%%I"
echo.
echo ==============================================================
echo STARTING CONTROL SERVER
echo ==============================================================
echo Dashboard: http://localhost:%SERVER_PORT%
echo LAN: http://%LAN_IP%:%SERVER_PORT%
echo Agents WS: ws://%LAN_IP%:%SERVER_PORT%/ws/agent
echo Data: %ROOT%\data\
echo.
echo Live logs appear below. Ctrl+C stops the server.
echo ==============================================================
echo.
:: Open browser after a short delay (server starts in this window)
start "" cmd /c "timeout /t 3 /nobreak >nul && start http://localhost:%SERVER_PORT%/"
echo [Server] miner-server.exe -data "%ROOT%\data" ^(port %SERVER_PORT% from config^)
if defined AETHERFORGE_RELEASE set AETHERFORGE_RELEASE=1
echo.
.\bin\miner-server.exe -data "%ROOT%\data"
set "EXITCODE=!ERRORLEVEL!"
echo.
if "!EXITCODE!"=="0" (
echo [Server] Stopped normally.
) else (
echo [Server] Exited with code !EXITCODE!.
echo If port %SERVER_PORT% was in use, close other miner-server windows and run again.
)
echo.
goto end_pause
:fatal_exit
echo.
echo ==============================================================
echo LAUNCH FAILED ??? fix the errors above and run devrun.bat again.
echo ==============================================================
echo.
:end_pause
echo.
echo NOTE: USB bundle unchanged until pack-usb.bat is run.
pause
endlocal