This is an automated email from the ASF dual-hosted git repository.
ephraimanierobi 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 2de609e11d1 Update release command and guide (#60508)
2de609e11d1 is described below
commit 2de609e11d1eae81fd60efc5a70d55c98955323e
Author: Ephraim Anierobi <[email protected]>
AuthorDate: Thu Jan 15 21:13:01 2026 +0100
Update release command and guide (#60508)
* 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)
---
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 45f1732aecf..f80c6829212 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -531,6 +531,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
```
@@ -1155,7 +1156,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}
```
@@ -1192,11 +1192,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
@@ -1367,17 +1367,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 🎉
@@ -1391,6 +1380,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 2dcd6365fdf..904cba766af 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):