Skip to content

Add self-hosted Renovate to track shellcheck/rubyfmt version pins - #6

Merged
dduugg merged 2 commits into
shellcheck-direct-downloadfrom
add-renovate
Aug 31, 2026
Merged

Add self-hosted Renovate to track shellcheck/rubyfmt version pins#6
dduugg merged 2 commits into
shellcheck-direct-downloadfrom
add-renovate

Conversation

@dduugg

@dduugg dduugg commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #5 (stacked on that branch — merge #5 first), answering: can something detect a new shellcheck/rubyfmt release and open a PR for it?

Dependabot's github-actions ecosystem only tracks uses: references (that's why it already handles actions/checkout and zizmor-action, see dependabot.yml). It has no visibility into the shellcheck version+checksum baked into a run: step in ci.yml, or the rubyfmt version pinned in support/latest.

  • Adds a self-hosted Renovate job (.github/workflows/renovate.yml, weekly) rather than installing the hosted Renovate GitHub App, since that would need broader org-level approval to grant a third-party app repo/org access.
  • .github/renovate-config.json scopes Renovate via enabledManagers: ["custom.regex"] to exactly two custom regex managers — the shellcheck version and the rubyfmt version — so it can't overlap or conflict with Dependabot's existing coverage.
  • Hoisted the shellcheck version/checksum out of two duplicated run: steps into the lint job's env: block, so there's one text location for Renovate to match and bump (previously it appeared twice).
  • Known limitation, by design: neither dependency has a published checksum Renovate could fetch, so these PRs bump the version number only. CI will fail with a checksum mismatch until the checksum is refreshed — for rubyfmt, run support/sync-versions.sh <tag>; for shellcheck, manually recompute and update SHELLCHECK_SHA256. This is called out in the PR body Renovate generates (via packageRules[].prBodyNotes) and in the README.

Test plan

  • renovate-config-validator .github/renovate-config.json passes.
  • renovate --platform=local --dry-run=full (with a real GitHub token) correctly extracts exactly one dependency per custom manager, resolves both against the live GitHub releases API, and reports zero pending updates (both pins are already current).
  • zizmor and actionlint pass on the new/changed workflow files.
  • CI passes on this PR.
  • After merge, manually trigger the Renovate workflow (workflow_dispatch) once to confirm it runs cleanly end-to-end against the real repo.

dduugg added 2 commits August 31, 2026 15:23
Dependabot's github-actions ecosystem only tracks 'uses:' references, so it
can't see the shellcheck version+checksum baked into a run: step in ci.yml,
or the rubyfmt version pinned in support/latest. Adds a weekly self-hosted
Renovate job (avoids installing the hosted GitHub App, which would need
broader org-level approval) scoped via enabledManagers to two custom regex
managers covering just those two pins, so it doesn't duplicate Dependabot's
existing coverage of actions/checkout and zizmor-action.

Hoists the shellcheck version/checksum into the lint job's env: block
(previously duplicated across two run: steps) so there's a single text
location for the regex manager to match and bump.

Neither custom manager recomputes checksums automatically -- there's no
published checksum for Renovate to fetch for either dependency. A
version-only bump PR will fail CI with a checksum mismatch, which is the
intended safe failure mode; the PR body points at the manual fix
(support/sync-versions.sh for rubyfmt, a manual recompute for shellcheck).

Verified locally with 'renovate --platform=local --dry-run=full': both
custom managers correctly extract exactly one dependency each, resolve
against the real GitHub releases API, and report zero pending updates
(matching that both pins are already current).
… pin

Previously pinned to an arbitrary commit on rhysd/actionlint's main
branch, which isn't something Renovate can sensibly track (every push
to main would look like an update). Switched to the same SHA+comment
convention used for actions/checkout elsewhere in this repo
(commit 914e7df @ v1.7.12, the current latest release), and added a
third custom regex manager using the github-tags datasource + digest
tracking to keep both the SHA and the version comment in sync
automatically -- unlike the shellcheck/rubyfmt pins, this needs no
manual follow-up, since there's no separate checksum to refresh.

Verified the only functional difference between the two script
versions is a hardcoded fallback version string (used only if the
script's own GitHub API call fails), and confirmed locally with
'renovate --platform=local --dry-run=full' that the new manager
correctly extracts the digest+comment and resolves them against the
live rhysd/actionlint tags.
@dduugg
dduugg merged commit d1f797a into main Aug 31, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant