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

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


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new 6452515260e [v3-1-test] Restore prek cache in a more robust way 
(#56796) (#56826)
6452515260e is described below

commit 6452515260e83ec43bc2ea77b646f7baf4a32f5a
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sat Oct 18 21:46:19 2025 +0200

    [v3-1-test] Restore prek cache in a more robust way (#56796) (#56826)
    
    Apparently the prek cache mechanism has been somewhat broken for a
    while - after we split prek to monorepo. The hash files used to
    determine prek-cache was different for save and restore step
    (the `**/` has been missing in the save cache step. Which means
    that we always failed to restore cache and created it from the
    scratch.
    
    Also, it seems that the prek cache-when prepared refers to the uv
    version that is pre-installed for it in case uv is not installed
    in the system. And it refers to the uv version when creating the
    virtual environments used by prek, and we first attempted to
    install prek and create cache, and only after we installed uv, which
    had a side-effect that in some cases the installed venvs referred
    to a missing python binary.
    
    Finally - there is a bug in prek https://github.com/j178/prek/issues/918
    that pygrep cache contains reference to a non-existing python binary
    that should be run when pygrep runs.
    
    Also it's possible that some of the cache installed in workspace by the
    github worker remained, and we did not preemptively clean the cache when
    we attempted to restore it and failed.
    
    This PR attempts to restore the cache usage in a more robust way:
    
    * fixed cache key on save to save cache with proper name
    * added uv version to cache key for prek
    * always install uv in desired version before installing prek
    * if we faile to cache-hit and restore the cache, we clean-up
      the .cache/prek folder
    * we do not look at skipped hooks when installing prek and restoring
      or saving cache. There is very little saving on some hooks and
      since we are preparing the cache in "build-info" now - it's better
      to always use the same cache, no matter if some checks are skipped
    * upgraded to prek 0.2.10 that fixed the issue with pygrep cache
    (cherry picked from commit 556d179d35be124b81bbb7cadc1e48ac1029ecec)
---
 .github/actions/breeze/action.yml                  |  8 +++
 .github/actions/install-prek/action.yml            | 42 ++++++++++-----
 .github/workflows/basic-tests.yml                  | 59 ++++++++++++++++++++--
 .github/workflows/ci-amd.yml                       |  2 -
 .github/workflows/ci-arm.yml                       |  1 -
 .github/workflows/ci-image-checks.yml              |  8 +--
 .github/workflows/release_dockerhub_image.yml      | 12 ++---
 Dockerfile.ci                                      |  2 +-
 dev/breeze/README.md                               |  2 +-
 dev/breeze/doc/ci/02_images.md                     |  2 +-
 dev/breeze/pyproject.toml                          |  2 +-
 .../commands/release_management_commands.py        |  2 +-
 dev/breeze/uv.lock                                 | 46 ++++++++---------
 scripts/ci/install_breeze.sh                       |  2 -
 scripts/ci/prek/upgrade_important_versions.py      |  3 +-
 15 files changed, 131 insertions(+), 62 deletions(-)

diff --git a/.github/actions/breeze/action.yml 
b/.github/actions/breeze/action.yml
index a7fff7dc397..e04ffc6c747 100644
--- a/.github/actions/breeze/action.yml
+++ b/.github/actions/breeze/action.yml
@@ -22,6 +22,9 @@ inputs:
   python-version:
     description: 'Python version to use'
     default: "3.10"
+  uv-version:
+    description: 'uv version to use'
+    default: "0.9.3"  # Keep this comment to allow automatic replacement of uv 
version
 outputs:
   host-python-version:
     description: Python version used in host
@@ -33,6 +36,11 @@ runs:
       uses: actions/setup-python@v5
       with:
         python-version: ${{ inputs.python-version }}
+    - name: "Install uv"
+      shell: bash
+      run: curl -LsSf https://astral.sh/uv/${UV_VERSION}/install.sh | sh
+      env:
+        UV_VERSION: ${{ inputs.uv-version }}
     # NOTE! Installing Breeze without using cache is FASTER than when using 
cache - uv is so fast and has
     # so low overhead, that just running upload cache/restore cache is slower 
than installing it from scratch
     - name: "Install Breeze"
diff --git a/.github/actions/install-prek/action.yml 
b/.github/actions/install-prek/action.yml
index 385ad2789d1..58673e5785d 100644
--- a/.github/actions/install-prek/action.yml
+++ b/.github/actions/install-prek/action.yml
@@ -27,10 +27,7 @@ inputs:
     default: "0.9.3"  # Keep this comment to allow automatic replacement of uv 
version
   prek-version:
     description: 'prek version to use'
-    default: "0.2.9"  # Keep this comment to allow automatic replacement of 
prek version
-  skip-prek-hooks:
-    description: "Skip some prek hooks from installation"
-    default: ""
+    default: "0.2.10"  # Keep this comment to allow automatic replacement of 
prek version
   save-cache:
     description: "Whether to save prek cache"
     required: true
@@ -40,14 +37,17 @@ inputs:
 runs:
   using: "composite"
   steps:
-    - name: Install uv and prek
+    - name: "Install uv"
+      shell: bash
+      run: curl -LsSf https://astral.sh/uv/${UV_VERSION}/install.sh | sh
+      env:
+        UV_VERSION: ${{ inputs.uv-version }}
+    - name: Install prek
       shell: bash
       env:
-        UV_VERSION: ${{inputs.uv-version}}
         PREK_VERSION: ${{inputs.prek-version}}
-        SKIP: ${{ inputs.skip-prek-hooks }}
+        UV_VERSION: ${{ inputs.uv-version }}
       run: |
-        curl -LsSf https://astral.sh/uv/${UV_VERSION}/install.sh | sh
         uv tool install prek==${PREK_VERSION} --with uv==${UV_VERSION}
       working-directory: ${{ github.workspace }}
     # We need to use tar file with archive to restore all the permissions and 
symlinks
@@ -64,7 +64,7 @@ runs:
       uses: 
apache/infrastructure-actions/stash/restore@1c35b5ccf8fba5d4c3fdf25a045ca91aa0cbc468
       with:
         # yamllint disable rule:line-length
-        key: cache-prek-v6-${{ inputs.platform }}-${{ inputs.python-version 
}}-${{inputs.skip-prek-hooks}}-${{ hashFiles('**/.pre-commit-config.yaml') }}
+        key: cache-prek-v8-${{ inputs.platform }}-python${{ 
inputs.python-version }}-uv${{ inputs.uv-version }}-${{ 
hashFiles('**/.pre-commit-config.yaml') }}
         path: /tmp/
       id: restore-prek-cache
     - name: "Check if prek cache tarball exists"
@@ -88,12 +88,28 @@ runs:
         echo
       shell: bash
       if: steps.restore-prek-cache.outputs.stash-hit == 'true'
+    - name: "Prepare local venv for pygrep"
+      # Prek cache restore seems to have a bug where removed temporary python 
is
+      # used in cached pygrep installation. It seems prek can fallback to uv 
sync installed python
+      # So let's install it. See https://github.com/j178/prek/issues/918:
+      run: |
+        uv sync --no-dev --no-install-workspace
+      shell: bash
+      if: steps.restore-prek-cache.outputs.stash-hit == 'true'
+    - name: "Make sure cache is cleared on cache miss"
+      run: |
+        echo "Cleaning up prek cache in case of cache miss (in case of 
pre-installed-cache from the system)"
+        ls -la ~/.cache/prek || true
+        rm -rf ~/.cache/prek
+      shell: bash
+      if: steps.restore-prek-cache.outputs.stash-hit != 'true'
     - name: Install prek hooks
       shell: bash
-      run: prek install-hooks || (cat ~/.cache/prek/prek.log && exit 1)
+      run: prek install-hooks
       working-directory: ${{ github.workspace }}
-      env:
-        SKIP: ${{ inputs.skip-prek-hooks }}
+    - name: "Show prek log"
+      shell: bash
+      run: cat ~/.cache/prek/prek.log || true
     - name: "Prepare .tar file from prek cache"
       run: |
         tar -C ~ -czf /tmp/cache-prek.tar.gz .cache/prek
@@ -103,7 +119,7 @@ runs:
       uses: 
apache/infrastructure-actions/stash/save@1c35b5ccf8fba5d4c3fdf25a045ca91aa0cbc468
       with:
         # yamllint disable rule:line-length
-        key: cache-prek-v6-${{ inputs.platform }}-${{ inputs.python-version 
}}-${{ inputs.skip-prek-hooks }}-${{ hashFiles('.pre-commit-config.yaml') }}
+        key: cache-prek-v8-${{ inputs.platform }}-python${{ 
inputs.python-version }}-uv${{ inputs.uv-version }}-${{ 
hashFiles('**/.pre-commit-config.yaml') }}
         path: /tmp/cache-prek.tar.gz
         if-no-files-found: 'error'
         retention-days: '2'
diff --git a/.github/workflows/basic-tests.yml 
b/.github/workflows/basic-tests.yml
index f68d0c5ac90..7a16679921b 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -100,8 +100,6 @@ jobs:
       matrix:
         shared-distribution: ${{ fromJSON(inputs.shared-distributions-as-json) 
}}
     runs-on: ${{ fromJSON(inputs.runners) }}
-    env:
-      UV_VERSION: ${{inputs.uv-version}}
     steps:
       - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # 
v4.2.2
@@ -110,6 +108,8 @@ jobs:
           persist-credentials: false
       - name: "Install uv"
         run: curl -LsSf https://astral.sh/uv/${UV_VERSION}/install.sh | sh
+        env:
+          UV_VERSION: ${{ inputs.uv-version }}
       - name: "Run shared ${{ matrix.shared-distribution }} tests"
         run: uv run --group dev pytest --color=yes -n auto
         working-directory: shared/${{ matrix.shared-distribution }}
@@ -193,7 +193,6 @@ jobs:
         id: prek
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
-          skip-prek-hooks: ${{ inputs.skip-prek-hooks }}
           platform: ${{ inputs.platform }}
           save-cache: false
       - name: "Check translation completeness"
@@ -229,7 +228,6 @@ jobs:
         id: prek
         with:
           python-version: ${{ steps.breeze.outputs.host-python-version }}
-          skip-prek-hooks: ${{ inputs.skip-prek-hooks }}
           platform: ${{ inputs.platform }}
           save-cache: false
       - name: Fetch incoming commit ${{ github.sha }} with its parent
@@ -282,7 +280,6 @@ jobs:
         id: prek
         with:
           python-version: ${{ steps.breeze.outputs.host-python-version }}
-          skip-prek-hooks: ${{ inputs.skip-prek-hooks }}
           platform: ${{ inputs.platform }}
           save-cache: false
       - name: "Autoupdate all prek hooks"
@@ -398,3 +395,55 @@ jobs:
         run: |
           breeze release-management generate-issue-content-core \
             --limit-pr-count 2 --previous-release 3.0.1 --current-release 
3.0.2 --verbose
+
+  test-airflow-standalone:
+    timeout-minutes: 30
+    name: "Test Airflow standalone commands"
+    runs-on: ${{ fromJSON(inputs.runners) }}
+    env:
+      AIRFLOW_HOME: ~/airflow
+      FORCE_COLOR: 1
+    steps:
+      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # 
v4.2.2
+        with:
+          persist-credentials: false
+      - name: "Install uv"
+        run: curl -LsSf https://astral.sh/uv/${UV_VERSION}/install.sh | sh
+        env:
+          UV_VERSION: ${{ inputs.uv-version }}
+      - name: "Set up Airflow home directory"
+        run: |
+          echo "Setting AIRFLOW_HOME to $AIRFLOW_HOME"
+          mkdir -p $AIRFLOW_HOME
+      - name: "Install Airflow from current repo (simulating user 
installation)"
+        run: |
+          uv venv
+          set -x
+          uv pip install -e ./airflow-core
+      - name: "Test airflow standalone command"
+        run: |
+          uv run --no-sync airflow standalone 2>&1 | tee airflow_startup.log &
+          AIRFLOW_PID=$!
+
+          # Wait for ready message till timeout (10 minutes)
+          for i in {1..600}; do
+            if ! kill -0 $AIRFLOW_PID 2>/dev/null; then
+              wait $AIRFLOW_PID
+              EXIT_CODE=$?
+              echo "FAILED: Airflow standalone exited with code $EXIT_CODE"
+              exit $EXIT_CODE
+            fi
+
+            if grep -q "Airflow is ready" airflow_startup.log; then
+              echo "SUCCESS: Airflow standalone is ready!"
+              kill $AIRFLOW_PID
+              exit 0
+            fi
+
+            sleep 1
+          done
+
+          echo "FAILED: Airflow standalone did not become ready in time"
+          kill $AIRFLOW_PID 2>/dev/null || true
+          exit 1
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index e7bd7010858..5153505022b 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -170,7 +170,6 @@ jobs:
         id: prek
         with:
           python-version: ${{ steps.breeze.outputs.host-python-version }}
-          skip-prek-hooks: ${{ needs.build-info.outputs.skip-prek-hooks }}
           platform: "linux/amd64"
           save-cache: true
   run-pin-versions-hook:
@@ -190,7 +189,6 @@ jobs:
           python-version: "3.11"
           platform: "linux/amd64"
           save-cache: true
-          skip-prek-hooks: ""
       - name: "Run pin-versions"
         run: >
           prek -c dev/.pre-commit-config.yaml --all-files --verbose 
--hook-stage manual
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index 28dd6967dae..6fb8a1bd537 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -162,7 +162,6 @@ jobs:
         id: prek
         with:
           python-version: ${{ steps.breeze.outputs.host-python-version }}
-          skip-prek-hooks: ${{ needs.build-info.outputs.skip-prek-hooks }}
           platform: "linux/arm64"
           save-cache: true
   basic-tests:
diff --git a/.github/workflows/ci-image-checks.yml 
b/.github/workflows/ci-image-checks.yml
index f573f79bdbd..e7ed9d0de3e 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -155,10 +155,7 @@ jobs:
           platform: ${{ inputs.platform }}
           save-cache: false
       - name: "Static checks"
-        # We have added cache cleaning here as otherwise it was failing on 
rst-backticks hook
-        # This increases the time of this step from ~9 minutes 25 seconds to 
~12 minutes 37 seconds
-        # If we want to remove the first part, we need to find root cause of 
the problem
-        run: prek cache clean && prek --all-files --show-diff-on-failure 
--color always
+        run: prek --all-files --show-diff-on-failure --color always
         env:
           VERBOSE: "false"
           SKIP: ${{ inputs.skip-prek-hooks }}
@@ -166,6 +163,9 @@ jobs:
           SKIP_GROUP_OUTPUT: "true"
           DEFAULT_BRANCH: ${{ inputs.branch }}
           RUFF_FORMAT: "github"
+      - name: "Show prek log on failure"
+        run: cat ~/.cache/prek/prek.log || true
+        if: failure()
 
   mypy:
     timeout-minutes: 45
diff --git a/.github/workflows/release_dockerhub_image.yml 
b/.github/workflows/release_dockerhub_image.yml
index 712a640718d..871a92cd124 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -87,19 +87,19 @@ jobs:
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # 
v4.2.2
         with:
           persist-credentials: false
-      - name: "Install uv"
-        run: curl -LsSf https://astral.sh/uv/${UV_VERSION}/install.sh | sh
-      - name: "Check airflow version"
-        id: check-airflow-version
-        shell: bash
-        run: uv run scripts/ci/airflow_version_check.py "${AIRFLOW_VERSION}" 
>> "${GITHUB_OUTPUT}"
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
+        with:
+          uv-version: ${{ env.UV_VERSION }}
       - name: Selective checks
         id: selective-checks
         env:
           VERBOSE: "false"
         run: breeze ci selective-check 2>> ${GITHUB_OUTPUT}
+      - name: "Check airflow version"
+        id: check-airflow-version
+        shell: bash
+        run: uv run scripts/ci/airflow_version_check.py "${AIRFLOW_VERSION}" 
>> "${GITHUB_OUTPUT}"
       - name: "Determine build matrix"
         shell: bash
         id: determine-matrix
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 9b26be7547c..73492f0a83c 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1656,7 +1656,7 @@ COPY --from=scripts common.sh install_packaging_tools.sh 
install_additional_depe
 ARG AIRFLOW_PIP_VERSION=25.2
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main";
 ARG AIRFLOW_UV_VERSION=0.9.3
-ARG AIRFLOW_PREK_VERSION="0.2.9"
+ARG AIRFLOW_PREK_VERSION="0.2.10"
 
 # UV_LINK_MODE=copy is needed since we are using cache mounted from the host
 ENV AIRFLOW_PIP_VERSION=${AIRFLOW_PIP_VERSION} \
diff --git a/dev/breeze/README.md b/dev/breeze/README.md
index 33a9928dbb6..53e0640d5d2 100644
--- a/dev/breeze/README.md
+++ b/dev/breeze/README.md
@@ -135,6 +135,6 @@ PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY 
UPDATED BY PREK.
 
 
---------------------------------------------------------------------------------------------------------
 
-Package config hash: 
eeecbf0df75ded82558188c801a214f66c89da758f4bf58fd6381234bcd222fe9b53154e10331c6975f5521377d93f8f3a8f39e3d76e6874510df80511096a00
+Package config hash: 
bb103dc3ab165eea730bc1cf843ef3a40ed1d3a189c55af8d0acc9910f4953d30229673dfad8d9943ac93f4967c5a2a2bdd4b1ada0b7c827832ebbde7ee769f0
 
 
---------------------------------------------------------------------------------------------------------
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index f6aaa57e2ba..b327d58deff 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -444,7 +444,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_ENV`          |                             | Additional 
env variables defined when installing dev deps                                  
                       |
 | `AIRFLOW_PIP_VERSION`             | `25.2`                      | `pip` 
version used.                                                                   
                            |
 | `AIRFLOW_UV_VERSION`              | `0.9.3`                     | `uv` 
version used.                                                                   
                             |
-| `AIRFLOW_PREK_VERSION`            | `0.2.9`                     | `prek` 
version used.                                                                   
                           |
+| `AIRFLOW_PREK_VERSION`            | `0.2.10`                    | `prek` 
version used.                                                                   
                           |
 | `AIRFLOW_USE_UV`                  | `true`                      | Whether to 
use UV for installation.                                                        
                       |
 | `PIP_PROGRESS_BAR`                | `on`                        | Progress 
bar for PIP installation                                                        
                         |
 
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index 04c8aac34e4..e0f9c7fa7de 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -60,7 +60,7 @@ dependencies = [
     "jinja2>=3.1.5",
     "jsonschema>=4.19.1",
     "packaging>=25.0",
-    "prek>=0.2.9",
+    "prek>=0.2.10",
     "psutil>=5.9.6",
     "pygithub>=2.1.1",
     "pytest-xdist>=3.3.1",
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 bb34c144ffb..3e5abb3bb59 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -257,7 +257,7 @@ AIRFLOW_UV_VERSION = "0.9.3"
 AIRFLOW_USE_UV = False
 GITPYTHON_VERSION = "3.1.45"
 RICH_VERSION = "14.2.0"
-PREK_VERSION = "0.2.9"
+PREK_VERSION = "0.2.10"
 HATCH_VERSION = "1.15.1"
 PYYAML_VERSION = "6.0.3"
 
diff --git a/dev/breeze/uv.lock b/dev/breeze/uv.lock
index 75031b25d89..fa9d4db66f3 100644
--- a/dev/breeze/uv.lock
+++ b/dev/breeze/uv.lock
@@ -75,7 +75,7 @@ requires-dist = [
     { name = "jinja2", specifier = ">=3.1.5" },
     { name = "jsonschema", specifier = ">=4.19.1" },
     { name = "packaging", specifier = ">=25.0" },
-    { name = "prek", specifier = ">=0.2.9" },
+    { name = "prek", specifier = ">=0.2.10" },
     { name = "psutil", specifier = ">=5.9.6" },
     { name = "pygithub", specifier = ">=2.1.1" },
     { name = "pytest", specifier = ">=8.3.3" },
@@ -1023,28 +1023,28 @@ wheels = [
 
 [[package]]
 name = "prek"
-version = "0.2.9"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/74/8c/48e3909945af7b9995e15746afe1f833c1b4b3ca4edd3bc3fe08e4198bf9/prek-0.2.9.tar.gz";,
 hash = 
"sha256:3866caab6e1031ca12bc65259e20bce4cd479b1c2fd66770ca57b7ca5e9c7687", size 
= 3020434, upload-time = "2025-10-16T10:56:23.994Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/b9/0a/7f3288262fa3c6334fcc62fdd6b01cc3acd351bc8a0e411bf05b4098c88a/prek-0.2.9-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:602cb546ca7ca1da5f18d4b4fc952cee8498c4212270800220434ddac600f86c", size 
= 4405977, upload-time = "2025-10-16T10:55:55.95Z" },
-    { url = 
"https://files.pythonhosted.org/packages/20/37/89f403dde9450719024fe2d57b31002da0dceab4aefb293a58c33a697a04/prek-0.2.9-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:872797f4eadca9005ef546b4e7c98aeea486dc76ba0c6eee2ba2d53e1221cae5", size 
= 4505049, upload-time = "2025-10-16T10:55:57.976Z" },
-    { url = 
"https://files.pythonhosted.org/packages/87/c7/c909407296e7d8ed473225ea6ab892402a45c0d69f890074ab4c9373a2a7/prek-0.2.9-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:c93e8ef1b5a23e1503a162edf3759cd30bb962215fff7db180031892a1b4ceb8", size 
= 4199383, upload-time = "2025-10-16T10:55:59.606Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bf/91/1a35bba62a5805b7e474f5e4dae91c90a10108f15f25d7a87528f3fc74b9/prek-0.2.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:5c40f6029039c9576801000ceec91811718997b2299ea7ac1af34d4e2b5a5e82", size 
= 4385418, upload-time = "2025-10-16T10:56:01.41Z" },
-    { url = 
"https://files.pythonhosted.org/packages/60/41/7b6553c334335ec60af725ac381d309b6f738042885b87301981ae2b9db4/prek-0.2.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:7656870808d3e40747887cf9b1a6598ee5605a0e7f75eb306b5d28124b9a4fa2", size 
= 4336491, upload-time = "2025-10-16T10:56:03.351Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3c/99/345a81d35b37acf0c062662455c287300ac4b6ee0c5633a4362506622576/prek-0.2.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:60afd40cf3c8e85118955292a6f9317bcfdb90dee7192a30c7b5e1944c3a4bf7", size 
= 4618638, upload-time = "2025-10-16T10:56:04.656Z" },
-    { url = 
"https://files.pythonhosted.org/packages/da/c4/09600215ae417dff7059a56684a751270afbc08b133bb84c44e3fe13b5b6/prek-0.2.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl";,
 hash = 
"sha256:af9e5a41d39a957a98fac06149321bbbeddde058495bb3235067636c71ac54b6", size 
= 5060073, upload-time = "2025-10-16T10:56:06.118Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ec/b4/0d04cade1d26fac8b27337ae4a698a783d79205a586ae9a53fc413dc631d/prek-0.2.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:58907cc49afff34e7684063b221bd87820540fb860dc1d2ace0339d96ec2cc2f", size 
= 4986939, upload-time = "2025-10-16T10:56:07.503Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bd/36/1dff5a91c45e06df2eef22c3a197bcd1a46eefd4e12bc723ef76dd33f8be/prek-0.2.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:e93e63d43cd462c7cfaeecefff6b50f9bed87532db5f95cdf07109ce22b0d82c", size 
= 5103873, upload-time = "2025-10-16T10:56:08.87Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9c/81/f12d4c17845d10165c6a53494591c849da4c057cabd21238536073943691/prek-0.2.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:3b0172dcca93f92d783342ed448eff6808857265d7a269c2f71ab3a0a9cc816c", size 
= 4688657, upload-time = "2025-10-16T10:56:10.731Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b2/0e/4fd723183a5bb7d5e9f2303ca92558b80aec4fcb7685b2f616bdb9525bf5/prek-0.2.9-py3-none-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:c279ec142317fe27cad4bab9a1d5bcdc4d0e77688fb3625effee1a57a73e2737", size 
= 4395467, upload-time = "2025-10-16T10:56:12.643Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0f/9a/befaef47e5802fdde3eff6e24426f79e41513bf63780ac382697d5cb4bca/prek-0.2.9-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:eaf1e9ec46fe6bec190c10ab8040b6e1623a94a6643a2cddf18939cf742c12a8", size 
= 4499445, upload-time = "2025-10-16T10:56:14.351Z" },
-    { url = 
"https://files.pythonhosted.org/packages/20/07/e7a0da0beb91cc5d6de304cb6409618d30242ede7ef2d956a80ebd6791cf/prek-0.2.9-py3-none-musllinux_1_1_armv7l.whl";,
 hash = 
"sha256:c0942d6949adc0c47ad4311e42efeafa35d27ce1ee969d65d2148acc654f5ef2", size 
= 4323381, upload-time = "2025-10-16T10:56:15.696Z" },
-    { url = 
"https://files.pythonhosted.org/packages/cf/e2/40c17b3e760d9760f3b22783ca880e6c1ac46aa6200d476be5ca81fc57a4/prek-0.2.9-py3-none-musllinux_1_1_i686.whl";,
 hash = 
"sha256:6bc45321b83dab238cc2867bd3a6a7a604079af416d4772500e5956e61c4306e", size 
= 4513723, upload-time = "2025-10-16T10:56:17.084Z" },
-    { url = 
"https://files.pythonhosted.org/packages/87/df/243ab98b16e004a4602e19923f0b0b404de871c64cc4e49d32fc60c7cefc/prek-0.2.9-py3-none-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:e97cb737912844d89f12f2ea724007c2886d73c90e1d9be1133e4da55f872e8c", size 
= 4791957, upload-time = "2025-10-16T10:56:18.574Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8a/27/975bcecc1b52bc7c456e9c174a07f8466833893d877183efc4b809035d77/prek-0.2.9-py3-none-win32.whl";,
 hash = 
"sha256:7d68a2a8a8b2187ef51bb1abe822b2331459021174bad4be53fc1a583dc6d462", size 
= 4226511, upload-time = "2025-10-16T10:56:19.901Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fc/b2/95571c04bb395e4749510e676111dfb74b5c65a5cba252d155f3017e407b/prek-0.2.9-py3-none-win_amd64.whl";,
 hash = 
"sha256:40761199f945ba8e171654e2ed5135e04bd2baf20c2a2cc5235c4a672b65aaf2", size 
= 4799662, upload-time = "2025-10-16T10:56:21.284Z" },
-    { url = 
"https://files.pythonhosted.org/packages/11/76/80c2dbb5c38a909cdbb5f591401bb882ec2b325641c56163bc62db5a8605/prek-0.2.9-py3-none-win_arm64.whl";,
 hash = 
"sha256:02e9f38b3bc972bce141e74bcb6f8e3336732031db931fd8d20730c74f20e051", size 
= 4478662, upload-time = "2025-10-16T10:56:22.734Z" },
+version = "0.2.10"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/c1/d7/a99876b9327533494a142f5e064ee80b83f8f190e143d77df0e58b102a39/prek-0.2.10.tar.gz";,
 hash = 
"sha256:b1e39e164e6e50b90370aefdaa8ea3b0d294c2dca32213a0e434338c071a084f", size 
= 306656, upload-time = "2025-10-18T12:59:39.016Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/36/a1/b0b1b2617da42180bb268ef7d602bd1d44cce513996580d8972cf0062f03/prek-0.2.10-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:14f92676c21cb8f6939e97573dd44afe374ae80d80ffb3b014d7fa1f5cd4f90e", size 
= 4423728, upload-time = "2025-10-18T12:59:13.311Z" },
+    { url = 
"https://files.pythonhosted.org/packages/83/57/d3446e1349a37c6a8d67cb5d0bade6845eb8eecd5f1edf7e4d238d86e168/prek-0.2.10-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:9d8c2fd564743a9fa75b3ef50e1e7d949ae9cdad81e7ad7190d33816f73eab24", size 
= 4526478, upload-time = "2025-10-18T12:59:15.131Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4f/3a/0c243787712a5651bb4dfadea447fae204b9bc6a9e125746e39e5cd50b7c/prek-0.2.10-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:884cd224ec585c31cc55d108c50ba806b56c76c5db3f00b8ee785fc23cc2650d", size 
= 4217789, upload-time = "2025-10-18T12:59:16.687Z" },
+    { url = 
"https://files.pythonhosted.org/packages/80/a5/91fb3b639659160d4324c57bbc1da4e86f51246bd6a16df44ab56ab2b0c0/prek-0.2.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:c8198e9bc23999e25bf2b7f48539b828a5c4ce573f53c8666801b65bd9413856", size 
= 4401213, upload-time = "2025-10-18T12:59:18.111Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2e/26/ce28b3181add1f5f9d16a6ca5533ea54210a0148ff57d7889491390666bb/prek-0.2.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:86bce4c3078ffbf24b025b6f3072fccbffbe26b89e89f7824b9eebc79efd9117", size 
= 4358034, upload-time = "2025-10-18T12:59:19.48Z" },
+    { url = 
"https://files.pythonhosted.org/packages/58/95/6d5faf64827db7ac7536cb9647758dd55657d0064f78050fe17d6bc8d75e/prek-0.2.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:ebf2874650b169a50b78a212372021c11243125dd476fd4f4d5a54cefb19f905", size 
= 4639510, upload-time = "2025-10-18T12:59:21.098Z" },
+    { url = 
"https://files.pythonhosted.org/packages/50/55/8b81042d7063f3fcd3c339d57cce7aa7d48d4881c4f3370a2d271208c248/prek-0.2.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl";,
 hash = 
"sha256:ba498c642c30ae9b874723bb6994adecea98e0558d5a1ed392c2b128f533be0e", size 
= 5080393, upload-time = "2025-10-18T12:59:22.855Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5f/4a/ccd4cbeec66e26c0883d74345ddb5e7a162267081fff5d0ceb30da8ed099/prek-0.2.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:42f7a82f5a7f00f6cdf6a0a7894be43efdd43265edc2d3852b088e84f6647943", size 
= 5008842, upload-time = "2025-10-18T12:59:24.066Z" },
+    { url = 
"https://files.pythonhosted.org/packages/10/4e/106072bde84f10f704c9829a59698e5727eb54389abda999732f1612793c/prek-0.2.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:5d245a596db86c1e73410465aaa02e71190c271bbfe72c9479260874ac28d248", size 
= 5126863, upload-time = "2025-10-18T12:59:25.459Z" },
+    { url = 
"https://files.pythonhosted.org/packages/53/5b/34e823be911835ad1c78c2e69845275ee13b57eecbfdf19172f4d2a561dc/prek-0.2.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:bb09ad5956ec80bd9a9823d836ed73965df6ad79a1524ba41474ba2b207fbcd3", size 
= 4705646, upload-time = "2025-10-18T12:59:27.06Z" },
+    { url = 
"https://files.pythonhosted.org/packages/43/49/96526b72bb840b5b0f5fd59c4d3547db5a67a80df22ad5c979312a13f774/prek-0.2.10-py3-none-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:50eaa0be4f44fa988f06ead6fbd31924ccd717233d4a48dd63d7aeee0da35d3f", size 
= 4416120, upload-time = "2025-10-18T12:59:28.679Z" },
+    { url = 
"https://files.pythonhosted.org/packages/65/94/267d601521c72ccf19635f98f42fa31b643cc68073cecdaa0fda1dc27bee/prek-0.2.10-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:740112b6f4516b8ca3ac8d1c2ad8a97ebae6e9849eda30eab36789cb50237dce", size 
= 4515004, upload-time = "2025-10-18T12:59:29.905Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b4/1c/dd34cefe57cdfd636d2c9d120c4254a3cee2698249f27ccbb8319f936b36/prek-0.2.10-py3-none-musllinux_1_1_armv7l.whl";,
 hash = 
"sha256:7fb02642afa58aadbffb5899aa8d846cc3bc2fb1703ce2244601e29eaba02223", size 
= 4334781, upload-time = "2025-10-18T12:59:31.168Z" },
+    { url = 
"https://files.pythonhosted.org/packages/69/20/98cd5e2e1da4eebed1e1280a82f18870efed3e669d8eb939d410b4c571ad/prek-0.2.10-py3-none-musllinux_1_1_i686.whl";,
 hash = 
"sha256:56e3c4883f4bbc0a39c82c4c3b7e326ece49e7357fe29937a708ed0fd7a31999", size 
= 4533087, upload-time = "2025-10-18T12:59:32.374Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e7/ed/e7dea5f2e456e7f16d5be08c30be8fbf665c8391196c3870de39d5c0fb1d/prek-0.2.10-py3-none-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:56df3f2022f4e8fd359c35acde550e1dec76187183524c8e1e3236b121401173", size 
= 4811474, upload-time = "2025-10-18T12:59:33.933Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3a/2d/8118069a15280a5d3f2f9eae5a897b876a38ee470f0a1654e2740aa52c7a/prek-0.2.10-py3-none-win32.whl";,
 hash = 
"sha256:f6a4801188749951732e662c3ac2f1494abd7e846ba8bb90cf82bd2f6afcffea", size 
= 4244014, upload-time = "2025-10-18T12:59:35.173Z" },
+    { url = 
"https://files.pythonhosted.org/packages/93/a0/20a780d3de14cdddd74f25512c6b313b8b922c00437bf89854665a6fc7de/prek-0.2.10-py3-none-win_amd64.whl";,
 hash = 
"sha256:3f35e5630bafa3d7654798f354e6e8fc9717c9687088b9f842d7e6dcc6450743", size 
= 4817435, upload-time = "2025-10-18T12:59:36.592Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4a/a4/7c50e6992a5c6664e30c65b3e4884e93e19525eb66afbcda6c545c6cfbea/prek-0.2.10-py3-none-win_arm64.whl";,
 hash = 
"sha256:62d77b3dce2eaf7f69f175a3bf6c95e351d4b55fdd8f5b31f9a739713c472c26", size 
= 4498683, upload-time = "2025-10-18T12:59:37.946Z" },
 ]
 
 [[package]]
diff --git a/scripts/ci/install_breeze.sh b/scripts/ci/install_breeze.sh
index 73d9d27fbfa..c37784ef847 100755
--- a/scripts/ci/install_breeze.sh
+++ b/scripts/ci/install_breeze.sh
@@ -22,13 +22,11 @@ cd "$( dirname "${BASH_SOURCE[0]}" )/../../"
 PYTHON_ARG=""
 
 PIP_VERSION="25.2"
-UV_VERSION="0.9.3"
 if [[ ${PYTHON_VERSION=} != "" ]]; then
     PYTHON_ARG="--python=$(which python"${PYTHON_VERSION}") "
 fi
 
 python -m pip install --upgrade "pip==${PIP_VERSION}"
-python -m pip install "uv==${UV_VERSION}"
 uv tool uninstall apache-airflow-breeze >/dev/null 2>&1 || true
 # shellcheck disable=SC2086
 uv tool install ${PYTHON_ARG} --force --editable ./dev/breeze/
diff --git a/scripts/ci/prek/upgrade_important_versions.py 
b/scripts/ci/prek/upgrade_important_versions.py
index 4fea404e052..384aee98d9a 100755
--- a/scripts/ci/prek/upgrade_important_versions.py
+++ b/scripts/ci/prek/upgrade_important_versions.py
@@ -74,13 +74,14 @@ FILES_TO_UPDATE: list[tuple[Path, bool]] = [
     ),
     (AIRFLOW_ROOT_PATH / ".github" / "workflows" / 
"release_dockerhub_image.yml", False),
     (AIRFLOW_ROOT_PATH / ".github" / "actions" / "install-prek" / 
"action.yml", False),
+    (AIRFLOW_ROOT_PATH / ".github" / "actions" / "breeze" / "action.yml", 
False),
     (AIRFLOW_ROOT_PATH / ".github" / "workflows" / "basic-tests.yml", False),
+    (AIRFLOW_ROOT_PATH / ".github" / "workflows" / "ci-amd.yml", False),
     (AIRFLOW_ROOT_PATH / "dev" / "breeze" / "doc" / "ci" / "02_images.md", 
True),
     (AIRFLOW_ROOT_PATH / "docker-stack-docs" / "build-arg-ref.rst", True),
     (AIRFLOW_ROOT_PATH / "devel-common" / "pyproject.toml", True),
     (AIRFLOW_ROOT_PATH / "dev" / "breeze" / "pyproject.toml", False),
     (AIRFLOW_ROOT_PATH / ".pre-commit-config.yaml", False),
-    (AIRFLOW_ROOT_PATH / ".github" / "workflows" / "ci-amd.yml", False),
     (AIRFLOW_CORE_ROOT_PATH / "pyproject.toml", False),
     (AIRFLOW_CORE_ROOT_PATH / "docs" / "best-practices.rst", False),
 ]

Reply via email to