Dagster Upload
This guide shows how to run your dbt Core project with Dagster (using the dagster-dbt integration) and automatically upload the resulting artifacts to Euno after every successful build.
Euno's dbt Core integration is orchestrator-agnostic: it only needs your dbt artifacts (manifest.json, catalog.json, run_results.json, and optionally semantic_manifest.json) delivered through the two-step prepare-upload flow. Dagster is therefore fully compatible — it is responsible only for running dbt and ordering the upload after the build. The same upload logic used in the Python, GitHub Actions, and Prefect guides applies here.
Prerequisites
Python 3.9+
A dbt Core project you already run with Dagster (
dagster+dagster-dbt)Euno trigger secret and endpoint URL for your dbt source
pip install "dagster" "dagster-dbt" "dbt-core" "dbt-<your-adapter>" "requests"Replace <your-adapter> with your warehouse adapter, e.g. dbt-snowflake, dbt-bigquery, dbt-redshift, or dbt-databricks.
Configuration
Provide these as environment variables (recommended) so secrets stay out of code:
export EUNO_ENDPOINT_URL="https://api.app.euno.ai/accounts/YOUR_ACCOUNT_ID/integrations/YOUR_INTEGRATION_ID/prepare-upload"
export EUNO_TOKEN="your_trigger_secret_here" # Bearer token from your dbt source settings
export DBT_PROJECT_DIR="/path/to/your/dbt/project"
export DBT_PROFILES_DIR="/path/to/your/dbt/profiles" # optionalHow it works
The example defines three things:
euno_dbt_assets— a@dbt_assetsdefinition that runsdbt build(producingmanifest.jsonandrun_results.json) and thendbt docs generate(producingcatalog.json, which Euno requires).euno_artifacts_upload— an asset thatdepson the dbt assets, so it runs only after a successful build. It zips the artifacts fromtarget/and uploads them to Euno.A job + daily schedule wiring the two together.
The upload is the same two steps used everywhere in Euno's dbt Core integration:
Step 1 – prepare-upload:
POSTthe zip filename to your endpoint with the Bearer token and receive a short-lived signed URL.Step 2 – upload:
PUTthe zip to that signed URL.
The helper handles both
prepare-uploadresponse shapes Euno may return ({"body": {"upload": {"url": ...}}}and{"upload": {"url": ...}}).
Example
A complete, ready-to-adapt module is provided here: dagster_euno_upload.py.
The key parts:
Integrating with an existing dagster-dbt project
If you already have a @dbt_assets definition, you don't need to rewrite it. Just:
Add a
dbt docs generatecall after yourdbt build/dbt runsocatalog.jsonis produced (Euno needs it for schema information).Copy the upload helpers and the
euno_artifacts_uploadasset from the example, pointingdepsat your dbt assets definition.Add
euno_artifacts_uploadto your job/Definitionsand select it alongside your dbt assets.
Notes
manifest.jsonandcatalog.jsonare required;run_results.jsonandsemantic_manifest.jsonare included when present.dbt buildcan be replaced withdbt run(ordbt compile) depending on your pipeline — just make suredbt docs generatestill runs socatalog.jsonexists.To run on a schedule, keep the
ScheduleDefinition(defaults to daily at 06:00). To upload only on demand, remove the schedule and trigger the job manually or from a Dagster sensor.If you split dbt models across multiple Dagster assets/jobs, run
dbt docs generateand upload once per full build so Euno receives a complete, consistent set of artifacts.
Last updated