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),
]