Skip to content

Deployment

How it works

This repo deploys as a pointer, not a copy. No source, dbt project, or manifest ever leaves the repo — the orchestration deployment serves this location’s image over gRPC.

On every push to main, the deploy.yml workflow:

  1. Validates the Definitions graph — CI imports betting_combat.main exactly as Dagster will load it, so a location that cannot import never reaches the cluster.
  2. Builds the container image and pushes it to ghcr.io/null-capital/betting-combat, tagged with the immutable commit SHA.
  3. Dispatches register-dagster-location to the orchestration repo with the image repository, the SHA tag, and the module path. Orchestration validates, renders the location into its registry, and commits — the Dagster deployment then serves this image over gRPC.

The first rollout is born stopped

A freshly registered location starts with nothing running. The intended sequence:

  1. Confirm the location loads cleanly in the Dagster UI.
  2. Launch a manual canary run of a representative job.
  3. Enable only the schedules and sensors you actually intend to run.

Nothing materializes until you turn it on — a bad first registration can never start writing data on its own.

Rolling forward and back

Every registration points at an immutable SHA. To roll back, re-register a known-good SHA (re-run the deploy workflow from the old commit, or trigger it manually via GitHub Actions → “Run workflow” on deploy.yml). The orchestration registry history is the audit trail of what served when.

Local parity

./run local starts dagster dev -m betting_combat.main — the same module CI validates and production serves, so what loads locally is what deploys.

Grafana dashboards

deploy/ is a dashboards-only Helm chart — no Deployment, Service or secrets; Dagster runs the code. The platform’s ArgoCD generator onboards it from deploy/argocd/betting-combat.yaml (born with auto-sync off: sync it once in ArgoCD, then flip autoSync: true). To ship a dashboard:

  1. Export the dashboard JSON from Grafana into deploy/dashboards/<name>.json.
  2. Set monitoring.dashboard.enabled: true in deploy/values.yaml.
  3. Merge — Grafana’s sidecar loads it into the betting-combat folder (override with monitoring.dashboard.folder).