This is an automated email from the ASF dual-hosted git repository.
ephraimanierobi pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 290bed1e762d0fea28a60f95f587a194cc729519
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Jan 15 22:43:58 2026 +0100
[v3-1-test] Update release command and guide (#60508) (#60607)
* Update release command and guide
Update some of the issues I noticed during the release
* fixup! Test: Add E2E tests for Assets Page (#59990)
* Apply suggestion from @ephraimbuddy
* fixup! fixup! Test: Add E2E tests for Assets Page (#59990)
(cherry picked from commit 2de609e11d1eae81fd60efc5a70d55c98955323e)
Co-authored-by: Ephraim Anierobi <[email protected]>
---
dev/README_RELEASE_AIRFLOW.md | 32 +++++++++++-----------
.../commands/release_candidate_command.py | 22 +++++++++++++--
.../src/airflow_breeze/commands/release_command.py | 3 ++
dev/breeze/tests/test_release_candidate_command.py | 7 ++---
4 files changed, 41 insertions(+), 23 deletions(-)
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 3005b9d2c12..d1fecd192c9 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -390,6 +390,7 @@ uv tool install -e ./dev/breeze
--version ${VERSION_RC} \
--previous-version ${PREVIOUS_VERSION} \
--task-sdk-version ${TASK_SDK_VERSION_RC} \
+ --sync-branch ${SYNC_BRANCH} \
--remote-name upstream \
--dry-run
```
@@ -1010,7 +1011,6 @@ export AIRFLOW_REPO_ROOT=$(pwd)
# start the release process by running the below command
breeze release-management start-release \
--version ${VERSION} \
- --previous-release ${PREVIOUS_RELEASE} \
--task-sdk-version ${TASK_SDK_VERSION}
```
@@ -1047,11 +1047,11 @@ the older branches, you should set the "skip" field to
true.
```shell script
for PYTHON in 3.10 3.11 3.12 3.13
do
- docker pull apache/airflow:${VERSION_RC}-python${PYTHON}
- breeze prod-image verify --image-name
apache/airflow:${VERSION_RC}-python${PYTHON}
+ docker pull apache/airflow:${VERSION}-python${PYTHON}
+ breeze prod-image verify --image-name
apache/airflow:${VERSION}-python${PYTHON}
done
-docker pull apache/airflow:${VERSION_RC}
-breeze prod-image verify --image-name apache/airflow:${VERSION_RC}
+docker pull apache/airflow:${VERSION}
+breeze prod-image verify --image-name apache/airflow:${VERSION}
```
## Publish final documentation
@@ -1222,17 +1222,6 @@ EOF
------------------------------------------------------------------------------------------------------------
Announcement is done from official Apache-Airflow accounts.
-* LinkedIn: https://www.linkedin.com/company/apache-airflow/
-* Fosstodon: https://fosstodon.org/@airflow
-* Bluesky: https://bsky.app/profile/apache-airflow.bsky.social
-
-Make sure attach the release image generated with Figma to the post.
-If you don't have access to the account ask a PMC member to post.
-
-------------------------------------------------------------------------------------------------------------
-
-Tweet and post on Linkedin about the release:
-
```shell
cat <<EOF
We've just released Apache Airflow $VERSION 🎉
@@ -1246,6 +1235,17 @@ Thanks to all the contributors who made this possible.
EOF
```
+Post on social media about the release:
+
+* LinkedIn: https://www.linkedin.com/company/apache-airflow/
+* Fosstodon: https://fosstodon.org/@airflow
+* Bluesky: https://bsky.app/profile/apache-airflow.bsky.social
+
+Make sure to attach the release image generated with Figma to the post.
+If you don't have access to the account ask a PMC member to post.
+
+------------------------------------------------------------------------------------------------------------
+
## Update `main` with the latest release details
This includes:
diff --git
a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
index 5877c05ffb8..64eb7b937d9 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -412,6 +412,22 @@ def create_artifacts_with_docker():
console_print("[success]Airflow and Task SDK artifacts created")
+def test_airflow():
+ console_print("[info]Testing Airflow: Please perform the actions below
before proceeding.")
+ console_print("[info]Run these commands in a separate shell in the current
directory.")
+ console_print("[info] ❯ docker run -it -v ./dist:/dist -p 8080:8080
python:3.12 /bin/bash")
+ console_print("[info] root@6b802a7fedab:/# pip install uv && uv venv &&
source .venv/bin/activate")
+ console_print(
+ "[info] root@6b802a7fedab:/# uv pip install
./dist/apache_airflow-*.whl ./dist/apache_airflow_core-*.whl
./dist/apache_airflow_task_sdk-*-py3-none-any.whl"
+ )
+ console_print("[info] (.venv) root@6b802a7fedab:/# airflow standalone")
+ confirm_action(
+ "I have tested airflow as instructed above. "
+ "I installed and ran a DAG with it and there's no issue. Do you agree
to the above?",
+ abort=True,
+ )
+
+
def sign_the_release(repo_root):
if confirm_action("Do you want to sign the release?"):
os.chdir(f"{repo_root}/dist")
@@ -473,8 +489,8 @@ def move_artifacts_to_svn(
shell=True,
)
console_print("[success]Moved artifacts to SVN:")
- run_command([f"ls {repo_root}/asf-dist/dev/airflow/{version}"])
- run_command([f"ls
{repo_root}/asf-dist/dev/airflow/task-sdk/{task_sdk_version}"])
+ run_command([f"ls {version}/"])
+ run_command([f"ls task-sdk/{task_sdk_version}/"])
def push_artifacts_to_asf_repo(version, task_sdk_version, repo_root):
@@ -768,6 +784,8 @@ def publish_release_candidate(
tarball_type=TarBallType.AIRFLOW,
tag=version,
)
+ # test airflow
+ test_airflow()
# Sign the release
sign_the_release(airflow_repo_root)
# Tag and push constraints
diff --git a/dev/breeze/src/airflow_breeze/commands/release_command.py
b/dev/breeze/src/airflow_breeze/commands/release_command.py
index f72616f3401..784fa17ab23 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_command.py
@@ -210,6 +210,9 @@ def remove_old_release(version, task_sdk_version,
svn_release_repo):
if entry.name == version:
# Don't remove the current release
continue
+ if entry.name == "2.11.0":
+ # Don't remove airflow 2.11.0
+ continue
if entry.is_dir() and RELEASE_PATTERN.match(entry.name):
old_airflow_releases.append(entry.name)
old_airflow_releases.sort()
diff --git a/dev/breeze/tests/test_release_candidate_command.py
b/dev/breeze/tests/test_release_candidate_command.py
index 049d45b3cfb..a2172b3ceca 100644
--- a/dev/breeze/tests/test_release_candidate_command.py
+++ b/dev/breeze/tests/test_release_candidate_command.py
@@ -423,11 +423,8 @@ def
test_move_artifacts_to_svn_completes_successfully(monkeypatch, rc_cmd):
)
assert "[success]Moved artifacts to SVN:" in console_messages
# Verify ls commands
- assert any(cmd == [f"ls {repo_root}/asf-dist/dev/airflow/{version}"] for
cmd, kwargs in run_command_calls)
- assert any(
- cmd == [f"ls
{repo_root}/asf-dist/dev/airflow/task-sdk/{task_sdk_version}"]
- for cmd, kwargs in run_command_calls
- )
+ assert any(cmd == [f"ls {version}/"] for cmd, kwargs in run_command_calls)
+ assert any(cmd == [f"ls task-sdk/{task_sdk_version}/"] for cmd, kwargs in
run_command_calls)
def
test_push_artifacts_to_asf_repo_returns_early_when_user_declines(monkeypatch,
rc_cmd):