Argus0.1.5

Reference

Deployment

This page is deliberately short: the canonical deployment documentation lives in the repo, next to the code it deploys, and this site does not duplicate it (a runbook copied into a docs site is a runbook that drifts).

Document Path in the repo What it is
Azure portal runbook infra/deploy-azure.md The complete first-time deployment, step by step, through the Azure Portal UI — identity, Postgres, Service Bus, Key Vault, Container Apps, ADO wiring, smoke tests, operations
Infrastructure as code infra/ (infra/README.md) Bicep modules codifying the same resources for repeatable deployments

The two paths

Portal runbook (infra/deploy-azure.md) — the reference for what each resource is and why. It walks through: the Entra service principal that is both the ADO reviewer identity and the Service Bus principal; PostgreSQL Flexible Server + migrations; a Service Bus namespace with a sessions-enabled queue (the checkbox that is immutable after creation); Key Vault holding every secret; two Container Apps (always-on ingress, KEDA-scaled worker) from the single Argus image; the three ADO service hooks; branch policy; and the four smoke tests that define Phase-1 acceptance. It also carries the operations material: pause/resume, DLQ inspection, KQL log queries, credential rotation, migration-on-upgrade.

Bicep (infra/) — the "next releases" path: one az deployment group create instead of an afternoon of clicking. It codifies the resources but not the steps ARM cannot reach — Entra app registration, ADO-side wiring (users, permissions, service hooks, branch policy), image build/push, migrations, and the rules publish all stay manual; infra/README.md gives the exact ordering, including the two-pass bootstrap a brand-new stack needs for Key Vault references.

What deployment amounts to

One immutable container image (tagged semver and git sha — never latest) runs every component by CMD override:

node bin/dist/argus-ingress.js    # webhook front door (default CMD)
node bin/dist/argus-worker.js     # queue consumer
node bin/dist/argus-migrate.js    # DB migrations (one-off)
node bin/dist/argus-rules.js …    # rules publish / drift
node bin/dist/argus-evals.js      # eval harness
node bin/dist/argus-docs.js       # this documentation site

Secrets live in Key Vault and reach the apps as env vars via managed-identity secret references; every env var name is grounded in the configuration reference — if it is not there, the code does not read it.

Deploying this docs site

The site you are reading deploys from the same image: an optional third Container App with CMD overridden to node bin/dist/argus-docs.js, target port 4100, ingress internal-only (or external if you want it public), no secrets and no configuration required — see the "docs site" subsection in infra/deploy-azure.md (step 7f). It is portal-only for now: the Bicep modules codify the ingress and worker apps, not this optional one. Locally, docker compose up serves it on port 4100 alongside the mock loop.