diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 866f8f253d401..c94518489d28a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -622,6 +622,7 @@ jobs:
kubernetes-versions-list-as-string: ${{ needs.build-info.outputs.kubernetes-versions-list-as-string }}
kubernetes-combos-list-as-string: ${{ needs.build-info.outputs.kubernetes-combos-list-as-string }}
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
+ use-uv: ${{ needs.build-info.outputs.force-pip && 'false' || 'true' }}
debug-resources: ${{ needs.build-info.outputs.debug-resources }}
if: >
( needs.build-info.outputs.run-kubernetes-tests == 'true' ||
diff --git a/.github/workflows/k8s-tests.yml b/.github/workflows/k8s-tests.yml
index c4b72a9afc924..9a764e88c4e99 100644
--- a/.github/workflows/k8s-tests.yml
+++ b/.github/workflows/k8s-tests.yml
@@ -44,6 +44,10 @@ on: # yamllint disable-line rule:truthy
description: "Whether to include success outputs"
required: true
type: string
+ use-uv:
+ description: "Whether to use uv"
+ required: true
+ type: string
debug-resources:
description: "Whether to debug resources"
required: true
@@ -96,6 +100,9 @@ jobs:
key: "\
k8s-env-${{ steps.breeze.outputs.host-python-version }}-\
${{ hashFiles('scripts/ci/kubernetes/k8s_requirements.txt','hatch_build.py') }}"
+ - name: "Switch breeze to use uv"
+ run: breeze setup-config --use-uv
+ if: inputs.use-uv == 'true'
- name: Run complete K8S tests ${{ inputs.kubernetes-combos-list-as-string }}
run: breeze k8s run-complete-tests --run-in-parallel --upgrade --no-copy-local-sources
env:
diff --git a/Dockerfile b/Dockerfile
index cf5226c00086f..4cdf1a8bb3409 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -49,8 +49,8 @@ ARG AIRFLOW_VERSION="2.9.3"
ARG PYTHON_BASE_IMAGE="python:3.8-slim-bookworm"
-ARG AIRFLOW_PIP_VERSION=24.2
-ARG AIRFLOW_UV_VERSION=0.4.1
+ARG AIRFLOW_PIP_VERSION=24.3.1
+ARG AIRFLOW_UV_VERSION=0.4.29
ARG AIRFLOW_USE_UV="false"
ARG UV_HTTP_TIMEOUT="300"
ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
diff --git a/Dockerfile.ci b/Dockerfile.ci
index d23e810fa3677..e188a7ec39115 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1297,8 +1297,8 @@ ARG DEFAULT_CONSTRAINTS_BRANCH="constraints-main"
# It can also be overwritten manually by setting the AIRFLOW_CI_BUILD_EPOCH environment variable.
ARG AIRFLOW_CI_BUILD_EPOCH="10"
ARG AIRFLOW_PRE_CACHED_PIP_PACKAGES="true"
-ARG AIRFLOW_PIP_VERSION=24.2
-ARG AIRFLOW_UV_VERSION=0.4.1
+ARG AIRFLOW_PIP_VERSION=24.3.1
+ARG AIRFLOW_UV_VERSION=0.4.29
ARG AIRFLOW_USE_UV="true"
# Setup PIP
# By default PIP install run without cache to make image smaller
@@ -1321,8 +1321,8 @@ ARG AIRFLOW_VERSION=""
# Additional PIP flags passed to all pip install commands except reinstalling pip itself
ARG ADDITIONAL_PIP_INSTALL_FLAGS=""
-ARG AIRFLOW_PIP_VERSION=24.2
-ARG AIRFLOW_UV_VERSION=0.4.1
+ARG AIRFLOW_PIP_VERSION=24.3.1
+ARG AIRFLOW_UV_VERSION=0.4.29
ARG AIRFLOW_USE_UV="true"
ENV AIRFLOW_REPO=${AIRFLOW_REPO}\
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index f9ea4faaee7c0..1db263f8b3aa0 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -447,8 +447,8 @@ can be used for CI images:
| `DEV_APT_DEPS` | | Dev APT dependencies installed in the first part of the image |
| `ADDITIONAL_DEV_APT_DEPS` | | Additional apt dev dependencies installed in the first part of the image |
| `ADDITIONAL_DEV_APT_ENV` | | Additional env variables defined when installing dev deps |
-| `AIRFLOW_PIP_VERSION` | `24.0` | PIP version used. |
-| `AIRFLOW_UV_VERSION` | `0.1.10` | UV version used. |
+| `AIRFLOW_PIP_VERSION` | `24.3.1` | PIP version used. |
+| `AIRFLOW_UV_VERSION` | `0.4.29` | UV 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/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index 08d3dc2a13eea..5888d1fc862eb 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -298,53 +298,53 @@
Usage:breeze[OPTIONS] COMMAND [ARGS]...╭─ Execution mode ─────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--python-pPython major/minor version used in Airflow image for images.│
+│--python-pPython major/minor version used in Airflow image for images.││(>3.8< | 3.9 | 3.10 | 3.11 | 3.12) ││[default: 3.8] │
-│--integrationIntegration(s) to enable when running (can be more than one). │
+│--integrationIntegration(s) to enable when running (can be more than one). ││(all | all-testable | cassandra | celery | drill | kafka | kerberos | mongo | mssql ││| openlineage | otel | pinot | qdrant | redis | statsd | trino | ydb) │
-│--standalone-dag-processorRun standalone dag processor for start-airflow.│
-│--database-isolationRun airflow in database isolation mode.│
+│--standalone-dag-processorRun standalone dag processor for start-airflow.│
+│--database-isolationRun airflow in database isolation mode.│╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Docker Compose selection and cleanup ───────────────────────────────────────────────────────────────────────────────╮
-│--project-nameName of the docker-compose project to bring down. The `docker-compose` is for legacy breeze │
-│project name and you can use `breeze down --project-name docker-compose` to stop all containers │
+│--project-nameName of the docker-compose project to bring down. The `docker-compose` is for legacy breeze │
+│project name and you can use `breeze down --project-name docker-compose` to stop all containers ││belonging to it. ││(breeze | pre-commit | docker-compose) ││[default: breeze] │
-│--docker-hostOptional - docker host to use when running docker commands. When set, the `--builder` option is │
+│--docker-hostOptional - docker host to use when running docker commands. When set, the `--builder` option is ││ignored when building images. ││(TEXT) │╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Database ───────────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--backend-bDatabase backend to use. If 'none' is chosen, Breeze will start with an invalid database │
+│--backend-bDatabase backend to use. If 'none' is chosen, Breeze will start with an invalid database ││configuration, meaning there will be no database available, and any attempts to connect to ││the Airflow database will fail. ││(>sqlite< | mysql | postgres | none) ││[default: sqlite] │
-│--postgres-version-PVersion of Postgres used.(>12< | 13 | 14 | 15 | 16)[default: 12]│
-│--mysql-version-MVersion of MySQL used.(>8.0< | 8.4)[default: 8.0]│
-│--db-reset-dReset DB when entering the container.│
+│--postgres-version-PVersion of Postgres used.(>12< | 13 | 14 | 15 | 16)[default: 12]│
+│--mysql-version-MVersion of MySQL used.(>8.0< | 8.4)[default: 8.0]│
+│--db-reset-dReset DB when entering the container.│╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Build CI image (before entering shell) ─────────────────────────────────────────────────────────────────────────────╮
-│--github-repository-gGitHub repository used to pull, push run images.(TEXT)[default: apache/airflow]│
-│--builderBuildx builder used to perform `docker buildx build` commands.(TEXT)│
+│--github-repository-gGitHub repository used to pull, push run images.(TEXT)[default: apache/airflow]│
+│--builderBuildx builder used to perform `docker buildx build` commands.(TEXT)││[default: autodetect] │
-│--use-uv/--no-use-uvUse uv instead of pip as packaging tool to build the image.[default: use-uv]│
-│--uv-http-timeoutTimeout for requests that UV makes (only used in case of UV builds).(INTEGER RANGE)│
+│--use-uv/--no-use-uvUse uv instead of pip as packaging tool to build the image.[default: use-uv]│
+│--uv-http-timeoutTimeout for requests that UV makes (only used in case of UV builds).(INTEGER RANGE)││[default: 300; x>=1] │╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Other options ──────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--forward-credentials-fForward local credentials to container when running.│
-│--max-timeMaximum time that the command should take - if it takes longer, the command will fail.│
+│--forward-credentials-fForward local credentials to container when running.│
+│--max-timeMaximum time that the command should take - if it takes longer, the command will fail.││(INTEGER RANGE) │╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--answer-aForce answer to questions.(y | n | q | yes | no | quit)│
-│--dry-run-DIf dry-run is set, commands are only printed, not executed.│
-│--verbose-vPrint verbose information about performed steps.│
-│--help-hShow this message and exit.│
+│--answer-aForce answer to questions.(y | n | q | yes | no | quit)│
+│--dry-run-DIf dry-run is set, commands are only printed, not executed.│
+│--verbose-vPrint verbose information about performed steps.│
+│--help-hShow this message and exit.│╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Developer commands ─────────────────────────────────────────────────────────────────────────────────────────────────╮│start-airflow Enter breeze environment and starts all Airflow components in the tmux session. Compile │
diff --git a/dev/breeze/doc/images/output_setup_config.svg b/dev/breeze/doc/images/output_setup_config.svg
index 9a42467ea5281..5a44bb20030b9 100644
--- a/dev/breeze/doc/images/output_setup_config.svg
+++ b/dev/breeze/doc/images/output_setup_config.svg
@@ -1,4 +1,4 @@
-