Skip to content

ci: bump actions off node20 + stop the weekly empty arena-config PR - #172

Merged
floesche merged 2 commits into
mainfrom
ci/node24-action-bumps
Jul 27, 2026
Merged

ci: bump actions off node20 + stop the weekly empty arena-config PR#172
floesche merged 2 commits into
mainfrom
ci/node24-action-bumps

Conversation

@mbreiser

Copy link
Copy Markdown
Contributor

Follow-up to #170. Two independent fixes to the CI/sync plumbing, both validated by real workflow runs on this branch before opening this PR (evidence below).

1. Bump actions off the deprecated node20 runtime

Runs were already succeeding, but every one emitted Node 20 is being deprecated annotations — and when GitHub removes node20 from the runners, those steps break for real.

Action Before After Where
actions/checkout v4 v7 all 5 workflows (deploy-pages was already v7)
actions/setup-node v4 v7 the four validate-* workflows
peter-evans/create-pull-request v5 v8 sync-arena-configs

setup-node in sync-arena-configs is deliberately not touched here — that is #170's line. Verified the two branches merge cleanly (git merge-tree exit 0), leaving checkout@v7 + setup-node@v7 + node-version: 24 + create-pull-request@v8.

Breaking changes in the skipped majors, checked against this repo:

  • setup-node v5 auto-caches only when package.json has a packageManager field — this repo has no package.json (pixi-managed, no npm), so it is inert. v6 narrowed it to npm only.
  • create-pull-request v7 renamed git-tokenbranch-token and dropped the PULL_REQUEST_NUMBER output; neither is used. v8 is the node24 bump. All inputs in use (token, commit-message, title, body, branch, delete-branch, labels) are unchanged.
  • setup-node v5+ / create-pull-request v8 require runner ≥ 2.327.1 — satisfied by GitHub-hosted ubuntu-latest.

2. Stop the sync workflow opening an empty PR every week

scripts/generate-arena-configs.js stamped Last updated: ${new Date().toISOString()} into the generated header, so js/arena-configs.js changed on every run whether or not any arena YAML had. Check for changes was therefore always true and the workflow opened a PR every Sunday whose entire diff was that one line — #169 is the currently-open example, preceded by #158, #147, #122, #117.

Removing the timestamp makes the output a pure function of the input YAML. Git history already records when the file last changed; a comment in the generator explains why no Date belongs there.

js/arena-configs.js is regenerated here (diff = the removed header line only). It is prettier-ignored by design (LAB-111 follow-up). It was regenerated from configs fetched the same way the workflow fetches them (GitHub contents API against reiserlab/maDisplayTools), so CI reproduces it byte-for-byte.

Validation (all on this branch, before opening this PR)

Check Result
Sync Arena Configs (dispatched on this branch) ✅ success — logged "No changes detected in arena-configs.js", Create Pull Request step skipped
node20 annotations in that sync run 2 remaining, both from setup-node@v4 (main + post) — the line #170 fixes; checkout@v7 no longer warns
Validate Arena Calculations ✅ success, 0 node20 warnings, Node v24.18.0
Validate G6 Encoding ✅ success, 0 node20 warnings, Node v24.18.0
Validate Pattern Generation (auto on push) ✅ success, 0 node20 warnings, Node v24.18.0
Validate Protocol YAML Roundtrip (auto on push) ✅ success, 0 node20 warnings, Node v24.18.0
pixi run test ✅ 20 suites, all green (exit 0)
Generator idempotency ✅ three consecutive runs byte-identical (same sha)
Changed JS files vs Prettier ✅ clean
Merge with #170 ✅ no conflict

Notes

  • Update arena configs from maDisplayTools #169 is superseded by this change and can be closed — its only diff is the timestamp line this PR removes.
  • Pre-existing and untouched: repo-wide pixi run format-check fails on 4 real files (dashboard/data-browser/*.js, tests/test-g6-tall-rigs.js) plus stale .claude/worktrees/ copies. No CI runs Prettier, so this is not a gate — worth a separate cleanup.

🤖 Generated with Claude Code

mbreiser and others added 2 commits July 27, 2026 00:16
GitHub is deprecating the node20 action runtime, so every run of every
workflow emitted "Node 20 is being deprecated" annotations even though the
jobs succeeded. Bumps the actions that still shipped a node20 entrypoint:

- actions/checkout        v4 -> v7  (all 5 workflows; deploy-pages was already v7)
- actions/setup-node      v4 -> v7  (the four validate-* workflows)
- peter-evans/create-pull-request v5 -> v8  (sync-arena-configs)

setup-node in sync-arena-configs is deliberately left alone here; #170
bumps that line (v4 -> v7, node 20 -> 24) and applies cleanly on top.

None of the breaking changes in the skipped majors affect this repo:
- setup-node v5 auto-caches only when package.json has a packageManager
  field; this repo has no package.json (pixi-managed, no npm).
- create-pull-request v7 renamed git-token -> branch-token and dropped the
  PULL_REQUEST_NUMBER output; neither is used here. v8 is the node24 bump.
- setup-node v5+ and create-pull-request v8 need runner >= 2.327.1, which
  GitHub-hosted ubuntu-latest satisfies.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
scripts/generate-arena-configs.js stamped `Last updated: <new Date()>` into
the generated header, so js/arena-configs.js changed on every run regardless
of whether any arena YAML had changed. The sync-arena-configs workflow's
"Check for changes" step was therefore always true, and the workflow opened a
PR every Sunday whose entire diff was that one timestamp line (#169, and the
merged #158/#147/#122/#117 before it).

Drops the timestamp so the output is a pure function of the input YAML. The
generator is now byte-idempotent (verified: three consecutive runs produce an
identical file), which makes "Check for changes" mean an actual config change.
Git history already records when the file last changed.

js/arena-configs.js is regenerated here; it is prettier-ignored by design
(LAB-111 follow-up) and the diff is the removed header line only. Regenerated
from configs fetched the same way the workflow fetches them (GitHub contents
API against reiserlab/maDisplayTools), so the next CI run reproduces this file
byte-for-byte and reports no changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mbreiser
mbreiser force-pushed the ci/node24-action-bumps branch from cae08af to 08bc942 Compare July 27, 2026 04:16
@mbreiser
mbreiser requested a review from floesche July 27, 2026 04:17
@mbreiser

Copy link
Copy Markdown
Contributor Author

@floesche — tagging you since this builds directly on your #170 (now merged) and touches the same workflow.

Rebased onto merged main, so the sync workflow now reads checkout@v7 + your setup-node@v7 / node-version: 24 + create-pull-request@v8. Two commits, no merge commit.

What this adds on top of yours:

  1. The remaining node20-runtime actions — actions/checkout v4→v7 everywhere, setup-node v4→v7 in the four validate-* workflows, peter-evans/create-pull-request v5→v8 in the sync workflow.
  2. Removes the Last updated: ${new Date()} stamp from scripts/generate-arena-configs.js. That was why the sync opened a PR every Sunday whose whole diff was one timestamp line (Update arena configs from maDisplayTools #169, now closed, and Update arena configs from maDisplayTools #158/Update arena configs from maDisplayTools #147/Update arena configs from maDisplayTools #122/Update arena configs from maDisplayTools #117 before it).

Validation of the combined state — sync workflow dispatched on this branch after the rebase (run 30236633047):

  • 0 Node 20 is being deprecated annotations (was 2 even after fix sync action #170's line alone — the last source was the checkout@v4 main+post pair)
  • logged "No changes detected in arena-configs.js", Create Pull Request step skipped, Node v24.18.0
  • all four validate-* workflows green with 0 node20 warnings; pixi run test 20 suites green; generator byte-idempotent over three consecutive runs

Two spots worth your eye specifically:

  • create-pull-request v5→v8 is a 3-major jump. I checked the breaking changes against what the workflow actually passes: v7 renamed git-tokenbranch-token and dropped the PULL_REQUEST_NUMBER output (neither used here), v8 is the node24 bump needing runner ≥ 2.327.1 (fine on GitHub-hosted). Every input in use — token, commit-message, title, body, branch, delete-branch, labels — is unchanged. The step was skipped in the validation run, though, since there was nothing to PR, so that action itself is only statically verified.
  • Dropping the timestamp is a deliberate trade: the generated header no longer says when it was regenerated. Git history covers it, and the payoff is that "Check for changes" now means an actual config change. There is a comment in the generator so nobody re-adds a Date.

@floesche floesche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sense. Thanks for cleaning this up. My previous PR only focused on fixing a recurring problem, this solution is forward looking.

@floesche
floesche merged commit 367cbdf into main Jul 27, 2026
4 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.

2 participants