@echo off setlocal EnableDelayedExpansion title Campus - upload website only REM ============================================================================ REM Ships ONLY the public website (Server\...\Website\) to the VPS. No build, no REM restart: Kestrel serves these files straight off disk, so the new pages are REM live on the next page load. REM REM What it does: REM 1. copies Website\ to a temp folder REM 2. cache-busts app.js / data.js / style.css ?v= tags in every .html with a REM fresh stamp (same trick PackageServer.ps1 uses, so browsers don't keep REM the old app.js for an hour) REM 3. pscp -r's it into /opt/campus/Website REM REM Use UploadUpdate.bat for C# changes, PackageServer.ps1 when Data\ changes. REM ============================================================================ set "ROOT=%~dp0" set "SITE=%ROOT%Server\2025-RecRoom-Server-E12354-main\Website" set "OUT=%TEMP%\campus-siteupload" set "VPS=root@50.114.179.17" set "REMOTE=/opt/campus" echo. echo === Campus website deploy (no restart) ==================================== echo. for %%T in (pscp.exe plink.exe powershell.exe) do ( where %%T >nul 2>&1 || (echo [x] %%T is not on PATH. & goto :fail) ) if not exist "%SITE%\index.html" (echo [x] Cannot find %SITE% & goto :fail) if not exist "%ROOT%Password.txt" (echo [x] Cannot find %ROOT%Password.txt & goto :fail) set "PW=" for /f "usebackq delims=" %%p in ("%ROOT%Password.txt") do if not defined PW set "PW=%%p" if not defined PW (echo [x] Password.txt is empty. & goto :fail) REM ---- 1/3 stage ------------------------------------------------------------- echo [1/3] Staging Website\ ... if exist "%OUT%" rmdir /s /q "%OUT%" mkdir "%OUT%" >nul 2>&1 xcopy "%SITE%" "%OUT%\" /e /i /q /y >nul if errorlevel 1 (echo [x] Copy failed. & goto :fail) REM ---- 2/3 cache-bust -------------------------------------------------------- echo [2/3] Cache-busting script/style tags ... powershell -NoProfile -ExecutionPolicy Bypass -Command ^ "$tag = Get-Date -Format 'yyyyMMdd-HHmmss'; $n = 0;" ^ "Get-ChildItem '%OUT%' -Filter *.html -Recurse | ForEach-Object {" ^ " $h = [IO.File]::ReadAllText($_.FullName);" ^ " $new = [regex]::Replace($h, '((?:app|data)\.js|style\.css)\?v=[A-Za-z0-9._-]+', ('$1?v=' + $tag));" ^ " if ($new -ne $h) { [IO.File]::WriteAllText($_.FullName, $new, [Text.UTF8Encoding]::new($false)); $n++ } };" ^ "Write-Host (' bumped ' + $n + ' page(s) to v=' + $tag)" REM ---- 3/3 upload ------------------------------------------------------------ echo [3/3] Uploading to %VPS%:%REMOTE%/Website ... plink -batch -pw %PW% %VPS% "mkdir -p %REMOTE%/Website" pscp -batch -r -pw %PW% "%OUT%\*" "%VPS%:%REMOTE%/Website/" if errorlevel 1 (echo. & echo [x] Upload FAILED. & goto :fail) echo. echo === DONE - the site is live, no restart needed. Hard-refresh if a page looks stale. echo. pause exit /b 0 :fail echo. echo === FAILED. echo. pause exit /b 1