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 c322a556496 Clarify Breeze CI image build helper names (#71912)
c322a556496 is described below

commit c322a556496d8afeb3af0f506c3b8300fae285d7
Author: Andrew Chang <[email protected]>
AuthorDate: Fri Aug 21 15:44:03 2026 +0400

    Clarify Breeze CI image build helper names (#71912)
---
 .../airflow_breeze/commands/ci_image_commands.py   | 11 ++++-----
 .../airflow_breeze/commands/developer_commands.py  | 15 ++++++------
 .../airflow_breeze/commands/registry_commands.py   |  6 ++---
 .../commands/release_management_commands.py        |  8 +++----
 .../airflow_breeze/commands/testing_commands.py    |  6 ++---
 dev/breeze/tests/test_ci_image_commands.py         | 28 +++++++++++-----------
 dev/breeze/tests/test_developer_commands.py        | 10 ++++----
 7 files changed, 40 insertions(+), 44 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py 
b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
index bf7e12cc756..38dd2c7e52d 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
@@ -143,7 +143,7 @@ def check_if_image_building_is_needed(ci_image_params: 
BuildCiParams, output: Ou
     if result.returncode != 0:
         return True
     if not ci_image_params.force_build and not 
ci_image_params.upgrade_to_newer_dependencies:
-        if not should_we_run_the_build(build_ci_params=ci_image_params):
+        if not 
confirm_build_if_sources_changed(build_ci_params=ci_image_params):
             return False
     return True
 
@@ -765,10 +765,9 @@ def 
is_ci_image_built_from_current_sources(ci_image_params: BuildCiParams) -> bo
     return image_sources_hash == calculate_ci_sources_hash()
 
 
-def should_we_run_the_build(build_ci_params: BuildCiParams) -> bool:
+def confirm_build_if_sources_changed(build_ci_params: BuildCiParams) -> bool:
     """
-    Check if we should run the build based on what files have been modified 
since last build and answer from
-    the user.
+    Confirm whether to build based on important source changes and the user's 
answer.
 
     * If the image already matches current sources (e.g. it was built in 
another git worktree
       sharing the same Docker daemon), the local build cache is refreshed and 
no build is needed
@@ -926,9 +925,9 @@ def run_build_ci_image(
     return build_command_result.returncode, f"Image build: {param_description}"
 
 
-def rebuild_or_pull_ci_image_if_needed(command_params: ShellParams | 
BuildCiParams) -> None:
+def build_ci_image_if_needed(command_params: ShellParams | BuildCiParams) -> 
None:
     """
-    Rebuilds CI image if needed and user confirms it.
+    Build the CI image if needed and the user confirms it.
 
     :param command_params: parameters of the command to execute
     """
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py 
b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index b9d880a7f55..55e09fd40b5 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -31,7 +31,7 @@ from time import sleep
 import click
 
 from airflow_breeze.branch_defaults import DEFAULT_AIRFLOW_CONSTRAINTS_BRANCH
-from airflow_breeze.commands.ci_image_commands import 
rebuild_or_pull_ci_image_if_needed
+from airflow_breeze.commands.ci_image_commands import build_ci_image_if_needed
 from airflow_breeze.commands.common_options import (
     argument_doc_packages,
     option_airflow_extras,
@@ -506,7 +506,7 @@ def shell(
         warn_image_upgrade_needed=warn_image_upgrade_needed,
     )
     perform_environment_checks(quiet=shell_params.quiet)
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
     result = enter_shell(shell_params=shell_params)
     fix_ownership_using_docker()
     sys.exit(result.returncode)
@@ -737,7 +737,7 @@ def start_airflow(
         use_distributions_from_dist=use_distributions_from_dist,
         use_uv=use_uv,
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
     result = enter_shell(shell_params=shell_params)
     fix_ownership_using_docker()
     if CELERY_INTEGRATION in integration and executor not in 
ALLOWED_CELERY_EXECUTORS:
@@ -908,7 +908,7 @@ def _build_python_docs(
         python=DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
         builder=builder,
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=build_params)
+    build_ci_image_if_needed(command_params=build_params)
     if clean_build:
         directories_to_clean = ["_build", "_doctrees", "apis"]
     else:
@@ -1279,7 +1279,7 @@ def autogenerate(
     build_params = BuildCiParams(
         github_repository=github_repository, 
python=DEFAULT_PYTHON_MAJOR_MINOR_VERSION, builder=builder
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=build_params)
+    build_ci_image_if_needed(command_params=build_params)
     shell_params = ShellParams(
         github_repository=github_repository,
         python=DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
@@ -1410,7 +1410,7 @@ def run(
     """
     import uuid
 
-    from airflow_breeze.commands.ci_image_commands import 
rebuild_or_pull_ci_image_if_needed
+    from airflow_breeze.commands.ci_image_commands import 
build_ci_image_if_needed
     from airflow_breeze.params.shell_params import ShellParams
     from airflow_breeze.utils.ci_group import ci_group
     from airflow_breeze.utils.docker_command_utils import (
@@ -1462,8 +1462,7 @@ def run(
         console_print(f"[info]Running command in Breeze: {full_command}[/]")
         console_print(f"[info]Using project name: {unique_project_name}[/]")
 
-    # Build or pull the CI image if needed
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
 
     # Execute the command in the shell, cleaning up Docker resources afterward
     try:
diff --git a/dev/breeze/src/airflow_breeze/commands/registry_commands.py 
b/dev/breeze/src/airflow_breeze/commands/registry_commands.py
index 8342c92808f..97164351518 100644
--- a/dev/breeze/src/airflow_breeze/commands/registry_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/registry_commands.py
@@ -26,7 +26,7 @@ from pathlib import Path
 import click
 import yaml
 
-from airflow_breeze.commands.ci_image_commands import 
rebuild_or_pull_ci_image_if_needed
+from airflow_breeze.commands.ci_image_commands import build_ci_image_if_needed
 from airflow_breeze.commands.common_options import option_dry_run, 
option_python, option_verbose
 from airflow_breeze.params.shell_params import ShellParams
 from airflow_breeze.utils.ci_group import ci_group
@@ -97,7 +97,7 @@ def extract_data(python: str, provider: str | None, 
allow_unreleased: bool):
         extra_args=(),
     )
 
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
 
     # Install suspended providers that aren't in the CI image so runtime
     # discovery (issubclass) can find their classes.
@@ -313,7 +313,7 @@ def _backfill_docker(
         extra_args=(),
     )
 
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
 
     # Place isolated providers.json under dev/registry/ so it's visible inside 
the container
     # at /opt/airflow/dev/registry/
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index c4d9202e0eb..42804855910 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -44,7 +44,7 @@ from rich.progress import Progress
 from rich.syntax import Syntax
 
 from airflow_breeze.branch_defaults import AIRFLOW_BRANCH
-from airflow_breeze.commands.ci_image_commands import 
rebuild_or_pull_ci_image_if_needed
+from airflow_breeze.commands.ci_image_commands import build_ci_image_if_needed
 from airflow_breeze.commands.common_options import (
     argument_doc_packages,
     option_airflow_extras,
@@ -1788,7 +1788,7 @@ def install_provider_distributions(
         use_airflow_version=use_airflow_version,
         use_distributions_from_dist=use_distributions_from_dist,
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
     if run_in_parallel:
         list_of_all_providers = get_all_providers_in_dist(
             distribution_format=distribution_format, 
install_selected_providers=install_selected_providers
@@ -1927,7 +1927,7 @@ def verify_provider_distributions(
         use_airflow_version=use_airflow_version,
         use_distributions_from_dist=use_distributions_from_dist,
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
     result_command = execute_command_in_shell(
         shell_params,
         project_name="breeze-providers",
@@ -4993,7 +4993,7 @@ def version_check(
         python=python,
         builder=builder,
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=build_params)
+    build_ci_image_if_needed(command_params=build_params)
     if os.environ.get("CI", "false") == "true":
         # Show output outside the group in CI
         print("::endgroup::")
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands.py 
b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
index 153de7034a3..bff08631040 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
@@ -29,7 +29,7 @@ from time import sleep
 import click
 from click import IntRange
 
-from airflow_breeze.commands.ci_image_commands import 
rebuild_or_pull_ci_image_if_needed
+from airflow_breeze.commands.ci_image_commands import build_ci_image_if_needed
 from airflow_breeze.commands.common_options import (
     option_airflow_ui_base_url,
     option_allow_pre_releases,
@@ -1427,7 +1427,7 @@ def python_api_client_tests(
         install_airflow_python_client=True,
         start_api_server_with_examples=True,
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
     fix_ownership_using_docker()
     cleanup_python_generated_files()
     perform_environment_checks()
@@ -1953,7 +1953,7 @@ def _run_test_command(
         run_tests=True,
         db_reset=db_reset if not skip_db_tests else False,
     )
-    rebuild_or_pull_ci_image_if_needed(command_params=shell_params)
+    build_ci_image_if_needed(command_params=shell_params)
     fix_ownership_using_docker()
     cleanup_python_generated_files()
     perform_environment_checks()
diff --git a/dev/breeze/tests/test_ci_image_commands.py 
b/dev/breeze/tests/test_ci_image_commands.py
index b32ef02919f..492385b71de 100644
--- a/dev/breeze/tests/test_ci_image_commands.py
+++ b/dev/breeze/tests/test_ci_image_commands.py
@@ -23,10 +23,10 @@ from unittest import mock
 import pytest
 
 from airflow_breeze.commands.ci_image_commands import (
+    build_ci_image_if_needed,
+    confirm_build_if_sources_changed,
     get_ci_image_sources_hash_label,
     is_ci_image_built_from_current_sources,
-    rebuild_or_pull_ci_image_if_needed,
-    should_we_run_the_build,
 )
 from airflow_breeze.global_constants import CI_IMAGE_SOURCES_HASH_LABEL
 from airflow_breeze.params.build_ci_params import BuildCiParams
@@ -92,26 +92,26 @@ def test_is_ci_image_built_from_current_sources(
 
 @mock.patch("airflow_breeze.commands.ci_image_commands.mark_image_as_rebuilt")
 
@mock.patch("airflow_breeze.commands.ci_image_commands.is_ci_image_built_from_current_sources")
-def 
test_should_we_run_the_build_skips_build_when_image_matches_current_sources(
+def 
test_confirm_build_if_sources_changed_skips_build_when_image_matches_current_sources(
     mock_is_ci_image_built_from_current_sources, mock_mark_image_as_rebuilt
 ):
     mock_is_ci_image_built_from_current_sources.return_value = True
     build_ci_params = BuildCiParams()
-    assert should_we_run_the_build(build_ci_params) is False
+    assert confirm_build_if_sources_changed(build_ci_params) is False
     
mock_mark_image_as_rebuilt.assert_called_once_with(ci_image_params=build_ci_params)
 
 
 
@mock.patch("airflow_breeze.commands.ci_image_commands.md5sum_check_if_build_is_needed")
 @mock.patch("airflow_breeze.commands.ci_image_commands.mark_image_as_rebuilt")
 
@mock.patch("airflow_breeze.commands.ci_image_commands.is_ci_image_built_from_current_sources")
-def 
test_should_we_run_the_build_falls_back_to_md5_check_when_image_does_not_match(
+def 
test_confirm_build_if_sources_changed_falls_back_to_md5_check_when_image_does_not_match(
     mock_is_ci_image_built_from_current_sources,
     mock_mark_image_as_rebuilt,
     mock_md5sum_check_if_build_is_needed,
 ):
     mock_is_ci_image_built_from_current_sources.return_value = False
     mock_md5sum_check_if_build_is_needed.return_value = False
-    assert should_we_run_the_build(BuildCiParams()) is False
+    assert confirm_build_if_sources_changed(BuildCiParams()) is False
     mock_mark_image_as_rebuilt.assert_not_called()
     mock_md5sum_check_if_build_is_needed.assert_called_once()
 
@@ -119,7 +119,7 @@ def 
test_should_we_run_the_build_falls_back_to_md5_check_when_image_does_not_mat
 @mock.patch("airflow_breeze.commands.ci_image_commands.run_build_ci_image")
 @mock.patch("airflow_breeze.commands.ci_image_commands.mark_image_as_rebuilt")
 
@mock.patch("airflow_breeze.commands.ci_image_commands.is_ci_image_built_from_current_sources")
-def test_rebuild_or_pull_reuses_image_built_in_another_checkout(
+def test_build_ci_image_if_needed_reuses_image_built_in_another_checkout(
     mock_is_ci_image_built_from_current_sources,
     mock_mark_image_as_rebuilt,
     mock_run_build_ci_image,
@@ -128,7 +128,7 @@ def 
test_rebuild_or_pull_reuses_image_built_in_another_checkout(
 ):
     
monkeypatch.setattr("airflow_breeze.commands.ci_image_commands.BUILD_CACHE_PATH",
 tmp_path)
     mock_is_ci_image_built_from_current_sources.return_value = True
-    rebuild_or_pull_ci_image_if_needed(command_params=BuildCiParams())
+    build_ci_image_if_needed(command_params=BuildCiParams())
     mock_mark_image_as_rebuilt.assert_called_once()
     mock_run_build_ci_image.assert_not_called()
 
@@ -136,7 +136,7 @@ def 
test_rebuild_or_pull_reuses_image_built_in_another_checkout(
 
@mock.patch("airflow_breeze.commands.ci_image_commands.check_if_image_building_is_needed")
 @mock.patch("airflow_breeze.commands.ci_image_commands.run_build_ci_image")
 
@mock.patch("airflow_breeze.commands.ci_image_commands.is_ci_image_built_from_current_sources")
-def test_rebuild_or_pull_forces_build_when_image_does_not_match_sources(
+def 
test_build_ci_image_if_needed_forces_build_when_image_does_not_match_sources(
     mock_is_ci_image_built_from_current_sources,
     mock_run_build_ci_image,
     mock_check_if_image_building_is_needed,
@@ -147,7 +147,7 @@ def 
test_rebuild_or_pull_forces_build_when_image_does_not_match_sources(
     mock_is_ci_image_built_from_current_sources.return_value = False
     mock_check_if_image_building_is_needed.return_value = True
     mock_run_build_ci_image.return_value = (0, "built")
-    rebuild_or_pull_ci_image_if_needed(command_params=BuildCiParams())
+    build_ci_image_if_needed(command_params=BuildCiParams())
     assert 
mock_check_if_image_building_is_needed.call_args.kwargs["ci_image_params"].force_build
 is True
     mock_run_build_ci_image.assert_called_once()
 
@@ -155,7 +155,7 @@ def 
test_rebuild_or_pull_forces_build_when_image_does_not_match_sources(
 
@mock.patch("airflow_breeze.commands.ci_image_commands.check_if_image_building_is_needed")
 @mock.patch("airflow_breeze.commands.ci_image_commands.run_build_ci_image")
 
@mock.patch("airflow_breeze.commands.ci_image_commands.is_ci_image_built_from_current_sources")
-def test_rebuild_or_pull_does_not_reuse_image_when_force_build_requested(
+def 
test_build_ci_image_if_needed_does_not_reuse_image_when_force_build_requested(
     mock_is_ci_image_built_from_current_sources,
     mock_run_build_ci_image,
     mock_check_if_image_building_is_needed,
@@ -165,14 +165,14 @@ def 
test_rebuild_or_pull_does_not_reuse_image_when_force_build_requested(
     
monkeypatch.setattr("airflow_breeze.commands.ci_image_commands.BUILD_CACHE_PATH",
 tmp_path)
     mock_check_if_image_building_is_needed.return_value = True
     mock_run_build_ci_image.return_value = (0, "built")
-    
rebuild_or_pull_ci_image_if_needed(command_params=BuildCiParams(force_build=True))
+    build_ci_image_if_needed(command_params=BuildCiParams(force_build=True))
     mock_is_ci_image_built_from_current_sources.assert_not_called()
     mock_run_build_ci_image.assert_called_once()
 
 
 
@mock.patch("airflow_breeze.commands.ci_image_commands.check_if_image_building_is_needed")
 
@mock.patch("airflow_breeze.commands.ci_image_commands.is_ci_image_built_from_current_sources")
-def test_rebuild_or_pull_does_not_query_docker_when_marker_present(
+def test_build_ci_image_if_needed_does_not_query_docker_when_marker_present(
     mock_is_ci_image_built_from_current_sources,
     mock_check_if_image_building_is_needed,
     tmp_path,
@@ -184,5 +184,5 @@ def 
test_rebuild_or_pull_does_not_query_docker_when_marker_present(
     marker.parent.mkdir(parents=True)
     marker.touch()
     mock_check_if_image_building_is_needed.return_value = False
-    rebuild_or_pull_ci_image_if_needed(command_params=command_params)
+    build_ci_image_if_needed(command_params=command_params)
     mock_is_ci_image_built_from_current_sources.assert_not_called()
diff --git a/dev/breeze/tests/test_developer_commands.py 
b/dev/breeze/tests/test_developer_commands.py
index 2336b0585ba..9c4a3a8f2f4 100644
--- a/dev/breeze/tests/test_developer_commands.py
+++ b/dev/breeze/tests/test_developer_commands.py
@@ -51,23 +51,21 @@ class TestBuildDocsPythonVersion:
 
     def _invoke(self, runner: CliRunner, args: list[str], env: dict[str, str] 
| None = None):
         with (
-            patch(
-                
"airflow_breeze.commands.developer_commands.rebuild_or_pull_ci_image_if_needed"
-            ) as mock_rebuild,
+            
patch("airflow_breeze.commands.developer_commands.build_ci_image_if_needed") as 
mock_build,
             
patch("airflow_breeze.commands.developer_commands.execute_command_in_shell") as 
mock_shell,
         ):
             mock_shell.return_value.returncode = 0
             runner.invoke(build_docs, args, env=env, catch_exceptions=False)
-        return mock_rebuild, mock_shell
+        return mock_build, mock_shell
 
     def test_environment_python_does_not_change_the_docs_build(self, runner):
         # PYTHON_MAJOR_MINOR_VERSION is set on every job of the docs 
publishing workflow, so an
         # option reading it silently decided what the docs were built with.
-        mock_rebuild, mock_shell = self._invoke(
+        mock_build, mock_shell = self._invoke(
             runner, ["--docs-only"], env={"PYTHON_MAJOR_MINOR_VERSION": "3.12"}
         )
 
-        assert mock_rebuild.call_args.kwargs["command_params"].python == 
DEFAULT_PYTHON_MAJOR_MINOR_VERSION
+        assert mock_build.call_args.kwargs["command_params"].python == 
DEFAULT_PYTHON_MAJOR_MINOR_VERSION
         assert mock_shell.call_args.args[0].python == 
DEFAULT_PYTHON_MAJOR_MINOR_VERSION
 
     def test_python_option_is_rejected(self, runner):

Reply via email to