Similarly to the Airflow 3 dev process update I also refreshed 2.11 chapter - because there were questions:
https://github.com/apache/airflow/pull/64463 Pull Request Toolbar Open Add detailed 2.11.x PR instructions and FAB provider exception #64463 potiuk wants to merge 1 commit into apache:main from potiuk:add-2.11-pr-instructions 0 / 1 viewed Filter files… File tree dev README_AIRFLOW3_DEV.md dev/README_AIRFLOW3_DEV.md +94 -6 Lines changed: 94 additions & 6 deletions Original file line number Original file line Diff line number Diff line change - [Backporting during pre-release period (before 3.2.0 GA)](#backporting-during-pre-release-period-before-320-ga) - [How to backport PR with GitHub Actions](#how-to-backport-pr-with-github-actions) - [How to backport PR with `cherry-picker` CLI](#how-to-backport-pr-with-cherry-picker-cli) - [Merging PRs for Airflow 2.11.x](#merging-prs-for-airflow-211x) - [Merging PRs for Airflow 3](#merging-prs-for-airflow-3) - [Milestones for PR](#milestones-for-pr) - [Set 2.11.x milestone](#set-211x-milestone) - [Set 3.2.x milestone](#set-32x-milestone) - [Set 3.3 milestone](#set-33-milestone) ## Developing for Airflow 2.11.x > [!IMPORTANT] > Airflow 2.11 is intended as a bridge release for Airflow 3 and reaches > **end-of-life on April 22, > 2026**. There will likely be just one last **2.11.3** release before EOL — > there are already some > bug fixes targeting 2.11 and one final update of dependencies will be done > before we reach EOL. > We focus only on critical bug fixes and security fixes in this maintenance > period. ### Core and FAB provider changes The `v2-11-test` branch has diverged significantly from `main` (Airflow 3.x) — both for core Airflow and for the FAB provider. Cherry-picks rarely apply cleanly, so **if an issue affects both Airflow 2.11 and Airflow 3, you need to create two separate PRs** — one targeting `main` and one targeting `v2-11-test`: 1. **If the bug is reproducible on both `main` and 2.11:** fix it on `main` first, then create a separate PR targeting `v2-11-test` with the equivalent fix. 2. **If the bug is only reproducible on 2.11.x (not on `main`):** create a PR targeting `v2-11-test` directly. 3. **If a cherry-pick happens to apply cleanly:** you may target `main` and add the `backport-to-v2-11-test` label to automate the backport, but this is rare for core changes. **Special exception — FAB provider (apache-airflow-providers-fab 1.5.x):** The FAB provider is a special case. The FAB provider version on `main` (2.x+) has `min-airflow-version` of Airflow 3 and uses FastAPI, while the older FAB provider 1.5.x for Airflow 2.11 still uses Connexion — the code is heavily different between the two versions. The FAB provider 1.5.x is maintained directly in the `v2-11-test` branch, which makes it easier to test any changes for the Airflow 2.11 + FAB 1.5 combination together. If your fix is for the FAB provider and affects both Airflow 2.11 and Airflow 3: 1. Create a PR targeting `main` for the FAB provider 2.x+ (Airflow 3). 2. Create a separate PR against `v2-11-test` for the FAB provider 1.5.x (Airflow 2.11). 3. If the fix is only relevant to Airflow 2.11 (not reproducible on `main`), target `v2-11-test` directly. ### Testing changes for Airflow 2.11.x To test your changes locally, check out the `v2-11-test` branch. Breeze on Airflow 3 (`main`) is not compatible with Airflow 2.11, so you need to reinstall it manually: ```bash git checkout v2-11-test uv tool install --force -e ./dev/breeze ``` After that, you can work as usual — including running `breeze start-airflow` to spin up a local Airflow 2.11 environment for testing. > [!WARNING] > When you switch back to working on Airflow 3 (`main`), don't forget to > reinstall Breeze from > the `main` branch, as the Airflow 2.11 version of Breeze is not compatible > with Airflow 3: > > ```bash > git checkout main > uv tool install --force -e ./dev/breeze > ``` ### Other provider changes Providers (other than FAB) are released from `main` and are generally decoupled from the core Airflow version. Most provider fixes should target `main` — they will be validated against Airflow 2.11 by the 2.11 compatibility tests in CI. and: ## Merging PRs for Airflow 2.11.x > [!NOTE] > Airflow 2.11 reaches end-of-life on April 22, 2026. There will likely be one > last 2.11.3 release > before EOL. Since the `v2-11-test` branch has diverged significantly from `main`, committers should be aware that: * Most core and FAB provider bug fixes require **two separate PRs** — one for `main` and one for `v2-11-test` — because cherry-picks rarely apply cleanly. * The committer merging a bug fix to `main` should verify whether it also affects 2.11.x and, if so, ensure a corresponding PR is created against `v2-11-test` (either by the original author or by the committer). * Other provider PRs (non-FAB) should generally only go to `main`. ### FAB provider 1.5.x (Airflow 2.11 only) The FAB provider on `main` (2.x+) requires Airflow 3 and uses FastAPI, while the 1.5.x line uses Connexion — the code is heavily different. The FAB provider 1.5.x is maintained directly in the `v2-11-test` branch, so FAB fixes for Airflow 2.11 should target `v2-11-test`. and: ## Set 2.11.x milestone Set for bug fixes and security fixes targeting Airflow 2.11.x (until end-of-life on April 22, 2026). 1. PR targeting `v2-11-test` directly — milestone will be on that PR. 2. PR targeting `main` with a corresponding PR targeting `v2-11-test` — milestone will be on the PR targeting `main`.
