Skip to content

feat(renovate): track the gitleaks scanner version, not just the action - #144

Merged
cplieger merged 1 commit into
mainfrom
feat/gitleaks-scanner-manager
Aug 11, 2026
Merged

feat(renovate): track the gitleaks scanner version, not just the action#144
cplieger merged 1 commit into
mainfrom
feat/gitleaks-scanner-manager

Conversation

@cplieger

@cplieger cplieger commented Aug 11, 2026

Copy link
Copy Markdown
Owner

The gap

gitleaks-action bundles its own scanner and hard-codes the version — GITLEAKS_VERSION || "8.24.3" in src/index.js, unchanged on master. So digest-pinning the action freezes the scanner with it: pinning the action is only half the pin, and no Renovate manager could see the half that matters.

Not theoretical. 8.24.3 silently ignores global [[allowlists]] paths in .gitleaks.toml, so homelab's weekly CI reported 20 already-allowlisted historical test fixtures and public WebAuthn AAGUIDs as leaks and sat red from 2026-07-06 until today (cplieger/homelab#3262).

Verified against an identical clone with the identical command:

gitleaks result
8.24.3 (bundled) 20 findings
8.30.1 no leaks found

Waiting for upstream is not a plan: v3.0.0 is the latest action release, its master carries nothing touching that default, and gitleaks 8.30.1 predates the v3.0.0 release by two months — the action shipped already stale.

Why its own manager

GITLEAKS_VERSION is the documented override, and this manager keeps a pin from rotting once set. It cannot ride the generic workflow tool-pin manager above it: gitleaks tags are v-prefixed while the action requires a bare value, so the v has to come off via extractVersionTemplate, which the generic comment-driven pattern has no place for.

Verified

  • matches all four spellings — GITLEAKS_VERSION: 8.30.1, "8.30.1", '8.30.1', and the shell = form
  • the generic manager cannot double-match: it requires a preceding # renovate: comment
  • renovate-config-validator passes
  • diff is a clean 14-line insertion; no reformatting of the surrounding file

Blast radius

Consumers stay opt-in. A repo with no GITLEAKS_VERSION keeps the action's bundled default and is completely unaffected; adding the pin is what enrols it. First consumer: cplieger/.kiro#413.

gitleaks-action bundles its own scanner and hard-codes the version:
`GITLEAKS_VERSION || "8.24.3"` in src/index.js, unchanged on master. So
digest-pinning the action freezes the scanner with it — pinning the action is
only half the pin, and no Renovate manager could see the half that matters.

That is not theoretical. 8.24.3 silently ignores global `[[allowlists]]` `paths`
in .gitleaks.toml, so homelab's weekly CI reported 20 already-allowlisted
historical test fixtures and public WebAuthn AAGUIDs as leaks and sat red from
2026-07-06 until today. Verified against an identical clone with the identical
command: 8.24.3 reports 20 findings, 8.30.1 reports none. Waiting for upstream
was not an option — v3.0.0 is the latest release, its master carries nothing
touching that default, and 8.30.1 predates the v3.0.0 release by two months, so
the action shipped already stale.

`GITLEAKS_VERSION` is the documented override, and this manager keeps a repo's
pin from rotting once set. It needs to be its own manager rather than the
generic workflow tool-pin one above: gitleaks tags are v-prefixed while the
action requires a bare value, so the v has to come off via
extractVersionTemplate, which the generic comment-driven pattern has no place
for. Matches both the YAML env form (`GITLEAKS_VERSION: 8.30.1`) and the shell
form, quoted or not, and the generic manager cannot double-match because it
requires a preceding `# renovate:` comment.

Consumers stay opt-in: a repo with no pin keeps the action's bundled default and
is unaffected. Adding the pin is what enrolls it.
@cplieger
cplieger merged commit 6538fe3 into main Aug 11, 2026
15 checks passed
@cplieger
cplieger deleted the feat/gitleaks-scanner-manager branch August 11, 2026 12:42
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