-
Notifications
You must be signed in to change notification settings - Fork 15.9k
Description
This issue tracks the migration of Airflow providers to use the centralized compatibility layer in common.compat provider. The goal is to replace version-specific conditional imports scattered across providers with a standardized approach that works seamlessly across Airflow 2.x and 3.x.
The common.compat layer provides lazy imports that abstract away version differences, eliminating the need for conditional logic like if AIRFLOW_V_3_0_PLUS: in provider code. This improves maintainability and reduces code duplication.
Foundational Work: See PR #56884 for the architectural changes that established this pattern.
Example PRs
Review these PRs to understand the migration pattern:
- Simple provider: Migrate asana provider to
common.compat#57007 - Migrate asana provider tocommon.compat - Provider with hooks/operators: Migrate airbyte provider to
common.compat#56996 - Migrate airbyte provider tocommon.compat - Provider with triggers: Migrate
dbt.cloudprovider tocommon.compat#56999 - Migrate dbt.cloud provider tocommon.compat
Migration Steps
-
Add
apache-airflow-providers-common-compat>=1.8.0to the provider'sdependenciesarray inpyproject.toml- Also add it to the
devdependency-group
- Also add it to the
-
Replace imports from local
version_compat.pywithfrom airflow.providers.common.compat.sdk import ...- Common imports:
BaseOperator,BaseHook,Context,task, etc.
- Common imports:
-
Update test files similarly
-
Simplify or remove
version_compat.py:- Keep only version check constants (
AIRFLOW_V_3_0_PLUS, etc.) if still needed - Remove conditional import logic that's now handled by
common.compat
- Keep only version check constants (
-
Run verification:
prek mypy-providers --directory providers/<your-provider>
-
Run provider tests to ensure everything works
Current Status (Updated: 2025-10-26)
Total providers: 97
Progress: 84/97 (86.6%) ✅
Remaining: 13 providers
Already Migrated ✅ (84 providers)
- airbyte (Migrate airbyte provider to
common.compat#56996) - alibaba (Migrate alibaba provider to
common.compat#57000) - amazon (Migrate amazon provider to
common.compat#56994) - apache/beam (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/cassandra (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/flink (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/hdfs (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/hive (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/iceberg (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/kafka (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/kylin (Migrate apache/kylin provider to
common.compat#57132) - apache/livy (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/pig (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/pinot (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/spark (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apache/tinkerpop (Migrate Apache providers & Elasticsearch to
common.compat#57016) - apprise (Migrate apprise provider to
common.compat#57005) - arangodb (Migrate arangodb provider to
common.compat#57001) - asana (Migrate asana provider to
common.compat#57007) - atlassian/jira (Migrate atlassian-jira provider to
common.compat#57002) - cloudant (Migrate cloudant provider to common.compat compatibility layer #57070)
- cncf/kubernetes (Migrate cncf/kubernetes provider to
common.compat#57023) - cohere (Migrate remaining providers to common.compat compatibility layer in cohere #57073)
- common/compat
- common/io
- common/sql (Migrate
common/sqlprovider tocommon.compat#57135) - databricks (Migrate databricks provider to
common.compat#56993) - datadog (Migrate datadog provider to common.compat #57074)
- dbt/cloud (Migrate
dbt.cloudprovider tocommon.compat#56999) - discord (Migrate discord provider to
common.compat#57114) - docker (Migrate Docker provider to
common.compat#57117) - edge3 (Migrate edge3 provider to
common.compat#56998) - elasticsearch (Migrate Apache providers & Elasticsearch to
common.compat#57016) - fab (Refactor FAB provider to use ORM type hints from common-compat #56903)
- facebook (Migrate remaining providers to common.compat compatibility layer in facebook #57079)
- ftp (Migrate FTP provider to
common.compat#57127) - git (Migrate git provider to
common.compat#57008) - github (Migrate github provider to
common.compat#57009) - google (Migrate google provider to
common.compat#57130) - grpc (Migrate grpc provider to common.compat #57087)
- hashicorp (Migrate hashicorp provider to common.compat #57015)
- http (Migrate http provider to common.compat #57089)
- imap (Migrate imap provider to common.compat #57091)
- influxdb (Migrate influxdb provider to common.compat #57092)
- jdbc (Migrate jdbc and jenkins providers to
common.compat#57012) - jenkins (Migrate jdbc and jenkins providers to
common.compat#57012) - microsoft/azure (Migrate microsoft providers to
common.compat#56995) - microsoft/psrp (Migrate microsoft providers to
common.compat#56995) - microsoft/winrm (Migrate microsoft providers to
common.compat#56995) - mongo (Migrate mongo provider to common.compat #57147)
- mysql (Migrate MYSQL provider to common.compat #57165)
- neo4j (Migrate neo4j provider to common.compat #57149)
- openai (Migrate openai provider to
common.compat#57020) - openfaas (Migrate openfaas provider to common.compat #57134)
- openlineage (Migrate openlineage provider to
common.compat#57124) - opensearch (Migrate opensearch provider to common.compat #57129)
- opsgenie (Migrate opsgenie provider to
common.compat#57121) - oracle (Migrate Oracle providers to common.compat compatibility layer #57133)
- pagerduty (Migrate Pagerduty provider to common.compat #57120)
- papermill (Migrate Papermill provider to
common.compat#57118) - pgvector (Migrate pgvector provider to
common.compat#57024) - pinecone (Migrate pinecone provider to common.compat #57137)
- postgres (Migrate postgres provider to
common.compat#57022) - presto (Migrate presto provider to common.compat #57136)
- qdrant (Migrate remaining providers to common.compat compatibility layer in qdrat #57093)
- redis (Migrate redis provider to
common.compat#57006) - salesforce (Migrate remaining providers to common.compat compatibility layer in Salesforce #57088)
- samba (Migrate samba provider to
common.compat#57082) - segment (Migrate remaining providers to common.compat compatibility layer in segment #57078)
- sendgrid (Migrate sendgrid provider to
common.compat#57021) - sftp (Migrate sftp provider to
common.compat#57111) - singularity (Migrate remaining providers to common.compat compatibility layer in singularity #57077)
- slack (Migrate slack provider to
common.compat#57110) - smtp (Migrate smtp provider to
common.compat#57105) - snowflake (Migrate snowflake provider to
common.compat#57003) - ssh (Migrate ssh provider to
common.compat#57004) - standard (Airflow Standard Provider #41564)
- tableau (Migrate tableau, telegram, trino, teradata providers to
common.compat#57013) - telegram (Migrate tableau, telegram, trino, teradata providers to
common.compat#57013) - teradata (Migrate tableau, telegram, trino, teradata providers to
common.compat#57013) - trino (Migrate tableau, telegram, trino, teradata providers to
common.compat#57013) - weaviate (Migrate weaviate provider to
common.compat#57019) - yandex (Migrate yandex provider to
common.compat#57116) - zendesk (Migrate zendesk provider to
common.compat#56997)
Remaining to Migrate 📋 (13 providers)
- apache/drill
- apache/druid - Migrate apache/druid provider to common.compat #57072
- apache/impala - no changes needed
- celery - Migrate remaining providers to common.compat compatibility layer in celery #57067
- common/messaging - no changes needed
- dingding - Migrate dingding provider to common.compat #57076
- exasol - no changes needed
- keycloak - no changes needed
- microsoft/mssql - no changes needed
- odbc - no changes needed
- sqlite - no changes needed
- vertica - no changes needed
- ydb - no changes needed
How to Contribute
- Pick a provider: Choose an unchecked provider from the list above that doesn't have an open PR
- Review examples: Look at PRs Migrate asana provider to
common.compat#57007, Migrate airbyte provider tocommon.compat#56996, or Migratedbt.cloudprovider tocommon.compat#56999 to understand the pattern - Make changes: Follow the migration steps outlined above
- Verify: Run
prek mypy-providers --directory providers/<your-provider>and provider tests - Submit PR:
- Use title format: "Migrate X provider to
common.compat" - Reference this issue in your PR description
- Check off your provider in this issue when you open the PR
- Use title format: "Migrate X provider to
Guidelines
- Focus on one provider at a time to avoid merge conflicts
- Follow the patterns established in example PRs - consistency is key
- Ensure all tests pass before submitting your PR
- If you encounter a provider-specific edge case, ask for guidance in this issue
- Update this issue by checking off your provider when you open a PR
- Use the PR title format: "Migrate X provider to
common.compat" for easy tracking
Notes
- The
common.compatlayer provides version-agnostic imports that work across Airflow 2.x and 3.x - This eliminates the need for conditional imports based on
AIRFLOW_V_3_0_PLUSand similar version checks - See PR Common.Compat: Extract reusable compat utilities and rename to sdk #56884 for the foundational architectural work
- Some providers may not need migration if they don't use version-specific imports (marked as no changes needed)
Let's work together to improve Airflow's maintainability and reduce technical debt! 🚀
Note: Provider counts may change as PRs are merged.