ci: SHA-pin the four unpinned actions in pages.yml (missed the #123 merge)#128
Merged
Conversation
Fixing the missing SPDX header earlier in this branch advanced the Governance
workflow-security linter *past* its first gate — it `exit 1`s immediately after the
SPDX/permissions block — which uncovered a second defect in the same file that had
been masked all along:
ERROR: Found unpinned actions:
.github/workflows/pages.yml:25 actions/checkout@v4
.github/workflows/pages.yml:27 actions/checkout@v4
.github/workflows/pages.yml:44 actions/upload-pages-artifact@v3
.github/workflows/pages.yml:57 actions/deploy-pages@v4
Same root cause as the missing header: pages.yml was dropped in by the Ddraig SSG
mass-rollout (#121) without this repo's SPDX + SHA-pinning conventions.
Pins are copied verbatim from .github/workflows/casket-pages.yml — the active,
already-compliant Pages workflow in this repo — rather than newly chosen, so the two
Pages workflows now agree. That also moves upload-pages-artifact v3 -> v5.0.0 and
deploy-pages v4 -> v5.0.0, which is what makes them consistent.
No runtime risk today: "GitHub Pages (Ddraig SSG)" is disabled_manually, so this
unblocks a linter on a workflow that does not currently run.
Verified: every action under .github/workflows/ is now SHA-pinned (no @vN/@main/@master
remains), and both modified workflows parse as valid YAML.
Note: `governance / Check Workflow Staleness` remains red and is NOT addressed here.
It was already failing on main before this branch existed (run 29688088909) — the
standards reusable pins d7c2271 are 59 commits/24d behind HEAD 8813ecf. That refresh
is shared across all callers and is being coordinated centrally, so it is deliberately
left alone.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hyperpolymath
marked this pull request as ready for review
July 21, 2026 13:06
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #123. This is the one commit from that branch that missed the merge —
#123 was squash-merged at head
120f32d(12:06 UTC); this commit was authored at12:17 UTC, ten minutes later, so it was never part of the PR and never ran CI.
Main is red on
governance / Workflow security lintertoday purely because of it.What this fixes
pages.ymlwas dropped in by the Ddraig SSG mass-rollout (#121) without this repo'sSPDX and SHA-pinning conventions. #123 fixed the missing SPDX header — and that is
exactly what exposed this second defect: the linter
exit 1s immediately after itsSPDX/permissions block, so the pin check downstream had never been reached.
The SHAs are copied verbatim from
casket-pages.yml— the active, already-compliantPages workflow in this repo — rather than freshly resolved, so the two Pages workflows
converge on one vetted set instead of diverging into a third.
Side effect worth naming: this also moves
upload-pages-artifactv3→v5 anddeploy-pagesv4→v5, which is what makes them consistent withcasket-pages.yml.pages.ymlisdisabled_manually, so there is no runtime risk today — we areunblocking a linter on a workflow that does not currently run.
Verified locally (reproducing the linter's own grep)
Expected CI on this PR — please read before judging the tick
governance / Workflow security linter→ should go green.governance / Check Workflow Staleness→ will stay red, by design. It isindependent of this change and was already failing on
mainbefore #123 existed. Itsthree errors are all standards-reusable pin staleness (
d7c22711e830, 59 commits / 24dbehind
8813ecf2a841). That refresh is shared across ~54 callers and coordinatedcentrally, and there is a standing estate finding that consumers should not be re-pinned
yet. Left to that effort deliberately.
So the Governance workflow will still report failure on this PR. That is the
staleness job, not this fix. Do not read it as "the pin fix didn't work" — check the
per-job conclusions.
Also settled while verifying: the staleness job's "Remove legacy scorecard-enforcer.yml"
line is its generic remediation summary, printed on any failure — not a path
detection. The only copy of that file is in the inert
aletheia/.github/workflows/, andnothing is reaching into it. No action needed there.
🤖 Generated with Claude Code