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 51f430285e2 fIX handling removal of dependencies (#42967)
51f430285e2 is described below

commit 51f430285e20e1ef43989e3bc123ae97b81c36e4
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sun Oct 13 04:46:16 2024 +0200

    fIX handling removal of dependencies (#42967)
    
    There was a problem with CI image builds when cache has been
    disabled - they still used "pre-cached" main version (unlike
    PROD builds). This PR synchronizes the behaviour between CI
    and PROD builds.
    
    For removing dependencies, you need to set both:
    
    * `disable docker cache` label
    * incerase DEPENDENCIES_EPOCH_NUMBER in `Dockerfile.ci`
    
    Comments and documentation in both places has been updated to
    reflect it.
    
    Since documentation for labels has been updated,
    Part of this PR is to improve the description of possible
    labels that could be used during the build.
    The description grew from a small number of labels to a
    "wall of text" that was difficult to read. This PR reformats it in the
    form of table that makes it far easier to see actions that the
    maintainer can do and what labels should be set for each of them.
---
 .github/workflows/additional-ci-image-checks.yml   |   7 ++
 .github/workflows/additional-prod-image-tests.yml  |   6 ++
 .github/workflows/build-images.yml                 |   4 +
 .github/workflows/ci-image-build.yml               |   5 +
 .github/workflows/ci.yml                           |   6 ++
 .github/workflows/finalize-tests.yml               |   5 +
 .github/workflows/prod-image-build.yml             |   6 ++
 .github/workflows/prod-image-extra-checks.yml      |   6 ++
 .github/workflows/push-image-cache.yml             |   6 ++
 Dockerfile.ci                                      |   5 +-
 dev/breeze/doc/ci/07_debugging.md                  |  67 +++++-------
 dev/breeze/doc/images/output_ci-image_build.svg    | 112 +++++++++++----------
 dev/breeze/doc/images/output_ci-image_build.txt    |   2 +-
 dev/breeze/doc/images/output_prod-image_build.txt  |   2 +-
 .../airflow_breeze/commands/ci_image_commands.py   |   4 +
 .../commands/ci_image_commands_config.py           |   1 +
 .../commands/common_image_options.py               |   7 ++
 .../commands/production_image_commands.py          |   7 +-
 .../src/airflow_breeze/params/build_ci_params.py   |   1 -
 .../src/airflow_breeze/params/build_prod_params.py |   5 -
 .../airflow_breeze/params/common_build_params.py   |   5 +-
 .../src/airflow_breeze/utils/selective_checks.py   |   4 +
 dev/breeze/tests/test_selective_checks.py          |  20 ++++
 23 files changed, 179 insertions(+), 114 deletions(-)

diff --git a/.github/workflows/additional-ci-image-checks.yml 
b/.github/workflows/additional-ci-image-checks.yml
index ae9efdb6b03..878800324b7 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -64,6 +64,10 @@ on:  # yamllint disable-line rule:truthy
         description: "Docker cache specification to build the image (registry, 
local, disabled)."
         required: true
         type: string
+      disable-airflow-repo-cache:
+        description: "Disable airflow repo cache read from main."
+        required: true
+        type: string
       canary-run:
         description: "Whether this is a canary run (true/false)"
         required: true
@@ -112,6 +116,7 @@ jobs:
       use-uv: "true"
       include-success-outputs: ${{ inputs.include-success-outputs }}
       docker-cache: ${{ inputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
     if: inputs.branch == 'main'
 
   # Check that after earlier cache push, breeze command will build quickly
@@ -168,3 +173,5 @@ jobs:
 #      use-uv: "true"
 #      upgrade-to-newer-dependencies: ${{ inputs.upgrade-to-newer-dependencies 
}}
 #      docker-cache: ${{ inputs.docker-cache }}
+#      disable-airflow-repo-cache:  ${{ inputs.disable-airflow-repo-cache }}
+#
diff --git a/.github/workflows/additional-prod-image-tests.yml 
b/.github/workflows/additional-prod-image-tests.yml
index 4c9606e1343..5ffd2001e0e 100644
--- a/.github/workflows/additional-prod-image-tests.yml
+++ b/.github/workflows/additional-prod-image-tests.yml
@@ -48,6 +48,10 @@ on:  # yamllint disable-line rule:truthy
         description: "Docker cache specification to build the image (registry, 
local, disabled)."
         required: true
         type: string
+      disable-airflow-repo-cache:
+        description: "Disable airflow repo cache read from main."
+        required: true
+        type: string
       canary-run:
         description: "Whether to run the canary run (true/false)"
         required: true
@@ -72,6 +76,7 @@ jobs:
       chicken-egg-providers: ${{ inputs.chicken-egg-providers }}
       constraints-branch: ${{ inputs.constraints-branch }}
       docker-cache: ${{ inputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
     if: inputs.default-branch == 'main' && inputs.canary-run == 'true'
 
   prod-image-extra-checks-release-branch:
@@ -89,6 +94,7 @@ jobs:
       chicken-egg-providers: ${{ inputs.chicken-egg-providers }}
       constraints-branch: ${{ inputs.constraints-branch }}
       docker-cache: ${{ inputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
     if: inputs.default-branch != 'main' && inputs.canary-run == 'true'
 
   test-examples-of-prod-image-building:
diff --git a/.github/workflows/build-images.yml 
b/.github/workflows/build-images.yml
index 6c6d55d7504..943b01f8f89 100644
--- a/.github/workflows/build-images.yml
+++ b/.github/workflows/build-images.yml
@@ -71,6 +71,7 @@ jobs:
       prod-image-build: ${{ steps.selective-checks.outputs.prod-image-build }}
       docker-cache: ${{ steps.selective-checks.outputs.docker-cache }}
       default-branch: ${{ steps.selective-checks.outputs.default-branch }}
+      disable-airflow-repo-cache: ${{ 
steps.selective-checks.outputs.disable-airflow-repo-cache }}
       constraints-branch: ${{ 
steps.selective-checks.outputs.default-constraints-branch }}
       runs-on-as-json-default: ${{ 
steps.selective-checks.outputs.runs-on-as-json-default }}
       runs-on-as-json-public: ${{ 
steps.selective-checks.outputs.runs-on-as-json-public }}
@@ -210,6 +211,8 @@ jobs:
       constraints-branch: ${{ needs.build-info.outputs.constraints-branch }}
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
+
 
   generate-constraints:
     name: Generate constraints
@@ -256,3 +259,4 @@ jobs:
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
       chicken-egg-providers: ${{ 
needs.build-info.outputs.chicken-egg-providers }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
diff --git a/.github/workflows/ci-image-build.yml 
b/.github/workflows/ci-image-build.yml
index 1c4b31b55a6..b8e2feac175 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -95,6 +95,10 @@ on:  # yamllint disable-line rule:truthy
         description: "Docker cache specification to build the image (registry, 
local, disabled)."
         required: true
         type: string
+      disable-airflow-repo-cache:
+        description: "Disable airflow repo cache read from main."
+        required: true
+        type: string
 jobs:
   build-ci-images:
     strategy:
@@ -171,6 +175,7 @@ ${{ inputs.do-build == 'true' && inputs.image-tag || '' }}"
           --python "${{ matrix.python-version }}" --platform "${{ 
inputs.platform }}"
         env:
           DOCKER_CACHE: ${{ inputs.docker-cache }}
+          DISABLE_AIRFLOW_REPO_CACHE: ${{ inputs.disable-airflow-repo-cache }}
           INSTALL_MYSQL_CLIENT_TYPE: ${{ inputs.install-mysql-client-type }}
           UPGRADE_TO_NEWER_DEPENDENCIES: ${{ 
inputs.upgrade-to-newer-dependencies }}
           # You can override CONSTRAINTS_GITHUB_REPOSITORY by setting secret 
in your repo but by default the
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2267154b03a..8a9d716cd84 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -57,6 +57,7 @@ jobs:
     outputs:
       image-tag: ${{ github.event.pull_request.head.sha || github.sha }}
       docker-cache: ${{ steps.selective-checks.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
steps.selective-checks.outputs.disable-airflow-repo-cache }}
       affected-providers-list-as-string: >-
         ${{ steps.selective-checks.outputs.affected-providers-list-as-string }}
       upgrade-to-newer-dependencies: ${{ 
steps.selective-checks.outputs.upgrade-to-newer-dependencies }}
@@ -208,6 +209,7 @@ jobs:
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
       constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
 
   wait-for-ci-images:
     timeout-minutes: 120
@@ -264,6 +266,7 @@ jobs:
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
       skip-pre-commits: ${{ needs.build-info.outputs.skip-pre-commits }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
       canary-run: ${{ needs.build-info.outputs.canary-run }}
       latest-versions-only: ${{ needs.build-info.outputs.latest-versions-only 
}}
       include-success-outputs: ${{ 
needs.build-info.outputs.include-success-outputs }}
@@ -559,6 +562,7 @@ jobs:
       chicken-egg-providers: ${{ 
needs.build-info.outputs.chicken-egg-providers }}
       constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
 
   wait-for-prod-images:
     timeout-minutes: 80
@@ -615,6 +619,7 @@ jobs:
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
       chicken-egg-providers: ${{ 
needs.build-info.outputs.chicken-egg-providers }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
       default-python-version: ${{ 
needs.build-info.outputs.default-python-version }}
       canary-run: ${{ needs.build-info.outputs.canary-run }}
     if: needs.build-info.outputs.prod-image-build == 'true'
@@ -670,6 +675,7 @@ jobs:
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
       include-success-outputs: ${{ 
needs.build-info.outputs.include-success-outputs }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
       canary-run: ${{ needs.build-info.outputs.canary-run }}
 
   notify-slack-failure:
diff --git a/.github/workflows/finalize-tests.yml 
b/.github/workflows/finalize-tests.yml
index 8b392ba2046..6fae105e0a6 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -64,6 +64,10 @@ on:  # yamllint disable-line rule:truthy
         description: "Docker cache specification to build the image (registry, 
local, disabled)."
         required: true
         type: string
+      disable-airflow-repo-cache:
+        description: "Disable airflow repo cache read from main."
+        required: true
+        type: string
       include-success-outputs:
         description: "Whether to include success outputs (true/false)"
         required: true
@@ -148,6 +152,7 @@ jobs:
       use-uv: "true"
       include-success-outputs: ${{ inputs.include-success-outputs }}
       docker-cache: ${{ inputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
     if: inputs.canary-run == 'true'
 
   #  push-buildx-cache-to-github-registry-arm:
diff --git a/.github/workflows/prod-image-build.yml 
b/.github/workflows/prod-image-build.yml
index 75d9d0054ec..db80a6ec247 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -114,6 +114,10 @@ on:  # yamllint disable-line rule:truthy
         description: "Docker cache specification to build the image (registry, 
local, disabled)."
         required: true
         type: string
+      disable-airflow-repo-cache:
+        description: "Disable airflow repo cache read from main."
+        required: true
+        type: string
 jobs:
 
   build-prod-packages:
@@ -276,6 +280,7 @@ ${{ inputs.do-build == 'true' && inputs.image-tag || '' }}"
         env:
           PUSH: ${{ inputs.push-image }}
           DOCKER_CACHE: ${{ inputs.docker-cache }}
+          DISABLE_AIRFLOW_REPO_CACHE: ${{ inputs.disable-airflow-repo-cache }}
           DEBIAN_VERSION: ${{ inputs.debian-version }}
           INSTALL_MYSQL_CLIENT_TYPE: ${{ inputs.install-mysql-client-type }}
           UPGRADE_TO_NEWER_DEPENDENCIES: ${{ 
inputs.upgrade-to-newer-dependencies }}
@@ -291,6 +296,7 @@ ${{ inputs.do-build == 'true' && inputs.image-tag || '' }}"
         env:
           PUSH: ${{ inputs.push-image }}
           DOCKER_CACHE: ${{ inputs.docker-cache }}
+          DISABLE_AIRFLOW_REPO_CACHE: ${{ inputs.disable-airflow-repo-cache }}
           DEBIAN_VERSION: ${{ inputs.debian-version }}
           INSTALL_MYSQL_CLIENT_TYPE: ${{ inputs.install-mysql-client-type }}
           UPGRADE_TO_NEWER_DEPENDENCIES: ${{ 
inputs.upgrade-to-newer-dependencies }}
diff --git a/.github/workflows/prod-image-extra-checks.yml 
b/.github/workflows/prod-image-extra-checks.yml
index 82d327ba2f1..bb63faef7b2 100644
--- a/.github/workflows/prod-image-extra-checks.yml
+++ b/.github/workflows/prod-image-extra-checks.yml
@@ -63,6 +63,10 @@ on:  # yamllint disable-line rule:truthy
         description: "Docker cache specification to build the image (registry, 
local, disabled)."
         required: true
         type: string
+      disable-airflow-repo-cache:
+        description: "Disable airflow repo cache read from main."
+        required: true
+        type: string
 jobs:
   myssql-client-image:
     uses: ./.github/workflows/prod-image-build.yml
@@ -84,6 +88,7 @@ jobs:
       chicken-egg-providers: ${{ inputs.chicken-egg-providers }}
       constraints-branch: ${{ inputs.constraints-branch }}
       docker-cache: ${{ inputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
 
   pip-image:
     uses: ./.github/workflows/prod-image-build.yml
@@ -107,3 +112,4 @@ jobs:
       chicken-egg-providers: ${{ inputs.chicken-egg-providers }}
       constraints-branch: ${{ inputs.constraints-branch }}
       docker-cache: ${{ inputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
diff --git a/.github/workflows/push-image-cache.yml 
b/.github/workflows/push-image-cache.yml
index 0dc83a3fd66..10a33275ad3 100644
--- a/.github/workflows/push-image-cache.yml
+++ b/.github/workflows/push-image-cache.yml
@@ -76,6 +76,10 @@ on:  # yamllint disable-line rule:truthy
         description: "Docker cache specification to build the image (registry, 
local, disabled)."
         required: true
         type: string
+      disable-airflow-repo-cache:
+        description: "Disable airflow repo cache read from main."
+        required: true
+        type: string
 jobs:
   push-ci-image-cache:
     name: "Push CI ${{ inputs.cache-type }}:${{ matrix.python }} image cache "
@@ -100,6 +104,7 @@ jobs:
       DEFAULT_BRANCH: ${{ inputs.branch }}
       DEFAULT_CONSTRAINTS_BRANCH: ${{ inputs.constraints-branch }}
       DOCKER_CACHE: ${{ inputs.docker-cache }}
+      DISABLE_AIRFLOW_REPO_CACHE: ${{ inputs.disable-airflow-repo-cache }}
       GITHUB_REPOSITORY: ${{ github.repository }}
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       GITHUB_USERNAME: ${{ github.actor }}
@@ -162,6 +167,7 @@ jobs:
       DEFAULT_BRANCH: ${{ inputs.branch }}
       DEFAULT_CONSTRAINTS_BRANCH: ${{ inputs.constraints-branch }}
       DOCKER_CACHE: ${{ inputs.docker-cache }}
+      DISABLE_AIRFLOW_REPO_CACHE: ${{ inputs.disable-airflow-repo-cache }}
       GITHUB_REPOSITORY: ${{ github.repository }}
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       GITHUB_USERNAME: ${{ github.actor }}
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 9339e9af6d6..464e33f147f 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1180,7 +1180,10 @@ SHELL ["/bin/bash", "-o", "pipefail", "-o", "errexit", 
"-o", "nounset", "-o", "n
 ARG PYTHON_BASE_IMAGE
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow";
 
-# By increasing this number we can do force build of all dependencies
+# By increasing this number we can do force build of all dependencies.
+# NOTE! When you want to make sure dependencies are installed from scratch in 
your PR after removing
+# some dependencies, you also need to set "disable image cache" in your PR to 
make sure the image is
+# not built using the "main" version of those dependencies.
 ARG DEPENDENCIES_EPOCH_NUMBER="11"
 
 # Make sure noninteractive debian install is used and language variables set
diff --git a/dev/breeze/doc/ci/07_debugging.md 
b/dev/breeze/doc/ci/07_debugging.md
index 6e6d46584ed..9e7173ae847 100644
--- a/dev/breeze/doc/ci/07_debugging.md
+++ b/dev/breeze/doc/ci/07_debugging.md
@@ -21,11 +21,11 @@
 <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
 **Table of Contents**  *generated with 
[DocToc](https://github.com/thlorenz/doctoc)*
 
-- [Debugging CI Jobs in Github Actions](#debugging-ci-jobs-in-github-actions)
+- [Debugging CI Jobs in Github Actions and changing their 
behaviour](#debugging-ci-jobs-in-github-actions-and-changing-their-behaviour)
 
 <!-- END doctoc generated TOC please keep comment here to allow auto update -->
 
-# Debugging CI Jobs in Github Actions
+# Debugging CI Jobs in Github Actions and changing their behaviour
 
 The CI jobs are notoriously difficult to test, because you can only
 really see results of it when you run them in CI environment, and the
@@ -39,49 +39,28 @@ difficulty is that `Build Images` workflow is 
`pull-request-target`
 type, which means that it will always run using the `main` version - no
 matter what is in your Pull Request.
 
-There are several ways how you can debug the CI jobs when you are
-maintainer.
+There are several ways how you can debug the CI jobs and modify their
+behaviour when you are maintainer.
+
+When you create the PR you can set one of the labels below, also
+in some cases, you need to run the PR as coming from the "apache"
+repository rather than from your fork.
+
+You can also apply the label later and rebase the PR or close/reopen
+the PR to apply the label to the PR.
+
+| Action to perform                                                            
                                                                                
    | Label to set          | PR from "apache" repo |
+|------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|:---------------------:|
+| Run the build with all combinations of all<br>python, backends, kubernetes 
etc on PR, <br>and run all types of tests for all test<br>groups.               
      | full tests needed     |                       |
+| Force to use public runners for the build                                    
                                                                                
    | use public runners    |                       |
+| Debug resources used during the build for <br>parallel jobs                  
                                                                                
    | debug ci resources    |                       |
+| Force running PR on latest versions of<br>python, backends, kubernetes etc. 
when you<br>want to save resources and test only latest<br>versions             
     | latest versions only  |                       |
+| Force running PR on minimal (default) <br>versions of python, backends, 
kubernetes etc.<br>in order to save resources and run tests only<br>for minimum 
versions | default versions only |                       |
+| Make sure to clean dependency cache<br>usually when removing 
dependencies<br>You also need to increase<br> `DEPENDENCIES_EPOCH_NUMBER` in 
`Dockerfile.ci`        | disable image cache   |                       |
+| Change build images workflows, breeze code or<br>scripts that are used 
during image build<br>so that the scripts can be modified by PR<br>             
          |                       |          Yes          |
+| Treat your build as "canary" build - including<br>updating constraints and 
pushing "main"<br>documentation.                                                
      |                       |          Yes          |
+| Remove any behaviour specific for the committers<br>such as using different 
runners by default.                                                             
     | non committer build   |                       |
 
-- When you want to tests the build with all combinations of all python,
-  backends etc on regular PR, add `full tests needed` label to the PR.
-- When you want to test maintainer PR using public runners, add
-  `public runners` label to the PR
-- When you want to see resources used by the run, add
-  `debug ci resources` label to the PR
-- When you want to test changes to breeze that include changes to how
-  images are build you should push your PR to `apache` repository not to
-  your fork. This will run the images as part of the `CI` workflow
-  rather than using `Build images` workflow and use the same breeze
-  version for building image and testing
-- When you want to test changes to workflows and CI scripts you can set
-  `all versions` label to the PR or `latest versions only`.
-  This will make the PR run using "all" versions of
-  Python, Kubernetes and the DBS. By default - unless you also change
-  dependencies in `pyproject.toml` or `generated/provider_dependencies.json`
-  such PRs will only use "default" versions of Python, Kubernetes and
-  DBs. This is useful when you want to test changes to the CI scripts
-  are not affected by the versions of Python, Kubernetes and DBs.
-- Even if you change dependencies in `pyproject.toml`, or
-  `generated/provider_dependencies.json`, when you want to test changes to 
workflows
-  and CI scripts you can set `default versions only` label to the
-  This will make the PR run using the default (or latest) versions of
-  Python and Kubernetes and DBs. This is useful when you want to test
-  changes to the CI scripts and workflows and you want to use far
-  less resources than the full tests.
-- When you want to test changes to `build-images.yml` workflow you
-  should push your branch as `main` branch in your local fork. This will
-  run changed `build-images.yml` workflow as it will be in `main` branch
-  of your fork
-- When you are a committer and you change build images workflow, together
-  with build scripts, your build might fail because your scripts are used
-  in `build-images.yml` workflow, but the workflow is run using the `main`
-  version. Setting `non committer build` label will make your PR run using
-  the main version of the scripts and the workflow
-- When you are a committer want to test how changes in your workflow affect
-  `canary` run, as maintainer, you should push your PR to `apache` repository
-  not to your fork and set `canary` label to the PR
-- When you are a committer and want to test if the tests are passing if the
-  image is freshly built without cache, you can set `disable image cache` 
label.
 
 -----
 
diff --git a/dev/breeze/doc/images/output_ci-image_build.svg 
b/dev/breeze/doc/images/output_ci-image_build.svg
index 6dd856c3dc8..62339f70539 100644
--- a/dev/breeze/doc/images/output_ci-image_build.svg
+++ b/dev/breeze/doc/images/output_ci-image_build.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2416.7999999999997" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 2441.2" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-ci-image-build-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2365.7999999999997" />
+      <rect x="0" y="0" width="1463.0" height="2390.2" />
     </clipPath>
     <clipPath id="breeze-ci-image-build-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -333,9 +333,12 @@
 <clipPath id="breeze-ci-image-build-line-95">
     <rect x="0" y="2319.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-ci-image-build-line-96">
+    <rect x="0" y="2343.9" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="2414.8" rx="8"/><text 
class="breeze-ci-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;ci-image&#160;build</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="2439.2" rx="8"/><text 
class="breeze-ci-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;ci-image&#160;build</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -391,57 +394,58 @@
 </text><text class="breeze-ci-image-build-r5" x="0" y="1069.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-43)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1069.2" textLength="146.4" 
clip-path="url(#breeze-ci-image-build-line-43)">--commit-sha</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1069.2" textLength="536.8" 
clip-path="url(#breeze-ci-image-build-line-43)">Commit&#160;SHA&#160;that&#160;is&#160;used&#160;to&#160;build&#160;the&#160;images
 [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="1093.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-44)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1093.6" textLength="195.2" 
clip-path="url(#breeze-ci-image-build-line-44)">--debian-version</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1093.6" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-44)">Debian&#160;version&#160;used&#160;in&#160;Airflow&#160;image&#160;as&#160;base&#
 [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="1118" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-45)">│</text><text 
class="breeze-ci-image-build-r5" x="439.2" y="1118" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-45)">[default:&#160;bookworm]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1142.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1142.4" textLength="329.4" 
clip-path="url(#breeze-ci-image-build-line-46)">--install-mysql-client-type</text><text
 class="breeze-ci-image-build-r1" x="439.2" y="1142.4" textLength="475.8" 
clip-path="url(#breeze-ci-image-build-line-46)">Which&#160;client&#160;to&#160;choose&#160;when&#160;installing.</te
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1166.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1166.8" textLength="170.8" 
clip-path="url(#breeze-ci-image-build-line-47)">--python-image</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1166.8" textLength="1000.4" 
clip-path="url(#breeze-ci-image-build-line-47)">If&#160;specified&#160;this&#160;is&#160;the&#160;base&#160;python&#160;image&#1
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1191.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">│</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1191.2" textLength="1000.4" 
clip-path="url(#breeze-ci-image-build-line-48)">something&#160;like:&#160;python:VERSION-slim-bookworm.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1215.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-49)">│</text><text 
class="breeze-ci-image-build-r7" x="439.2" y="1215.6" textLength="1000.4" 
clip-path="url(#breeze-ci-image-build-line-49)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1240" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-50)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1240" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-50)">--use-uv</text><text 
class="breeze-ci-image-build-r1" x="122" y="1240" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-50)">/</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1240" textLength="134.2" 
clip-path="u [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1264.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1264.4" textLength="207.4" 
clip-path="url(#breeze-ci-image-build-line-51)">--uv-http-timeout</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1264.4" textLength="829.6" 
clip-path="url(#breeze-ci-image-build-line-51)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;us
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1288.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">│</text><text 
class="breeze-ci-image-build-r7" x="439.2" y="1288.8" textLength="829.6" 
clip-path="url(#breeze-ci-image-build-line-52)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1313.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">│</text><text 
class="breeze-ci-image-build-r5" x="439.2" y="1313.2" textLength="829.6" 
clip-path="url(#breeze-ci-image-build-line-53)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1337.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-54)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1337.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-54)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1362" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-55)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1362" textLength="597.8" 
clip-path="url(#breeze-ci-image-build-line-55)">&#160;Selecting&#160;constraint&#160;location&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="622.2" y="1362" textLength="817.4" 
clip-path="url(#breeze-ci-image-build-line-55)">──────────────── [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1386.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1386.4" textLength="366" 
clip-path="url(#breeze-ci-image-build-line-56)">--airflow-constraints-location</text><text
 class="breeze-ci-image-build-r1" x="451.4" y="1386.4" textLength="902.8" 
clip-path="url(#breeze-ci-image-build-line-56)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1410.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-57)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1410.8" textLength="317.2" 
clip-path="url(#breeze-ci-image-build-line-57)">--airflow-constraints-mode</text><text
 class="breeze-ci-image-build-r1" x="451.4" y="1410.8" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-57)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1435.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-58)">│</text><text 
class="breeze-ci-image-build-r7" x="451.4" y="1435.2" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-58)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text
 class="breeze-ci-image-build-r5" x="1451.8" y="1435.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-58)">│</ [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1459.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">│</text><text 
class="breeze-ci-image-build-r5" x="451.4" y="1459.6" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-59)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1484" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-60)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1484" textLength="378.2" 
clip-path="url(#breeze-ci-image-build-line-60)">--airflow-constraints-reference</text><text
 class="breeze-ci-image-build-r1" x="451.4" y="1484" textLength="634.4" 
clip-path="url(#breeze-ci-image-build-line-60)">Constraint&#160;reference&#160;to&#160;use&#160;when&#160;building&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1508.4" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-61)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1532.8" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-62)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1532.8" textLength="634.4" 
clip-path="url(#breeze-ci-image-build-line-62)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="658.8" y="1532.8" textLength="780.8" 
clip-path="url(#breeze-ci-image-build-line-62)">── [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1557.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-63)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1557.2" textLength="329.4" 
clip-path="url(#breeze-ci-image-build-line-63)">--additional-airflow-extras</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1557.2" textLength="768.6" 
clip-path="url(#breeze-ci-image-build-line-63)">Additional&#160;extra&#160;package&#160;while&#160;installing&#160;A
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1581.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-64)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1581.6" textLength="292.8" 
clip-path="url(#breeze-ci-image-build-line-64)">--additional-python-deps</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1581.6" textLength="768.6" 
clip-path="url(#breeze-ci-image-build-line-64)">Additional&#160;python&#160;dependencies&#160;to&#160;use&#160;when&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1606" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-65)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1606" textLength="170.8" 
clip-path="url(#breeze-ci-image-build-line-65)">--dev-apt-deps</text><text 
class="breeze-ci-image-build-r1" x="414.8" y="1606" textLength="646.6" 
clip-path="url(#breeze-ci-image-build-line-65)">Apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&#160;i
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1630.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-66)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1630.4" textLength="305" 
clip-path="url(#breeze-ci-image-build-line-66)">--additional-dev-apt-deps</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1630.4" textLength="780.8" 
clip-path="url(#breeze-ci-image-build-line-66)">Additional&#160;apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;whe
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1654.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1654.8" textLength="207.4" 
clip-path="url(#breeze-ci-image-build-line-67)">--dev-apt-command</text><text 
class="breeze-ci-image-build-r1" x="414.8" y="1654.8" textLength="622.2" 
clip-path="url(#breeze-ci-image-build-line-67)">Command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160;are&#160;in
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1679.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-68)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1679.2" textLength="341.6" 
clip-path="url(#breeze-ci-image-build-line-68)">--additional-dev-apt-command</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1679.2" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-68)">Additional&#160;command&#160;executed&#160;before&#160;dev&#160;apt
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1703.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-69)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1703.6" textLength="292.8" 
clip-path="url(#breeze-ci-image-build-line-69)">--additional-dev-apt-env</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1703.6" textLength="805.2" 
clip-path="url(#breeze-ci-image-build-line-69)">Additional&#160;environment&#160;variables&#160;set&#160;when&#160;addi
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1728" textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-70)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1728" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-70)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1752.4" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-71)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1752.4" textLength="268.4" 
clip-path="url(#breeze-ci-image-build-line-71)">&#160;Backtracking&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="292.8" y="1752.4" textLength="1146.8" 
clip-path="url(#breeze-ci-image-build-line-71)">────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1776.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1776.8" textLength="280.6" 
clip-path="url(#breeze-ci-image-build-line-72)">--build-timeout-minutes</text><text
 class="breeze-ci-image-build-r1" x="549" y="1776.8" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-72)">Optional&#160;timeout&#160;for&#160;the&#160;build&#160;in&#160;minutes.&#
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1801.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)">│</text><text 
class="breeze-ci-image-build-r1" x="549" y="1801.2" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-73)">backtracking&#160;problems.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1825.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-74)">│</text><text 
class="breeze-ci-image-build-r7" x="549" y="1825.6" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-74)">(INTEGER)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1850" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-75)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1850" textLength="475.8" 
clip-path="url(#breeze-ci-image-build-line-75)">--eager-upgrade-additional-requirements</text><text
 class="breeze-ci-image-build-r1" x="549" y="1850" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-75)">Optional&#160;additional&#160;requirements&#160;to&#160;upgrade&
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1874.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-76)">│</text><text 
class="breeze-ci-image-build-r1" x="549" y="1874.4" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-76)">(see&#160;`breeze&#160;ci&#160;find-backtracking-candidates`).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1898.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-77)">│</text><text 
class="breeze-ci-image-build-r7" x="549" y="1898.8" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-77)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1923.2" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1923.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-78)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1947.6" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-79)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1947.6" textLength="622.2" 
clip-path="url(#breeze-ci-image-build-line-79)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text
 class="breeze-ci-image-build-r5" x="646.6" y="1947.6" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-79)"> [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1972" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-80)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1972" textLength="109.8" 
clip-path="url(#breeze-ci-image-build-line-80)">--builder</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1972" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-80)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1996.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-81)">│</text><text 
class="breeze-ci-image-build-r5" x="341.6" y="1996.4" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-81)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2020.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-82)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2020.8" textLength="122" 
clip-path="url(#breeze-ci-image-build-line-82)">--platform</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="2020.8" textLength="329.4" 
clip-path="url(#breeze-ci-image-build-line-82)">Platform&#160;for&#160;Airflow&#160;image.</text><text
 class="breeze-ci-image-build-r7" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2045.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-83)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2045.2" textLength="73.2" 
clip-path="url(#breeze-ci-image-build-line-83)">--push</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="2045.2" textLength="353.8" 
clip-path="url(#breeze-ci-image-build-line-83)">Push&#160;image&#160;after&#160;building&#160;it.</text><text
 class="breeze-ci-image-build [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2069.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-84)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2069.6" textLength="268.4" 
clip-path="url(#breeze-ci-image-build-line-84)">--prepare-buildx-cache</text><text
 class="breeze-ci-image-build-r1" x="341.6" y="2069.6" textLength="1098" 
clip-path="url(#breeze-ci-image-build-line-84)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done&#160;as&#160;s
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2094" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-85)">│</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="2094" textLength="1098" 
clip-path="url(#breeze-ci-image-build-line-85)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2118.4" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2118.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-86)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="2142.8" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-87)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="2142.8" textLength="280.6" 
clip-path="url(#breeze-ci-image-build-line-87)">&#160;Github&#160;authentication&#160;</text><text
 class="breeze-ci-image-build-r5" x="305" y="2142.8" textLength="1134.6" 
clip-path="url(#breeze-ci-image-build-line-87)">─────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2167.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-88)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2167.2" textLength="231.8" 
clip-path="url(#breeze-ci-image-build-line-88)">--github-repository</text><text 
class="breeze-ci-image-build-r6" x="280.6" y="2167.2" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-88)">-g</text><text 
class="breeze-ci-image-build-r1" x="329.4" y="2167.2" textLeng [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2191.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-89)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2191.6" textLength="170.8" 
clip-path="url(#breeze-ci-image-build-line-89)">--github-token</text><text 
class="breeze-ci-image-build-r1" x="329.4" y="2191.6" textLength="500.2" 
clip-path="url(#breeze-ci-image-build-line-89)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text><te
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2216" textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2216" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-90)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="2240.4" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-91)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="2240.4" textLength="195.2" 
clip-path="url(#breeze-ci-image-build-line-91)">&#160;Common&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="219.6" y="2240.4" textLength="1220" 
clip-path="url(#breeze-ci-image-build-line-91)">────────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2264.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-92)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2264.8" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-92)">--answer</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2264.8" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-92)">-a</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2264.8" textLength="317.2" c [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2289.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-93)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2289.2" textLength="109.8" 
clip-path="url(#breeze-ci-image-build-line-93)">--dry-run</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2289.2" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-93)">-D</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2289.2" textLength="719.8" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2313.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-94)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2313.6" textLength="109.8" 
clip-path="url(#breeze-ci-image-build-line-94)">--verbose</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2313.6" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-94)">-v</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2313.6" textLength="585.6" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2338" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-95)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2338" textLength="73.2" 
clip-path="url(#breeze-ci-image-build-line-95)">--help</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2338" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-95)">-h</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2338" textLength="329.4" 
clip-path=" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2362.4" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-96)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2362.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-96)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1142.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1142.4" textLength="341.6" 
clip-path="url(#breeze-ci-image-build-line-46)">--disable-airflow-repo-cache</text><text
 class="breeze-ci-image-build-r1" x="439.2" y="1142.4" textLength="658.8" 
clip-path="url(#breeze-ci-image-build-line-46)">Disable&#160;cache&#160;from&#160;Airflow&#160;repository&#160;duri
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1166.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1166.8" textLength="329.4" 
clip-path="url(#breeze-ci-image-build-line-47)">--install-mysql-client-type</text><text
 class="breeze-ci-image-build-r1" x="439.2" y="1166.8" textLength="475.8" 
clip-path="url(#breeze-ci-image-build-line-47)">Which&#160;client&#160;to&#160;choose&#160;when&#160;installing.</te
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1191.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1191.2" textLength="170.8" 
clip-path="url(#breeze-ci-image-build-line-48)">--python-image</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1191.2" textLength="1000.4" 
clip-path="url(#breeze-ci-image-build-line-48)">If&#160;specified&#160;this&#160;is&#160;the&#160;base&#160;python&#160;image&#1
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1215.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-49)">│</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1215.6" textLength="1000.4" 
clip-path="url(#breeze-ci-image-build-line-49)">something&#160;like:&#160;python:VERSION-slim-bookworm.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1240" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-50)">│</text><text 
class="breeze-ci-image-build-r7" x="439.2" y="1240" textLength="1000.4" 
clip-path="url(#breeze-ci-image-build-line-50)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1264.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1264.4" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-51)">--use-uv</text><text 
class="breeze-ci-image-build-r1" x="122" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-51)">/</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1264.4" textLength="134.2" clip 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1288.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1288.8" textLength="207.4" 
clip-path="url(#breeze-ci-image-build-line-52)">--uv-http-timeout</text><text 
class="breeze-ci-image-build-r1" x="439.2" y="1288.8" textLength="829.6" 
clip-path="url(#breeze-ci-image-build-line-52)">Timeout&#160;for&#160;requests&#160;that&#160;UV&#160;makes&#160;(only&#160;us
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1313.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">│</text><text 
class="breeze-ci-image-build-r7" x="439.2" y="1313.2" textLength="829.6" 
clip-path="url(#breeze-ci-image-build-line-53)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1337.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">│</text><text 
class="breeze-ci-image-build-r5" x="439.2" y="1337.6" textLength="829.6" 
clip-path="url(#breeze-ci-image-build-line-54)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1362" textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-55)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1362" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-55)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1386.4" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-56)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1386.4" textLength="597.8" 
clip-path="url(#breeze-ci-image-build-line-56)">&#160;Selecting&#160;constraint&#160;location&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="622.2" y="1386.4" textLength="817.4" 
clip-path="url(#breeze-ci-image-build-line-56)">────────── [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1410.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-57)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1410.8" textLength="366" 
clip-path="url(#breeze-ci-image-build-line-57)">--airflow-constraints-location</text><text
 class="breeze-ci-image-build-r1" x="451.4" y="1410.8" textLength="902.8" 
clip-path="url(#breeze-ci-image-build-line-57)">Location&#160;of&#160;airflow&#160;constraints&#160;to&#160;use&#16
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1435.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-58)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1435.2" textLength="317.2" 
clip-path="url(#breeze-ci-image-build-line-58)">--airflow-constraints-mode</text><text
 class="breeze-ci-image-build-r1" x="451.4" y="1435.2" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-58)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;for&#160;CI&
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1459.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">│</text><text 
class="breeze-ci-image-build-r7" x="451.4" y="1459.6" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-59)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text
 class="breeze-ci-image-build-r5" x="1451.8" y="1459.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-59)">│</ [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1484" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-60)">│</text><text 
class="breeze-ci-image-build-r5" x="451.4" y="1484" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-60)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1508.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-61)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1508.4" textLength="378.2" 
clip-path="url(#breeze-ci-image-build-line-61)">--airflow-constraints-reference</text><text
 class="breeze-ci-image-build-r1" x="451.4" y="1508.4" textLength="634.4" 
clip-path="url(#breeze-ci-image-build-line-61)">Constraint&#160;reference&#160;to&#160;use&#160;when&#160;buildi
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1532.8" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-62)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1532.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-62)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1557.2" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-63)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1557.2" textLength="634.4" 
clip-path="url(#breeze-ci-image-build-line-63)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="658.8" y="1557.2" textLength="780.8" 
clip-path="url(#breeze-ci-image-build-line-63)">── [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1581.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-64)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1581.6" textLength="329.4" 
clip-path="url(#breeze-ci-image-build-line-64)">--additional-airflow-extras</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1581.6" textLength="768.6" 
clip-path="url(#breeze-ci-image-build-line-64)">Additional&#160;extra&#160;package&#160;while&#160;installing&#160;A
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1606" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-65)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1606" textLength="292.8" 
clip-path="url(#breeze-ci-image-build-line-65)">--additional-python-deps</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1606" textLength="768.6" 
clip-path="url(#breeze-ci-image-build-line-65)">Additional&#160;python&#160;dependencies&#160;to&#160;use&#160;when&#160;buil
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1630.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-66)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1630.4" textLength="170.8" 
clip-path="url(#breeze-ci-image-build-line-66)">--dev-apt-deps</text><text 
class="breeze-ci-image-build-r1" x="414.8" y="1630.4" textLength="646.6" 
clip-path="url(#breeze-ci-image-build-line-66)">Apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;building&#160;the&
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1654.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1654.8" textLength="305" 
clip-path="url(#breeze-ci-image-build-line-67)">--additional-dev-apt-deps</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1654.8" textLength="780.8" 
clip-path="url(#breeze-ci-image-build-line-67)">Additional&#160;apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;whe
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1679.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-68)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1679.2" textLength="207.4" 
clip-path="url(#breeze-ci-image-build-line-68)">--dev-apt-command</text><text 
class="breeze-ci-image-build-r1" x="414.8" y="1679.2" textLength="622.2" 
clip-path="url(#breeze-ci-image-build-line-68)">Command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160;are&#160;in
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1703.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-69)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1703.6" textLength="341.6" 
clip-path="url(#breeze-ci-image-build-line-69)">--additional-dev-apt-command</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1703.6" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-69)">Additional&#160;command&#160;executed&#160;before&#160;dev&#160;apt
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1728" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-70)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1728" textLength="292.8" 
clip-path="url(#breeze-ci-image-build-line-70)">--additional-dev-apt-env</text><text
 class="breeze-ci-image-build-r1" x="414.8" y="1728" textLength="805.2" 
clip-path="url(#breeze-ci-image-build-line-70)">Additional&#160;environment&#160;variables&#160;set&#160;when&#160;adding&#16
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1752.4" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-71)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1752.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-71)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1776.8" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-72)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1776.8" textLength="268.4" 
clip-path="url(#breeze-ci-image-build-line-72)">&#160;Backtracking&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="292.8" y="1776.8" textLength="1146.8" 
clip-path="url(#breeze-ci-image-build-line-72)">────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1801.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1801.2" textLength="280.6" 
clip-path="url(#breeze-ci-image-build-line-73)">--build-timeout-minutes</text><text
 class="breeze-ci-image-build-r1" x="549" y="1801.2" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-73)">Optional&#160;timeout&#160;for&#160;the&#160;build&#160;in&#160;minutes.&#
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1825.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-74)">│</text><text 
class="breeze-ci-image-build-r1" x="549" y="1825.6" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-74)">backtracking&#160;problems.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1850" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-75)">│</text><text 
class="breeze-ci-image-build-r7" x="549" y="1850" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-75)">(INTEGER)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1874.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-76)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1874.4" textLength="475.8" 
clip-path="url(#breeze-ci-image-build-line-76)">--eager-upgrade-additional-requirements</text><text
 class="breeze-ci-image-build-r1" x="549" y="1874.4" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-76)">Optional&#160;additional&#160;requirements&#160;to&#160;up
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1898.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-77)">│</text><text 
class="breeze-ci-image-build-r1" x="549" y="1898.8" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-77)">(see&#160;`breeze&#160;ci&#160;find-backtracking-candidates`).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1923.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-78)">│</text><text 
class="breeze-ci-image-build-r7" x="549" y="1923.2" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-78)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1947.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1947.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-79)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1972" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-80)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1972" textLength="622.2" 
clip-path="url(#breeze-ci-image-build-line-80)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text
 class="breeze-ci-image-build-r5" x="646.6" y="1972" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-80)">────── [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1996.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-81)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1996.4" textLength="109.8" 
clip-path="url(#breeze-ci-image-build-line-81)">--builder</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1996.4" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-81)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2020.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-82)">│</text><text 
class="breeze-ci-image-build-r5" x="341.6" y="2020.8" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-82)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2045.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-83)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2045.2" textLength="122" 
clip-path="url(#breeze-ci-image-build-line-83)">--platform</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="2045.2" textLength="329.4" 
clip-path="url(#breeze-ci-image-build-line-83)">Platform&#160;for&#160;Airflow&#160;image.</text><text
 class="breeze-ci-image-build-r7" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2069.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-84)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2069.6" textLength="73.2" 
clip-path="url(#breeze-ci-image-build-line-84)">--push</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="2069.6" textLength="353.8" 
clip-path="url(#breeze-ci-image-build-line-84)">Push&#160;image&#160;after&#160;building&#160;it.</text><text
 class="breeze-ci-image-build [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2094" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-85)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2094" textLength="268.4" 
clip-path="url(#breeze-ci-image-build-line-85)">--prepare-buildx-cache</text><text
 class="breeze-ci-image-build-r1" x="341.6" y="2094" textLength="1098" 
clip-path="url(#breeze-ci-image-build-line-85)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done&#160;as&#160;separat
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2118.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-86)">│</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="2118.4" textLength="1098" 
clip-path="url(#breeze-ci-image-build-line-86)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2142.8" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2142.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-87)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="2167.2" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-88)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="2167.2" textLength="280.6" 
clip-path="url(#breeze-ci-image-build-line-88)">&#160;Github&#160;authentication&#160;</text><text
 class="breeze-ci-image-build-r5" x="305" y="2167.2" textLength="1134.6" 
clip-path="url(#breeze-ci-image-build-line-88)">─────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2191.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-89)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2191.6" textLength="231.8" 
clip-path="url(#breeze-ci-image-build-line-89)">--github-repository</text><text 
class="breeze-ci-image-build-r6" x="280.6" y="2191.6" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-89)">-g</text><text 
class="breeze-ci-image-build-r1" x="329.4" y="2191.6" textLeng [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2216" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-90)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2216" textLength="170.8" 
clip-path="url(#breeze-ci-image-build-line-90)">--github-token</text><text 
class="breeze-ci-image-build-r1" x="329.4" y="2216" textLength="500.2" 
clip-path="url(#breeze-ci-image-build-line-90)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text><text
 cla [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2240.4" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-91)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2240.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-91)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="2264.8" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-92)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="2264.8" textLength="195.2" 
clip-path="url(#breeze-ci-image-build-line-92)">&#160;Common&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="219.6" y="2264.8" textLength="1220" 
clip-path="url(#breeze-ci-image-build-line-92)">────────────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2289.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-93)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2289.2" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-93)">--answer</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2289.2" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-93)">-a</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2289.2" textLength="317.2" c [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2313.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-94)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2313.6" textLength="109.8" 
clip-path="url(#breeze-ci-image-build-line-94)">--dry-run</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2313.6" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-94)">-D</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2313.6" textLength="719.8" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2338" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-95)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2338" textLength="109.8" 
clip-path="url(#breeze-ci-image-build-line-95)">--verbose</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2338" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-95)">-v</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2338" textLength="585.6" clip-pa 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2362.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-96)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2362.4" textLength="73.2" 
clip-path="url(#breeze-ci-image-build-line-96)">--help</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2362.4" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-96)">-h</text><text 
class="breeze-ci-image-build-r1" x="207.4" y="2362.4" textLength="329.4" cli 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2386.8" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-97)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2386.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-97)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_ci-image_build.txt 
b/dev/breeze/doc/images/output_ci-image_build.txt
index 905847bedc7..a53f9ce9973 100644
--- a/dev/breeze/doc/images/output_ci-image_build.txt
+++ b/dev/breeze/doc/images/output_ci-image_build.txt
@@ -1 +1 @@
-686950c27e41fa50cf22abb8c25e496a
+b03ca6dcb44ef05f9c27f72318ff9500
diff --git a/dev/breeze/doc/images/output_prod-image_build.txt 
b/dev/breeze/doc/images/output_prod-image_build.txt
index b8131522f12..7799e6f009e 100644
--- a/dev/breeze/doc/images/output_prod-image_build.txt
+++ b/dev/breeze/doc/images/output_prod-image_build.txt
@@ -1 +1 @@
-3d6fee0b510d006927e45a56aa45d505
+d0214e8e95fcb56c91e0e416690eb24f
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 cc6274775f4..3c49e530fce 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
@@ -41,6 +41,7 @@ from airflow_breeze.commands.common_image_options import (
     option_debian_version,
     option_dev_apt_command,
     option_dev_apt_deps,
+    option_disable_airflow_repo_cache,
     option_docker_cache,
     option_image_tag_for_building,
     option_image_tag_for_pulling,
@@ -296,6 +297,7 @@ option_version_suffix_for_pypi_ci = click.option(
 @option_debug_resources
 @option_dev_apt_command
 @option_dev_apt_deps
+@option_disable_airflow_repo_cache
 @option_docker_cache
 @option_docker_host
 @option_dry_run
@@ -339,6 +341,7 @@ def build(
     debug_resources: bool,
     dev_apt_command: str | None,
     dev_apt_deps: str | None,
+    disable_airflow_repo_cache: bool,
     docker_cache: str,
     docker_host: str | None,
     eager_upgrade_additional_requirements: str | None,
@@ -413,6 +416,7 @@ def build(
         debian_version=debian_version,
         dev_apt_command=dev_apt_command,
         dev_apt_deps=dev_apt_deps,
+        disable_airflow_repo_cache=disable_airflow_repo_cache,
         docker_cache=docker_cache,
         docker_host=docker_host,
         
eager_upgrade_additional_requirements=eager_upgrade_additional_requirements,
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py 
b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
index 2c5d4a4068e..0fe458c9d6a 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
@@ -57,6 +57,7 @@ CI_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | 
list[str]]]] = {
                 "--additional-pip-install-flags",
                 "--commit-sha",
                 "--debian-version",
+                "--disable-airflow-repo-cache",
                 "--install-mysql-client-type",
                 "--python-image",
                 "--use-uv",
diff --git a/dev/breeze/src/airflow_breeze/commands/common_image_options.py 
b/dev/breeze/src/airflow_breeze/commands/common_image_options.py
index 1b8f9460949..e80b2f284d2 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_image_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_image_options.py
@@ -108,6 +108,12 @@ option_dev_apt_deps = click.option(
     help="Apt dev dependencies to use when building the images.",
     envvar="DEV_APT_DEPS",
 )
+option_disable_airflow_repo_cache = click.option(
+    "--disable-airflow-repo-cache",
+    help="Disable cache from Airflow repository during building.",
+    is_flag=True,
+    envvar="DISABLE_AIRFLOW_REPO_CACHE",
+)
 option_docker_cache = click.option(
     "-c",
     "--docker-cache",
@@ -115,6 +121,7 @@ option_docker_cache = click.option(
     default=ALLOWED_BUILD_CACHE[0],
     show_default=True,
     type=BetterChoice(ALLOWED_BUILD_CACHE),
+    envvar="DOCKER_CACHE",
 )
 option_image_tag_for_pulling = click.option(
     "-t",
diff --git 
a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py 
b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
index 6e21aabffdf..d266dd027bd 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
@@ -36,6 +36,7 @@ from airflow_breeze.commands.common_image_options import (
     option_debian_version,
     option_dev_apt_command,
     option_dev_apt_deps,
+    option_disable_airflow_repo_cache,
     option_docker_cache,
     option_image_tag_for_building,
     option_image_tag_for_pulling,
@@ -192,11 +193,6 @@ def prod_image():
 @click.option("--disable-mysql-client-installation", help="Do not install 
MySQL client.", is_flag=True)
 @click.option("--disable-mssql-client-installation", help="Do not install 
MsSQl client.", is_flag=True)
 @click.option("--disable-postgres-client-installation", help="Do not install 
Postgres client.", is_flag=True)
[email protected](
-    "--disable-airflow-repo-cache",
-    help="Disable cache from Airflow repository during building.",
-    is_flag=True,
-)
 @click.option(
     "--install-airflow-reference",
     help="Install Airflow using GitHub tag or branch.",
@@ -222,6 +218,7 @@ def prod_image():
 @option_debug_resources
 @option_dev_apt_command
 @option_dev_apt_deps
+@option_disable_airflow_repo_cache
 @option_docker_cache
 @option_docker_host
 @option_dry_run
diff --git a/dev/breeze/src/airflow_breeze/params/build_ci_params.py 
b/dev/breeze/src/airflow_breeze/params/build_ci_params.py
index 05179df07b8..c38776a3f61 100644
--- a/dev/breeze/src/airflow_breeze/params/build_ci_params.py
+++ b/dev/breeze/src/airflow_breeze/params/build_ci_params.py
@@ -34,7 +34,6 @@ class BuildCiParams(CommonBuildParams):
     airflow_constraints_mode: str = "constraints-source-providers"
     airflow_constraints_reference: str = DEFAULT_AIRFLOW_CONSTRAINTS_BRANCH
     airflow_extras: str = "devel-ci"
-    airflow_pre_cached_pip_packages: bool = True
     force_build: bool = False
     upgrade_to_newer_dependencies: bool = False
     upgrade_on_failure: bool = False
diff --git a/dev/breeze/src/airflow_breeze/params/build_prod_params.py 
b/dev/breeze/src/airflow_breeze/params/build_prod_params.py
index 2533c30d6f3..6fa5828b40f 100644
--- a/dev/breeze/src/airflow_breeze/params/build_prod_params.py
+++ b/dev/breeze/src/airflow_breeze/params/build_prod_params.py
@@ -44,7 +44,6 @@ class BuildProdParams(CommonBuildParams):
     airflow_constraints_reference: str = DEFAULT_AIRFLOW_CONSTRAINTS_BRANCH
     cleanup_context: bool = False
     airflow_extras: str = field(default_factory=get_airflow_extras)
-    disable_airflow_repo_cache: bool = False
     disable_mssql_client_installation: bool = False
     disable_mysql_client_installation: bool = False
     disable_postgres_client_installation: bool = False
@@ -186,10 +185,6 @@ class BuildProdParams(CommonBuildParams):
         )
         return extra_build_flags
 
-    @property
-    def airflow_pre_cached_pip_packages(self) -> str:
-        return "false" if self.disable_airflow_repo_cache else "true"
-
     @property
     def install_mssql_client(self) -> str:
         return "false" if self.disable_mssql_client_installation else "true"
diff --git a/dev/breeze/src/airflow_breeze/params/common_build_params.py 
b/dev/breeze/src/airflow_breeze/params/common_build_params.py
index ce0f2c0063f..535ba964805 100644
--- a/dev/breeze/src/airflow_breeze/params/common_build_params.py
+++ b/dev/breeze/src/airflow_breeze/params/common_build_params.py
@@ -56,6 +56,7 @@ class CommonBuildParams:
     commit_sha: str | None = None
     dev_apt_command: str | None = None
     dev_apt_deps: str | None = None
+    disable_airflow_repo_cache: bool = False
     docker_cache: str = "registry"
     docker_host: str | None = os.environ.get("DOCKER_HOST")
     github_actions: str = os.environ.get("GITHUB_ACTIONS", "false")
@@ -89,8 +90,8 @@ class CommonBuildParams:
         raise NotImplementedError()
 
     @property
-    def airflow_pre_cached_pip_packages(self):
-        raise NotImplementedError()
+    def airflow_pre_cached_pip_packages(self) -> str:
+        return "false" if self.disable_airflow_repo_cache else "true"
 
     @property
     def airflow_base_image_name(self):
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py 
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 0cb69a19471..20bf514379f 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -1132,6 +1132,10 @@ class SelectiveChecks:
     def debug_resources(self) -> bool:
         return DEBUG_CI_RESOURCES_LABEL in self._pr_labels
 
+    @cached_property
+    def disable_airflow_repo_cache(self) -> bool:
+        return self.docker_cache == "disabled"
+
     @cached_property
     def helm_test_packages(self) -> str:
         return json.dumps(all_helm_test_packages())
diff --git a/dev/breeze/tests/test_selective_checks.py 
b/dev/breeze/tests/test_selective_checks.py
index 6d031f70b87..619dc8eec2f 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -2308,6 +2308,26 @@ def test_mypy_matches(
             ("non committer build",),
             id="Committer regular PR - forcing non-committer build",
         ),
+        pytest.param(
+            ("README.md",),
+            {
+                "docker-cache": "disabled",
+                "disable-airflow-repo-cache": "true",
+            },
+            "potiuk",
+            ("disable image cache",),
+            id="Disabled cache",
+        ),
+        pytest.param(
+            ("README.md",),
+            {
+                "docker-cache": "registry",
+                "disable-airflow-repo-cache": "false",
+            },
+            "potiuk",
+            (),
+            id="Standard cache",
+        ),
     ],
 )
 def test_pr_labels(


Reply via email to