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:
- Validates the Definitions graph — CI imports
core_data_updater.mainexactly as Dagster will load it, so a location that cannot import never reaches the cluster. - Builds the container image and pushes it to
ghcr.io/null-capital/core-data-updater, tagged with the immutable commit SHA. - Dispatches
register-dagster-locationto 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:
- Confirm the location loads cleanly in the Dagster UI.
- Launch a manual canary run of a representative job.
- 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 core_data_updater.main — the same
module CI validates and production serves, so what loads locally is what
deploys.