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 1f984f3368c Use fast-forward for airflow-ctl -test to -stable sync, 
not squash (#65637)
1f984f3368c is described below

commit 1f984f3368c53aef2c88a15b359519a25616e327
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Apr 22 01:37:36 2026 +0200

    Use fast-forward for airflow-ctl -test to -stable sync, not squash (#65637)
    
    Squash- and rebase-merges both rewrite the commit SHAs from -test onto
    -stable, which means the subsequent rc tag points at a different
    commit than the release-prep PR that was reviewed and merged into
    -test. Fast-forward preserves the original SHAs so the tag, the
    testing-status issue, and the SVN source tarball all reference the
    same commit the contributors reviewed.
    
    Caught during 0.1.4rc3 prep — the initial sync PR was squash-merged
    and had to be redone as a fast-forward before tagging.
---
 dev/README_RELEASE_AIRFLOWCTL.md | 39 +++++++++++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 4 deletions(-)

diff --git a/dev/README_RELEASE_AIRFLOWCTL.md b/dev/README_RELEASE_AIRFLOWCTL.md
index c643b278d44..38d196ae9f6 100644
--- a/dev/README_RELEASE_AIRFLOWCTL.md
+++ b/dev/README_RELEASE_AIRFLOWCTL.md
@@ -274,10 +274,41 @@ gh pr create \
     --body "Sync airflow-ctl/v${CTL_VERSION_BRANCH}-test into 
airflow-ctl/v${CTL_VERSION_BRANCH}-stable for airflow-ctl ${VERSION} release."
 ```
 
-Wait for CI to pass and for the PR to be merged. After merge, pull
-`airflow-ctl/vX-Y-stable` locally before continuing to the
-"Commit the version bump and release notes via a merged PR" step — the
-release-prep PR also targets `airflow-ctl/vX-Y-stable`.
+Wait for CI to pass and for the PR to be approved.
+
+> [!IMPORTANT]
+> **Merge the sync PR as a fast-forward, not as a squash or rebase.**
+> `airflow-ctl/vX-Y-stable` enforces `required_linear_history: true`,
+> which permits squash, rebase, *and* fast-forward merges. Squash and
+> rebase both **rewrite the commit SHAs** from `-test`, so the rc tag
+> you cut afterwards points at a different commit than the release-prep
+> PR that was reviewed and merged into `-test`. Fast-forward preserves
+> the original SHAs and makes the `-stable` history a clean extension
+> of `-test` — which is what the rc tag, the testing-status issue, and
+> the SVN source tarball all need to agree on.
+>
+> The GitHub web UI does not offer "fast-forward" for protected
+> branches; use the CLI against the unprotected remote ref, then close
+> the PR as merged (GitHub auto-closes the PR once its head commit
+> appears on the target branch):
+>
+> ```shell script
+> git fetch apache
+> git push apache \
+>     
"apache/airflow-ctl/v${CTL_VERSION_BRANCH}-test:refs/heads/airflow-ctl/v${CTL_VERSION_BRANCH}-stable"
+> ```
+>
+> The `:refs/heads/…` form pushes the remote-tracking ref of
+> `-test` directly onto `-stable`. Apache INFRA's branch protection
+> allows the release manager this fast-forward push because
+> `required_linear_history: true` is satisfied (no merge commit is
+> introduced) and `required_pull_request_reviews` is satisfied by the
+> PR you opened above.
+
+After the sync lands, pull `airflow-ctl/vX-Y-stable` locally before
+continuing to the "Commit the version bump and release notes via a
+merged PR" step — the release-prep PR also targets
+`airflow-ctl/vX-Y-stable`.
 
 ```shell script
 git fetch apache

Reply via email to