This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch disable-v3-4-test-ci
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 0fb413022fc0d26fa16b120d1806dbf10fa41f24
Author: Jarek Potiuk <[email protected]>
AuthorDate: Tue Oct 6 10:25:02 2026 +0200

    Pause v3-4-test automation while it is fast-forwarded for 3.4.0 betas
    
    During the 3.4.0 beta phase v3-4-test is moved forward to main rather than
    receiving cherry-picks. Any commit added directly to the branch - an 
automated
    CI upgrade PR such as #74324, a Dependabot bump or an automatic backport -
    makes it diverge from main and breaks the next fast-forward, while the same
    change reaches the branch from main anyway.
    
    The release instructions did not describe this phase, so they now explain
    when it starts and ends and what has to be paused and re-enabled around it.
    
    Generated-by: Claude Opus 5
---
 .github/boring-cyborg.yml                          | 29 +++++++++--------
 .github/dependabot.yml                             | 21 ++++++++++++
 .github/workflows/automatic-backport.yml           | 14 +++++++-
 .../scheduled-upgrade-check-v3-4-test.yml          |  9 +++--
 dev/README_RELEASE_AIRFLOW.md                      | 38 ++++++++++++++++++++++
 5 files changed, 94 insertions(+), 17 deletions(-)

diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 7ab7202c442..b31f037ce0f 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -373,23 +373,26 @@ labelPRBasedOnFilePath:
     - .rat-excludes
     - .readthedocs.yml
 
+  # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
nothing is
+  # cherry-picked yet. Uncomment when cherry-picking starts (see "Beta 
releases" in
+  # dev/README_RELEASE_AIRFLOW.md).
   # This should be copy of the "area:dev-tools" above minus contributing docs 
and some files that should
   # only make sense in main - it should be updated when we switch maintenance 
branch.
   # Scoped to PRs targeting `main` only — a PR opened directly against 
v3-4-test
   # does not need a backport-to-v3-4-test label.
-  backport-to-v3-4-test:
-    paths:
-      - scripts/**/*
-      - dev/**/*
-      - .github/**/*
-      - Dockerfile.ci
-      - yamllint-config.yml
-      - .dockerignore
-      - .hadolint.yaml
-      - .pre-commit-config.yaml
-      - .rat-excludes
-    targetBranchFilter:
-      - ^main$
+  # backport-to-v3-4-test:
+  #   paths:
+  #     - scripts/**/*
+  #     - dev/**/*
+  #     - .github/**/*
+  #     - Dockerfile.ci
+  #     - yamllint-config.yml
+  #     - .dockerignore
+  #     - .hadolint.yaml
+  #     - .pre-commit-config.yaml
+  #     - .rat-excludes
+  #   targetBranchFilter:
+  #     - ^main$
 
   # Apply to PRs touching airflow-ctl code so the release manager notices when 
a
   # fix should land on the airflow-ctl/v0-1-test maintenance branch.
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index c310b473518..685a1380c79 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -46,6 +46,9 @@ updates:
       # Check for updates to GitHub Actions every week
       interval: "weekly"
     target-branch: v3-4-test
+    # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
remove when
+    # cherry-picking starts (see "Beta releases" in 
dev/README_RELEASE_AIRFLOW.md).
+    open-pull-requests-limit: 0
     groups:
       github-actions-updates:
         patterns:
@@ -265,6 +268,9 @@ updates:
     schedule:
       interval: daily
     target-branch: v3-4-test
+    # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
remove when
+    # cherry-picking starts (see "Beta releases" in 
dev/README_RELEASE_AIRFLOW.md).
+    open-pull-requests-limit: 0
     groups:
       pip-dependency-updates:
         patterns:
@@ -278,6 +284,9 @@ updates:
     schedule:
       interval: "weekly"
     target-branch: v3-4-test
+    # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
remove when
+    # cherry-picking starts (see "Beta releases" in 
dev/README_RELEASE_AIRFLOW.md).
+    open-pull-requests-limit: 0
     groups:
       3-4-core-ui-package-updates:
         patterns:
@@ -297,6 +306,9 @@ updates:
     schedule:
       interval: "weekly"
     target-branch: v3-4-test
+    # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
remove when
+    # cherry-picking starts (see "Beta releases" in 
dev/README_RELEASE_AIRFLOW.md).
+    open-pull-requests-limit: 0
     groups:
       3-4-auth-ui-package-updates:
         patterns:
@@ -325,6 +337,9 @@ updates:
     schedule:
       interval: "weekly"
     target-branch: v3-4-test
+    # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
remove when
+    # cherry-picking starts (see "Beta releases" in 
dev/README_RELEASE_AIRFLOW.md).
+    open-pull-requests-limit: 0
     groups:
       3-4-registry-package-updates:
         patterns:
@@ -344,6 +359,9 @@ updates:
     schedule:
       interval: "weekly"
     target-branch: v3-4-test
+    # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
remove when
+    # cherry-picking starts (see "Beta releases" in 
dev/README_RELEASE_AIRFLOW.md).
+    open-pull-requests-limit: 0
     groups:
       3-4-ui-plugin-template-package-updates:
         patterns:
@@ -362,6 +380,9 @@ updates:
     schedule:
       interval: "weekly"
     target-branch: v3-4-test
+    # Paused while v3-4-test is fast-forwarded to main for the 3.4.0 betas - 
remove when
+    # cherry-picking starts (see "Beta releases" in 
dev/README_RELEASE_AIRFLOW.md).
+    open-pull-requests-limit: 0
     groups:
       3-4-uv-dependency-updates:
         patterns:
diff --git a/.github/workflows/automatic-backport.yml 
b/.github/workflows/automatic-backport.yml
index daa142e9dfc..fa3d8c6a369 100644
--- a/.github/workflows/automatic-backport.yml
+++ b/.github/workflows/automatic-backport.yml
@@ -48,8 +48,13 @@ jobs:
         uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3  
# v9.0.0
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          # Branches fast-forwarded to main during a beta phase - a backport 
PR there would make
+          # them diverge from main. Empty this list when cherry-picking starts 
(see "Beta releases"
+          # in dev/README_RELEASE_AIRFLOW.md).
+          BACKPORT_PAUSED_BRANCHES: '["v3-4-test"]'
         with:
           script: |
+            const pausedBranches = 
JSON.parse(process.env.BACKPORT_PAUSED_BRANCHES);
             const { data: pullRequest } = await 
github.rest.repos.listPullRequestsAssociatedWithCommit({
                 owner: context.repo.owner,
                 repo: context.repo.repo,
@@ -59,7 +64,14 @@ jobs:
                 const pr = pullRequest[0];
                 const backportBranches = pr.labels
                       .filter(label => label.name.startsWith('backport-to-'))
-                      .map(label => label.name.replace('backport-to-', ''));
+                      .map(label => label.name.replace('backport-to-', ''))
+                      .filter(branch => {
+                          if (pausedBranches.includes(branch)) {
+                              console.log(`⚠️ Skipping backport to ${branch}: 
backports to it are paused.`);
+                              return false;
+                          }
+                          return true;
+                      });
 
                 console.log(`Commit ${process.env.GITHUB_SHA} is associated 
with PR ${pr.number}`);
                 console.log(`Backport branches: ${backportBranches}`);
diff --git a/.github/workflows/scheduled-upgrade-check-v3-4-test.yml 
b/.github/workflows/scheduled-upgrade-check-v3-4-test.yml
index 604fcb2ed8f..046694d83af 100644
--- a/.github/workflows/scheduled-upgrade-check-v3-4-test.yml
+++ b/.github/workflows/scheduled-upgrade-check-v3-4-test.yml
@@ -18,9 +18,12 @@
 ---
 name: "[v3-4-test] Scheduled CI upgrade check"
 on:  # yamllint disable-line rule:truthy
-  schedule:
-    # Tue, Thu at 06:00 UTC — the days main does not run, so the two never 
overlap.
-    - cron: '0 6 * * 2,4'
+  # Schedule paused while v3-4-test is fast-forwarded to main for the 3.4.0 
betas - upgrades
+  # land on main and reach v3-4-test with the next fast-forward. Re-enable 
when cherry-picking
+  # starts (see "Beta releases" in dev/README_RELEASE_AIRFLOW.md).
+  # schedule:
+  #   # Tue, Thu at 06:00 UTC — the days main does not run, so the two never 
overlap.
+  #   - cron: '0 6 * * 2,4'
   workflow_dispatch:
 permissions:
   contents: write
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 8516657ab9d..71e0fa7ff42 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -23,6 +23,7 @@
 - [Collect ambiguities during the release (for a follow-up doc 
PR)](#collect-ambiguities-during-the-release-for-a-follow-up-doc-pr)
 - [Perform review of security issues that are marked for the 
release](#perform-review-of-security-issues-that-are-marked-for-the-release)
 - [Selecting what to put into the 
release](#selecting-what-to-put-into-the-release)
+  - [Beta releases: fast-forwarding `vX-Y-test` to 
`main`](#beta-releases-fast-forwarding-vx-y-test-to-main)
   - [i18n workflow](#i18n-workflow)
   - [Selecting what to cherry-pick](#selecting-what-to-cherry-pick)
   - [Making the cherry picking](#making-the-cherry-picking)
@@ -104,6 +105,39 @@ The first step of a release is to work out what is being 
included. This differs
 
 - For a *patch* release, you will be selecting specific commits to cherry-pick 
and backport into the existing release branch.
 
+## Beta releases: fast-forwarding `vX-Y-test` to `main`
+
+For a *major* or *minor* release, the `vX-Y-test` branch is created early (see
+[Build RC artifacts](#build-rc-artifacts)), but while the beta releases 
(`X.Y.0b1`, `X.Y.0b2`, ...)
+are being prepared nothing is cherry-picked to it yet. Instead, the release 
manager periodically
+moves `vX-Y-test` forward to the current `main` - only the branch-specific 
commits (such as
+`Update default branches for X.Y`) are kept on top of `main`. Each beta is cut 
from the branch
+in that state, so everything merged to `main` lands in the next beta.
+
+During this phase, all automation that would add commits directly to 
`vX-Y-test` must be paused -
+any such commit makes `vX-Y-test` diverge from `main` and breaks the next 
fast-forward. Upgrades and
+fixes land on `main` only and reach `vX-Y-test` with the next fast-forward. 
When you add the new
+branch to the `.github/` configuration on `main` (see below), pause the 
following on `main` for
+`vX-Y-test` at the same time (every paused place is marked with a comment 
pointing to this section):
+
+- `.github/workflows/scheduled-upgrade-check-vX-Y-test.yml` - comment out the 
`schedule` trigger
+  (keep `workflow_dispatch`), so no `[vX-Y-test] Upgrade important CI 
environment` PRs are opened.
+- `.github/dependabot.yml` - add `open-pull-requests-limit: 0` to every 
`target-branch: vX-Y-test`
+  entry, so Dependabot does not open version-update PRs against the branch.
+- `.github/boring-cyborg.yml` - comment out the `backport-to-vX-Y-test` 
auto-labelling rule.
+- `.github/workflows/automatic-backport.yml` - add `vX-Y-test` to 
`BACKPORT_PAUSED_BRANCHES`, so a
+  `backport-to-vX-Y-test` label added by hand does not open a backport PR 
either.
+
+Close any PR that was opened against `vX-Y-test` by this automation before it 
was paused - the
+change reaches the branch from `main` anyway.
+
+The fast-forward phase ends when the release manager stops taking everything 
from `main` - usually
+just before the first release candidate (`X.Y.0rc1`), when `main` starts 
accepting changes meant for
+the next minor release. From that point on `vX-Y-test` diverges from `main` 
and changes reach it
+only by cherry-picking, as for a patch release. Announce the switch on the 
[email protected]
+list (so contributors know they need to start adding `backport-to-vX-Y-test` 
labels and milestones
+to the PRs they want in `X.Y.0`) and revert all the pauses listed above in a 
PR to `main`.
+
 
 ## i18n workflow
 
@@ -486,6 +520,10 @@ still works but is no longer recommended.
   - `.github/workflows/milestone-tag-assistant.yml` — add `vX-Y-test` to the 
push branches list.
   - `.github/workflows/basic-tests.yml` — update the release-management 
dry-run commands to test the new version.
   - `.github/workflows/ci-notification.yml` — switch the `workflow-status` 
matrix branch to the new branch.
+
+  If the new branch is going through beta releases first, pause the automation 
that adds commits to
+  `vX-Y-test` in the same PR, as described in
+  [Beta releases: fast-forwarding `vX-Y-test` to 
`main`](#beta-releases-fast-forwarding-vx-y-test-to-main).
 - Commit the above changes with the message `Update version to ${VERSION}`.
 - Build the release notes:
 

Reply via email to