param( [Parameter(Mandatory = $false)] [string]$CaddyExe = "caddy", [Parameter(Mandatory = $false)] [string]$CaddyfilePath = ".\deploy\Caddyfile", [Parameter(Mandatory = $false)] [string]$ProxyBaseUrl = "http://localhost:8080", [Parameter(Mandatory = $false)] [int]$WarmupSeconds = 2 ) $ErrorActionPreference = "Stop" function Stop-CaddyIfRunning($proc) { if ($null -ne $proc -and -not $proc.HasExited) { try { Stop-Process -Id $proc.Id -Force } catch {} } } Write-Host "Step 15 Local Proxy Test" Write-Host "Caddy: $CaddyExe" Write-Host "Caddyfile: $CaddyfilePath" Write-Host "ProxyBaseUrl: $ProxyBaseUrl" if (-not (Test-Path $CaddyfilePath)) { throw "Caddyfile not found at: $CaddyfilePath" } if (-not (Test-Path ".\deploy\healthcheck.ps1")) { throw "healthcheck.ps1 not found at: .\deploy\healthcheck.ps1" } # Ensure local upstream default matches typical backend port if (-not $env:BACKEND_UPSTREAM_LOCAL -or $env:BACKEND_UPSTREAM_LOCAL.Trim().Length -eq 0) { $env:BACKEND_UPSTREAM_LOCAL = "localhost:8000" } $caddyProc = $null try { Write-Host "Starting Caddy..." $caddyProc = Start-Process -FilePath $CaddyExe -ArgumentList @( "run", "--config", $CaddyfilePath, "--adapter", "caddyfile" ) -PassThru -WindowStyle Hidden Start-Sleep -Seconds $WarmupSeconds Write-Host "Running healthcheck via proxy..." & .\deploy\healthcheck.ps1 -BaseUrl $ProxyBaseUrl if ($LASTEXITCODE -ne 0) { throw "healthcheck.ps1 failed with exit code $LASTEXITCODE" } Write-Host "OK Step 15 local proxy test passed." } catch { Write-Host "FAIL Step 15 local proxy test: $($_.Exception.Message)" throw } finally { Write-Host "Stopping Caddy..." Stop-CaddyIfRunning $caddyProc }