Skip to content

ci: move off the deprecated Node 20 action runtime - #58

Open
JacobPEvans-personal wants to merge 3 commits into
mainfrom
ci/node24-actions
Open

ci: move off the deprecated Node 20 action runtime#58
JacobPEvans-personal wants to merge 3 commits into
mainfrom
ci/node24-actions

Conversation

@JacobPEvans-personal

Copy link
Copy Markdown
Contributor

Stacked on #57.

What

  • Bump actions/upload-artifact to a Node 24 release (in ci.yml and cloud-read.yml).
  • Replace dorny/paths-filter with .github/scripts/detect-code-changes.sh, a short git diff script.
  • Add tests/unit/test_ci_path_filter.py, which reads the pattern out of the script and pins which paths do and do not trigger a live Splunk run.

Why

GitHub is retiring Node 20 on Actions runners, and the workflow logs a deprecation warning for every action still targeting it. Two did.

For the paths filter, swapping one pinned third-party action for another would fix the warning but keep the dependency. git diff already does the job in six lines, so this removes the dependency instead.

Proof

  • Every action still referenced by the workflows resolves to node24 or a composite action (checked via the GitHub API against each pinned ref).
  • Local gate: ruff, ruff-format, pyright, 897 tests passed.
  • The filter test covers 15 cases, including near-misses that must not trigger a run (docs/pyproject.toml, notes/src/scratch.py).

Base automatically changed from ci/merge-gate to main August 1, 2026 01:08
GitHub is retiring Node 20 on Actions runners, and two actions still targeted
it. Bump the artifact upload action to a Node 24 release, and replace the
third-party paths-filter action with a short git script.

The script keeps the cost filter readable and removes a dependency rather than
trading one pinned action for another. A unit test reads the pattern out of the
script and pins which paths do and do not trigger a live Splunk run, so the
filter cannot silently widen or narrow.

Assisted-by: Claude:claude-fable-5
Claude-Session: https://claude.ai/code/session_0117oTjSHHjg1nh28LGRZ7My
The script was committed without its executable bit, so the step failed with
exit 126 before running. Set the bit, and invoke through `bash` so the job no
longer depends on that bit surviving a checkout.

Also fetch the base branch into an explicit remote-tracking ref. `git fetch
origin <branch>` only updates FETCH_HEAD unless a matching refspec happens to
be configured, so `origin/<branch>` could fail to resolve in the diff below it.

Assisted-by: Claude:claude-fable-5
Claude-Session: https://claude.ai/code/session_0117oTjSHHjg1nh28LGRZ7My
…seable

An apostrophe inside ${VAR:?message} opens a quote that bash never closes, even
though the whole expansion sits in double quotes. The script failed to parse,
and bash reported the error at a later line where the next quote appeared,
which pointed away from the real mistake.

Reword the message without an apostrophe, and add a test that runs `bash -n`
over the script so a syntax error fails locally instead of only in CI.

Assisted-by: Claude:claude-fable-5
Claude-Session: https://claude.ai/code/session_0117oTjSHHjg1nh28LGRZ7My
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