This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new fbdff1e45eb Add detailed 2.11.x PR instructions and FAB provider
exception (#64463)
fbdff1e45eb is described below
commit fbdff1e45eb3e6772545ab8451b04afb08222d4b
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon Mar 30 20:04:44 2026 +0200
Add detailed 2.11.x PR instructions and FAB provider exception (#64463)
Document the workflow for preparing PRs targeting the Airflow 2.11.x
line: core fixes typically need two separate PRs (main + v2-11-test)
since the branches have diverged significantly. Also documents the
special exception for the FAB provider — fixes for Airflow 2.11
compatibility must target the dedicated providers-fab/v1-5 branch,
as the FAB provider on main requires Airflow 3.
---
dev/README_AIRFLOW3_DEV.md | 109 ++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 99 insertions(+), 10 deletions(-)
diff --git a/dev/README_AIRFLOW3_DEV.md b/dev/README_AIRFLOW3_DEV.md
index af368377379..75001d298cb 100644
--- a/dev/README_AIRFLOW3_DEV.md
+++ b/dev/README_AIRFLOW3_DEV.md
@@ -34,8 +34,10 @@
- [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)
@@ -76,13 +78,70 @@ PRs should target `main` branch.
## Developing for Airflow 2.11.x
-If a PR can be cleanly cherry-picked from `main` to `v2-11-test`, it should
target the `main` branch and include the `backport-to-v2-11-test` label to
automate the backport.
-If the PR cannot be cherry-picked without conflicts, you must manually create
a PR targeting the `v2-11-test` branch.
-
> [!IMPORTANT]
-> Airflow 2.11 is intended as a bridge release for Airflow 3.
-> As such, it is not expected to introduce new features beyond those relevant
to the transition to Airflow 3.
-> That said, we focus only critical security fixes in the maintenance period
until end-of-life.
+> 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.
+
+### Release process
When preparing a new 2.11.x release, the release manager will sync the
`v2-11-test` branch to `v2-11-stable` and cut the release from the stable
branch.
PRs should **never** target `v2-11-stable` directly unless explicitly
instructed by the release manager.
@@ -241,17 +300,47 @@ cherry_picker --continue # Should continue
cherry-picking process
> you might need to run `git config --local --remove-section cherry-picker` to
> clean up the configuration
> stored in `.git/config`.
+## 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. The FAB Provider 1.5.* reaches end-of-life 12 months after
2.11.0 was released - which is
+> May 22, 2026.
+
+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` (at the time of this writing 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`.
+
## Merging PRs for Airflow 3
-Make sure PR target `main` branch.
+Make sure PRs target `main` branch.
### PRs that involve breaking changes
-Our goal is to avoid breaking changes whenever possible. Therefore, we should
allow time for community members to review PRs that contain such changes -
please avoid rushing to merge them. Also, please make sure that such PRs
contain a `significant` newsfragment that contains `**Breaking Change**`.
-
+Our goal is to avoid breaking changes whenever possible. Therefore, we should
allow time for community
+members to review PRs that contain such changes - please avoid rushing to
merge them.
+Also, please make sure that such PRs contain a `significant newsfragment` that
contains `**Breaking Change**`.
# Milestones for PR
+## 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.
+
## Set 3.2.x milestone
Milestone will be added only to the original PR.
@@ -261,4 +350,4 @@ Milestone will be added only to the original PR.
## Set 3.3 milestone
-Set for any feature that targets Airflow 3.x only.
+Set for any feature that targets Airflow 3.3 only.