Reviews and merges Dependabot pull requests for GitHub Actions (the github-actions ecosystem) that bump `uses:` pins in `.github/workflows/`. Use for Dependabot github_actions PRs (branches like `dependabot/github_actions/...`), not go.mod or site/ Bun PRs.
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Maintainer workflow for Dependabot PRs in the github-actions ecosystem:
version bumps to uses: action pins under
.github/workflows/. For go.mod /
go.sum PRs use
sq-gomod-dependabot; for
site/ Bun/Hugo PRs use
sq-site-dependabot.
Actions are pinned by full commit SHA with a trailing # vX tag comment (for
example docker/login-action@650006c... # v4). Dependabot bumps the SHA and the
comment together; confirm they stay in sync.
No lockfile is involved, so action PRs are loosely coupled. Two PRs can still
conflict when they edit adjacent uses: lines in the same workflow file
(.github/workflows/main.yml holds most
pins), so merge sequentially and @dependabot rebase the next PR after each
squash merge.
| Mode | Actions | Merge |
|---|---|---|
| Audit | List/classify; publisher + bump type | No |
| Validate | Diff review; CI green; actionlint | No |
| Full | Validate + merge with consent | Per PR |
Default to Audit unless the user asks to merge.
command -v gh >/dev/null && gh auth status
# Optional local workflow lint (CI already runs actionlint in the `lint` job):
# bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)From repository root:
gh pr list --author 'app/dependabot' --state open \
--json number,title,headRefName,headRefOid,mergeable,statusCheckRollup \
--jq '.[] | select(.headRefName | test("^dependabot/github_actions/"))'Match on headRefName, not the title. Titles such as "bump goreleaser-action"
or "bump golangci-lint-action" trip the gomod skill's word filter but belong
here. Confirm the diff only touches .github/workflows/ (gh pr diff <n> --name-only).
| Level | Examples | Action |
|---|---|---|
| Low | Patch/minor bump, first-party publisher (actions/, docker/, golangci/, goreleaser/) | Merge after CI |
| Medium | Major bump (v4 to v5); action used only in release/publish jobs | Read changelog; check inputs |
| High | New/untrusted publisher; SHA and # vX comment disagree; non-SHA (tag or branch) pin | Hold; manual review |
Trusted publishers already in .github/workflows/ carry low supply-chain risk. A
major bump can change or remove with: inputs, so read the release notes and
confirm the workflow still passes the right inputs.
Release-only caveat: PR CI runs the jobs triggered by the pull_request event
(lint, test-nix, test-windows-smoke). Steps and jobs gated to releases or tags
(goreleaser, docker/login, publish, binaries-*) are skipped on the
PR, so green CI does not exercise them. For those, lean on the changelog and
trusted-publisher status.
gh pr checks <n>). The lint job
runs actionlint over the workflow files.# vX comment matches the tag for the bumped SHA../actionlint -color.@dependabot rebase, re-check that the required
checks passed on the new headRefOid before merging.After required checks pass on the current head:
gh pr merge <n> --squash --delete-branchMultiple action PRs: merge one, then @dependabot rebase the next and wait for
mergeable plus fresh CI before merging it. Use --admin only when the user
explicitly requests it and checks are green but merge is blocked.
## Dependabot github-actions PR #NNN — <action>
- **Publisher / bump:** first-party? patch | minor | major
- **Runs on PR CI:** yes | release-only (not exercised)
- **CI (lint/actionlint, test-nix):** pass / fail
- **SHA vs tag comment:** consistent?
- **Verdict:** merge | holdSee AGENTS.md and
docs/CI.md for the CI job map.
neilotoole/sq
89a3524
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.