Files
autofirmer-expanded/setup-windows.bat
T
Brandon LiandClaude Opus 5 8e64d8a34f Find Git and Node when they are installed but off PATH
Git for Windows only adds itself to PATH when "Git from the command line"
is selected during install, and an already-open Command Prompt keeps its
old PATH regardless — so a correct install still failed the check.

Probe the standard install locations before giving up, and when that also
fails, say which directories were searched and call out the just-installed
case explicitly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 16:50:58 -05:00

223 lines
7.6 KiB
Batchfile

@echo off
setlocal EnableExtensions
title AutoFirmer - Windows setup
REM ============================================================================
REM AutoFirmer instance setup for Windows.
REM
REM Standalone: drop this file anywhere and run it. It clones the repo into a
REM subfolder next to itself, installs, builds, and points the instance at the
REM master dashboard. Safe to re-run - it pulls and rebuilds instead of cloning.
REM ============================================================================
set "REPO_URL=https://git.juicerroom.com/senofy/autofirmer-expanded.git"
set "DEFAULT_MASTER=https://master.juicerroom.com"
set "TARGET=%~dp0autofirmer"
echo.
echo ============================================
echo AutoFirmer - Windows setup
echo ============================================
echo.
REM ---------------------------------------------------------------- git check
REM Git for Windows only adds itself to PATH if "Git from the command line" was
REM chosen at install time, and an already-open cmd keeps its old PATH anyway.
REM So probe the usual install homes before giving up.
where git >nul 2>&1
if not errorlevel 1 goto :git_ok
if exist "%ProgramFiles%\Git\cmd\git.exe" set "PATH=%ProgramFiles%\Git\cmd;%PATH%"
if exist "%ProgramFiles(x86)%\Git\cmd\git.exe" set "PATH=%ProgramFiles(x86)%\Git\cmd;%PATH%"
if exist "%LOCALAPPDATA%\Programs\Git\cmd\git.exe" set "PATH=%LOCALAPPDATA%\Programs\Git\cmd;%PATH%"
where git >nul 2>&1
if not errorlevel 1 (
echo [ok] git ^(found off PATH, added for this run^)
goto :git_done
)
echo [X] Git not found on PATH, and not in any of:
echo %ProgramFiles%\Git\cmd
echo %LOCALAPPDATA%\Programs\Git\cmd
echo.
echo If Git is NOT installed: https://git-scm.com/download/win
echo If you JUST installed it: close this window, open a new Command
echo Prompt and run the script again - an open window keeps its old PATH.
echo If it is installed elsewhere: check with where git
goto :fail
:git_ok
echo [ok] git
:git_done
REM --------------------------------------------------------------- node check
where node >nul 2>&1
if not errorlevel 1 goto :node_found
if exist "%ProgramFiles%\nodejs\node.exe" set "PATH=%ProgramFiles%\nodejs;%PATH%"
if exist "%LOCALAPPDATA%\Programs\nodejs\node.exe" set "PATH=%LOCALAPPDATA%\Programs\nodejs;%PATH%"
where node >nul 2>&1
if not errorlevel 1 goto :node_found
echo [X] Node.js not found on PATH, and not in any of:
echo %ProgramFiles%\nodejs
echo %LOCALAPPDATA%\Programs\nodejs
echo.
echo Install Node 22 LTS from https://nodejs.org/ then re-run.
echo If you JUST installed it, open a NEW Command Prompt first.
goto :fail
:node_found
for /f "tokens=* usebackq" %%v in (`node -p "process.versions.node"`) do set "NODEVER=%%v"
for /f "tokens=1 delims=." %%m in ("%NODEVER%") do set "NODEMAJOR=%%m"
echo [ok] node v%NODEVER%
REM better-sqlite3 ships prebuilt binaries only for released Node ABIs. On a
REM newer major it falls back to node-gyp, which needs Visual Studio Build
REM Tools - a long, confusing failure if it is not installed.
if %NODEMAJOR% GEQ 23 goto :node_warn
goto :node_ok
:node_warn
echo.
echo [!] Node %NODEMAJOR% is newer than better-sqlite3's prebuilt binaries.
echo Install may try to compile from source and fail without Visual
echo Studio Build Tools. Node 22 LTS is the safe choice here.
echo.
set "GOON="
set /p "GOON= Continue anyway? [y/N] "
if /i not "%GOON%"=="y" goto :fail
:node_ok
REM ------------------------------------------------------------------- python
where python >nul 2>&1
if errorlevel 1 (
echo [--] python not found - the dashboard will still work.
echo Needed only for the clicker ^(clicker\runner.py^).
set "HAVE_PY=0"
) else (
echo [ok] python
set "HAVE_PY=1"
)
REM ------------------------------------------------------------------- prompts
echo.
set "MASTER_URL="
set /p "MASTER_URL= Master dashboard URL [%DEFAULT_MASTER%]: "
if "%MASTER_URL%"=="" set "MASTER_URL=%DEFAULT_MASTER%"
set "INSTANCE="
set /p "INSTANCE= Instance name [%COMPUTERNAME%]: "
if "%INSTANCE%"=="" set "INSTANCE=%COMPUTERNAME%"
echo.
echo Installing to: %TARGET%
echo.
REM -------------------------------------------------------------- clone / pull
if exist "%TARGET%\.git" (
echo [1/5] Existing checkout found - pulling latest...
pushd "%TARGET%"
git pull --ff-only
if errorlevel 1 (
popd
echo [X] git pull failed. Resolve local changes and re-run.
goto :fail
)
popd
) else (
echo [1/5] Cloning %REPO_URL% ...
git clone "%REPO_URL%" "%TARGET%"
if errorlevel 1 (
echo [X] Clone failed. Check network access to git.juicerroom.com.
goto :fail
)
)
pushd "%TARGET%"
REM ------------------------------------------------------------------- install
echo.
echo [2/5] Installing npm dependencies ^(this takes a few minutes^)...
REM playwright is declared but unreferenced anywhere in the source; skipping its
REM browser download saves several hundred MB and a lot of time.
set "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1"
call npm install
if errorlevel 1 (
echo.
echo [X] npm install failed.
echo If the error mentions node-gyp, MSBuild, or better_sqlite3.cpp,
echo the native module could not find a prebuilt binary. Either switch
echo to Node 22 LTS, or install "Desktop development with C++" from the
echo Visual Studio Build Tools installer.
popd
goto :fail
)
REM --------------------------------------------------------------------- build
echo.
echo [3/5] Building...
call npm run build
if errorlevel 1 (
echo [X] Build failed.
popd
goto :fail
)
REM ------------------------------------------------------------------ settings
echo.
echo [4/5] Writing instance settings...
node scripts\seed-settings.js "%MASTER_URL%" "%INSTANCE%"
if errorlevel 1 (
echo [X] Could not write settings to autotrader.sqlite.
popd
goto :fail
)
REM ------------------------------------------------------ python deps (option)
if "%HAVE_PY%"=="1" (
echo.
echo [5/5] Installing clicker Python dependencies...
python -m pip install --quiet --disable-pip-version-check -r clicker\requirements.txt
if errorlevel 1 (
echo [!] pip install failed - the dashboard still works, the clicker will not.
)
) else (
echo.
echo [5/5] Skipping Python dependencies ^(python not found^).
)
REM ---------------------------------------------------------------- start file
> "%~dp0start-autofirmer.bat" (
echo @echo off
echo title AutoFirmer - %INSTANCE%
echo cd /d "%TARGET%"
echo echo Dashboard starting on http://localhost:3000
echo call npm run start
echo pause
)
popd
echo.
echo ============================================
echo Done.
echo ============================================
echo.
echo Instance name : %INSTANCE%
echo Reporting to : %MASTER_URL%
echo Installed in : %TARGET%
echo.
echo Start it with : start-autofirmer.bat
echo Dashboard at : http://localhost:3000
echo.
echo Still manual:
echo - Load the Chrome extension: chrome://extensions, enable Developer
echo mode, "Load unpacked", select %TARGET%\extension
echo - Add your firm credentials on the dashboard's Settings page
echo - Run the clicker when needed: python clicker\runner.py
echo.
pause
exit /b 0
:fail
echo.
echo Setup did not complete.
echo.
pause
exit /b 1