This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new c3d4905a155 Run `uv lock --upgrade` locally in `breeze ci upgrade`
instead of inside CI image (#64804)
c3d4905a155 is described below
commit c3d4905a155070350bd5e5b71fd8a0e63882c574
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon Apr 6 22:09:01 2026 +0200
Run `uv lock --upgrade` locally in `breeze ci upgrade` instead of inside CI
image (#64804)
With uv.lock, we can now base all the lock preparation on uv's
smartness to figure out all the dependencies without building a CI
image first. The `uv lock --upgrade` command resolves dependencies
purely from pyproject.toml metadata — it does not need an installed
environment, so there is no reason to build the Breeze CI image
just for this step.
This removes the `breeze ci-image build --python 3.10` step from
`breeze ci upgrade` and runs `uv lock --upgrade` directly on the
host. The manual `update-uv-lock` pre-commit hook is also removed
since it is no longer invoked via prek.
Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
---
.pre-commit-config.yaml | 14 ---------
.../src/airflow_breeze/commands/ci_commands.py | 33 ++++------------------
2 files changed, 6 insertions(+), 41 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 8d9eaf4abe0..99d2a5f1771 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1086,17 +1086,3 @@ repos:
language: python
files: .*test.*\.py$
pass_filenames: true
- # This is a manual hook, run by `breeze ci upgrade` - upgrading all
dependencies inside the
- # Breeze CI image - which allows checking all dependencies for all
providers.
- # ALWAYS keep it at the end so that it can take into account all the
other hook's changes.
- - id: update-uv-lock
- stages: ['manual']
- name: Update uv.lock (manual)
- entry: breeze run uv lock --upgrade
- language: system
- files: >
- (?x)
- (^|/)pyproject\.toml$|
- ^uv\.lock$
- pass_filenames: false
- require_serial: true
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
index c7cd5e2b8ae..68c184d2423 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
@@ -778,9 +778,9 @@ def upgrade(
"Commands may fail if they require authentication.[/]"
)
- # Define upgrade commands to run before building the CI image (all run
with check=False
- # to continue on errors). These may update Dockerfiles and other build
inputs.
- pre_image_commands: list[tuple[str, str]] = [
+ # All upgrade commands run locally with check=False to continue on errors.
+ # The uv lock --upgrade step must run last so it can incorporate changes
from the other steps.
+ upgrade_commands: list[tuple[str, str]] = [
("autoupdate", "prek autoupdate --cooldown-days 4 --freeze"),
(
"update-chart-dependencies",
@@ -790,14 +790,9 @@ def upgrade(
"upgrade-important-versions",
"prek --all-files --show-diff-on-failure --color always --verbose
--stage manual upgrade-important-versions",
),
- ]
-
- # Define upgrade commands to run after building the CI image (they run
inside the image
- # and need an up-to-date environment).
- post_image_commands: list[tuple[str, str]] = [
(
"update-uv-lock",
- "prek --all-files --show-diff-on-failure --color always --verbose
update-uv-lock --stage manual",
+ "uv lock --upgrade",
),
]
@@ -808,24 +803,8 @@ def upgrade(
"update-uv-lock": update_uv_lock,
}
- # Execute pre-image upgrade commands (may update Dockerfiles)
- for step_name, command in pre_image_commands:
- if step_enabled[step_name]:
- run_command(command.split(), check=False, env=command_env)
- else:
- console_print(f"[info]Skipping {step_name} (disabled).[/]")
-
- # Build the CI image for Python 3.10 after Dockerfiles have been updated
so that
- # subsequent steps (e.g. uv lock updates inside the image) use an
up-to-date environment.
- console_print("[info]Building CI image for Python 3.10 …[/]")
- run_command(
- ["breeze", "ci-image", "build", "--python", "3.10"],
- check=False,
- env=command_env,
- )
-
- # Execute post-image upgrade commands (run inside the freshly built image)
- for step_name, command in post_image_commands:
+ # Execute upgrade commands
+ for step_name, command in upgrade_commands:
if step_enabled[step_name]:
run_command(command.split(), check=False, env=command_env)
else: