You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2025/05/02 06:41:12 UTC

(airflow) branch v3-0-test updated: [v3-0-test] Replace chicken-egg providers with automated use of unreleased packages (#49799) (#50109)

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

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


The following commit(s) were added to refs/heads/v3-0-test by this push:
     new ee0d68ca39f [v3-0-test] Replace chicken-egg providers with automated use of unreleased packages (#49799) (#50109)
ee0d68ca39f is described below

commit ee0d68ca39fd3cf0c5a2fb17af55da53be7946ee
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Fri May 2 08:41:06 2025 +0200

    [v3-0-test] Replace chicken-egg providers with automated use of unreleased packages (#49799) (#50109)
    
    * Replace chicken-egg providers with automated use of unreleased packages
    
    When we got rid of the .dev0 suffix, it is now possible to entirely
    rely on building the packages locally using exsting mechanisms, that
    check if packages have been already released - for CI builds, and can
    rely on the fact that we need at least pre-release version of packages
    if we are building pre-release version of airflow.
    
    It works as follows:
    
    * for CI builds (generate constraints and PROD image builds) - we are
      alwasys attempt to build ALL provider packages, but without
      --skip-tag-check - which means that if provider has been already
      released and it's version did not change in main, we are not going
      to build it locally and we will use it from PyPI. However if provider
      version is updated and the provider has not yet been released (checked
      by tag) - it will be build locally from sources and it will be used
      for constraint generation.
    
    * for release PROD images build, on the other hand we NEVER build
      packages locally - we always rely on PyPI released packages, however
      if we are building pre-release version of airflow, we automatically
      add --pre flag that looks for pre-release packages in PyPI - this way
      pre-release version of airflow can be built with pre-release version
      of providers. We are still attempting to use constraints for that,
      however first - so unless there are no limits in apache airflow
      that prevent it from using released versions of providers, the
      constraint versions will be used - only if it fails, PROD images
      will fall back to non-constraint installation that will allow to
      use freely pre-release versions of packages from PyPI. This means
      for example that if we cherry-pick a change from main that increases
      minimum version of provider for apache-airflow to one that does not
      even have a pre-release version, building of rc version image for
      airflow will fail (which is a good thing). Lack of --pre flag
      for "release" version of Airlfow also means that if airlfow has
      a min version of provider that has no "released" version yet (only
      rc) - it will also fail (which is also a good thing)
    
    * Update scripts/in_container/run_generate_constraints.py
    (cherry picked from commit c6a2b8eb9b5a117d5baefbf932d5aea092b1afbe)
---
 .github/workflows/additional-prod-image-tests.yml  |   6 -
 .github/workflows/ci-image-checks.yml              |   4 -
 .github/workflows/ci.yml                           |   5 -
 .github/workflows/generate-constraints.yml         |  23 +--
 .github/workflows/prod-image-build.yml             |  29 ++--
 .github/workflows/prod-image-extra-checks.yml      |   6 -
 .github/workflows/release_dockerhub_image.yml      |  25 +---
 Dockerfile                                         |   2 +-
 Dockerfile.ci                                      |   2 +-
 contributing-docs/12_provider_distributions.rst    |  14 --
 dev/README_RELEASE_AIRFLOW.md                      |  36 +----
 dev/README_RELEASE_PROVIDERS.md                    |  21 ---
 dev/breeze/doc/ci/04_selective_checks.md           | 159 ++++++++++-----------
 ...put_release-management_generate-constraints.svg |  64 ++++-----
 ...put_release-management_generate-constraints.txt |   2 +-
 ...tput_release-management_release-prod-images.svg |  66 ++++-----
 ...tput_release-management_release-prod-images.txt |   2 +-
 .../commands/release_management_commands.py        |  43 ++----
 .../commands/release_management_commands_config.py |   2 -
 dev/breeze/src/airflow_breeze/global_constants.py  |   3 -
 .../src/airflow_breeze/params/shell_params.py      |   2 -
 .../src/airflow_breeze/utils/selective_checks.py   |   6 -
 providers/MANAGING_PROVIDERS_LIFECYCLE.rst         |  84 +----------
 providers/amazon/pyproject.toml                    |   2 +-
 providers/apprise/pyproject.toml                   |   2 +-
 providers/atlassian/jira/pyproject.toml            |   2 +-
 providers/discord/pyproject.toml                   |   2 +-
 providers/opsgenie/pyproject.toml                  |   2 +-
 providers/pagerduty/pyproject.toml                 |   2 +-
 providers/slack/pyproject.toml                     |   2 +-
 providers/smtp/pyproject.toml                      |   2 +-
 scripts/docker/common.sh                           |   2 +-
 scripts/in_container/run_generate_constraints.py   |  90 +++---------
 33 files changed, 194 insertions(+), 520 deletions(-)

diff --git a/.github/workflows/additional-prod-image-tests.yml b/.github/workflows/additional-prod-image-tests.yml
index e656f48a5a3..6fe821ad390 100644
--- a/.github/workflows/additional-prod-image-tests.yml
+++ b/.github/workflows/additional-prod-image-tests.yml
@@ -36,10 +36,6 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to upgrade to newer dependencies (true/false)"
         required: true
         type: string
-      chicken-egg-providers:
-        description: "Whether to build chicken-egg provider distributions in the same run (true/false)"
-        required: true
-        type: string
       docker-cache:
         description: "Docker cache specification to build the image (registry, local, disabled)."
         required: true
@@ -74,7 +70,6 @@ jobs:
       use-uv: "false"
       build-provider-distributions: ${{ inputs.default-branch == 'main' }}
       upgrade-to-newer-dependencies: ${{ inputs.upgrade-to-newer-dependencies }}
-      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 }}
@@ -91,7 +86,6 @@ jobs:
       use-uv: "false"
       build-provider-distributions: ${{ inputs.default-branch == 'main' }}
       upgrade-to-newer-dependencies: ${{ inputs.upgrade-to-newer-dependencies }}
-      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/ci-image-checks.yml b/.github/workflows/ci-image-checks.yml
index 096824a87fe..b99cc403367 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -60,10 +60,6 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to upgrade to newer dependencies (true/false)"
         required: true
         type: string
-      chicken-egg-providers:
-        description: "List of providers that should be prepared from sources"
-        required: false
-        type: string
       basic-checks-only:
         description: "Whether to run only basic checks (true/false)"
         required: true
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e50e11b0486..160820264e3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -59,7 +59,6 @@ jobs:
         ${{ steps.selective-checks.outputs.all-python-versions-list-as-string }}
       basic-checks-only: ${{ steps.selective-checks.outputs.basic-checks-only }}
       canary-run: ${{ steps.source-run-info.outputs.canary-run }}
-      chicken-egg-providers: ${{ steps.selective-checks.outputs.chicken-egg-providers }}
       ci-image-build: ${{ steps.selective-checks.outputs.ci-image-build }}
       core-test-types-list-as-strings-in-json: >-
         ${{ steps.selective-checks.outputs.core-test-types-list-as-strings-in-json }}
@@ -257,7 +256,6 @@ jobs:
       # generate no providers constraints only in canary builds - they take quite some time to generate
       # they are not needed for regular builds, they are only needed to update constraints in canaries
       generate-no-providers-constraints: ${{ needs.build-info.outputs.canary-run }}
-      chicken-egg-providers: ${{ needs.build-info.outputs.chicken-egg-providers }}
       debug-resources: ${{ needs.build-info.outputs.debug-resources }}
       use-uv: ${{ needs.build-info.outputs.use-uv }}
 
@@ -282,7 +280,6 @@ jobs:
       basic-checks-only: ${{ needs.build-info.outputs.basic-checks-only }}
       upgrade-to-newer-dependencies: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
       skip-pre-commits: ${{ needs.build-info.outputs.skip-pre-commits }}
-      chicken-egg-providers: ${{ needs.build-info.outputs.chicken-egg-providers }}
       ci-image-build: ${{ needs.build-info.outputs.ci-image-build }}
       include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
       debug-resources: ${{ needs.build-info.outputs.debug-resources }}
@@ -693,7 +690,6 @@ jobs:
       use-uv: ${{ needs.build-info.outputs.use-uv }}
       build-provider-distributions: ${{ needs.build-info.outputs.default-branch == 'main' }}
       upgrade-to-newer-dependencies: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
-      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 }}
@@ -708,7 +704,6 @@ jobs:
       default-branch: ${{ needs.build-info.outputs.default-branch }}
       constraints-branch: ${{ needs.build-info.outputs.default-constraints-branch }}
       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 }}
diff --git a/.github/workflows/generate-constraints.yml b/.github/workflows/generate-constraints.yml
index e9b48670c67..46cb9f250bc 100644
--- a/.github/workflows/generate-constraints.yml
+++ b/.github/workflows/generate-constraints.yml
@@ -32,10 +32,6 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to generate constraints without providers (true/false)"
         required: true
         type: string
-      chicken-egg-providers:
-        description: "Space-separated list of providers that should be installed from context files"
-        required: true
-        type: string
       debug-resources:
         description: "Whether to run in debug mode (true/false)"
         required: true
@@ -97,17 +93,12 @@ jobs:
         # The no providers constraints are only needed when we want to update constraints (in canary builds)
         # They slow down the start of PROD image builds so we want to only run them when needed.
         if: inputs.generate-no-providers-constraints == 'true'
-      - name: "Prepare chicken-eggs provider distributions"
-        # In case of provider distributions which use latest dev0 version of providers, we should prepare them
-        # from the source code, not from the PyPI because they have apache-airflow>=X.Y.Z dependency
-        # And when we prepare them from sources they will have apache-airflow>=X.Y.Z.dev0
+      - name: "Prepare updated provider distributions"
+        # In case of provider distributions which are not yet released, we build them from sources
         shell: bash
-        env:
-          CHICKEN_EGG_PROVIDERS: ${{ inputs.chicken-egg-providers }}
         run: >
           breeze release-management prepare-provider-distributions --include-not-ready-providers
-          --distribution-format wheel ${CHICKEN_EGG_PROVIDERS}
-        if: inputs.chicken-egg-providers != ''
+          --distribution-format wheel
       - name: "Prepare airflow distributions"
         shell: bash
         run: >
@@ -119,14 +110,10 @@ jobs:
       - name: "PyPI constraints"
         shell: bash
         timeout-minutes: 25
-        env:
-          CHICKEN_EGG_PROVIDERS: ${{ inputs.chicken-egg-providers }}
         run: |
           for PYTHON in $PYTHON_VERSIONS; do
-            breeze release-management generate-constraints \
-            --airflow-constraints-mode constraints --answer yes \
-            --chicken-egg-providers "${CHICKEN_EGG_PROVIDERS}" \
-            --python "${PYTHON}"
+            breeze release-management generate-constraints --airflow-constraints-mode constraints \
+            --answer yes --python "${PYTHON}"
           done
       - name: "Dependency upgrade summary"
         shell: bash
diff --git a/.github/workflows/prod-image-build.yml b/.github/workflows/prod-image-build.yml
index 27bf6467377..1c8f7504c25 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -100,10 +100,6 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to attempt to upgrade image to newer dependencies (true/false)"
         required: true
         type: string
-      chicken-egg-providers:
-        description: "Space-separated list of providers that should be installed from context files"
-        required: true
-        type: string
       docker-cache:
         description: "Docker cache specification to build the image (registry, local, disabled)."
         required: true
@@ -154,18 +150,7 @@ jobs:
           --distributions-list-file ./prod_image_installed_providers.txt
           --distribution-format wheel --include-not-ready-providers --skip-tag-check
         if: >
-          inputs.upload-package-artifact == 'true' &&
-          inputs.build-provider-distributions == 'true'
-      - name: "Prepare chicken-eggs provider distributions"
-        shell: bash
-        env:
-          CHICKEN_EGG_PROVIDERS: ${{ inputs.chicken-egg-providers }}
-        run: >
-          breeze release-management prepare-provider-distributions
-          --distribution-format wheel ${CHICKEN_EGG_PROVIDERS}
-        if: >
-          inputs.upload-package-artifact == 'true' &&
-          inputs.chicken-egg-providers != ''
+          inputs.upload-package-artifact == 'true' && inputs.build-provider-distributions == 'true'
       - name: "Prepare airflow package"
         shell: bash
         run: >
@@ -238,11 +223,23 @@ jobs:
         with:
           name: prod-packages
           path: ./docker-context-files
+      - name: "Show downloaded packages"
+        run: ls -la ./docker-context-files
       - name: "Download constraints"
         uses: actions/download-artifact@v4
         with:
           name: constraints
           path: ./docker-context-files
+      - name: "Show constraints"
+        run: |
+          for file in ./docker-context-files/constraints*/constraints*.txt
+          do
+            echo "=== ${file} ==="
+            echo
+            cat ${file}
+            echo
+            echo "=== END ${file} ==="
+          done
       - name: "Login to ghcr.io"
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/prod-image-extra-checks.yml b/.github/workflows/prod-image-extra-checks.yml
index 0b208cb5520..287348d7754 100644
--- a/.github/workflows/prod-image-extra-checks.yml
+++ b/.github/workflows/prod-image-extra-checks.yml
@@ -48,10 +48,6 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to attempt to upgrade image to newer dependencies (false/RANDOM_VALUE)"
         required: true
         type: string
-      chicken-egg-providers:
-        description: "Space-separated list of providers that should be installed from context files"
-        required: true
-        type: string
       constraints-branch:
         description: "Branch used to construct constraints URL from."
         required: true
@@ -84,7 +80,6 @@ jobs:
       use-uv: ${{ inputs.use-uv }}
       build-provider-distributions: ${{ inputs.build-provider-distributions }}
       upgrade-to-newer-dependencies: ${{ inputs.upgrade-to-newer-dependencies }}
-      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 }}
@@ -109,7 +104,6 @@ jobs:
       use-uv: "false"
       build-provider-distributions: ${{ inputs.build-provider-distributions }}
       upgrade-to-newer-dependencies: ${{ inputs.upgrade-to-newer-dependencies }}
-      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/release_dockerhub_image.yml b/.github/workflows/release_dockerhub_image.yml
index d94efa2c126..710cc905ff6 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -45,7 +45,6 @@ jobs:
       pythonVersions: ${{ steps.selective-checks.outputs.python-versions }}
       allPythonVersions: ${{ steps.selective-checks.outputs.all-python-versions }}
       defaultPythonVersion: ${{ steps.selective-checks.outputs.default-python-version }}
-      chicken-egg-providers: ${{ steps.selective-checks.outputs.chicken-egg-providers }}
       skipLatest: ${{ github.event.inputs.skipLatest == '' && ' ' || '--skip-latest' }}
       limitPlatform: ${{ github.repository == 'apache/airflow' && ' ' || '--limit-platform linux/amd64' }}
     env:
@@ -144,21 +143,6 @@ jobs:
         run: docker run --privileged --rm tonistiigi/binfmt --install all
       - name: "Create airflow_cache builder"
         run: docker buildx create --name airflow_cache
-      - name: "Prepare chicken-eggs provider distributions"
-        # In case of provider distributions which use latest rc1 version of providers, we should prepare them
-        # from the source code, not from the PyPI because they have apache-airflow>=X.Y.Z dependency
-        # And when we prepare them from sources they will have apache-airflow>=X.Y.Z.rc0
-        shell: bash
-        env:
-          CHICKEN_EGG_PROVIDERS: ${{ needs.build-info.outputs.chicken-egg-providers }}
-        run: >
-          breeze release-management prepare-provider-distributions
-          --distribution-format wheel ${CHICKEN_EGG_PROVIDERS}
-        if: needs.build-info.outputs.chicken-egg-providers != ''
-      - name: "Copy dist packages to docker-context files"
-        shell: bash
-        run: cp -v --no-preserve=mode,ownership ./dist/*.whl ./docker-context-files
-        if: needs.build-info.outputs.chicken-egg-providers != ''
       - name: >
           Release regular images: ${{ github.event.inputs.airflowVersion }}, ${{ matrix.python-version }}
         env:
@@ -168,15 +152,10 @@ jobs:
           AIRFLOW_VERSION: ${{ github.event.inputs.airflowVersion }}
           SKIP_LATEST: ${{ needs.build-info.outputs.skipLatest }}
           LIMIT_PLATFORM: ${{ needs.build-info.outputs.limitPlatform }}
-          CHICKEN_EGG_PROVIDERS: ${{ needs.build-info.outputs.chicken-egg-providers }}
         run: >
-          breeze release-management release-prod-images
-          --dockerhub-repo "${REPOSITORY}"
-          --airflow-version "${AIRFLOW_VERSION}"
-          ${SKIP_LATEST}
-          ${LIMIT_PLATFORM}
+          breeze release-management release-prod-images --dockerhub-repo "${REPOSITORY}"
+          --airflow-version "${AIRFLOW_VERSION}" ${SKIP_LATEST} ${LIMIT_PLATFORM}
           --limit-python ${PYTHON_VERSION}
-          --chicken-egg-providers "${CHICKEN_EGG_PROVIDERS}"
       - name: >
           Release slim images: ${{ github.event.inputs.airflowVersion }}, ${{ matrix.python-version }}
         env:
diff --git a/Dockerfile b/Dockerfile
index 8d9f1f7c8d5..2811b0cbc11 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -462,7 +462,7 @@ function common::get_packaging_tool() {
         UV_CONCURRENT_DOWNLOADS=$(nproc --all)
         export UV_CONCURRENT_DOWNLOADS
         if [[ ${INCLUDE_PRE_RELEASE=} == "true" ]]; then
-            EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS} --prerelease allow"
+            EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS} --prerelease if-necessary"
         fi
     else
         echo
diff --git a/Dockerfile.ci b/Dockerfile.ci
index e68477ab09d..88170d57525 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -401,7 +401,7 @@ function common::get_packaging_tool() {
         UV_CONCURRENT_DOWNLOADS=$(nproc --all)
         export UV_CONCURRENT_DOWNLOADS
         if [[ ${INCLUDE_PRE_RELEASE=} == "true" ]]; then
-            EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS} --prerelease allow"
+            EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS} --prerelease if-necessary"
         fi
     else
         echo
diff --git a/contributing-docs/12_provider_distributions.rst b/contributing-docs/12_provider_distributions.rst
index 7ff6016e886..bf14b56aca0 100644
--- a/contributing-docs/12_provider_distributions.rst
+++ b/contributing-docs/12_provider_distributions.rst
@@ -137,20 +137,6 @@ When you develop providers, you might want to reuse some of the code between tes
 This is possible by placing the code in ``test_utils`` in the ``devel-common/src`` directory.
 The ``tests_common`` module is installed automatically by uv in the uv workspace.
 
-Chicken-egg providers
----------------------
-
-Sometimes, when a provider depends on another provider, and you want to add a new feature that spans across
-two providers, you might need to add a new feature to the "dependent" provider, you need
-to add a new feature to the "dependency" provider as well. This is a chicken-egg problem and by default
-some CI jobs (like generating PyPI constraints) will fail because they cannot use the source version of
-the provider distribution. This is handled by adding the "dependent" provider to the chicken-egg list of
-"providers" in ``dev/breeze/src/airflow_breeze/global_constants.py``. By doing this, the provider is build
-locally from sources rather than downloaded from PyPI when generating constraints.
-
-More information about the chicken-egg providers and how release is handled can be found in
-the `Release providers documentation <../dev/README_RELEASE_PROVIDERS.md#chicken-egg-providers>`_
-
 Developing community managed providers
 --------------------------------------
 
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 3f420f6050c..9bbe5abae3e 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -40,7 +40,6 @@
 - [Publish the final Apache Airflow release](#publish-the-final-apache-airflow-release)
   - [Summarize the voting for the Apache Airflow release](#summarize-the-voting-for-the-apache-airflow-release)
   - [Publish release to SVN](#publish-release-to-svn)
-  - [Remove chicken-egg providers](#remove-chicken-egg-providers)
   - [Manually prepare production Docker Image](#manually-prepare-production-docker-image)
   - [Verify production images](#verify-production-images)
   - [Publish documentation](#publish-documentation)
@@ -778,43 +777,10 @@ export AIRFLOW_REPO_ROOT=$(pwd)
 breeze release-management start-release --release-candidate ${RC} --previous-release <PREVIOUS RELEASE>
 ```
 
-## Remove chicken-egg providers
-
-For the first MINOR (X.Y.0) release you need to do few more steps if there are new "chicken-egg" providers
-that have min-airflow version set to X.Y.0
-
-* NOTE! WE MIGHT WANT TO AUTOMATE THAT STEP IN THE FUTURE
-
-1. Checkout the constraints-2-* branch and update the ``constraints-3*.txt`` file with the new provider
-   version. Find the place where the provider should be added, add it with the latest provider version.
-
-```
-apache-airflow-providers-PROVIDER==VERSION
-```
-
-Commit, push and tag this change with ``constraints-X.Y.Z`` tag:
-
-```bash
-git add
-git commit -m "Add chicken-egg provider apache-airflow-providers-PROVIDER"
-git tag -s constraints-X.Y.Z --force
-git push -f apache constraints-X.Y.Z
-```
-
-
-2. remove providers from ``CHICKEN_EGG_PROVIDERS`` list  in ``src/airflow_breeze/global_constants.py``
-   that have >= ``X.Y.0`` in the corresponding provider.yaml file.
-
-
-3. In case the provider should also be installed in the image (it is part of ``prod_image_installed_providers.txt``)
-   it should also be added at this moment to ``Dockerfile`` to the list of default extras in the line with ``AIRFLOW_EXTRAS``:
-
 ```Dockerfile
 ARG AIRFLOW_EXTRAS=".....,<provider>,...."
 ```
 
-This change needs to be merged to ``main`` and cherry-picked to ``v2-*-test`` branch before building the image.
-
 4. Make sure to update Airflow version in ``v3-*-test`` branch after cherry-picking to X.Y.1 in
    ``airflow/__init__.py``
 
@@ -829,7 +795,7 @@ When you trigger it you need to pass:
 * Airflow Version
 * Optional "true" in skip latest field if you do not want to re-tag the latest image
 
-Make sure you use ``v2-*-test`` branch to run the workflow.
+Make sure you use ``v3-*-test`` branch to run the workflow.
 
 ![Release prod image](images/release_prod_image.png)
 
diff --git a/dev/README_RELEASE_PROVIDERS.md b/dev/README_RELEASE_PROVIDERS.md
index aaf120df355..b98bfa5de1e 100644
--- a/dev/README_RELEASE_PROVIDERS.md
+++ b/dev/README_RELEASE_PROVIDERS.md
@@ -26,7 +26,6 @@
 - [Decide when to release](#decide-when-to-release)
 - [Provider distributions versioning](#provider-distributions-versioning)
 - [Possible states of Provider distributions](#possible-states-of-provider-distributions)
-- [Chicken-egg providers](#chicken-egg-providers)
 - [Prepare Regular Provider distributions (RC)](#prepare-regular-provider-distributions-rc)
   - [Move provider into remove state](#move-provider-into-remove-state)
   - [Increasing version number](#increasing-version-number)
@@ -191,26 +190,6 @@ graph TD;
     removed -- Remove from the code --> gone;
 ```
 
-# Chicken-egg providers
-
-Sometimes (rare) we release providers that have dependencies on future version of Airflow - which means that
-they are released long before they are actually usable and it also means that versions in PyPI should be
-released with `apache-airflow >= x.y.z.dev0` version, such providers should have the .dev0 suffix included
-in the `apache-airflow` dependency specification, only the final release, just before the final Airflow x.y.z
-release should get it changed to `>= x.y.z`. This is a rare case and should be handled with care.
-
-We call such case chicken-egg providers as it's not clear who should be released first - the provider or
-the Airflow.
-
-Similar case is when provider depends on another provider (usually `common.*`) that is not yet released
-because you it contains new feature and you want to release the providers together.
-
-In such case the "common" provider should be added to the list of "chicken-egg" providers in the
-`./dev/breeze/src/airflow_breeze/global_constants.py` file and version of the provider should be bumped
-in the PR by author of the PR that adds both the functionality. This will make sure that the
-provider is build in CI from sources, when CI jobs are run rather than latest version downloaded from PyPI
-when constraints are generated.
-
 # Prepare Regular Provider distributions (RC)
 
 ## Move provider into remove state
diff --git a/dev/breeze/doc/ci/04_selective_checks.md b/dev/breeze/doc/ci/04_selective_checks.md
index efb0b4db13f..c450342f7d1 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -164,89 +164,88 @@ separated by spaces. This is to accommodate for the wau how outputs of this kind
 GitHub Actions to pass the list of parameters to a command to execute
 
 
-| Output                                         | Meaning of the output                                                                                  | Example value                           | List |
-|------------------------------------------------|--------------------------------------------------------------------------------------------------------|-----------------------------------------|------|
-| all-python-versions                            | List of all python versions there are available in the form of JSON array                              | \['3.9', '3.10'\]                       |      |
-| all-python-versions-list-as-string             | List of all python versions there are available in the form of space separated string                  | 3.9 3.10                                | *    |
-| all-versions                                   | If set to true, then all python, k8s, DB versions are used for tests.                                  | false                                   |      |
-| basic-checks-only                              | Whether to run all static checks ("false") or only basic set of static checks ("true")                 | false                                   |      |
-| build_system_changed_in_pyproject_toml         | When builds system dependencies changed in pyproject.toml changed in the PR.                           | false                                   |      |
-| chicken-egg-providers                          | List of providers that should be considered as "chicken-egg" - expecting development Airflow version   |                                         |      |
-| ci-image-build                                 | Whether CI image build is needed                                                                       | true                                    |      |
+| Output                                                  | Meaning of the output                                                                                  | Example value                           | List |
+|---------------------------------------------------------|--------------------------------------------------------------------------------------------------------|-----------------------------------------|------|
+| all-python-versions                                     | List of all python versions there are available in the form of JSON array                              | \['3.9', '3.10'\]                       |      |
+| all-python-versions-list-as-string                      | List of all python versions there are available in the form of space separated string                  | 3.9 3.10                                | *    |
+| all-versions                                            | If set to true, then all python, k8s, DB versions are used for tests.                                  | false                                   |      |
+| basic-checks-only                                       | Whether to run all static checks ("false") or only basic set of static checks ("true")                 | false                                   |      |
+| build_system_changed_in_pyproject_toml                  | When builds system dependencies changed in pyproject.toml changed in the PR.                           | false                                   |      |
+| ci-image-build                                          | Whether CI image build is needed                                                                       | true                                    |      |
 | core-test-types-list-as-strings-in-json                 | Which test types should be run for unit tests for core                                                 | API Always Providers                    | *    |
-| debug-resources                                | Whether resources usage should be printed during parallel job execution ("true"/ "false")              | false                                   |      |
-| default-branch                                 | Which branch is default for the build ("main" for main branch, "v2-4-test" for 2.4 line etc.)          | main                                    |      |
-| default-constraints-branch                     | Which branch is default for the build ("constraints-main" for main branch, "constraints-2-4" etc.)     | constraints-main                        |      |
-| default-helm-version                           | Which Helm version to use as default                                                                   | v3.9.4                                  |      |
-| default-kind-version                           | Which Kind version to use as default                                                                   | v0.16.0                                 |      |
-| default-kubernetes-version                     | Which Kubernetes version to use as default                                                             | v1.25.2                                 |      |
-| default-mysql-version                          | Which MySQL version to use as default                                                                  | 5.7                                     |      |
-| default-postgres-version                       | Which Postgres version to use as default                                                               | 10                                      |      |
-| default-python-version                         | Which Python version to use as default                                                                 | 3.9                                     |      |
-| disable-airflow-repo-cache                     | Disables cache of the repo main cache in CI - aiflow will be installed without main installation cache | true                                    |      |
-| docker-cache                                   | Which cache should be used for images ("registry", "local" , "disabled")                               | registry                                |      |
-| docs-build                                     | Whether to build documentation ("true"/"false")                                                        | true                                    |      |
-| docs-list-as-string                            | What filter to apply to docs building - based on which documentation packages should be built          | apache-airflow helm-chart google        | *    |
-| excluded-providers-as-string   c               | List of providers that should be excluded from the build as space-separated string                     | amazon google                           | *    |
-| force-pip                                      | Whether pip should be forced in the image build instead of uv ("true"/"false")                         | false                                   |      |
-| full-tests-needed                              | Whether this build runs complete set of tests or only subset (for faster PR builds) \[1\]              | false                                   |      |
-| generated-dependencies-changed                 | Whether generated dependencies have changed ("true"/"false")                                           | false                                   |      |
-| has-migrations                                 | Whether the PR has migrations ("true"/"false")                                                         | false                                   |      |
-| hatch-build-changed                            | When hatch build.py changed in the PR.                                                                 | false                                   |      |
-| helm-test-packages-list-as-string              | List of helm packages to test as JSON array                                                            | \["airflow_aux", "airflow_core"\]       | *    |
-| helm-version                                   | Which Helm version to use for tests                                                                    | v3.15.3                                 |      |
-| include-success-outputs                        | Whether to include outputs of successful parallel tests ("true"/"false")                               | false                                   |      |
+| debug-resources                                         | Whether resources usage should be printed during parallel job execution ("true"/ "false")              | false                                   |      |
+| default-branch                                          | Which branch is default for the build ("main" for main branch, "v2-4-test" for 2.4 line etc.)          | main                                    |      |
+| default-constraints-branch                              | Which branch is default for the build ("constraints-main" for main branch, "constraints-2-4" etc.)     | constraints-main                        |      |
+| default-helm-version                                    | Which Helm version to use as default                                                                   | v3.9.4                                  |      |
+| default-kind-version                                    | Which Kind version to use as default                                                                   | v0.16.0                                 |      |
+| default-kubernetes-version                              | Which Kubernetes version to use as default                                                             | v1.25.2                                 |      |
+| default-mysql-version                                   | Which MySQL version to use as default                                                                  | 5.7                                     |      |
+| default-postgres-version                                | Which Postgres version to use as default                                                               | 10                                      |      |
+| default-python-version                                  | Which Python version to use as default                                                                 | 3.9                                     |      |
+| disable-airflow-repo-cache                              | Disables cache of the repo main cache in CI - aiflow will be installed without main installation cache | true                                    |      |
+| docker-cache                                            | Which cache should be used for images ("registry", "local" , "disabled")                               | registry                                |      |
+| docs-build                                              | Whether to build documentation ("true"/"false")                                                        | true                                    |      |
+| docs-list-as-string                                     | What filter to apply to docs building - based on which documentation packages should be built          | apache-airflow helm-chart google        | *    |
+| excluded-providers-as-string   c                        | List of providers that should be excluded from the build as space-separated string                     | amazon google                           | *    |
+| force-pip                                               | Whether pip should be forced in the image build instead of uv ("true"/"false")                         | false                                   |      |
+| full-tests-needed                                       | Whether this build runs complete set of tests or only subset (for faster PR builds) \[1\]              | false                                   |      |
+| generated-dependencies-changed                          | Whether generated dependencies have changed ("true"/"false")                                           | false                                   |      |
+| has-migrations                                          | Whether the PR has migrations ("true"/"false")                                                         | false                                   |      |
+| hatch-build-changed                                     | When hatch build.py changed in the PR.                                                                 | false                                   |      |
+| helm-test-packages-list-as-string                       | List of helm packages to test as JSON array                                                            | \["airflow_aux", "airflow_core"\]       | *    |
+| helm-version                                            | Which Helm version to use for tests                                                                    | v3.15.3                                 |      |
+| include-success-outputs                                 | Whether to include outputs of successful parallel tests ("true"/"false")                               | false                                   |      |
 | individual-providers-test-types-list-as-strings-in-json | Which test types should be run for unit tests for providers (individually listed)                      | Providers[\amazon\] Providers\[google\] | *    |
-| is-airflow-runner                              | Whether runner used is an airflow or infrastructure runner (true if airflow/false if infrastructure)   | false                                   |      |
-| is-amd-runner                                  | Whether runner used is an AMD one                                                                      | true                                    |      |
-| is-arm-runner                                  | Whether runner used is an ARM one                                                                      | false                                   |      |
-| is-committer-build                             | Whether the build is triggered by a committer                                                          | false                                   |      |
-| is-k8s-runner                                  | Whether the build runs on our k8s infrastructure                                                       | false                                   |      |
-| is-legacy-ui-api-labeled                       | Whether the PR is labeled as legacy UI/API                                                             | false                                   |      |
-| is-self-hosted-runner                          | Whether the runner is self-hosted                                                                      | false                                   |      |
-| is-vm-runner                                   | Whether the runner uses VM to run                                                                      | true                                    |      |
-| kind-version                                   | Which Kind version to use for tests                                                                    | v0.24.0                                 |      |
-| kubernetes-combos-list-as-string               | All combinations of Python version and Kubernetes version to use for tests as space-separated string   | 3.9-v1.25.2 3.10-v1.28.13               | *    |
-| kubernetes-versions                            | All Kubernetes versions to use for tests as JSON array                                                 | \['v1.25.2'\]                           |      |
-| kubernetes-versions-list-as-string             | All Kubernetes versions to use for tests as space-separated string                                     | v1.25.2                                 | *    |
-| latest-versions-only                           | If set, the number of Python, Kubernetes, DB versions will be limited to the latest ones.              | false                                   |      |
-| mypy-checks                                    | List of folders to be considered for mypy checks                                                       | \["airflow_aux", "airflow_core"\]       |      |
-| mysql-exclude                                  | Which versions of MySQL to exclude for tests as JSON array                                             | []                                      |      |
-| mysql-versions                                 | Which versions of MySQL to use for tests as JSON array                                                 | \['8.0'\]                               |      |
-| needs-api-codegen                              | Whether "api-codegen" are needed to run ("true"/"false")                                               | true                                    |      |
-| needs-api-tests                                | Whether "api-tests" are needed to run ("true"/"false")                                                 | true                                    |      |
-| needs-helm-tests                               | Whether Helm tests are needed to run ("true"/"false")                                                  | true                                    |      |
-| needs-javascript-scans                         | Whether javascript CodeQL scans should be run ("true"/"false")                                         | true                                    |      |
-| needs-mypy                                     | Whether mypy check is supposed to run in this build                                                    | true                                    |      |
-| needs-python-scans                             | Whether Python CodeQL scans should be run ("true"/"false")                                             | true                                    |      |
-| only-new-ui-files                              | Whether only new UI files are present in the PR ("true"/"false")                                       | false                                   |      |
-| postgres-exclude                               | Which versions of Postgres to exclude for tests as JSON array                                          | []                                      |      |
-| postgres-versions                              | Which versions of Postgres to use for tests as JSON array                                              | \['12'\]                                |      |
-| prod-image-build                               | Whether PROD image build is needed                                                                     | true                                    |      |
-| providers-compatibility-tests-matrix           | Matrix of providers compatibility tests: (python_version, airflow_version, removed_providers)          | \[{}\]                                  |      |
+| is-airflow-runner                                       | Whether runner used is an airflow or infrastructure runner (true if airflow/false if infrastructure)   | false                                   |      |
+| is-amd-runner                                           | Whether runner used is an AMD one                                                                      | true                                    |      |
+| is-arm-runner                                           | Whether runner used is an ARM one                                                                      | false                                   |      |
+| is-committer-build                                      | Whether the build is triggered by a committer                                                          | false                                   |      |
+| is-k8s-runner                                           | Whether the build runs on our k8s infrastructure                                                       | false                                   |      |
+| is-legacy-ui-api-labeled                                | Whether the PR is labeled as legacy UI/API                                                             | false                                   |      |
+| is-self-hosted-runner                                   | Whether the runner is self-hosted                                                                      | false                                   |      |
+| is-vm-runner                                            | Whether the runner uses VM to run                                                                      | true                                    |      |
+| kind-version                                            | Which Kind version to use for tests                                                                    | v0.24.0                                 |      |
+| kubernetes-combos-list-as-string                        | All combinations of Python version and Kubernetes version to use for tests as space-separated string   | 3.9-v1.25.2 3.10-v1.28.13               | *    |
+| kubernetes-versions                                     | All Kubernetes versions to use for tests as JSON array                                                 | \['v1.25.2'\]                           |      |
+| kubernetes-versions-list-as-string                      | All Kubernetes versions to use for tests as space-separated string                                     | v1.25.2                                 | *    |
+| latest-versions-only                                    | If set, the number of Python, Kubernetes, DB versions will be limited to the latest ones.              | false                                   |      |
+| mypy-checks                                             | List of folders to be considered for mypy checks                                                       | \["airflow_aux", "airflow_core"\]       |      |
+| mysql-exclude                                           | Which versions of MySQL to exclude for tests as JSON array                                             | []                                      |      |
+| mysql-versions                                          | Which versions of MySQL to use for tests as JSON array                                                 | \['8.0'\]                               |      |
+| needs-api-codegen                                       | Whether "api-codegen" are needed to run ("true"/"false")                                               | true                                    |      |
+| needs-api-tests                                         | Whether "api-tests" are needed to run ("true"/"false")                                                 | true                                    |      |
+| needs-helm-tests                                        | Whether Helm tests are needed to run ("true"/"false")                                                  | true                                    |      |
+| needs-javascript-scans                                  | Whether javascript CodeQL scans should be run ("true"/"false")                                         | true                                    |      |
+| needs-mypy                                              | Whether mypy check is supposed to run in this build                                                    | true                                    |      |
+| needs-python-scans                                      | Whether Python CodeQL scans should be run ("true"/"false")                                             | true                                    |      |
+| only-new-ui-files                                       | Whether only new UI files are present in the PR ("true"/"false")                                       | false                                   |      |
+| postgres-exclude                                        | Which versions of Postgres to exclude for tests as JSON array                                          | []                                      |      |
+| postgres-versions                                       | Which versions of Postgres to use for tests as JSON array                                              | \['12'\]                                |      |
+| prod-image-build                                        | Whether PROD image build is needed                                                                     | true                                    |      |
+| providers-compatibility-tests-matrix                    | Matrix of providers compatibility tests: (python_version, airflow_version, removed_providers)          | \[{}\]                                  |      |
 | providers-test-types-list-as-strings-in-json            | Which test types should be run for unit tests for providers                                            | Providers Providers\[-google\]          | *    |
-| pyproject-toml-changed                         | When pyproject.toml changed in the PR.                                                                 | false                                   |      |
-| python-versions                                | List of python versions to use for that build                                                          | \['3.9'\]                               |      |
-| python-versions-list-as-string                 | Which versions of MySQL to use for tests as space-separated string                                     | 3.9                                     | *    |
-| run-amazon-tests                               | Whether Amazon tests should be run ("true"/"false")                                                    | true                                    |      |
-| run-kubernetes-tests                           | Whether Kubernetes tests should be run ("true"/"false")                                                | true                                    |      |
-| run-system-tests                               | Whether system tests should be run ("true"/"false")                                                    | true                                    |      |
-| run-task-sdk-tests                             | Whether Task SDK tests should be run ("true"/"false")                                                  | true                                    |      |
-| run-tests                                      | Whether unit tests should be run ("true"/"false")                                                      | true                                    |      |
-| run-ui-tests                                   | Whether UI tests should be run ("true"/"false")                                                        | true                                    |      |
-| run-www-tests                                  | Whether Legacy WWW tests should be run ("true"/"false")                                                | true                                    |      |
-| runs-on-as-json-default                        | List of labels assigned for runners for that build for default runs for that build (as string)         | \["ubuntu-22.04"\]                      |      |
-| runs-on-as-json-docs-build                     | List of labels assigned for runners for that build for ddcs build (as string)                          | \["ubuntu-22.04"\]                      |      |
-| runs-on-as-json-self-hosted                    | List of labels assigned for runners for that build for self hosted runners                             | \["self-hosted", "Linux", "X64"\]       |      |
-| runs-on-as-json-self-hosted-asf                | List of labels assigned for runners for that build for ASF self hosted runners                         | \["self-hosted", "Linux", "X64"\]       |      |
-| runs-on-as-json-public                         | List of labels assigned for runners for that build for public runners                                  | \["ubuntu-22.04"\]                      |      |
-| selected-providers-list-as-string              | List of providers affected when they are selectively affected.                                         | airbyte http                            | *    |
-| skip-pre-commits                               | Which pre-commits should be skipped during the static-checks run                                       | flynt,identity                          |      |
-| skip-providers-tests                           | When provider tests should be skipped (on non-main branch or when no provider changes detected)        | true                                    |      |
-| sqlite-exclude                                 | Which versions of Sqlite to exclude for tests as JSON array                                            | []                                      |      |
-| testable-core-integrations                     | List of core integrations that are testable in the build as JSON array                                 | \['celery', 'kerberos'\]                |      |
-| testable-providers-integrations                | List of core integrations that are testable in the build as JSON array                                 | \['mongo', 'kafka'\]                    |      |
-| upgrade-to-newer-dependencies                  | Whether the image build should attempt to upgrade all dependencies (true/false or commit hash)         | false                                   |      |
+| pyproject-toml-changed                                  | When pyproject.toml changed in the PR.                                                                 | false                                   |      |
+| python-versions                                         | List of python versions to use for that build                                                          | \['3.9'\]                               |      |
+| python-versions-list-as-string                          | Which versions of MySQL to use for tests as space-separated string                                     | 3.9                                     | *    |
+| run-amazon-tests                                        | Whether Amazon tests should be run ("true"/"false")                                                    | true                                    |      |
+| run-kubernetes-tests                                    | Whether Kubernetes tests should be run ("true"/"false")                                                | true                                    |      |
+| run-system-tests                                        | Whether system tests should be run ("true"/"false")                                                    | true                                    |      |
+| run-task-sdk-tests                                      | Whether Task SDK tests should be run ("true"/"false")                                                  | true                                    |      |
+| run-tests                                               | Whether unit tests should be run ("true"/"false")                                                      | true                                    |      |
+| run-ui-tests                                            | Whether UI tests should be run ("true"/"false")                                                        | true                                    |      |
+| run-www-tests                                           | Whether Legacy WWW tests should be run ("true"/"false")                                                | true                                    |      |
+| runs-on-as-json-default                                 | List of labels assigned for runners for that build for default runs for that build (as string)         | \["ubuntu-22.04"\]                      |      |
+| runs-on-as-json-docs-build                              | List of labels assigned for runners for that build for ddcs build (as string)                          | \["ubuntu-22.04"\]                      |      |
+| runs-on-as-json-self-hosted                             | List of labels assigned for runners for that build for self hosted runners                             | \["self-hosted", "Linux", "X64"\]       |      |
+| runs-on-as-json-self-hosted-asf                         | List of labels assigned for runners for that build for ASF self hosted runners                         | \["self-hosted", "Linux", "X64"\]       |      |
+| runs-on-as-json-public                                  | List of labels assigned for runners for that build for public runners                                  | \["ubuntu-22.04"\]                      |      |
+| selected-providers-list-as-string                       | List of providers affected when they are selectively affected.                                         | airbyte http                            | *    |
+| skip-pre-commits                                        | Which pre-commits should be skipped during the static-checks run                                       | flynt,identity                          |      |
+| skip-providers-tests                                    | When provider tests should be skipped (on non-main branch or when no provider changes detected)        | true                                    |      |
+| sqlite-exclude                                          | Which versions of Sqlite to exclude for tests as JSON array                                            | []                                      |      |
+| testable-core-integrations                              | List of core integrations that are testable in the build as JSON array                                 | \['celery', 'kerberos'\]                |      |
+| testable-providers-integrations                         | List of core integrations that are testable in the build as JSON array                                 | \['mongo', 'kafka'\]                    |      |
+| upgrade-to-newer-dependencies                           | Whether the image build should attempt to upgrade all dependencies (true/false or commit hash)         | false                                   |      |
 
 
 [1] Note for deciding if `full tests needed` mode is enabled and provider.yaml files.
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.svg b/dev/breeze/doc/images/output_release-management_generate-constraints.svg
index 7e59f4ef476..4cd4b73b120 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 879.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 782.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-generate-constraints-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="828.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="731.0" />
     </clipPath>
     <clipPath id="breeze-release-management-generate-constraints-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -132,21 +132,9 @@
 <clipPath id="breeze-release-management-generate-constraints-line-28">
     <rect x="0" y="684.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-release-management-generate-constraints-line-29">
-    <rect x="0" y="709.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-release-management-generate-constraints-line-30">
-    <rect x="0" y="733.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-release-management-generate-constraints-line-31">
-    <rect x="0" y="757.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-release-management-generate-constraints-line-32">
-    <rect x="0" y="782.3" 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="877.6" rx="8"/><text class="breeze-release-management-generate-constraints-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-constraints</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="780" rx="8"/><text class="breeze-release-management-generate-constraints-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-constraints</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -165,31 +153,27 @@
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-6)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="166.4" textLength="317.2" clip-path="url(#breeze-release-management-generate-constraints-line-6)">--airflow-constraints-mode</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="166.4" textLength="866. [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-7)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="190.8" textLength="866.2" clip-path="url(#breeze-release-management-generate-constraints-line-7)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-release-manage [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-8)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="215.2" textLength="866.2" clip-path="url(#breeze-release-management-generate-constraints-line-8)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-9)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="239.6" textLength="280.6" clip-path="url(#breeze-release-management-generate-constraints-line-9)">--chicken-egg-providers</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="239.6" textLength="1024.8" [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">│</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="264" textLength="1024.8" clip-path="url(#breeze-release-management-generate-constraints-line-10)">current_version&#160;and&#160;should&#160;be&#160;installed&#160;in&#160;CI&#160;from&#160;locally&#160;built&#160;packages&#160;with [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">│</text><text class="breeze-release-management-generate-constraints-r1" x="414.8" y="288.4" textLength="1024.8" clip-path="url(#breeze-release-management-generate-constraints-line-11)">current_version.dev0&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="312.8" textLength="1024.8" clip-path="url(#breeze-release-management-generate-constraints-line-12)">(TEXT)&#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-release-management-generate-constraints-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="337.2" textLength="231.8" clip-path="url(#breeze-release-management-generate-constraints-line-13)">--github-repository</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="337.2" textLength="24.4" clip- [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-14)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="361.6" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-14)">--python</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="361.6" textLength="24.4" clip-path="url(#b [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-15)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="386" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-15)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="410.4" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-16)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="434.8" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-17)">--use-uv</text><text class="breeze-release-management-generate-constraints-r1" x="122" y="434.8" textLength="12.2" clip-path="url(#b [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="483.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-19)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="483.6" textLength="219.6" clip-path="url(#breeze-release-management-generate-constraints-line-19)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="244" y="483.6" textLeng [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-20)">--debug-resources</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="508" textLength="768.6" clip-path= [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="532.4" textLength="158.6" clip-path="url(#breeze-release-management-generate-constraints-line-21)">--parallelism</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="532.4" textLength="915" clip-path= [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-22)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="556.8" textLength="915" clip-path="url(#breeze-release-management-generate-constraints-line-22)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-23)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="581.2" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-23)">--python-versions</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="581.2" textLength="951.6" clip [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="605.6" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-24)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="630" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-25)">--run-in-parallel</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="630" textLength="854" clip-path="u [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="654.4" textLength="170.8" clip-path="url(#breeze-release-management-generate-constraints-line-26)">--skip-cleanup</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="654.4" textLength="732" clip-path [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="703.2" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-28)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="703.2" textLength="195.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="219.6" y="703.2" textLeng [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-29)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-29)">--verbose</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="727.6" textLength="24.4" clip-path="ur [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-30)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-30)">--dry-run</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="752" textLength="24.4" clip-path="url(#bre [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-31)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="776.4" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-31)">--answer</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="776.4" textLength="24.4" clip-path="url( [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-32)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="800.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-constraints-line-32)">--help</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="800.8" textLength="24.4" clip-path="url(#b [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-33)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-9)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="239.6" textLength="231.8" clip-path="url(#breeze-release-management-generate-constraints-line-9)">--github-repository</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="239.6" textLength="24.4" clip-pa [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-10)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-10)">--python</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="264" textLength="24.4" clip-path="url(#breeze- [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-11)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="288.4" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-11)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-12)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="312.8" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-12)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-13)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="337.2" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-13)">--use-uv</text><text class="breeze-release-management-generate-constraints-r1" x="122" y="337.2" textLength="12.2" clip-path="url(#b [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-14)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-15)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-release-management-generate-constraints-line-15)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="244" y="386" textLength="11 [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-16)">--debug-resources</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="410.4" textLength="768.6" clip [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="434.8" textLength="158.6" clip-path="url(#breeze-release-management-generate-constraints-line-17)">--parallelism</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="434.8" textLength="915" clip-path= [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="459.2" textLength="915" clip-path="url(#breeze-release-management-generate-constraints-line-18)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-19)">--python-versions</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="483.6" textLength="951.6" clip [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="508" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-20)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="532.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-21)">--run-in-parallel</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="532.4" textLength="854" clip-p [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-22)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="556.8" textLength="170.8" clip-path="url(#breeze-release-management-generate-constraints-line-22)">--skip-cleanup</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="556.8" textLength="732" clip-path [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-23)">
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="605.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-24)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="605.6" textLength="195.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="219.6" y="605.6" textLeng [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-25)">--verbose</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="630" textLength="24.4" clip-path="url(#bre [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-release-management-generate-constraints-line-26)">--dry-run</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="654.4" textLength="24.4" clip-path="ur [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="678.8" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-27)">--answer</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="678.8" textLength="24.4" clip-path="url( [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="703.2" textLength="73.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">--help</text><text class="breeze-release-management-generate-constraints-r7" x="158.6" y="703.2" textLength="24.4" clip-path="url(#b [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="727.6" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-29)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.txt b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
index 2b103d4a6e3..a9d57db03a8 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
@@ -1 +1 @@
-10a76e16ce8bc323c3f4af9c72c39b76
+8c14b225d34fd1208e806e1264b1065d
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.svg b/dev/breeze/doc/images/output_release-management_release-prod-images.svg
index 532d7fe7821..962469926bb 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.svg
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 830.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -45,7 +45,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-release-prod-images-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="779.8" />
+      <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
     </clipPath>
     <clipPath id="breeze-release-management-release-prod-images-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -128,21 +128,9 @@
 <clipPath id="breeze-release-management-release-prod-images-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-release-management-release-prod-images-line-27">
-    <rect x="0" y="660.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-release-management-release-prod-images-line-28">
-    <rect x="0" y="684.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-release-management-release-prod-images-line-29">
-    <rect x="0" y="709.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-release-management-release-prod-images-line-30">
-    <rect x="0" y="733.5" 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="828.8" rx="8"/><text class="breeze-release-management-release-prod-images-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;release-prod-images</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="731.2" rx="8"/><text class="breeze-release-management-release-prod-images-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;release-prod-images</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -158,32 +146,28 @@
 </text><text class="breeze-release-management-release-prod-images-r1" x="12.2" y="93.2" textLength="841.8" clip-path="url(#breeze-release-management-release-prod-images-line-3)">Release&#160;production&#160;images&#160;to&#160;DockerHub&#160;(needs&#160;DockerHub&#160;permissions).</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-3)">
 </text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-4)">
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-release-prod-images-line-5)">╭─</text><text class="breeze-release-management-release-prod-images-r5" x="24.4" y="142" textLength="317.2" clip-path="url(#breeze-release-management-release-prod-images-line-5)">&#160;Release&#160;PROD&#160;IMAGE&#160;flags&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="341.6" y="142" t [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">│</text><text class="breeze-release-management-release-prod-images-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">*</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="166.4" textLength="207.4" clip-path="url(#breeze-release- [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-7)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="190.8" textLength="280.6" clip-path="url(#breeze-release-management-release-prod-images-line-7)">--chicken-egg-providers</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="190.8" textLength="1049.2" clip-p [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-8)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="215.2" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-8)">current_version&#160;and&#160;should&#160;be&#160;installed&#160;in&#160;CI&#160;from&#160;locally&#160;built&#160;packages&#160;with&# [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="239.6" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">current_version.dev0&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-10)">│</text><text class="breeze-release-management-release-prod-images-r7" x="390.4" y="264" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-10)">(TEXT)&#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-release-management-release-prod-images-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-11)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="288.4" textLength="146.4" clip-path="url(#breeze-release-management-release-prod-images-line-11)">--commit-sha</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="288.4" textLength="536.8" clip-path="url(# [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="312.8" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">--dockerhub-repo</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="312.8" textLength="427" clip-path="url [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-13)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="337.2" textLength="170.8" clip-path="url(#breeze-release-management-release-prod-images-line-13)">--limit-python</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="337.2" textLength="1049.2" clip-path="ur [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-14)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="361.6" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-14)">all&#160;available&#160;python&#160;versions)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-15)">│</text><text class="breeze-release-management-release-prod-images-r7" x="390.4" y="386" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-15)">(3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-16)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="410.4" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-16)">--limit-platform</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="410.4" textLength="1049.2" clip-path=" [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-17)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="434.8" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-17)">built.&#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-release-management-release-prod-images-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-18)">│</text><text class="breeze-release-management-release-prod-images-r7" x="390.4" y="459.2" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-18)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/amd64,linux/arm64)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-19)">│</text><text class="breeze-release-management-release-prod-images-r5" x="390.4" y="483.6" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-19)">[default:&#160;linux/amd64,linux/arm64]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-20)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="508" textLength="158.6" clip-path="url(#breeze-release-management-release-prod-images-line-20)">--skip-latest</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="508" textLength="1049.2" clip-path="url(#bree [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-21)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="532.4" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-21)">updated).&#160;This&#160;should&#160;only&#160;be&#160;used&#160;if&#160;you&#160;release&#160;image&#160;for&#160;previous&#160;bran [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-22)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="556.8" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-22)">Automatically&#160;set&#160;when&#160;rc/alpha/beta&#160;images&#160;are&#160;built.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-23)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="581.2" textLength="256.2" clip-path="url(#breeze-release-management-release-prod-images-line-23)">--include-pre-release</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="581.2" textLength="1049.2" clip-p [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-24)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="605.6" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-24)">when&#160;we&#160;want&#160;to&#160;build&#160;an&#160;RC&#160;image&#160;with&#160;RC&#160;provider&#160;versions.&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-25)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="630" textLength="158.6" clip-path="url(#breeze-release-management-release-prod-images-line-25)">--slim-images</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="630" textLength="719.8" clip-path="url(#breez [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="654.4" textLength="1464" clip-path="url(#breeze-release-management-release-prod-images-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-26)">
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="678.8" textLength="24.4" clip-path="url(#breeze-release-management-release-prod-images-line-27)">╭─</text><text class="breeze-release-management-release-prod-images-r5" x="24.4" y="678.8" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-27)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="219.6" y="678.8" textLength="1 [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-28)">│</text><text class="breeze-release-management-release-prod-images-r4" x="24.4" y="703.2" textLength="109.8" clip-path="url(#breeze-release-management-release-prod-images-line-28)">--dry-run</text><text class="breeze-release-management-release-prod-images-r9" x="158.6" y="703.2" textLength="24.4" clip-path="url(#br [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-29)">│</text><text class="breeze-release-management-release-prod-images-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-release-management-release-prod-images-line-29)">--verbose</text><text class="breeze-release-management-release-prod-images-r9" x="158.6" y="727.6" textLength="24.4" clip-path="url(#br [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-30)">│</text><text class="breeze-release-management-release-prod-images-r4" x="24.4" y="752" textLength="73.2" clip-path="url(#breeze-release-management-release-prod-images-line-30)">--help</text><text class="breeze-release-management-release-prod-images-r9" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-relea [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="776.4" textLength="1464" clip-path="url(#breeze-release-management-release-prod-images-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-31)">
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">│</text><text class="breeze-release-management-release-prod-images-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-6)">*</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="166.4" textLength="207.4" clip-path="url(#breeze-release- [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-7)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="190.8" textLength="146.4" clip-path="url(#breeze-release-management-release-prod-images-line-7)">--commit-sha</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="190.8" textLength="536.8" clip-path="url(#bree [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-8)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="215.2" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-8)">--dockerhub-repo</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="215.2" textLength="427" clip-path="url(#br [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-9)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="239.6" textLength="170.8" clip-path="url(#breeze-release-management-release-prod-images-line-9)">--limit-python</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="239.6" textLength="1073.6" clip-path="url(#b [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-10)">│</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="264" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-10)">available&#160;python&#160;versions)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-11)">│</text><text class="breeze-release-management-release-prod-images-r7" x="366" y="288.4" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-11)">(3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="312.8" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">--limit-platform</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="312.8" textLength="1073.6" clip-path="ur [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-13)">│</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="337.2" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-13)">built.&#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-release-management-release-prod-images-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-14)">│</text><text class="breeze-release-management-release-prod-images-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-14)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/amd64,linux/arm64)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-15)">│</text><text class="breeze-release-management-release-prod-images-r5" x="366" y="386" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-15)">[default:&#160;linux/amd64,linux/arm64]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-16)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="410.4" textLength="158.6" clip-path="url(#breeze-release-management-release-prod-images-line-16)">--skip-latest</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="410.4" textLength="1073.6" clip-path="url(# [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-17)">│</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="434.8" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-17)">This&#160;should&#160;only&#160;be&#160;used&#160;if&#160;you&#160;release&#160;image&#160;for&#160;previous&#160;branches.&#160;Automa [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-18)">│</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="459.2" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-18)">when&#160;rc/alpha/beta&#160;images&#160;are&#160;built.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-19)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="483.6" textLength="256.2" clip-path="url(#breeze-release-management-release-prod-images-line-19)">--include-pre-release</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="483.6" textLength="1073.6" clip-pat [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-20)">│</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="508" textLength="1073.6" clip-path="url(#breeze-release-management-release-prod-images-line-20)">we&#160;want&#160;to&#160;build&#160;an&#160;RC&#160;image&#160;with&#160;RC&#160;provider&#160;versions.&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-21)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="532.4" textLength="158.6" clip-path="url(#breeze-release-management-release-prod-images-line-21)">--slim-images</text><text class="breeze-release-management-release-prod-images-r1" x="366" y="532.4" textLength="719.8" clip-path="url(#b [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-release-management-release-prod-images-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-22)">
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-release-management-release-prod-images-line-23)">╭─</text><text class="breeze-release-management-release-prod-images-r5" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-23)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-release-prod-images-r5" x="219.6" y="581.2" textLength="1 [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-24)">│</text><text class="breeze-release-management-release-prod-images-r4" x="24.4" y="605.6" textLength="109.8" clip-path="url(#breeze-release-management-release-prod-images-line-24)">--dry-run</text><text class="breeze-release-management-release-prod-images-r9" x="158.6" y="605.6" textLength="24.4" clip-path="url(#br [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-25)">│</text><text class="breeze-release-management-release-prod-images-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-release-management-release-prod-images-line-25)">--verbose</text><text class="breeze-release-management-release-prod-images-r9" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-r [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-26)">│</text><text class="breeze-release-management-release-prod-images-r4" x="24.4" y="654.4" textLength="73.2" clip-path="url(#breeze-release-management-release-prod-images-line-26)">--help</text><text class="breeze-release-management-release-prod-images-r9" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-release-management-release-prod-images-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-release-prod-images-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-27)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.txt b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
index 08d32db2e99..5ac2588c6af 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
@@ -1 +1 @@
-18bfc23895e3344f5e43d89294d1aa10
+72d4ba0df1e411d9b834bd12a28c5b9d
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 d89c089286e..17cc4208197 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -192,14 +192,6 @@ option_airflow_site_directory = click.option(
     help="Local directory path of cloned airflow-site repo.",
     required=True,
 )
-option_chicken_egg_providers = click.option(
-    "--chicken-egg-providers",
-    default="",
-    help="List of chicken-egg provider distributions - "
-    "those that have airflow_version >= current_version and should "
-    "be installed in CI from locally built packages with >= current_version.dev0 ",
-    envvar="CHICKEN_EGG_PROVIDERS",
-)
 option_debug_release_management = click.option(
     "--debug",
     is_flag=True,
@@ -1291,7 +1283,6 @@ def tag_providers(
 @option_debug_resources
 @option_python_versions
 @option_airflow_constraints_mode_ci
-@option_chicken_egg_providers
 @option_github_repository
 @option_use_uv
 @option_verbose
@@ -1299,7 +1290,6 @@ def tag_providers(
 @option_answer
 def generate_constraints(
     airflow_constraints_mode: str,
-    chicken_egg_providers: str,
     debug_resources: bool,
     github_repository: str,
     parallelism: int,
@@ -1344,7 +1334,6 @@ def generate_constraints(
         shell_params_list = [
             ShellParams(
                 airflow_constraints_mode=airflow_constraints_mode,
-                chicken_egg_providers=chicken_egg_providers,
                 github_repository=github_repository,
                 python=python,
                 use_uv=use_uv,
@@ -1363,7 +1352,6 @@ def generate_constraints(
     else:
         shell_params = ShellParams(
             airflow_constraints_mode=airflow_constraints_mode,
-            chicken_egg_providers=chicken_egg_providers,
             github_repository=github_repository,
             python=python,
             use_uv=use_uv,
@@ -1910,19 +1898,6 @@ def add_back_references(
     )
 
 
-def _add_chicken_egg_providers_to_build_args(
-    python_build_args: dict[str, str], chicken_egg_providers: str, airflow_version: str
-):
-    if chicken_egg_providers and is_pre_release(airflow_version):
-        get_console().print(
-            f"[info]Adding chicken egg providers to build args as {airflow_version} is "
-            f"pre release and we have chicken-egg packages '{chicken_egg_providers}' defined[/]"
-        )
-        python_build_args["INSTALL_DISTRIBUTIONS_FROM_CONTEXT"] = "true"
-        python_build_args["USE_CONSTRAINTS_FOR_CONTEXT_DISTRIBUTIONS"] = "true"
-        python_build_args["DOCKER_CONTEXT_FILES"] = "./docker-context-files"
-
-
 @release_management.command(
     name="clean-old-provider-artifacts",
     help="Cleans the old provider artifacts",
@@ -1978,7 +1953,6 @@ def clean_old_provider_artifacts(
 )
 @click.option("--airflow-version", required=True, help="Airflow version to release (2.3.0, 2.3.0rc1 etc.)")
 @option_dry_run
-@option_chicken_egg_providers
 @click.option(
     "--dockerhub-repo",
     default=APACHE_AIRFLOW_GITHUB_REPOSITORY,
@@ -1988,7 +1962,7 @@ def clean_old_provider_artifacts(
 @click.option(
     "--limit-python",
     type=BetterChoice(CURRENT_PYTHON_MAJOR_MINOR_VERSIONS),
-    help="Specific python to build slim images for (if not specified - the images are built for all"
+    help="Specific python to build images for (if not specified - the images are built for all"
     " available python versions)",
 )
 @click.option(
@@ -2027,7 +2001,6 @@ def release_prod_images(
     commit_sha: str | None,
     skip_latest: bool,
     include_pre_release: bool,
-    chicken_egg_providers: str,
 ):
     perform_environment_checks()
     check_remote_ghcr_io_commands()
@@ -2069,6 +2042,11 @@ def release_prod_images(
             "See https://github.com/regclient/regclient/blob/main/docs/regctl.md for installation info."
         )
         sys.exit(1)
+    from packaging.version import Version
+
+    include_pre_release = include_pre_release or Version(airflow_version).is_prerelease
+    if include_pre_release:
+        get_console().print("[warning]Including pre-releases when considering dependencies.[/]")
     python_versions = CURRENT_PYTHON_MAJOR_MINOR_VERSIONS if limit_python is None else [limit_python]
     for python in python_versions:
         if slim_images:
@@ -2078,15 +2056,14 @@ def release_prod_images(
                 "PYTHON_BASE_IMAGE": f"python:{python}-slim-bookworm",
                 "AIRFLOW_VERSION": airflow_version,
                 "INCLUDE_PRE_RELEASE": "true" if include_pre_release else "false",
+                "INSTALL_DISTRIBUTIONS_FROM_CONTEXT": "false",
+                "DOCKER_CONTEXT_FILES": "./docker-context-files",
             }
             if commit_sha:
                 slim_build_args["COMMIT_SHA"] = commit_sha
             get_console().print(f"[info]Building slim {airflow_version} image for Python {python}[/]")
             python_build_args = deepcopy(slim_build_args)
             slim_image_name = f"{dockerhub_repo}:slim-{airflow_version}-python{python}"
-            _add_chicken_egg_providers_to_build_args(
-                python_build_args, chicken_egg_providers, airflow_version
-            )
             docker_buildx_command = [
                 "docker",
                 "buildx",
@@ -2114,12 +2091,10 @@ def release_prod_images(
                 "PYTHON_BASE_IMAGE": f"python:{python}-slim-bookworm",
                 "AIRFLOW_VERSION": airflow_version,
                 "INCLUDE_PRE_RELEASE": "true" if include_pre_release else "false",
+                "DOCKER_CONTEXT_FILES": "./docker-context-files",
             }
             if commit_sha:
                 regular_build_args["COMMIT_SHA"] = commit_sha
-            _add_chicken_egg_providers_to_build_args(
-                regular_build_args, chicken_egg_providers, airflow_version
-            )
             docker_buildx_command = [
                 "docker",
                 "buildx",
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index c820901f063..6a07b3d099b 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -279,7 +279,6 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             "name": "Generate constraints flags",
             "options": [
                 "--airflow-constraints-mode",
-                "--chicken-egg-providers",
                 "--github-repository",
                 "--python",
                 "--use-uv",
@@ -301,7 +300,6 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             "name": "Release PROD IMAGE flags",
             "options": [
                 "--airflow-version",
-                "--chicken-egg-providers",
                 "--commit-sha",
                 "--dockerhub-repo",
                 "--limit-python",
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 6f927b9f6f7..b14d4b2eb50 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -684,9 +684,6 @@ DEFAULT_EXTRAS = [
     # END OF EXTRAS LIST UPDATED BY PRE COMMIT
 ]
 
-CHICKEN_EGG_PROVIDERS = " ".join([])
-
-
 PROVIDERS_COMPATIBILITY_TESTS_MATRIX: list[dict[str, str | list[str]]] = [
     {
         "python-version": "3.9",
diff --git a/dev/breeze/src/airflow_breeze/params/shell_params.py b/dev/breeze/src/airflow_breeze/params/shell_params.py
index a27244a11ee..c2bdfc9341b 100644
--- a/dev/breeze/src/airflow_breeze/params/shell_params.py
+++ b/dev/breeze/src/airflow_breeze/params/shell_params.py
@@ -146,7 +146,6 @@ class ShellParams:
     builder: str = "autodetect"
     celery_broker: str = DEFAULT_CELERY_BROKER
     celery_flower: bool = False
-    chicken_egg_providers: str = ""
     clean_airflow_installation: bool = False
     collect_only: bool = False
     db_reset: bool = False
@@ -560,7 +559,6 @@ class ShellParams:
         _set_var(_env, "BREEZE_INIT_COMMAND", None, "")
         _set_var(_env, "CELERY_BROKER_URLS_MAP", CELERY_BROKER_URLS_MAP)
         _set_var(_env, "CELERY_FLOWER", self.celery_flower)
-        _set_var(_env, "CHICKEN_EGG_PROVIDERS", self.chicken_egg_providers)
         _set_var(_env, "CLEAN_AIRFLOW_INSTALLATION", self.clean_airflow_installation)
         _set_var(_env, "CI", None, "false")
         _set_var(_env, "CI_BUILD_ID", None, "0")
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 5c76b4cdb89..52c14bcadc6 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -32,7 +32,6 @@ from airflow_breeze.branch_defaults import AIRFLOW_BRANCH, DEFAULT_AIRFLOW_CONST
 from airflow_breeze.global_constants import (
     ALL_PYTHON_MAJOR_MINOR_VERSIONS,
     APACHE_AIRFLOW_GITHUB_REPOSITORY,
-    CHICKEN_EGG_PROVIDERS,
     COMMITTERS,
     CURRENT_KUBERNETES_VERSIONS,
     CURRENT_MYSQL_VERSIONS,
@@ -1392,11 +1391,6 @@ class SelectiveChecks:
     def has_migrations(self) -> bool:
         return any([file.startswith("airflow-core/src/airflow/migrations/") for file in self._files])
 
-    @cached_property
-    def chicken_egg_providers(self) -> str:
-        """Space separated list of providers with chicken-egg problem and should be built from sources."""
-        return CHICKEN_EGG_PROVIDERS
-
     @cached_property
     def providers_compatibility_tests_matrix(self) -> str:
         """Provider compatibility input matrix for the current run. Filter out python versions not built"""
diff --git a/providers/MANAGING_PROVIDERS_LIFECYCLE.rst b/providers/MANAGING_PROVIDERS_LIFECYCLE.rst
index 1814c6c2b91..47569fafe8a 100644
--- a/providers/MANAGING_PROVIDERS_LIFECYCLE.rst
+++ b/providers/MANAGING_PROVIDERS_LIFECYCLE.rst
@@ -124,80 +124,6 @@ breeze and I'll run unit tests for my Hook.
 
       root@fafd8d630e46:/opt/airflow# python -m pytest providers/<PROVIDER>/tests/<PROVIDER>/hook/test_*.py
 
-Adding chicken-egg providers
-----------------------------
-
-Sometimes we want to release provider that depends on the version of airflow that has not yet been released
-- for example when we released ``common.io`` provider it had ``apache-airflow>=2.8.0`` dependency.
-
-Add chicken-egg-provider to compatibility checks
-................................................
-
-Providers that have "min-airflow-version" set to the new, upcoming versions should be excluded in
-all previous versions of compatibility check matrix in ``PROVIDERS_COMPATIBILITY_TESTS_MATRIX`` in
-``src/airflow_breeze/global_constants.py``. Please add it to all previous versions
-
-Add chicken-egg-provider to constraint generation
-..................................................
-
-This is controlled by ``chicken_egg_providers`` property in Selective Checks - and our CI will automatically
-build and use those chicken-egg providers during the CI process if pre-release version of Airflow is built.
-
-The short ``provider id`` (``common.io`` for example) for such a provider should be added
-to ``CHICKEN_EGG_PROVIDERS`` list in ``src/airflow_breeze/utils/selective_checks.py``:
-
-This list will be kept here until the official version of Airflow the chicken-egg-providers depend on
-is released and the version of airflow is updated in the ``main`` and ``v2-X-Y`` branch to ``2.X+1.0.dev0``
-and ``2.X.1.dev0`` respectively. After that the chicken-egg providers will be correctly installed because
-both ``2.X.1.dev0`` and ``2.X+1.0.dev0`` are considered by ``pip`` as ``>2.X.0`` (unlike ``2.X.0.dev0``).
-
-The release process for Airflow includes cleaning the list after Airflow release is published, so the
-provider will be removed from the list by release manager.
-
-
-Why do we need to add chicken-egg providers to constraints generation
-.....................................................................
-
-The problem when generating constraints with chicken-eggo providers and building docker image for
-pre-release versions of Airflow - because ``pip`` does not recognize the ``.dev0`` or ``.b1``
-suffixes of those packages as valid in the ``>=X.Y.Z`` comparison.
-
-When you want to install a provider package with ``apache-airflow>=2.8.0`` requirement and you have
-``2.9.0.dev0`` airflow package, ``pip`` will not install the package, because it does not recognize
-``2.9.0.dev0`` as a valid version for ``>=2.8.0`` dependency. This is because ``pip``
-currently implements the minimum version selection algorithm requirement specified in packaging as
-described in the packaging version specification
-https://packaging.python.org/en/latest/specifications/version-specifiers/#handling-of-pre-releases
-
-Currently ``pip`` only allows to include pre-release versions for all installed packages using ``--pre``
-flag, but it does not have the possibility of selectively using this flag to only one package.
-In order to implement our desired behaviour, we need the case where only ``apache-airflow`` is considered
-as pre-release version while all the other dependencies only have stable versions and this is currently
-not possible.
-
-To work around this limitation, we have introduced the concept of "chicken-egg" providers. Those providers
-are providers that are released together with the version of Airflow they depend on. They are released
-with the same version number as the Airflow version they depend on, but with a different suffix. For example
-``apache-airflow-providers-common-io==2.9.0.dev0`` is a chicken-egg provider for ``apache-airflow==2.9.0.dev0``.
-
-However - we should not release providers with such exclusion to ``pypi``, so in order to allow our
-CI to work with pre-release versions and perform both - constraint generation and image releasing,
-we introduced workarounds in our tooling where in case we build a pre-release version of Airflow,
-we will locally build the chicken-egg providers from sources and they are installed from local
-directory instead of from PyPI.
-
-This workaround might be removed if ``pip`` implements the possibility of selectively using ``--pre`` flag
-for only one package (Which is foreseen as a possibility in the packaging specification but not implemented
-by ``pip``).
-
-.. note::
-
-   The current solution of building pre-release images will not work well if the chicken-egg-provider is
-   pre-installed package because slim imges will not use the chicken-egg-provider. This could be solved
-   by adding ``--chicken-egg-providers`` flag to slim image building step in ``released_dockerhub_image.yml``
-   but it would also require filtering out the non-pre-installed packages from it, so the current solution
-   is to assume pre-installed packages are not chicken-egg providers.
-
 Integration tests
 -----------------
 
@@ -211,7 +137,7 @@ An important part of building a new provider is the documentation.
 Some steps for documentation occurs automatically by ``pre-commit`` see
 `Installing pre-commit guide </contributing-docs/03_contributors_quick_start.rst#pre-commit>`_
 
-Those are important files in the airflow source tree that affect providers. The ``pyproject.toml`` in root
+Those are important files in the Airflow source tree that affect providers. The ``pyproject.toml`` in root
 Airflow folder is automatically generated based on content of ``provider.yaml`` file in each provider
 when ``pre-commit`` is run. Files such as ``extra-packages-ref.rst`` should be manually updated because
 they are manually formatted for better layout and ``pre-commit`` will just verify if the information
@@ -422,13 +348,13 @@ The fix for that is to turn the feature into an optional provider feature (in th
   Those tests should be adjusted (but this is not very likely to happen, because the tests are using only
   the most common providers that we will not be likely to suspend).
 
-Bumping min airflow version
+Bumping min Airflow version
 ===========================
 
-We regularly bump min airflow version for all providers we release. This bump is done according to our
+We regularly bump min Airflow version for all providers we release. This bump is done according to our
 `Provider policies <https://github.com/apache/airflow/blob/main/PROVIDERS.rst>`_ and it is only applied
 to non-suspended/removed providers. We are running basic import compatibility checks in our CI and
-the compatibility checks should be updated when min airflow version is updated.
+the compatibility checks should be updated when min Airflow version is updated.
 
 Details on how this should be done are described in
 `Provider policies <https://github.com/apache/airflow/blob/main/dev/README_RELEASE_PROVIDER_PACKAGES.md>`_
@@ -463,7 +389,7 @@ Releasing pre-installed providers for the first time
 
 When releasing providers for the first time, you need to release them in state ``not-ready``.
 This will make it available for release management commands, but it will not be added to airflow's
-preinstalled providers list - allowing airflow in main ``CI`` builds to be built without expecting the
+preinstalled providers list - allowing Airflow in main ``CI`` builds to be built without expecting the
 provider to be available in PyPI.
 
 You need to add ``--include-not-ready-providers`` if you want to add them to the list of providers
diff --git a/providers/amazon/pyproject.toml b/providers/amazon/pyproject.toml
index 1094721a025..8d4eb4622a3 100644
--- a/providers/amazon/pyproject.toml
+++ b/providers/amazon/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
     "apache-airflow-providers-common-sql>=1.20.0",
     "apache-airflow-providers-http",
     # We should update minimum version of boto3 and here regularly to avoid `pip` backtracking with the number
diff --git a/providers/apprise/pyproject.toml b/providers/apprise/pyproject.toml
index 022e5e4314e..761dc77b049 100644
--- a/providers/apprise/pyproject.toml
+++ b/providers/apprise/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
     "apprise>=1.8.0",
 ]
 
diff --git a/providers/atlassian/jira/pyproject.toml b/providers/atlassian/jira/pyproject.toml
index b3402693155..5ec24372c19 100644
--- a/providers/atlassian/jira/pyproject.toml
+++ b/providers/atlassian/jira/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
     "atlassian-python-api>3.41.10",
 ]
 
diff --git a/providers/discord/pyproject.toml b/providers/discord/pyproject.toml
index 5466481aa11..0655faccbb2 100644
--- a/providers/discord/pyproject.toml
+++ b/providers/discord/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
     "apache-airflow-providers-http",
 ]
 
diff --git a/providers/opsgenie/pyproject.toml b/providers/opsgenie/pyproject.toml
index df8767542c9..3793a273257 100644
--- a/providers/opsgenie/pyproject.toml
+++ b/providers/opsgenie/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
     "opsgenie-sdk>=2.1.5",
 ]
 
diff --git a/providers/pagerduty/pyproject.toml b/providers/pagerduty/pyproject.toml
index f201ec4c80b..3549b7c4cbd 100644
--- a/providers/pagerduty/pyproject.toml
+++ b/providers/pagerduty/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
     "pdpyras>=4.2.0",
 ]
 
diff --git a/providers/slack/pyproject.toml b/providers/slack/pyproject.toml
index 9a1a11ddf0c..df5b38423f4 100644
--- a/providers/slack/pyproject.toml
+++ b/providers/slack/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
     "apache-airflow-providers-common-sql>=1.20.0",
     "slack_sdk>=3.19.0",
 ]
diff --git a/providers/smtp/pyproject.toml b/providers/smtp/pyproject.toml
index 61522bc2dd8..947d4bf9e0a 100644
--- a/providers/smtp/pyproject.toml
+++ b/providers/smtp/pyproject.toml
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.9.0",
-    "apache-airflow-providers-common-compat>=1.6.0",
+    "apache-airflow-providers-common-compat>=1.6.1",
 ]
 
 [dependency-groups]
diff --git a/scripts/docker/common.sh b/scripts/docker/common.sh
index e6bcaf5195f..c63dae661f1 100644
--- a/scripts/docker/common.sh
+++ b/scripts/docker/common.sh
@@ -49,7 +49,7 @@ function common::get_packaging_tool() {
         UV_CONCURRENT_DOWNLOADS=$(nproc --all)
         export UV_CONCURRENT_DOWNLOADS
         if [[ ${INCLUDE_PRE_RELEASE=} == "true" ]]; then
-            EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS} --prerelease allow"
+            EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS} --prerelease if-necessary"
         fi
     else
         echo
diff --git a/scripts/in_container/run_generate_constraints.py b/scripts/in_container/run_generate_constraints.py
index 349ace68d63..62e2fe98cc5 100755
--- a/scripts/in_container/run_generate_constraints.py
+++ b/scripts/in_container/run_generate_constraints.py
@@ -103,7 +103,6 @@ PYPI_PROVIDERS_CONSTRAINTS_PREFIX = f"""
 @dataclass
 class ConfigParams:
     airflow_constraints_mode: str
-    chicken_egg_providers: str
     constraints_github_repository: str
     default_constraints_branch: str
     github_actions: bool
@@ -155,14 +154,23 @@ def freeze_packages_to_file(config_params: ConfigParams, file: TextIO) -> None:
         check=True,
         capture_output=True,
     )
+    stdout = result.stdout
+    if os.environ.get("VERBOSE", "") == "true":
+        if os.environ.get("CI", "") == "true":
+            print("::group::Installed distributions")
+        console.print("[bright_blue]Installed distributions")
+        console.print(stdout)
+        console.print("[bright_blue]End of installed distributions")
+        if os.environ.get("CI", "") == "true":
+            print("::endgroup::")
     count_lines = 0
-    for line in sorted(result.stdout.split("\n")):
+    for line in sorted(stdout.split("\n")):
         if line.startswith(
             (
                 "apache_airflow",
                 "apache-airflow==",
                 "apache-airflow-core==",
-                "apache_airflow_task_sdk=",
+                "apache-airflow-task-sdk=",
                 "/opt/airflow",
                 "#",
                 "-e",
@@ -171,7 +179,7 @@ def freeze_packages_to_file(config_params: ConfigParams, file: TextIO) -> None:
             continue
         if "@" in line:
             continue
-        if "from file://" in line:
+        if "file://" in line:
             continue
         if line.strip() == "":
             continue
@@ -304,76 +312,21 @@ def generate_constraints_pypi_providers(config_params: ConfigParams) -> None:
     providers are used by our users to install Airflow in reproducible way.
     :return:
     """
-    all_provider_distributions = get_all_active_provider_distributions(python_version=config_params.python)
-    chicken_egg_prefixes = []
-    packages_to_install = []
-    console.print("[bright_blue]Installing Airflow with PyPI providers with eager upgrade")
-    if config_params.chicken_egg_providers:
-        for chicken_egg_provider in config_params.chicken_egg_providers.split(" "):
-            chicken_egg_prefixes.append(f"apache-airflow-providers-{chicken_egg_provider.replace('.', '-')}")
-        console.print(
-            f"[bright_blue]Checking if {chicken_egg_prefixes} are available in local dist folder "
-            f"as chicken egg providers)"
-        )
-    for provider_package in all_provider_distributions:
-        if config_params.chicken_egg_providers and provider_package.startswith(tuple(chicken_egg_prefixes)):
-            glob_pattern = f"{provider_package.replace('-', '_')}-*.whl"
-            console.print(
-                f"[bright_blue]Checking if {provider_package} is available in local dist folder "
-                f"with {glob_pattern} pattern"
-            )
-            files = AIRFLOW_DIST_PATH.glob(glob_pattern)
-            for file in files:
-                console.print(
-                    f"[yellow]Installing {file.name} from local dist folder as it is a chicken egg provider"
-                )
-                packages_to_install.append(f"{provider_package} @ file://{file.as_posix()}")
-                break
-            else:
-                console.print(
-                    f"[yellow]Skipping {provider_package} as it is not found in dist folder to install."
-                )
-            # Skip checking if chicken egg provider is available in PyPI - it does not have to be there
-            continue
-        console.print(f"[bright_blue]Checking if {provider_package} is available in PyPI: ... ", end="")
-        r = requests.get(f"https://pypi.org/pypi/{provider_package}/json", timeout=60)
-        if r.status_code == 200:
-            version = r.json()["info"]["version"]
-            console.print("[green]OK")
-            # TODO: In the future we might make it a bit more sophisticated and allow to install
-            # earlier versions of providers here - but for now we just install the latest version
-            # But in practice latest version does not have to be supported by current version of airflow
-            # This should be a very rare case though - such provider distributions should only be released
-            # in pre-release mode
-            packages_to_install.append(f"{provider_package}=={version}")
-        else:
-            console.print("[yellow]NOK. Skipping.")
-    find_airflow_distributions = AIRFLOW_DIST_PATH.glob("apache_airflow-*.whl")
-    airflow_install = "."
-    if find_airflow_distributions:
-        airflow_install = next(find_airflow_distributions).as_posix()
-    airflow_core_install = "./airflow-core[all]"
-    find_airflow_core_distributions = AIRFLOW_DIST_PATH.glob("apache_airflow_core-*.whl")
-    if find_airflow_core_distributions:
-        airflow_core_install = next(find_airflow_core_distributions).as_posix() + "[all]"
-    airflow_task_sdk_install = "./airflow-task-sdk"
-    find_airflow_task_sdk_distribution = AIRFLOW_DIST_PATH.glob("apache_airflow_task_sdk-*.whl")
-    if find_airflow_task_sdk_distribution:
-        airflow_task_sdk_install = next(find_airflow_task_sdk_distribution).as_posix()
     run_command(
         cmd=[
             "uv",
             "pip",
             "install",
             "--no-sources",
-            airflow_install,
-            airflow_core_install,
-            airflow_task_sdk_install,
+            "apache-airflow[all]",
+            "apache-airflow-core[all]",
+            "apache-airflow-task-sdk",
             "./airflow-ctl",
-            "--reinstall",  # We need to pull the provider distributions from PyPI - not use the local ones
-            *packages_to_install,
+            "--reinstall",  # We need to pull the provider distributions from PyPI or dist, not the local ones
             "--resolution",
             "highest",
+            "--find-links",
+            "file://" + str(AIRFLOW_DIST_PATH),
         ],
         github_actions=config_params.github_actions,
         check=True,
@@ -415,11 +368,6 @@ ALLOWED_CONSTRAINTS_MODES = ["constraints", "constraints-source-providers", "con
     envvar="AIRFLOW_CONSTRAINTS_MODE",
     help="Mode of constraints to generate",
 )
-@click.option(
-    "--chicken-egg-providers",
-    envvar="CHICKEN_EGG_PROVIDERS",
-    help="Providers that should be installed from packages built from current sources.",
-)
 @click.option(
     "--constraints-github-repository",
     default="apache/airflow",
@@ -456,7 +404,6 @@ ALLOWED_CONSTRAINTS_MODES = ["constraints", "constraints-source-providers", "con
 )
 def generate_constraints(
     airflow_constraints_mode: str,
-    chicken_egg_providers: str,
     constraints_github_repository: str,
     default_constraints_branch: str,
     github_actions: bool,
@@ -465,7 +412,6 @@ def generate_constraints(
 ) -> None:
     config_params = ConfigParams(
         airflow_constraints_mode=airflow_constraints_mode,
-        chicken_egg_providers=chicken_egg_providers,
         constraints_github_repository=constraints_github_repository,
         default_constraints_branch=default_constraints_branch,
         github_actions=github_actions,