Files

199 lines
6.5 KiB
Batchfile
Raw Permalink Normal View History

2026-08-27 10:50:08 -06:00
@echo off
setlocal EnableDelayedExpansion
title AVM INSTALLER - STRICT COMPATIBILITY CHECK
:: Enable ANSI Escapes
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do set "ESC=%%b"
:: Color Palette
set "C_RESET=%ESC%[0m"
set "C_BOLD=%ESC%[1m"
set "C_CYAN=%ESC%[36m"
set "C_BLUE=%ESC%[34m"
set "C_GREEN=%ESC%[32m"
set "C_RED=%ESC%[31m"
set "C_YELLOW=%ESC%[33m"
set "C_GRAY=%ESC%[90m"
set "C_WHITE=%ESC%[97m"
cd /d "%~dp0"
:: --- CONFIGURATION ---
set "NODE_REQ=v22.11.0"
set "NODE_URL=https://nodejs.org/dist/v22.11.0/node-v22.11.0-x64.msi"
set "NODE_INSTALLER=node-v22.11.0-x64.msi"
set "PYTHON_REQ=3.10.0"
set "PYTHON_URL=https://www.python.org/ftp/python/3.10.0/python-3.10.0-amd64.exe"
set "PYTHON_INSTALLER=python-3.10.0-amd64.exe"
set "NODE_GOOD=0"
set "PYTHON_GOOD=0"
set "NODE_STATUS=UNKNOWN"
set "PYTHON_STATUS=UNKNOWN"
:INIT
cls
echo %C_GRAY%
echo AVM INSTALLER ^& ENVIRONMENT FIX v2.1
echo %C_RESET%
echo %C_GRAY%------------------------------------------------------------%C_RESET%
echo [%C_BLUE%i%C_RESET%] Checking system environment...
:: --- 1. CHECK NODE.JS ---
node -v >nul 2>&1
if %errorlevel% neq 0 (
set "NODE_STATUS=%C_RED%NOT INSTALLED%C_RESET%"
) else (
for /f %%i in ('node -v') do set CURRENT_NODE=%%i
if "!CURRENT_NODE!"=="%NODE_REQ%" (
set "NODE_STATUS=%C_GREEN%OK [!CURRENT_NODE!]%C_RESET%"
set "NODE_GOOD=1"
) else (
set "NODE_STATUS=%C_RED%MISMATCH [!CURRENT_NODE!]%C_RESET%"
)
)
:: --- 2. CHECK PYTHON ---
python --version >nul 2>&1
if %errorlevel% neq 0 (
set "PYTHON_STATUS=%C_RED%NOT INSTALLED%C_RESET%"
) else (
for /f "tokens=2" %%i in ('python --version 2^>^&1') do set CURRENT_PYTHON=%%i
if "!CURRENT_PYTHON!"=="%PYTHON_REQ%" (
set "PYTHON_STATUS=%C_GREEN%OK [!CURRENT_PYTHON!]%C_RESET%"
set "PYTHON_GOOD=1"
) else (
set "PYTHON_STATUS=%C_RED%MISMATCH [!CURRENT_PYTHON!]%C_RESET%"
)
)
:: --- DISPLAY STATUS TABLE ---
echo.
echo COMPONENT REQUIRED CURRENT STATUS
echo %C_BLUE%------------- -------------- ---------------------------------%C_RESET%
echo Node.js %NODE_REQ% !NODE_STATUS!
echo Python %PYTHON_REQ% !PYTHON_STATUS!
echo %C_BLUE%------------- -------------- ---------------------------------%C_RESET%
echo.
:: --- DECISION LOGIC ---
if "!NODE_GOOD!"=="1" if "!PYTHON_GOOD!"=="1" (
echo.
echo [%C_GREEN%V%C_RESET%] %C_BOLD%SUCCESS:%C_RESET% All system requirements are met.
echo %C_GRAY%------------------------------------------------------------%C_RESET%
echo.
echo [%C_BLUE%i%C_RESET%] Proceeding with installation...
timeout /t 2 >nul
goto :INSTALL_PROJECT
)
:: --- USER CONSENT PROMPT ---
echo [%C_YELLOW%*%C_RESET%] %C_BOLD%WARNING:%C_RESET% Incompatible versions detected!
echo.
echo The Installer can perform an %C_CYAN%AUTO-FIX%C_RESET%:
echo 1. %C_RED%UNINSTALL%C_RESET% old versions (Silently)
echo 2. %C_GREEN%INSTALL%C_RESET% correct versions (Silently)
echo.
set /p "USER_CONSENT= %C_BOLD%Proceed with AUTO-FIX? (Y/N):%C_RESET% "
if /i not "!USER_CONSENT!"=="Y" (
echo.
echo [%C_RED%X%C_RESET%] %C_BOLD%ABORTED:%C_RESET% No changes were made.
pause
exit /b
)
:: --- AUTO-REMEDIATION START ---
cls
echo.
echo %C_BOLD%STEP 1: Cleaning Environment%C_RESET%
echo %C_GRAY%------------------------------------------------------------%C_RESET%
if "!NODE_GOOD!"=="0" (
echo [%C_YELLOW%*%C_RESET%] Removing old Node.js versions...
wmic product where "Name like 'Node.js%%'" call uninstall /nointeractive >nul 2>&1
echo [%C_GREEN%V%C_RESET%] Node.js cleanup complete.
)
if "!PYTHON_GOOD!"=="0" (
echo [%C_YELLOW%*%C_RESET%] Removing old Python versions...
wmic product where "Name like 'Python 3%%'" call uninstall /nointeractive >nul 2>&1
echo [%C_GREEN%V%C_RESET%] Python cleanup complete.
)
echo.
echo %C_BOLD%STEP 2: Installing Dependencies%C_RESET%
echo %C_GRAY%------------------------------------------------------------%C_RESET%
if "!NODE_GOOD!"=="0" (
echo [%C_BLUE%i%C_RESET%] Downloading Node.js %C_WHITE%%NODE_REQ%%C_RESET%...
powershell -Command "Invoke-WebRequest -Uri '%NODE_URL%' -OutFile '%NODE_INSTALLER%'"
if exist "%NODE_INSTALLER%" (
echo [%C_YELLOW%*%C_RESET%] Installing Node.js silently...
start /wait msiexec /i %NODE_INSTALLER% /qn /norestart
echo [%C_GREEN%V%C_RESET%] Node.js installed successfully.
) else (
echo [%C_RED%X%C_RESET%] %C_BOLD%ERROR:%C_RESET% Failed to download Node.js installer.
)
)
if "!PYTHON_GOOD!"=="0" (
echo [%C_BLUE%i%C_RESET%] Downloading Python %C_WHITE%%PYTHON_REQ%%C_RESET%...
powershell -Command "Invoke-WebRequest -Uri '%PYTHON_URL%' -OutFile '%PYTHON_INSTALLER%'"
if exist "%PYTHON_INSTALLER%" (
echo [%C_YELLOW%*%C_RESET%] Installing Python silently (All Users + PATH)...
start /wait %PYTHON_INSTALLER% /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
echo [%C_GREEN%V%C_RESET%] Python installed successfully.
) else (
echo [%C_RED%X%C_RESET%] %C_BOLD%ERROR:%C_RESET% Failed to download Python installer.
)
)
echo.
echo %C_GRAY%------------------------------------------------------------%C_RESET%
echo [%C_GREEN%V%C_RESET%] %C_BOLD%REPAIR COMPLETE%C_RESET%
echo %C_GRAY%------------------------------------------------------------%C_RESET%
echo.
echo [%C_BLUE%i%C_RESET%] Please restart the script to verify changes and continue installation.
pause
exit /b
:INSTALL_PROJECT
echo.
echo %C_BOLD%STEP 3: Installing Project Dependencies%C_RESET%
echo %C_GRAY%------------------------------------------------------------%C_RESET%
set "CURRENT_DIR=%~dp0"
:: 1. STUB
if exist "%CURRENT_DIR%stub" (
echo [%C_BLUE%i%C_RESET%] Installing STUB dependencies...
cd /d "%CURRENT_DIR%stub"
call npm i
)
:: 2. GUI
if exist "%CURRENT_DIR%gui" (
echo [%C_BLUE%i%C_RESET%] Installing GUI dependencies...
cd /d "%CURRENT_DIR%gui"
call npm install --save-dev electron-builder
)
:: 3. BUILD
if exist "%CURRENT_DIR%build" (
echo [%C_BLUE%i%C_RESET%] Installing BUILD dependencies...
cd /d "%CURRENT_DIR%build"
call npm install pkg --g
call npm i
)
echo.
echo %C_GRAY%------------------------------------------------------------%C_RESET%
echo [%C_GREEN%V%C_RESET%] %C_BOLD%INSTALLATION COMPLETE%C_RESET%
echo %C_GRAY%------------------------------------------------------------%C_RESET%
pause