Staging runbook (Issue #20)
Mål
Staging-miljø for WPP i Proxmox LXC, så release-klar kode kan deployes og smoke-testes sikkert.
Miljø
- LXC: CT 143 (wpp-staging)
- App path: /opt/wpp-staging/app
- Service: wpp-staging.service
- Health endpoint: GET /healthz
- Database: MySQL (staging må ikke bruge SQLite, issue #133)
- Aktuel MVP UI-path: legacy host/player UI (
USE_SPA_UI=false)
MVP env-kontrakt
Staging skal mindst have følgende release-relevante env vars sat:
DB_ENGINE=django.db.backends.mysqlCHANNEL_REDIS_HOST+CHANNEL_REDIS_PORTUSE_SPA_UI=falseWPP_SPA_ASSET_BASE=/static/frontend/angular/browserWPP_SPA_ASSET_VERSION=<release-tag eller sha>
USE_SPA_UI=true er ikke del af den primære MVP release-gate. Det hører til separat cutover-verifikation.
Verifikation
Kør fra devops-shell med Proxmox-adgang:
ssh proxmox-lan "sudo -n pct status 143"
ssh proxmox-lan "sudo -n pct exec 143 -- systemctl is-active wpp-staging.service"
ssh proxmox-lan "sudo -n pct exec 143 -- curl -fsS http://127.0.0.1:8000/healthz"
Forventet:
- CT er running
- service er active
- healthz returnerer JSON med ok=true
Smoke-suite skriver nu et gameplay-artifact som JSON under /opt/wpp-staging/app/artifacts/smoke/ (kan overrides via ARTIFACT_DIR/ARTIFACT_FILE).
Før manuel UI-smoke anbefales følgende bootstrap på staging-app'en:
python manage.py bootstrap_mvp
Det sikrer en host-bruger og aktiv demo-kategori/spørgsmål uden ad hoc admin-oprettelse.
For den automatiske MVP bootstrap + smoke artifact flow bruges den kanoniske kommando:
./infra/staging/run_mvp_smoke.sh
Kommandoen kører i staging-CT via Proxmox, loader staging-env, kører bootstrap_mvp, og derefter smoke_staging --artifact ....
Som default håndhæver den MVP-pathen USE_SPA_UI=false. Brug kun ALLOW_SPA_CUTOVER=1 ved separat SPA-cutover.
For release-lignende "én kommando" execution bruges wrapperen:
./infra/staging/deploy_and_smoke_staging.sh [ref] [artifact-path]
Efter deploy validerer scriptet, at DB_ENGINE ikke er django.db.backends.sqlite3 før migrations køres.
Deploy-scriptet bruger en release-candidate mappe og promoverer først til /opt/wpp-staging/app efter succesfuld migrate. Det reducerer schema/code drift ved afbrudte deploys (issue #130) og understøtter release-readiness gate (issue #90).
Deploy (canonical execution context)
Deploy skal altid køres via Proxmox host over SSH (ikke fra lokal coder-shell med direkte sudo pct).
Officiel kommando:
./infra/staging/deploy_staging.sh [ref]
Anbefalet release-wrapper:
./infra/staging/deploy_and_smoke_staging.sh [ref] [artifact-path]
Scriptet bruger default PROXMOX_HOST=proxmox-lan og kører sudo -n pct exec på hosten.
Eksempler:
./infra/staging/deploy_staging.sh
./infra/staging/deploy_staging.sh v0.3.0
PROXMOX_HOST=proxmox-prod ./infra/staging/deploy_staging.sh main
./infra/staging/deploy_and_smoke_staging.sh main
./infra/staging/deploy_and_smoke_staging.sh v0.3.0 /opt/wpp-staging/app/artifacts/smoke/release-smoke.json
Smoke (canonical execution context)
MVP smoke skal køres via Proxmox host over SSH, ligesom deploy:
./infra/staging/run_mvp_smoke.sh
Eksempler:
./infra/staging/run_mvp_smoke.sh
./infra/staging/run_mvp_smoke.sh /opt/wpp-staging/app/artifacts/smoke/manual-smoke.json
PROXMOX_HOST=proxmox-prod CT_ID=222 ./infra/staging/run_mvp_smoke.sh
ALLOW_SPA_CUTOVER=1 ./infra/staging/run_mvp_smoke.sh
Policy-kobling
Før deploy:
- Bekræft at tester ikke er aktiv (ingen aktiv smoke-run).
- Kør helst
./infra/staging/deploy_and_smoke_staging.shfor release-kandidater. - Hvis wrapper ikke bruges: deploy til staging og kør derefter
./infra/staging/run_mvp_smoke.sh. - Bekræft MVP UI-smoke på legacy UI (
/lobby/ui/host+/lobby/ui/player). - Først derefter må release-tag oprettes (se docs/RELEASE_POLICY.md).