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

vatsrahul1001 pushed a commit to branch v3-3-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 628a6ef2e6cfb73c0a8f9302db85e26e5ff1104c
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Aug 11 23:36:10 2026 +0800

    [v3-3-test] Always tag providers from the wave tag during release (#71431) 
(#71434)
    
    The tagging step relied on the release manager's checkout happening to sit
    on the wave commit. Nothing enforced or verified that, and anything moving
    HEAD in between - a pull, a branch switch, or concurrent work in a shared
    checkout - was tagged silently instead, with no error to notice. One wave
    had all 44 provider tags pushed at an unrelated commit and force-recreated
    afterwards.
    (cherry picked from commit a9c35b24ef160437048a50ad665004769c29e4fe)
    
    Co-authored-by: Jarek Potiuk <[email protected]>
---
 dev/README_RELEASE_PROVIDERS.md | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/dev/README_RELEASE_PROVIDERS.md b/dev/README_RELEASE_PROVIDERS.md
index 390df70941c..850bf143edb 100644
--- a/dev/README_RELEASE_PROVIDERS.md
+++ b/dev/README_RELEASE_PROVIDERS.md
@@ -777,10 +777,32 @@ grep -oE 'https://pypi\.org/project/[^[:space:]]+' 
"${AIRFLOW_REPO_ROOT}/files/t
 
 Earlier, we pushed the date tag, now that the RC(s) are ready we can push the 
tags for them.
 
+> [!IMPORTANT]
+> `tag-providers` tags whatever `HEAD` currently points at — it does not 
derive the commit from
+> `--release-date`. **Always check out the wave tag 
`providers/${RELEASE_DATE}` first**, so the
+> per-provider tags land on the exact commit the artifacts were built from. 
Anything that moved
+> `HEAD` between the build and this step — a `git pull`, a branch switch, a 
rebase, or concurrent
+> work by another terminal or agent sharing the same checkout — is otherwise 
tagged silently and
+> without any error. This has gone wrong in a real wave: all 44 tags were 
pushed at an unrelated
+> commit and had to be force-recreated afterwards. For the same reason, prefer 
running release
+> steps from a dedicated worktree rather than a checkout you are also working 
in.
+
 ```shell script
+git checkout providers/${RELEASE_DATE}
+# Both SHAs printed here must be identical before you tag
+git rev-parse HEAD "providers/${RELEASE_DATE}^{commit}"
 breeze release-management tag-providers --release-date ${RELEASE_DATE}
 ```
 
+You will see `You are in 'detached HEAD' state.` — that is expected, the wave 
tag is behind `main`.
+
+Verify the pushed tags point where you think they do. Plain `git ls-remote` 
prints the *tag object*
+SHA for annotated tags, which never matches the commit and looks alarming; 
dereference it with `^{}`:
+
+```shell script
+git ls-remote upstream "refs/tags/providers-<PROVIDER>/<VERSION>^{}"
+```
+
 ## Prepare documentation in Staging
 
 Documentation is an essential part of the product and should be made available 
to users.
@@ -1700,10 +1722,23 @@ and lead to annoying errors. The default behavior would 
be to clean such local t
 
 If you want to disable this behavior, set the env **CLEAN_LOCAL_TAGS** to 
false.
 
+As when [pushing the RC tags](#push-the-rc-tags), check out the wave tag first 
— `tag-providers`
+tags `HEAD`, so the final tags must be created from the wave commit and not 
from whatever the
+checkout happens to be on:
+
 ```shell script
+git checkout providers/${RELEASE_DATE}
+# Both SHAs printed here must be identical before you tag
+git rev-parse HEAD "providers/${RELEASE_DATE}^{commit}"
 breeze release-management tag-providers --release-date ${RELEASE_DATE}
 ```
 
+Then confirm each pushed tag resolves to the wave commit (`^{}` dereferences 
the annotated tag):
+
+```shell script
+git ls-remote upstream "refs/tags/providers-<PROVIDER>/<VERSION>^{}"
+```
+
 ## Publish documentation
 
 Documentation is an essential part of the product and should be made available 
to users.

Reply via email to