# EWAH Compatibility Reference — setup-dlt-uv-connector-airflow

Detailed checklist and compatibility notes for EWAH-based Airflow setups.

## EWAH Airflow setup — complete checklist of changes

| File | Change |
|------|--------|
| `Dockerfile` (dev stage) | Add `RUN pip install uv` |
| `Dockerfile` (prod stage) | Add `COPY connectors /opt/airflow/connectors` |
| `docker-compose.yml` | Add `./connectors:/opt/airflow/connectors` volume to scheduler and webserver (local dev only) |
| `docker-compose.yml` | Remove `docker-proxy` service (if present from DockerOperator setup) |
| `.gitignore` | Add `connectors/` |
| `connectors.lock.yml` | Create with pinned connector versions (new file) |
| `sync-connectors.sh` | Copy from dlt-connectors `dist/` (new file) |
| `contribute-connector.sh` | Copy from dlt-connectors `dist/` (new file) |
| `dags/utils/__init__.py` | Create empty file if missing |
| `dags/utils/common.py` | Add `run_dlt_connector()` helper (see step 9 in the main skill) |
| `dags/dag_extract_load__*.py` | Create DAGs using `PythonOperator` + `run_dlt_connector()` |
| Airflow Variables | Set `dlt_destination` and `dlt_secrets_toml` |
| CI/CD workflow | Add sync + build steps (see CI/CD deployment reference) |

## Important EWAH/old Airflow compatibility notes

- EWAH images use Python 3.8, but connectors require 3.12+. This works because `uv` auto-downloads its own Python — the connector's venv uses Python 3.12+ while Airflow itself stays on 3.8.
- Do NOT use `@task.bash` — it requires Airflow 2.5+. Use `PythonOperator` with `run_dlt_connector()` instead.
- Do NOT use `BashOperator` with `append_env=True` — it requires Airflow 2.4+.
- Do NOT import `tomllib` in DAG utilities — it requires Python 3.11+.
- The connector directory must be writable by the Airflow user. `sync-connectors.sh` handles this automatically with `chmod -R a+w`. If you get `Permission denied` errors, re-run `./sync-connectors.sh` to fix permissions.
