Implementing Data CI/CD

SkillDatabases & data

Set up CI/CD for data pipelines, SQL/dbt linting (SQLFluff), compilation and test gates, dbt Slim CI with state:modified and deferral, environment promotion (dev/staging/prod), and running only changed models on pull requests. Use when adding CI checks to a dbt or SQL project, automating pipeline tests on PRs, speeding up CI, or promoting changes across environments.

Use Implementing Data CI/CD in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add Implementing Data CI/CD and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the Implementing Data CI/CD skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Implementing Data CI/CDStart free

What this skill tells your AI

The instructions your AI receives, as published by unknown-333/awesome-data-engineering-skills in skills/implementing-data-cicd/SKILL.md and read by Ahel’s review.

When to use

  • Adding CI checks to a dbt/SQL/pipeline repo.
  • Automating lint, compile, and tests on pull requests.
  • Speeding up CI by building only changed models (Slim CI).
  • Promoting changes across dev → staging → prod.
  • Do NOT use for reviewing an individual PR's logic (use reviewing-data-pipeline-code).

Workflow

- [ ] Lint SQL (SQLFluff) and check formatting on every PR
- [ ] Compile the project to catch ref/Jinja errors early
- [ ] Build + test only changed models against prod parents (Slim CI)
- [ ] Run in an isolated CI schema; tear it down after
- [ ] Promote across environments with the same code, different targets
  1. Lint first — SQLFluff catches style and some correctness issues fast and cheap, before spinning up a warehouse.
  2. Compile — dbt compile (or parse) fails on bad ref()/Jinja without running SQL.
  3. Slim CI — build and test only state:modified+ using a production manifest.json as state, and defer unchanged parents to prod so CI doesn't rebuild the whole project.
  4. Isolate — run into a unique CI schema (e.g. per PR) and drop it afterward so runs don't collide.
  5. Promote — the same code runs against dev/staging/prod via --target; never fork logic per environment.

Patterns

dbt Slim CI (GitHub Actions sketch):

- run: dbt deps
- run: dbt compile
- run: |
    dbt build --select state:modified+ \
      --defer --state ./prod-artifacts \
      --target ci

--select state:modified+ builds changed models and their children; --defer --state points unchanged parents at prod, so CI stays fast. A fresh/stale prod-artifacts/manifest.json is required for correct selection.

SQLFluff config (.sqlfluff) — pin the dialect and templater so lint matches your warehouse and dbt:

[sqlfluff]
dialect = snowflake
templater = dbt

Environment promotion — dev (developer schemas) → staging (full build on merge) → prod (scheduled). Same repo, different profiles.yml targets and credentials.

Common pitfalls

  • Rebuilding the whole project on every PR — slow and expensive; use Slim CI with state:modified + deferral.
  • Stale/missing state manifest — state:modified selects the wrong nodes; refresh prod artifacts in CI.
  • Shared CI schema across PRs — concurrent runs clobber each other; use a unique schema per PR and drop it.
  • Skipping dbt deps in CI — macro/package-not-found failures.
  • Different logic per environment — drift and "works in dev" bugs; vary only the target/config, not the code.
  • No teardown — orphaned CI schemas accumulate cost.

Signals

GitHub stars
21
Last commit
Aug 2026
Advanced
Item type
skill
Key
implementing-data-cicd
Source
github.com/unknown-333/awesome-data-engineering-skills