Add Docker image + Gitea CI for Virgo Dev deploy #7

Merged
r merged 1 commits from deploy/docker-virgo-dev into main 2026-07-19 17:12:20 +00:00
Owner

Containerize Hold Slayer as a single image (one FastAPI process serving REST/WS/MCP and its built SvelteKit dashboard) for deployment to Virgo Dev on triton.

  • Dockerfile: 3-stage (node builds the dashboard → python wheels → runtime). Runs from source via pip install -e . so db/database.py resolves alembic.ini (via __file__.parent.parent) and migrations run on boot; the loose top-level modules (main.py, config.py) also require the source layout. pjsua2 left unbuilt (documented stub media) — fine for a mock-SIP deploy.
  • .dockerignore: keep .env and gitignored dashboard artifacts out of the context; the node stage builds a fresh dashboard.
  • CI (.gitea/workflows): single-image Trivy scan + build + push to git.helu.ca/r/hold-slayer (sha / latest-on-main / semver tags), mirroring the Demeter workflow.

Image built + smoke-tested locally on mock SIP: migrations to head, /health 200 (engine=mock/degraded), dashboard served at /, bearer auth on /api/v1 (401→200), /mcp/ reachable.

Merging to main so CI publishes :latest for the virgo hold-slayer/deploy.yml play.

🤖 Generated with Claude Code

Containerize Hold Slayer as a single image (one FastAPI process serving REST/WS/MCP and its built SvelteKit dashboard) for deployment to Virgo Dev on triton. - **Dockerfile**: 3-stage (node builds the dashboard → python wheels → runtime). Runs from source via `pip install -e .` so `db/database.py` resolves `alembic.ini` (via `__file__.parent.parent`) and migrations run on boot; the loose top-level modules (`main.py`, `config.py`) also require the source layout. `pjsua2` left unbuilt (documented stub media) — fine for a mock-SIP deploy. - **.dockerignore**: keep `.env` and gitignored dashboard artifacts out of the context; the node stage builds a fresh dashboard. - **CI** (`.gitea/workflows`): single-image Trivy scan + build + push to `git.helu.ca/r/hold-slayer` (sha / latest-on-main / semver tags), mirroring the Demeter workflow. Image built + smoke-tested locally on mock SIP: migrations to head, `/health` 200 (engine=mock/degraded), dashboard served at `/`, bearer auth on `/api/v1` (401→200), `/mcp/` reachable. Merging to `main` so CI publishes `:latest` for the virgo `hold-slayer/deploy.yml` play. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
r added 1 commit 2026-07-19 17:12:14 +00:00
Containerize Hold Slayer as a single image (one FastAPI process serving
REST/WS/MCP and its built SvelteKit dashboard) for deployment to Virgo Dev
on triton.

- Dockerfile: 3-stage (node builds the dashboard → python wheels → runtime).
  Runs from source via `pip install -e .` so db/database.py resolves
  alembic.ini (via __file__.parent.parent) and migrations run on boot. The
  loose top-level modules (main.py, config.py) also require the source layout.
  pjsua2 is left unbuilt (documented stub media) — fine for a mock-SIP deploy.
- .dockerignore: keep .env and gitignored dashboard build artifacts out of
  the context; the node stage builds a fresh dashboard.
- CI (.gitea/workflows): single-image Trivy scan + build + push to
  git.helu.ca/r/hold-slayer (sha / latest-on-main / semver tags), mirroring
  the Demeter workflow. Requires a PACKAGE_TOKEN Actions secret.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
r merged commit 016d8be71d into main 2026-07-19 17:12:20 +00:00
r deleted branch deploy/docker-virgo-dev 2026-07-19 17:12:20 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: r/hold-slayer#7