$ErrorActionPreference = "Stop" $VPS = "deploy@204.168.156.179" $MVN = "C:\Users\Anwender\IdeaProjects\Claude\bot-service-index\apix-mvp" $QUARKUS_APP = "$MVN\apix-registry\target\quarkus-app" $VPS_DEST = "/opt/apix/apix-registry/target/quarkus-app" Set-Location $MVN Write-Host "Building registry..." mvn clean package -DskipTests -pl apix-registry -am -q Write-Host "Syncing quarkus-app to VPS (rsync — only changed files)..." # cwrsync requires /cygdrive/c/... path format $rsyncSrc = $QUARKUS_APP -replace '^([A-Za-z]):\\', '/cygdrive/$1/' -replace '\\', '/' rsync -az --delete ` "${rsyncSrc}/" ` "${VPS}:${VPS_DEST}/" Write-Host "Rebuilding Docker image on VPS..." ssh $VPS "cd /opt/apix && docker build -f infra/Dockerfile.registry -t apix-registry:latest . -q" Write-Host "Rolling restart: registry-a..." ssh $VPS "cd /opt/apix && docker compose -f infra/docker-compose.yml --env-file .env up -d --no-deps registry-a" Write-Host "Waiting for registry-a to become healthy..." $elapsed = 0 do { Start-Sleep -Seconds 5; $elapsed += 5 $status = ssh $VPS "docker inspect infra-registry-a-1 --format '{{.State.Health.Status}}' 2>/dev/null || echo missing" Write-Host " registry-a: $status ($elapsed s)" } while ($status -ne "healthy" -and $elapsed -lt 120) if ($status -ne "healthy") { Write-Host "ERROR: registry-a did not become healthy — aborting, registry-b untouched" ssh $VPS "docker logs infra-registry-a-1 --tail 20 2>&1" exit 1 } Write-Host "Restarting registry-b..." ssh $VPS "cd /opt/apix && docker compose -f infra/docker-compose.yml --env-file .env up -d --no-deps registry-b" Write-Host "Waiting for registry-b..." $elapsed = 0 do { Start-Sleep -Seconds 5; $elapsed += 5 $statusB = ssh $VPS "docker inspect infra-registry-b-1 --format '{{.State.Health.Status}}' 2>/dev/null || echo missing" Write-Host " registry-b: $statusB ($elapsed s)" } while ($statusB -ne "healthy" -and $elapsed -lt 120) Write-Host "registry-a: $status registry-b: $statusB" Write-Host "Done. https://api-index.org/"