dbt Model Build and Deploy

Data
6 nodes · 6 edgesdata
ex-dbt-transform.osop.yaml
# dbt Transformation Workflow
# Install deps, run models, test, generate and deploy documentation.
osop_version: "2.0"
id: dbt-transform
name: dbt Model Build and Deploy

nodes:
  - id: dbt_deps
    type: data
    purpose: Install dbt package dependencies
    runtime:
      engine: dbt
      config:
        command: deps
        project_dir: /app/dbt
        profiles_dir: /app/dbt/profiles
    outputs:
      - deps_status

  - id: dbt_run
    type: data
    purpose: Run all dbt models to build tables and views
    runtime:
      engine: dbt
      config:
        command: run
        project_dir: /app/dbt
        target: production
        full_refresh: false
    inputs:
      - deps_status
    outputs:
      - run_results
    timeout_sec: 600
    retry_policy:
      max_retries: 1
      backoff_sec: 30

  - id: dbt_test
    type: data
    purpose: Run dbt tests to validate data quality and integrity
    runtime:
      engine: dbt
      config:
        command: test
        project_dir: /app/dbt
        target: production
    inputs:
      - run_results
    outputs:
      - test_results
    explain: "Runs schema tests (not_null, unique, relationships) and custom data tests."

  - id: generate_docs
    type: cli
    purpose: Generate dbt documentation site
    runtime:
      command: "dbt docs generate --project-dir /app/dbt --target production"
    inputs:
      - test_results
    outputs:
      - docs_manifest

  - id: deploy_docs
    type: cli
    purpose: Deploy generated docs to internal static hosting
    runtime:
      command: "aws s3 sync /app/dbt/target s3://dbt-docs-bucket/latest --delete"
    inputs:
      - docs_manifest
    outputs:
      - deploy_status

  - id: notify_team
    type: system
    purpose: Send Slack notification with run summary and doc link
    runtime:
      tool: slack-webhook
    inputs:
      - run_results
      - test_results
      - deploy_status
    outputs:
      - notification_status

edges:
  - from: dbt_deps
    to: dbt_run
    mode: sequential

  - from: dbt_run
    to: dbt_test
    mode: sequential

  - from: dbt_test
    to: generate_docs
    mode: conditional
    condition: "test_results.failures == 0"
    explain: "Only generate docs if all tests pass."

  - from: generate_docs
    to: deploy_docs
    mode: sequential

  - from: deploy_docs
    to: notify_team
    mode: sequential

  - from: dbt_test
    to: notify_team
    mode: error
    condition: "test_results.failures > 0"
    explain: "Alert the team immediately on test failures."