Skip to content

fix(ci): the composite consumers execute runs setup-uv v9, not v8.3.2 - #14

Merged
hseshadr merged 1 commit into
mainfrom
chore/bump-setup-uv-composite-v9
Aug 3, 2026
Merged

fix(ci): the composite consumers execute runs setup-uv v9, not v8.3.2#14
hseshadr merged 1 commit into
mainfrom
chore/bump-setup-uv-composite-v9

Conversation

@hseshadr

@hseshadr hseshadr commented Aug 3, 2026

Copy link
Copy Markdown
Owner

The defect

#12 bumped astral-sh/setup-uv 8.3.2 → 9.0.0 but touched only .github/workflows/ci.yml — this repo's own self-test. The file consumers actually execute, .github/actions/setup-python-uv/action.yml:54, stayed on v8.3.2. The bump reached nobody downstream.

The split was already visible in the field: edge-proc and edgeproc-core run v9.0.0 directly in their own ci.yml while calling this composite on their publish path. v9 on the test path, v8.3.2 on the publish path, same repo.

The change

One pin, plus the adjacent comment whose version range the bump made stale.

-    # setup-uv publishes no floating major tag (only v8.x.y). The full commit SHA
-    # and readable release comment keep execution immutable and updates reviewable.
-    - uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
+    # setup-uv publishes no floating major tag (only vX.Y.Z — `v9` 404s upstream).
+    # The full commit SHA and readable release comment keep execution immutable and
+    # updates reviewable. The comment must name the exact version, never `# v9`:
+    # zizmor's ref-version-mismatch resolves it upstream and a float turns red on
+    # the next patch release.
+    - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0

The SHA, verified independently

gh api repos/astral-sh/setup-uv/tags:

Tag SHA
v9.0.0 c771a70e6277c0a99b617c7a806ffedaca235ff9 ← incoming
v8.3.2 11f9893b081a58869d3b5fccaea48c9e9e46f990 ← outgoing

gh api .../git/ref/tags/v9.0.0 resolves to the same commit. It is also the SHA #12 used and the one both consumers already run.

The comment names the exact version

#13 just removed five floating-major comments. zizmor's ref-version-mismatch resolves the version comment against upstream, so # v9 turns main red the moment astral-sh cuts a patch. No floating major tag exists upstream anyway — v9 and v8 both 404 on the refs API.

Claim touched

Consumers of this composite run a pinned, immutable, auditable setup-uv.

True about immutability, false about which version. The pin CI audited and the pin consumers executed lived in different files, and only one of them got bumped. This PR makes the audited pin and the executed pin the same pin.

Evidence

Check Result
GH_TOKEN=… uvx zizmor@1.26.1 . exit 0 — "No findings to report" (1 ignored, 10 suppressed)
actionlint clean
shellcheck -x + bash -n clean
tests/security-policy.sh exit 0 — "Security policy checks passed."
tests/lint-examples.sh exit 0 — 173 refs resolved, 0 MISSING, 0 UNVERIFIABLE across 7 consumer repos

Anything else still on v8.3.2

Nothing executable. grep -rn 11f9893b081a58869d3b5fccaea48c9e9e46f990 returns exactly one hit on main, and this PR is it. The remainder is prose and left alone deliberately — no gate reads it:

  • README.md:422 — pin-convention table says # v8.3.2
  • README.md:197 — sample snippet shows @v8.1.0
  • CHANGELOG.md:273,401 — historical entries, correct as history

Not in this PR

.github/workflows/python-gate.yml:82 still pins this composite at @2a575cd… # ci-v3.0.0. Re-pointing it needs this PR's merge SHA, which does not exist yet. It is the deliberate next step, not an oversight.

🤖 Generated with Claude Code

https://claude.ai/code/session_015o7tjWLFZvzRv4KyNfDukx

#12 bumped astral-sh/setup-uv 8.3.2 -> 9.0.0 but touched only
.github/workflows/ci.yml — this repo's own self-test. The file consumers
actually execute, .github/actions/setup-python-uv/action.yml, stayed on
v8.3.2, so the bump reached nobody downstream.

The split was already visible in the field: edge-proc and edgeproc-core
run v9.0.0 directly in their own ci.yml while calling this composite on
their publish path — v9 on test, v8.3.2 on publish, same repo, same PR.

c771a70e6277c0a99b617c7a806ffedaca235ff9 is v9.0.0, confirmed against
`gh api repos/astral-sh/setup-uv/tags` (v8.3.2 there is the outgoing
11f9893b), and is the same SHA #12 and both consumers already run.

The version comment names v9.0.0 exactly. #13 just removed five
floating-major comments for this reason: zizmor's ref-version-mismatch
resolves the comment against upstream, so `# v9` turns main red the
moment astral-sh cuts a patch. No floating major tag exists upstream
anyway — `v9` and `v8` both 404.

Claim touched: "consumers of this composite run a pinned, immutable,
auditable setup-uv." It was true about immutability and false about
which version — the audited pin and the executed pin were different files.

Evidence:
- GH_TOKEN=... uvx zizmor@1.26.1 . -> exit 0, "No findings to report"
- actionlint -> clean; shellcheck -x + bash -n -> clean
- tests/security-policy.sh -> exit 0
- tests/lint-examples.sh -> exit 0, 173 refs resolved, 0 MISSING

Still on the old SHA after this change: nothing executable. README.md:422
and CHANGELOG.md:273,401 mention v8.3.2 as prose; README.md:197 shows
v8.1.0 in a sample. Reported, not edited — no gate reads them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015o7tjWLFZvzRv4KyNfDukx
@cursor

cursor Bot commented Aug 3, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@hseshadr
hseshadr merged commit 33c5e5f into main Aug 3, 2026
4 checks passed
@hseshadr
hseshadr deleted the chore/bump-setup-uv-composite-v9 branch August 3, 2026 14:11
hseshadr added a commit that referenced this pull request Aug 3, 2026
* chore(ci): every first-party ref runs the v9.0.0 composite

The nine self-pins still resolved to ci-v3.0.0, whose tree carries setup-uv
v8.3.2 — so python-gate, python-publish and security-audit all executed the old
version while ci.yml ran v9.0.0. Bumping the composite in #14 fixed the file;
nothing that calls it moved until now.

Comments move with the SHAs. A stale version comment is what zizmor's
ref-version-mismatch fails on, and it turned main red this morning.

Verified: 9 pins before, 0 remaining at 2a575cd after — asserted, not assumed.
zizmor exit 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015o7tjWLFZvzRv4KyNfDukx

* chore(ci): re-pin the published examples too

The first-party currency guard covers examples/, not just .github/ — and it is
right to. examples/ is the path consumers copy; ci-v2.0.0 got into every consumer
exactly this way, because every example pointed at it while it carried nested
@ci-v1 moving tags.

17 example refs moved to 33c5e5f (ci-v3.1.0). tests/security-policy.sh exits 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant