Skip to content

Breeze: ensure generated Dockerfile.pmc upgrades uv to required floor#65774

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:fix-dockerfile-pmc-uv-version
Apr 24, 2026
Merged

Breeze: ensure generated Dockerfile.pmc upgrades uv to required floor#65774
potiuk merged 1 commit into
apache:mainfrom
potiuk:fix-dockerfile-pmc-uv-version

Conversation

@potiuk
Copy link
Copy Markdown
Member

@potiuk potiuk commented Apr 24, 2026

breeze release-management check-release-files providers generates a
Dockerfile.pmc that copies the root pyproject.toml into the CI image
and then runs uv pip install. If the CI image ships an older uv than
[tool.uv] required-version, the install step fails with:

error: Required uv version `>=X.Y.Z` does not match the running
version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current ghcr.io/apache/airflow/main/ci/python3.10
image ships uv 0.11.6, the pin is >=0.11.7, and so every PMC
Dockerfile.pmc install attempt breaks out of the box.

Fix

  • Inject RUN pip install --upgrade 'uv>=X.Y.Z' before uv pip install
    in PROVIDERS_DOCKER. The install step now works regardless of when
    the CI image was last rebuilt.
  • Put the floor in a _PROVIDERS_DOCKER_UV_MIN_VERSION constant with
    the existing # sync-uv-min-version marker, and add
    check_release_files.py to the sync-uv-min-version-markers prek
    hook's file list. When someone bumps [tool.uv] required-version,
    the hook rewrites this constant on the next commit.
  • Two new tests guard the change: (1) the rendered PROVIDERS_DOCKER
    contains the uv upgrade step and it precedes uv pip install;
    (2) the hard-coded floor matches the current required-version from
    the root pyproject.toml (belt-and-braces — the hook enforces this
    at commit time, the test catches accidental drift).

Not auto-syncing with AIRFLOW_UV_VERSION on purpose — per the comment
next to required-version, that value intentionally stays decoupled
and is managed via upgrade_important_versions.py.


Was generative AI tooling used to co-author this PR?
  • Yes — Claude Opus 4.7

Generated-by: Claude Opus 4.7 following the guidelines

…loor

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
@potiuk potiuk merged commit 0df38ff into apache:main Apr 24, 2026
141 checks passed
@potiuk potiuk deleted the fix-dockerfile-pmc-uv-version branch April 24, 2026 22:24
@github-actions
Copy link
Copy Markdown
Contributor

Backport successfully created: v3-2-test

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

Status Branch Result
v3-2-test PR Link

github-actions Bot pushed a commit to aws-mwaa/upstream-to-airflow that referenced this pull request Apr 24, 2026
…e required floor (apache#65774)

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
(cherry picked from commit 0df38ff)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
aws-airflow-bot pushed a commit to aws-mwaa/upstream-to-airflow that referenced this pull request Apr 24, 2026
…e required floor (apache#65774)

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
(cherry picked from commit 0df38ff)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
potiuk added a commit that referenced this pull request Apr 26, 2026
…e required floor (#65774)

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
(cherry picked from commit 0df38ff)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
potiuk added a commit that referenced this pull request Apr 26, 2026
…e required floor (#65774)

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
(cherry picked from commit 0df38ff)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
potiuk added a commit that referenced this pull request Apr 26, 2026
…e required floor (#65774) (#65829)

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
(cherry picked from commit 0df38ff)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
vatsrahul1001 pushed a commit that referenced this pull request Apr 27, 2026
…e required floor (#65774) (#65829)

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
(cherry picked from commit 0df38ff)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
vatsrahul1001 pushed a commit that referenced this pull request May 20, 2026
…e required floor (#65774) (#65829)

`breeze release-management check-release-files providers` generates a
Dockerfile.pmc that copies the root `pyproject.toml` into the CI image
and then runs `uv pip install`. If the CI image ships an older uv than
`[tool.uv] required-version`, that install step fails with:

    error: Required uv version `>=X.Y.Z` does not match the running
    version `A.B.C`. Update `uv` by running `uv self update`.

This is reproducible today: the current `ghcr.io/apache/airflow/main/ci/
python3.10` ships uv 0.11.6 while the pin is `>=0.11.7`, so every PMC
Dockerfile.pmc verification breaks out of the box.

Inject a `pip install --upgrade 'uv>=X.Y.Z'` before the `uv pip install`
step so the install works regardless of when the CI image was last
rebuilt. The floor is a module constant with the existing
`# sync-uv-min-version` marker so the `sync-uv-min-version-markers` prek
hook keeps it in lockstep with the `[tool.uv] required-version` bump
going forward — drop `check_release_files.py` into that hook's file
list and add a belt-and-braces test that the two values match.
(cherry picked from commit 0df38ff)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dev-tools backport-to-v3-2-test Mark PR with this label to backport to v3-2-test branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants