chore(github-actions): update ppat/github-workflows (v4.4.0 -> v5.0.1) - #781
Merged
Conversation
Bump every ppat/github-workflows ref used by this repo (detect-changed-files, lint-github-actions, lint-markdown, lint-pre-commit, lint-renovate-config-check, lint-shellcheck, lint-yaml, lint-zizmor, renovate) to v5.0.1, preserving the repo-specific mise_ignore_cfg input on every call site. v5's lint-github-actions.yaml bumps actionlint v1.7.4 -> v1.7.12, which turns on its `-shellcheck` integration (previously inert against this repo: v1.7.4 found nothing even with the same flags). That integration appends `--norc`, so this repo's `.shellcheckrc` disable list does not filter it. Reproducing it locally surfaced two SC2046 findings, both `chezmoi execute-template --source=$(pwd)` in the local `chezmoi` job's run: blocks (lint.yaml:95,117). Quoting `$(pwd)` there is a pure hardening fix, not a suppression: argv is byte-identical to the unquoted form for any cwd without whitespace/glob characters (which `working-directory: ./current` always is in CI), and only diverges in the pathological case quoting exists to guard against. Supersedes #780.
1 task
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.
Summary
Bump every
ppat/github-workflowsref used by this repo fromv4.4.0(
1e8ca1b00b6e69bdf5aef8b33111c594c051ff65) to v5.0.1(
667d20d10c8756b11feeab1ee691825ccea8f991) — verified locally that this SHAis exactly what
v5.0.1resolves to (git rev-list -n1 v5.0.1). Full-SHA +# v5.0.1trailing-comment pin convention preserved throughout;grep -rn "1e8ca1b00b6e69bdf5aef8b33111c594c051ff65\|v4.4.0" .github/now returnsnothing.
Per the maintainer's standing instruction for this batch, this PR is scoped
to the version bump and whatever it minimally breaks — it does not touch
renovate-presets, does not introduce commitlint config (this repo hasnone, and none was added), and does not do unrelated cleanup.
Supersedes #780 (
chore(github-actions): update ppat/github-workflows (v4.4.0 -> v5.0.0)) — that PR is left open/untouched; this one targetsv5.0.1 instead of v5.0.0.
Refs bumped (8 occurrences, both call sites)
.github/workflows/lint.yaml:detect-changed-files.yamllint-github-actions.yamllint-markdown.yamllint-pre-commit.yamllint-renovate-config-check.yamllint-shellcheck.yamllint-yaml.yamllint-zizmor.yaml.github/workflows/renovate.yaml:renovate.yamlThe repo-specific
mise_ignore_cfg: private_dot_config/mise/config.tomlinput is preserved on every call site that had it.
lint.yaml's local,non-reusable
chezmoijob (which callsppat/homelab-ops-actions/actions/setup-repository-toolsdirectly — adifferent dependency) was left alone except for the shellcheck fix below.
full-apply-test.yamlhas noppat/github-workflowsrefs at all, so nothingto bump there.
Diffed every called workflow's
workflow_call.inputsbetween v4.4.0 andv5.0.1 (
git diff 1e8ca1b0...667d20d1 -- .github/workflows/<file>inppat/github-workflows, one file at a time): no input renames or removalson any workflow this repo calls.
lint-zizmor.yamlgained four new optionalinputs (
advisory_only,min_confidence,min_severity,persona), alldefaulting to current behaviour — not added to this repo's call site since
current behaviour is what we want. Everything else was internal
implementation/env-var changes only.
What v5 breaks here, and the fix
lint-github-actions.yamlbumpsactionlintv1.7.4 -> v1.7.12, which turnson its
-shellcheckintegration. Confirmed locally that this integrationwas genuinely inert at v1.7.4 (same repo, same
-shellcheck "shellcheck --rcfile .shellcheckrc"invocation, actionlint 1.7.4 → exit 0, zerofindings) and is live at v1.7.12. It also appends
--norc, so.shellcheckrc's broad disable list (SC1090/1091/2046/2059/2068/2086/2153/2155/2236/2034) never reaches it — this is the repo's
shellcheckfindingsits own dedicated
shellcheckjob has never surfaced.Reproduced the gate locally: installed actionlint v1.7.12 and shellcheck
v0.11.0 (the version v5 pins for the shellcheck integration) via mise, then
ran exactly what
lint-github-actions.yaml's v5run:block runs:(and, to mirror the PR-path invocation with an explicit changed-file list:
actionlint -shellcheck shellcheck .github/workflows/lint.yaml .github/workflows/renovate.yaml— same two findings, confirming file-argscoping doesn't change the result here.)
Finding list (2 total, both SC2046)
lint.yaml:95(localchezmoijob, "Shellcheck chezmoi scripts" step)SC2046: Quote this to prevent word splittingonchezmoi execute-template --source=$(pwd) < "$sc" > "${sc%.tmpl}"--source="$(pwd)"lint.yaml:117(localchezmoijob, "Lint chezmoi dotenv files" step)--source=$(pwd) < "$e" > "${e%.tmpl}"--source="$(pwd)"Both live in this repo's own local
chezmoijob (not a reusable-workflowcall), so nothing about the v5 bump's input surface is involved in the fix
itself — only the newly-live linter surfaced it.
Why "fix" and not "suppress" here, per the "don't change what argv a
command receives" rule: quoting
$(pwd)changes argv only when the commandsubstitution's output contains IFS whitespace or a glob character. Proved
this with a stub script that echoes
argv[n]=<...>per positionalargument:
working-directory: ./current, an absolutepath with no spaces): quoted and unquoted produce byte-identical
single-token argv (
argv[2]=<--source=/path/to/cwd>either way).demonstrate the failure mode
SC2046warns about): unquoted splits intothree argv tokens (
--source=/path/to/has,space); quoted stays asingle correct token.
So in the environment this workflow actually runs in, the fix is behaviour-
preserving by construction, and only diverges from "no change" in exactly
the case the finding exists to catch. No
# shellcheck disable=needed, no.shellcheckrcedit, no repo-wide disable.Every other workflow file in the repo (
renovate.yaml,full-apply-test.yaml)produced zero findings.
Other v5 changes reviewed, no repo impact
lint-renovate-config-check.yamlbumpsrenovate-config-validator44.14.12->44.30.4and quotes${rc}in its ownforloop — internalto the reusable workflow, no call-site change needed.
lint-shellcheck.yaml's file-selection change (shebang/extension-basedinstead of executable-bit-based, one invocation per file with
PASS/FAILlines and anN file(s) checked, M failedsummary) doesn'tchange what this repo passes it, because of fix(ci): discover shellcheck full-sweep files at runtime instead of ALL #779 (see below).
lint-markdown.yaml/lint-yaml.yamlgained the same$VAR->"$VAR"-style quoting internally; no call-site impact.#779 interaction (explicit file list, not the
ALLpath)#779 added
.github/scripts/discover-shellcheck-files.shand theshellcheck-discover-filesjob specifically because this repo is a chezmoisource tree (scripts committed at mode
100644, only gaining theexecutable bit at
chezmoi applytime) — solint-shellcheck.yaml's ownALL-discovery (find ... -executable) matches nothing here. This repotherefore always passes
lint-shellcheck.yamlan explicitfiles:list computed by that script, never
ALL.v5's per-file selector only changes behaviour on the
ALLpath (shebang/extension filtering replaces the executable-bit
find). The explicit-listpath is unchanged in what gets checked — v5's diff literally routes the
caller-supplied list straight into
shellcheck_filesunfiltered (see the# Deliberate word splitting: the caller delimits its list with whitespacecomment in v5's
lint-shellcheck.yaml). What does change, because #779noted this repo was pinned below the version that added it: v5's per-file
PASS/FAILoutput and theN file(s) checked, M failedsummary line nowappear in this repo's
shellcheckjob log for the first time — previouslyit ran the whole list through one
shellcheckinvocation with no per-fileaccounting.
Ran
.github/scripts/discover-shellcheck-files.shlocally against thisbranch: 19 files discovered, unchanged from #779's baseline (bump
touched no shell files, only
.yamlworkflow files, which the discoverypredicate excludes).
Verification
actionlint(v1.7.12, plain — no shellcheck) over the whole repo: 0findings.
actionlint -shellcheck shellcheck(v1.7.12 + shellcheck v0.11.0) overthe whole repo, and again scoped to just the two changed files: 0
findings after the quoting fix (2 before).
yamllint -c .yamllint --stricton both changed files: passes.pre-commit run --all-files(via the commit hook): all applicable hookspassed.
.shellcheckrc-basedshellcheck --rcfile .shellcheckrcwas notchanged and was not the point — the whole issue is that
--norcbypassesit for the
-shellcheckintegration.CI on this PR is path-gated (
shellcheck,chezmoi, etc. only run whentheir paths change). Watching the actual PR run now; where a relevant job
is gated out here, will separately dispatch
lint.yamlon this branch viaworkflow_dispatch(which runs the full, non-path-gated sweep) and reportwhich run verified what.