ci: pin GitHub Actions and enable updates - #26
Merged
farhan-syah merged 2 commits intoJul 28, 2026
Merged
Conversation
Group weekly action-SHA bumps into a single PR and bump crazy-max/ghaction-github-labeler and Swatinem/rust-cache to their latest pinned SHAs.
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.
Summary
Pin every third-party GitHub Action used by PageDB workflows to a full 40-byte
commit SHA and add weekly Dependabot maintenance for the
github-actionsecosystem.
This carries only the action-pinning portion identified during review of #24. It
does not change release job dependencies, artifact handling, Cargo publication
flags, version stamping, tests, permissions, runner selection, or workflow
behavior.
Why
Mutable action tags are convenient but allow the code executed by an existing
workflow revision to change after review. Full commit SHAs make each workflow
revision resolve to immutable action source.
Pinning without an update owner would trade one supply-chain risk for silent
staleness.
.github/dependabot.ymltherefore scans GitHub Actions weekly.Dependabot understands action references pinned to commit SHAs and updates the
same-line version annotation when it opens an upgrade PR.
Pinned references
Every reference is pinned to the commit behind a published release, and every
release pinned here is the latest one available.
actions/checkout3d3c42e5aac5ba805825da76410c181273ba90b1v7.0.1actions/upload-artifact043fb46d1a93c77aae656e7c1c64a875d1fc6a0av7.0.1actions/download-artifact3e5f45b2cfb9172054b4087a40e8e0b5a5461e7cv8.0.1softprops/action-gh-release3d0d9888cb7fd7b750713d6e236d1fcb99157228v3.0.2Swatinem/rust-cachec19371144df3bb44fab255c43d04cbc2ab54d1c4v2.9.1taiki-e/install-action41049aa56687c35e0afa74eed4f09cec4f9afabfv2.85.2crazy-max/ghaction-github-labeler548a7c3603594ec17c819e1239f281a3b801ab4dv6.0.0dtolnay/rust-toolchain4cda84d5c5c54efe2404f9d843567869ab1699d4stableThe same SHA is used consistently at every occurrence. Local reusable workflows
such as
./.github/workflows/test.ymlremain local references and areintentionally not rewritten.
ci.ymlcontains only local references, which iswhy it is not in the diff.
Annotations name a release, not a moving tag
Swatinem/rust-cacheis pinned to thev2.9.1release commit rather than to thehead of the moving
v2tag. Those are not the same commit:v2currently pointsone changelog-only commit past the
v2.9.1tag, so pinning it would freeze codethat was never cut as a release, behind an annotation (
# v2) that does not saywhich release it corresponds to. Every annotation in the table above identifies
an exact release so a reviewer can tell what is pinned by reading the line.
crazy-max/ghaction-github-labeleris pinned tov6.0.0, the current release.The
v6.0.0action.ymlkeeps the three inputs this repository uses —yaml-file,skip-delete,dry-run— with unchanged semantics; the major bumpis the
node20tonode24runtime, which theubuntu-latestimage provides.dtolnay/rust-toolchainis maintained by handThis action publishes no version series. The workflows pin
refs/heads/stable,whose
action.ymldefaultstoolchain: stableand lets rustup resolve thecurrent release at run time, so pinning the SHA freezes the action code without
freezing the Rust toolchain. Its only tag,
v1, makestoolchaina requiredinput, so moving to it would break every call site that relies on that default.
Dependabot cannot track a branch pin, so this one action is excluded from the
automated update story rather than silently assumed to be covered. That
limitation and its reasoning are recorded in
.github/dependabot.ymlbeside theconfiguration, so the next person to read the file does not have to rediscover
it.
Maintenance behavior
The repository root is the documented directory for GitHub Actions updates;
Dependabot scans
.github/workflowsfrom there. Version annotations remain onthe same line as each SHA so update PRs retain a human-readable release
reference.
Updates are grouped into a single weekly PR. Ungrouped, eight pinned actions
produce up to the default limit of five separate PRs, each triggering a full
matrix run and each looking identical to the last — the conditions under which
review degrades into rubber-stamping. One grouped PR per week is one reviewable
change.
default-daysis the only cooldown key GitHub Actions supports; thesemver-major-days/semver-minor-days/semver-patch-daysvariants areignored for this ecosystem, so only
default-daysis set. Seven days keepsfreshly published action revisions out of the automated queue while still
producing routine reviewed upgrades. Cooldown never applies to security updates.
No auto-merge rule is added. Action upgrades remain ordinary pull requests
subject to PageDB's existing review and CI.
Verification
Every pinned SHA was resolved independently against the upstream repository with
git ls-remote, peeling annotated tags, and each one matches its annotation.Each versioned pin was then compared against that action's latest published
release; all seven are current.
Zizmor 1.28.0 was run in pedantic mode with strict collection and a
low-or-higher threshold across
.github. Currentmainreports 69 findings,including 41
unpinned-uses. This branch reports zerounpinned-uses.The remaining findings are unchanged workflow concerns:
artipacked,template-injection, undocumented-permission, cache-poisoning, concurrency
limits, and excessive permissions. They are deliberately not mixed into this
mechanical pinning PR.
Hosted run
30317289898completed with all 19 PageDB checks successful on the initial pinning commit,
including the native matrix, invariant lane, six native cross-targets,
wasm32-unknown-unknownOPFS,wasm32-wasip1, every feature combination, bothbenchmark packages, docs, Clippy, and the dependency audit. That is the
end-to-end proof that the pinned action references resolve and execute; CI on
this branch re-runs it for the two version bumps.
Scope and review notes
Base:
031db94b4184f464d2dac1c901da05688fd2f7deHead:
055b5b1ccda355338f3e7d40734c56978d2e0588Six files change: the new Dependabot policy and the five workflow files that
contained third-party action references. There is no Rust source, Cargo
metadata, lockfile, public API, file-format, runtime behavior, or benchmark
change.
This branch is based on
031db94and does not include #25. The two do notoverlap: #25 adds
run:steps torelease.ymlandtest.yml, while this PRchanges only
uses:reference lines in non-adjacent regions, so the merge isclean and the combined result keeps both.
Runtime and benchmark tests are not applicable to a reference-only workflow
hardening change; GitHub CI remains the end-to-end proof that every pinned
action resolves and executes.