Skip to content

[v3-3-test] Refresh the image registry cache in a workflow that cannot be cancelled (#71171) - #71173

Merged
potiuk merged 1 commit into
v3-3-testfrom
cherry-pick-71171-v3-3-test
Aug 5, 2026
Merged

[v3-3-test] Refresh the image registry cache in a workflow that cannot be cancelled (#71171)#71173
potiuk merged 1 commit into
v3-3-testfrom
cherry-pick-71171-v3-3-test

Conversation

@vatsrahul1001

Copy link
Copy Markdown
Contributor

Backport of #71171 to v3-3-test.

Moves the CI image-cache refresh into a standalone refresh-image-registry-cache.yml that can't be cancelled by the next push (push and manual runs are grouped separately), forces all Python versions, removes the "Early" cache job from the regular build, and splits the manual constraints refresh into refresh-constraints.yml. This speeds up v3-3-test's cold linux/amd64 builds.

Reconciliation note

This wasn't a clean cherry-pick. An earlier backport (#71167) had accidentally landed a draft of this work on v3-3-test under the old filename refresh-image-cache.yml, which main never had. This backport therefore:

  • replaces that stray draft — recorded as a rename refresh-image-cache.yml -> refresh-image-registry-cache.yml, so the branch ends with exactly one cache-refresh workflow (matching main);
  • aligns the branch-agnostic files (additional-ci-image-checks.yml, update-constraints-on-push.yml, refresh-constraints.yml, both dev/*.md, plus the referenced image) byte-for-byte with main;
  • keeps the legitimate branch-specific content in ci-amd.yml / ci-arm.yml (only the 7 shared inputs are removed, identically in both — check-ci-workflows-in-sync passes) and in test_selective_checks.py (which keeps v3-3-test's base plus the one cache test).

CI_AMD_PLATFORM / CI_ARM_PLATFORM do not exist on v3-3-test, so the test import from main was intentionally not carried over.

Verified locally: all pre-commit hooks pass (yamllint, zizmor, lychee, markdownlint, check-ci-workflows-in-sync), and the kept test_all_python_versions_with_all_versions_label test passes.

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.8)

Generated-by: Claude Code (Opus 4.8) following the guidelines

…ed (#71171)

* Refresh the image registry cache in a workflow that cannot be cancelled

A branch built on push refreshed its registry cache from inside the CI run, which
cancels in progress on the next push. With no cache the build runs cold, which widens
the window the next push cancels in, which leaves the cache missing -- v3-3-test held
only the default Python version's amd64 cache because that was the one matrix entry
that finished in time.

The refresh also has to cover every Python version: a version with no cache entry
builds from scratch on every run, and selective checks narrows the list on a text-only
push.

* Refresh constraints from a workflow of its own, covering every flavour

The manual constraints refresh shared a workflow with the automatic uv.lock push, so it
was filtered by that workflow's paths and buried under its name in the Actions list.

The documented procedures pointed at local builds -- refresh_images.sh for the image
cache, breeze commands for the constraints -- which need a buildx/qemu setup, a
committer login to ghcr.io, and enough bandwidth to push the layers. The workflows need
none of that, and unlike a local run they always cover every Python version and every
constraint flavour.

* Exempt a manually started cache refresh from the push cancellation

A push-triggered refresh should give way to the next one -- it is building the cache of a
commit that is no longer the tip. A manual run should not: it is started because the
branch has no cache and the push runs are the thing that keeps getting cancelled.

(cherry picked from commit e69c188)
@vatsrahul1001 vatsrahul1001 added this to the Airflow 3.3.1 milestone Aug 5, 2026
@potiuk
potiuk merged commit 14e5c4a into v3-3-test Aug 5, 2026
37 checks passed
@potiuk
potiuk deleted the cherry-pick-71171-v3-3-test branch August 5, 2026 12:40
vatsrahul1001 added a commit that referenced this pull request Aug 5, 2026
…ed (#71171) (#71173)

* Refresh the image registry cache in a workflow that cannot be cancelled

A branch built on push refreshed its registry cache from inside the CI run, which
cancels in progress on the next push. With no cache the build runs cold, which widens
the window the next push cancels in, which leaves the cache missing -- v3-3-test held
only the default Python version's amd64 cache because that was the one matrix entry
that finished in time.

The refresh also has to cover every Python version: a version with no cache entry
builds from scratch on every run, and selective checks narrows the list on a text-only
push.

* Refresh constraints from a workflow of its own, covering every flavour

The manual constraints refresh shared a workflow with the automatic uv.lock push, so it
was filtered by that workflow's paths and buried under its name in the Actions list.

The documented procedures pointed at local builds -- refresh_images.sh for the image
cache, breeze commands for the constraints -- which need a buildx/qemu setup, a
committer login to ghcr.io, and enough bandwidth to push the layers. The workflows need
none of that, and unlike a local run they always cover every Python version and every
constraint flavour.

* Exempt a manually started cache refresh from the push cancellation

A push-triggered refresh should give way to the next one -- it is building the cache of a
commit that is no longer the tip. A manual run should not: it is started because the
branch has no cache and the push runs are the thing that keeps getting cancelled.

(cherry picked from commit e69c188)

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants