Drop support for Airflow < 2.10#2276
Conversation
Neither Runtime or Apache Airflow support 2.9 or earlier Airflow versions any longer, so we can drop support per our policy.
✅ Deploy Preview for astronomer-cosmos ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Pull request overview
This PR removes support for Apache Airflow versions 2.6 through 2.9, bringing the minimum supported version to 2.10.0. This cleanup allows removal of various compatibility checks and workarounds that were previously needed for older Airflow versions.
Changes:
- Updated minimum Airflow version from 2.6.0 to 2.10.0 in dependencies
- Removed AIRFLOW_IO_AVAILABLE setting and related checks (Object Storage is available in all supported versions)
- Removed PARTIALLY_SUPPORTED_AIRFLOW_VERSIONS constant and associated test skips for Airflow 2.9.0/2.9.1
- Cleaned up version-specific installation logic and test matrix configurations
Reviewed changes
Copilot reviewed 32 out of 32 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| pyproject.toml | Updated minimum Airflow dependency to 2.10.0 and removed 2.6-2.9 from test matrix |
| cosmos/settings.py | Removed AIRFLOW_IO_AVAILABLE flag no longer needed with minimum version 2.10 |
| cosmos/constants.py | Removed PARTIALLY_SUPPORTED_AIRFLOW_VERSIONS list for 2.9.0/2.9.1 |
| cosmos/config.py | Simplified manifest path handling by removing AIRFLOW_IO_AVAILABLE checks |
| cosmos/cache.py | Removed AIRFLOW_IO_AVAILABLE checks from remote cache configuration |
| cosmos/io.py | Removed AIRFLOW_IO_AVAILABLE checks from remote target path configuration |
| cosmos/operators/local.py | Simplified dataset emission logic by removing version checks for 2.10+ |
| cosmos/operators/_asynchronous/bigquery.py | Removed AIRFLOW_IO_AVAILABLE check and version comparison for 2.10+ |
| tests/test_io.py | Removed AIRFLOW_IO_AVAILABLE test skips and related unavailability test |
| tests/test_config.py | Removed AIRFLOW_IO_AVAILABLE test skips and unavailability test |
| tests/test_cache.py | Removed AIRFLOW_IO_AVAILABLE test skips and unavailability test |
| tests/test_example_dags.py | Removed version-specific logic for unsupported Airflow versions |
| tests/operators/test_local.py | Removed PARTIALLY_SUPPORTED_AIRFLOW_VERSIONS checks and pre-2.10 tests |
| tests/operators/test_watcher.py | Updated test mock versions from 2.7/2.9 to 2.10 |
| tests/operators/_watcher/test_triggerer.py | Updated test mock versions from 2.9 to 2.10 |
| tests/operators/_asynchronous/test_bigquery.py | Removed version check skipif for 2.10+ |
| tests/operators/_asynchronous/test_base.py | Removed version check skipif and unused imports |
| tests/dbt/test_graph.py | Removed AIRFLOW_IO_AVAILABLE test skips |
| tests/airflow/test_graph.py | Removed version check skipif for 2.9+ display_name feature |
| scripts/test/pre-install-airflow.sh | Removed version-specific installation logic for 2.6-2.9 |
| .github/workflows/test.yml | Removed 2.6-2.9 from test matrix and related exclusions |
| docs/requirements.txt | Updated minimum Airflow version to 2.10.0 |
| docs/getting_started/async-execution-mode.rst | Removed version requirement note (now implied by minimum version) |
| docs/configuration/scheduling.rst | Removed Airflow 2.9 and below section and version-specific mentions |
| docs/configuration/render-config.rst | Removed version note about display_name availability |
| docs/configuration/parsing-methods.rst | Removed version requirement note for remote manifest paths |
| docs/configuration/lineage.rst | Simplified installation/configuration instructions |
| docs/configuration/cosmos-conf.rst | Removed version introduction notes for Object Storage |
| docs/configuration/callbacks.rst | Removed version requirement note |
| docs/compatibility-policy.rst | Updated minimum and supported Airflow versions |
| dev/dags/example_virtualenv.py | Removed version note from comment |
| dev/dags/cosmos_callback_dag.py | Removed version note from comment |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Hi @jedcunningham, thanks a lot for working on this. We will review and update Cosmos' policy towards Airflow compatibility in this document: I just checked the Astro Runtime lifecycle schedule. It seems we offer basic support to AF 2.7 until the end of this month and basic support to AF 2.9 until October 2026: From a maintenance cost perspective, I'd say it is low to continue support at 2.9 for a few months, but let's confirm with @yetudada, and we'll let you know if we need any adjustments to the PR's scope. In the meantime, so we can see a relatively green CI, I was wondering if you could temporarily update the GH using something similar to: 0fd4b54 |
|
@tatiana I think there is a bit of ambiguity now. Historically we had a single "support" date for Runtime, which was when we stopped releasing new images with bugfixes and CVE fixes, etc. Now that is "end of maintenance". There was no equivalent of the current "basic support". Basic suppport: "Astronomer Support will continue to accept support tickets for an additional period after a Runtime version becomes unmaintained." I'd argue cosmos should stop supporting a version when it hits "end of maintenance" instead of "end of basic support". My 2c, let me know :) |
|
@jedcunningham We are in a sort of delicate moment migrating some customers from older versions of Airflow, so we may decide to be more conservative on Cosmos than in the Airflow community / Astro Runtime - for now. But I agree with you, we should review and focus on what is actively developed and maintained. We'll make sure we involve the right stakeholders before deciding on this one |
504939e to
15524bf
Compare
|
Hi @jedcunningham — thanks so much for putting this PR together, really appreciate the work you’ve put into it! 🙌 I spoke with @yetudada today, and we aligned on the following approach:
Based on that, our current plan is:
If you’re open to it, it would be great to adjust the scope of this PR to focus specifically on removing support for Airflow 2.7. If not, no worries at all — we can close this PR and open more targeted ones as we get closer to those milestones. Thanks again! |
Follow up on product alignment regarding the supported Apache Airflow versions. Relates to #2276
|
No problem, opened #2286 to fix up the wording. I'll also open another PR for the ones we can drop now. |
Follow up on product alignment regarding the supported Apache Airflow versions. Relates to #2276
Also, a couple of other minor updates to fix the wording around airflow support. ## Related Issue(s) #2276 (comment)
Neither Runtime or Apache Airflow support 2.8 or earlier Airflow versions any longer, so we can drop support per our policy. This lets us drop 2.6-2.8, and a number of special cases to support those versions. Related: #2276 ## Breaking Change? Yes, we need to highlight this in our changelog. --------- Co-authored-by: Tatiana Al-Chueyr <tatiana.alchueyr@gmail.com> Co-authored-by: Pankaj Koti <pankajkoti699@gmail.com>

Description
Neither Runtime or Apache Airflow support 2.9 or earlier Airflow versions any longer, so we can drop support per our policy.
This lets us drop 2.6-2.9, and a number of special cases to support those versions.
Related Issue(s)
None.
Breaking Change?
🤷
Checklist