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`.

Reply via email to