@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