Repository navigation
ci(tooling): pin pre-commit hook repos, YAML-check workflows, add Dependabot - #84
Conversation
…endabot From the 2026-07-28 review: - Pin the three third-party pre-commit hook repos to full commit SHAs, with the version as a trailing comment, as the Actions already are. A re-pointed tag could otherwise run new code in CI. - Stop excluding .github/workflows from check-yaml, so a syntax-broken workflow fails a check instead of silently not running. - Lower golangci-lint's gocyclo threshold from 15 to 10 to match the standalone gocyclo gates in CI, the Makefile and pre-commit. - Add Dependabot for github-actions, gomod and the server.json validator's npm dependencies, weekly and grouped. Closes #23 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reached
This review includes 3 billable files and costs up to $0.75.
Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing. Or wait 11 minutes for your next included review. View limit details
Comment |
|
Merge-driver verdict: CLEAN at An independent adversarial reviewer (Sonnet, high effort, cold brief, not the author) reviewed the full diff. It found no blocking findings. Local verification (real, macOS):
#23 acceptance criteria:
Non-blocking note. Gate items:
|
Summary
This fixes the mcp-repo findings in #23, from the 2026-07-28 tooling review.
Hook repos pinned to commit SHAs. The three third-party pre-commit hook repos now use a full commit SHA with the version as a trailing comment, matching the Actions convention and cloud-commitments-cli's config:
d0e12cae3e8a8703, the same as the cli repo76b3d32dEach SHA is the target of that tag, from
git ls-remote. The terraform hooks never match files in this repo; chore: prune monorepo residue left by the split (docs, pre-commit, CI) #2 will remove them, and pinning them now keeps this PR's acceptance self-contained.check-yaml now covers
.github/workflows/. Before, a syntax-broken workflow produced no red check. The issue's "add actionlint" half was already done:.pre-commit-config.yamlhas a digest-pinned local actionlint hook.gocyclo threshold lowered from 15 to 10 in
.golangci.yml. That matches thegocyclo -over 10gates in ci.yml, pre-commit.yml and the Makefile, so a function at complexity 11-15 can no longer passmake lintand then fail CI..github/dependabot.ymladded, weekly, one grouped PR per ecosystem, with at most 2 open PRs each, covering:github-actions(all 42uses:lines are SHA pins with version comments, which Dependabot keeps in sync);gomod;npmfor.github/scripts/server-json-validator(ajv, used bymcp-server-json.yml).Not covered by Dependabot. These stay manual:
cloud-commitments-gopseudo-version pins (that repo has no tags, so Dependabot cannot propose bumps; see chore(deps): bump cloud-commitments-go pins to main 9dae64b #61 for the manual process);go installpins: gocyclo, govulncheck, golangci-lint, staticcheck and gosec;go.work(use .only), which gomod leaves alone.No CODEOWNERS was added. The issue makes it conditional on wanting review gating on workflow changes, and no sibling repo has one. Ask if you want it.
Closes #23
Verification (local, macOS)
pre-commit run --all-filesinstalls the hook repos from the SHAs. Every hook passes, or skips for lack of matching files.dependabot.yml. In a scratch repo, a malformed workflow was skipped by the old config and fails with the new one (mapping values are not allowed here).GOTOOLCHAIN=go1.26.9): withmin-complexity: 10it reports 0 issues, andconfig verifypasses. The_test.goexclusion covers gocyclo.check-jsonschema --builtin-schema vendor.dependabot .github/dependabot.ymlpasses.Review
The plan had two independent passes (Sonnet, high effort, non-author). Pass 1 made three changes, all applied: fix the workflow count, add the npm ecosystem, and state the gomod and pin limits.
The diff then had two passes from the same reviewer, both with no actionable findings at the exact staged tree
00a7c36. Pass 2's only note widened the "not covered" list above.CodeRabbit was not pinged because the org's CR quota is exhausted.
🤖 Generated with Claude Code