Some checks failed
CI / check (push) Has been cancelled
Capture uncommitted solver robustness work (regularization, domain errors, linear solver lifecycle, tube DP/MSH), web workbench updates, and synced BMAD skills across IDE agent folders before starting BPHX pressure-drop. Co-authored-by: Cursor <cursoragent@cursor.com>
101 lines
4.4 KiB
PowerShell
101 lines
4.4 KiB
PowerShell
# Entropyk dev launcher — robust, idempotent.
|
|
# Starts the Rust API server (port 3030) and the Next.js UI (port 3000),
|
|
# kills any stale instances first, waits for both to be reachable.
|
|
|
|
$ErrorActionPreference = "Continue"
|
|
$workspace = "D:\dev1405\Entropyk"
|
|
$uiDir = "$workspace\apps\web"
|
|
$apiLog = "$workspace\server.log"
|
|
$uiLog = "$workspace\apps\web\next-dev.log"
|
|
|
|
function Stop-Port($port) {
|
|
Get-NetTCPConnection -LocalPort $port -ErrorAction SilentlyContinue | ForEach-Object {
|
|
try { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue } catch {}
|
|
}
|
|
}
|
|
|
|
function Wait-Http($url, $timeoutSec = 60) {
|
|
$deadline = (Get-Date).AddSeconds($timeoutSec)
|
|
while ((Get-Date) -lt $deadline) {
|
|
try {
|
|
$r = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 3
|
|
if ($r.StatusCode -lt 500) { return $true }
|
|
} catch {}
|
|
Start-Sleep -Seconds 1
|
|
}
|
|
return $false
|
|
}
|
|
|
|
Write-Host "=== Entropyk launcher ===" -ForegroundColor Cyan
|
|
|
|
# 1. Kill anything stale on 3030 and 3000
|
|
Write-Host "[1/5] Killing stale processes on :3030 and :3000..." -ForegroundColor Yellow
|
|
Get-CimInstance Win32_Process | Where-Object {
|
|
$_.Name -in @("ui-server.exe") -or
|
|
($_.CommandLine -match "next dev" -and $_.CommandLine -match "apps.web") -or
|
|
($_.CommandLine -match "cargo.*entropyk-demo.*ui-server")
|
|
} | ForEach-Object {
|
|
Write-Host " killing PID $($_.ProcessId) ($($_.Name))" -ForegroundColor DarkGray
|
|
try { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue } catch {}
|
|
}
|
|
Stop-Port 3030
|
|
Stop-Port 3000
|
|
Start-Sleep -Seconds 2
|
|
|
|
# 2. Build the API server (debug = ~10s)
|
|
Write-Host "[2/5] Building Rust API server..." -ForegroundColor Yellow
|
|
$build = Start-Process -FilePath "cargo" -ArgumentList "build","--package","entropyk-demo","--bin","ui-server" -WorkingDirectory $workspace -PassThru -NoNewWindow -Wait
|
|
if ($build.ExitCode -ne 0) {
|
|
Write-Host " BUILD FAILED (exit $($build.ExitCode))" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
Write-Host " build OK" -ForegroundColor Green
|
|
|
|
# 3. Start Rust API server (detached, with log redirect)
|
|
Write-Host "[3/5] Starting Rust API server on :3030..." -ForegroundColor Yellow
|
|
Remove-Item $apiLog -Force -ErrorAction SilentlyContinue
|
|
$apiProc = Start-Process -FilePath "$workspace\target\debug\ui-server.exe" `
|
|
-WorkingDirectory $workspace `
|
|
-RedirectStandardOutput $apiLog `
|
|
-RedirectStandardError "$workspace\server-err.log" `
|
|
-PassThru -WindowStyle Hidden
|
|
Write-Host " PID $($apiProc.Id), waiting for health..." -ForegroundColor DarkGray
|
|
|
|
if (-not (Wait-Http "http://localhost:3030/api/health" 30)) {
|
|
Write-Host " API server failed to start! Log:" -ForegroundColor Red
|
|
Get-Content $apiLog -Tail 20 -ErrorAction SilentlyContinue
|
|
exit 1
|
|
}
|
|
Write-Host " API server UP on :3030" -ForegroundColor Green
|
|
|
|
# 4. Start Next.js dev server
|
|
Write-Host "[4/5] Starting Next.js dev server on :3000..." -ForegroundColor Yellow
|
|
Remove-Item $uiLog -Force -ErrorAction SilentlyContinue
|
|
$uiProc = Start-Process -FilePath "cmd" -ArgumentList "/c","npm run dev > `"$uiLog`" 2>&1" `
|
|
-WorkingDirectory $uiDir `
|
|
-PassThru -WindowStyle Hidden
|
|
Write-Host " PID $($uiProc.Id), waiting for UI..." -ForegroundColor DarkGray
|
|
|
|
if (-not (Wait-Http "http://localhost:3000" 60)) {
|
|
Write-Host " UI failed to start! Log:" -ForegroundColor Red
|
|
Get-Content $uiLog -Tail 20 -ErrorAction SilentlyContinue
|
|
exit 1
|
|
}
|
|
Write-Host " UI UP on :3000" -ForegroundColor Green
|
|
|
|
# 5. Status
|
|
Write-Host "[5/5] Final status:" -ForegroundColor Yellow
|
|
try { $api = Invoke-WebRequest "http://localhost:3030/api/health" -UseBasicParsing -TimeoutSec 3; Write-Host " API :3030 -> HTTP $($api.StatusCode)" -ForegroundColor Green } catch { Write-Host " API :3030 -> DOWN" -ForegroundColor Red }
|
|
try { $ui = Invoke-WebRequest "http://localhost:3000" -UseBasicParsing -TimeoutSec 3; Write-Host " UI :3000 -> HTTP $($ui.StatusCode)" -ForegroundColor Green } catch { Write-Host " UI :3000 -> DOWN" -ForegroundColor Red }
|
|
|
|
Write-Host ""
|
|
Write-Host "Both servers running." -ForegroundColor Green
|
|
Write-Host " UI: http://localhost:3000" -ForegroundColor White
|
|
Write-Host " API: http://localhost:3030/api/health" -ForegroundColor White
|
|
Write-Host ""
|
|
Write-Host "Logs:" -ForegroundColor DarkGray
|
|
Write-Host " API: $apiLog" -ForegroundColor DarkGray
|
|
Write-Host " UI: $uiLog" -ForegroundColor DarkGray
|
|
Write-Host ""
|
|
Write-Host "Open http://localhost:3000 in your browser." -ForegroundColor Cyan
|