Files
Nutrio/build.bat

95 lines
2.3 KiB
Batchfile

@echo off
setlocal EnableExtensions
set "ROOT=%~dp0"
if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%"
set "DIST_DIR=%ROOT%\dist"
set "DIST_PUBLIC=%DIST_DIR%\public"
set "DIST_APP=%DIST_PUBLIC%"
set "FRONTEND_DIR=%ROOT%\frontend"
set "BACKEND_DIR=%ROOT%\backend"
echo [1/6] Cleaning dist...
if exist "%DIST_DIR%" (
rmdir /S /Q "%DIST_DIR%"
if exist "%DIST_DIR%" (
echo ERROR: Failed to remove "%DIST_DIR%".
exit /b 1
)
)
mkdir "%DIST_DIR%" >nul 2>&1 || (
echo ERROR: Failed to create "%DIST_DIR%".
exit /b 1
)
echo [2/6] Building frontend...
pushd "%FRONTEND_DIR%" >nul 2>&1 || (
echo ERROR: Frontend directory not found: "%FRONTEND_DIR%".
exit /b 1
)
echo - npm install
call npm install
if errorlevel 1 (
popd >nul
echo ERROR: npm install failed.
exit /b 1
)
echo - npm run build
call npm run build
if errorlevel 1 (
popd >nul
echo ERROR: npm run build failed.
exit /b 1
)
if not exist "%FRONTEND_DIR%\dist" (
popd >nul
echo ERROR: Frontend build output not found at "%FRONTEND_DIR%\dist".
exit /b 1
)
popd >nul
echo [3/6] Copy backend root to dist/...
call :RunRobocopy "%BACKEND_DIR%" "%DIST_DIR%" /E /R:2 /W:1 /NFL /NDL /NJH /NJS /NP ^
/XD "%BACKEND_DIR%\.git" "%BACKEND_DIR%\.vscode" "%BACKEND_DIR%\tests" "%BACKEND_DIR%\node_modules" "%BACKEND_DIR%\frontend" "%BACKEND_DIR%\dist" ^
/XF ".env" ".env.*"
if errorlevel 1 exit /b 1
echo [4/6] Copy frontend/dist to dist/public...
call :RunRobocopy "%FRONTEND_DIR%\dist" "%DIST_APP%" /E /R:2 /W:1 /NFL /NDL /NJH /NJS /NP
if errorlevel 1 exit /b 1
echo [5/6] Applying .env.production (if present)...
set "ENV_NOTE=No backend/.env.production found"
if exist "%BACKEND_DIR%\.env.production" (
copy /Y "%BACKEND_DIR%\.env.production" "%DIST_DIR%\.env" >nul
if errorlevel 1 (
echo ERROR: Failed to copy backend/.env.production to dist/.env.
exit /b 1
)
set "ENV_NOTE=Copied backend/.env.production to dist/.env"
)
echo [6/6] Summary
echo - Frontend build: OK
echo - Backend root copied to: "%DIST_DIR%" (excluding excluded dirs)
echo - Frontend assets copied to: "%DIST_APP%"
echo - Env: %ENV_NOTE%
echo - DocumentRoot should be: "%DIST_PUBLIC%"
echo - Frontend app is served from: "%DIST_APP%"
echo DONE "%DIST_DIR%"
exit /b 0
:RunRobocopy
robocopy %*
if errorlevel 8 (
echo ERROR: robocopy failed with exit code %ERRORLEVEL%.
exit /b 1
)
exit /b 0