chore(ci): add Dependabot so the SHA-pinned actions get bumped - #486
Merged
Conversation
Every action here is pinned to a commit SHA. That closes the mutable-tag hole but opens a staleness one: a SHA never moves, including past a security fix, and unlike @v6 nothing updates it. Pinning is only safe when something bumps the pins, and nothing did — actions/checkout@v6 had already moved upstream while this repo went on pinning the older commit. This matters most for release.yaml, which pins the release-signing actions (goreleaser-action, cosign-installer, attest-build-provenance). A frozen cosign-installer means releases keep being signed by an old cosign, and cosign 3.x already changed its CLI surface. The actions group pattern is "*" rather than the umbrella repo's "actions/*" because those signing actions are not under actions/ — under "actions/*" each would fall outside the group, which is how updates get ignored. No reviewers: key: it is deprecated and inert (all 12 umbrella Dependabot PRs request a reviewer and none has ever had a review request). The gomod entry lists all 12 modules (root plus every lambda/*): nested modules pin their own deps, so a single "/" entry would leave eleven unmanaged. TestDependabotCoversEveryAction and TestDependabotCoversEveryGoModule enforce both kinds of coverage, so adding an action or a module without wiring it up fails CI. Mutation-tested five ways; all five fail as intended. Refs #485
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.
Closes #485. Companion to spore-host/libs#33 (merged,
0e1124b), which foundthis gap: no spore.host tool repo had a Dependabot config — only the umbrella.
Why
Every action in this repo is pinned to a commit SHA. That closes the mutable-tag
hole but opens a staleness one: a SHA never moves, including past a security
fix, and unlike
@v6nothing updates it for you. Pinning is only safe ifsomething bumps the pins. Nothing did.
Not theoretical:
actions/checkout@v6moved fromdf4cb1c(2026-06-02) tod23441a(2026-07-16) and this repo still pinneddf4cb1c. The umbrella, whichhas Dependabot, has since moved on to
checkout@v7/setup-go@v7.0.0.This bites hardest in
release.yaml, which pins the release-signing actions —goreleaser-action,cosign-installer,attest-build-provenance(the #344supply-chain work). A frozen
cosign-installermeans releases keep getting signedby an old cosign, and cosign 3.x already changed its CLI surface. Those are the
last actions that should silently freeze.
What
Weekly (Mon 09:00 PT), grouped into one PR,
cooldown: default-days: 7so afreshly-published tag isn't proposed the day it ships.
Three deliberate departures from the umbrella's config, each based on what its
Dependabot PRs actually did rather than what the config claims:
*, notactions/*. The signing actions —goreleaser/,sigstore/,aquasecurity/,codecov/— aren't underactions/. Underactions/*each falls outside the group and opens its ownPR, which is how updates get ignored.
reviewers:key. Deprecated and inert: all 12 of the umbrella'sDependabot PRs request a reviewer via it and not one has ever had a review
request. CODEOWNERS is the working mechanism.
dependencies,type:infra,type:security). Thisrepo had none of them. Dependabot silently drops labels it can't apply rather
than erroring — the umbrella asks for
dependencies, has no such label, and allits PRs landed with only
type:infra. A config naming a missing label looksfine and half-works.
The `gomod` entry lists all 12 modules — root plus every `lambda/*`, each
pinning its own deps behind a `replace ../..`. A single `/` entry would leave
eleven unmanaged. Verified the list matches the tree exactly (12 config dirs, 12
real modules, no phantoms).
Tests
Two new assertions in the existing
ci_gates_test.go:TestDependabotCoversEveryAction— every action in every workflow must bematched by some group pattern.
TestDependabotCoversEveryGoModule— everygo.modmust be watched, andevery watched directory must contain one (a phantom directory makes Dependabot
error every run, which trains you to ignore it).
Mutation-tested; all five fail as intended:
*→actions/*directories:directories:to a single/go.modgomodentryOne interaction worth knowing: Dependabot rewrites the trailing
# vX.Y.Zcommentalong with the SHA, sometimes as a bare major (
# v7, seen in #484).That still satisfies the pinning gate's
v?\dregex, so its own bumps won't failit.
make check-fmt/gofmtclean,go vet ./...clean, fullgo test ./...green.CI-only — no change to the tool.