Fix CI: bump Node, consolidate runners, dedupe triggers#44
Merged
Conversation
editorconfig-checker@6.1.1 requires Node.js >= 20.11.0, so the lint job on Node 16 was crashing with ERR_INVALID_ARG_TYPE before it could report any actual lint findings. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
macos-11 (EOL 2024-06) and macos-12 (EOL 2024-12) are no longer available as GitHub-hosted runners, so the macOS jobs were stuck queued. The macOS-specific behavior in this project lives in src/platform/darwin.sh and is mediated by Homebrew's gnu-sed / gnu-getopt, which doesn't vary by macOS version, so a single macos-latest job is sufficient. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ubuntu-20.04 reached EOL on GitHub-hosted runners in 2025-04 and is no longer scheduled, leaving that matrix entry stuck queued. The project's Linux dependencies (coreutils, git, tree) don't vary across Ubuntu versions, so a single ubuntu-latest job is sufficient. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Previously \`on: push\` had no branches filter, so pushing to a branch with an open PR triggered both the \`push\` and \`pull_request\` events and ran the entire workflow twice in parallel. Limit \`push\` to master so post-merge runs still fire once, while branch-level CI is handled solely by \`pull_request\`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The macOS tmpdir override built an HFS ramdisk via hdid / newfs_hfs / mount -t hfs so that the secret-bearing tempfiles created by `pass` could never reach disk. quiz stores flashcards, not secrets — the ramdisk-and-shred dance is unnecessary, and on modern macOS (Apple Silicon, macOS 14/15) those calls hang `make test` indefinitely in CI. Replace it with the same `mktemp -d` + `rm -rf`-on-EXIT pattern the Linux /dev/shm branch uses. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
src/platform/darwin.sh resolves \$GETOPT via \`brew --prefix gnu-getopt\`, but the macOS workflow only installed tree and gnu-sed. \`brew --prefix\` echoes the expected install path even when the formula isn't installed, so \$GETOPT pointed at a non-existent binary and \`make test\` failed with \"No such file or directory\". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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
actions/setup-nodefrom Node.js 16 → 20.editorconfig-checker@6.1.1requires Node.js ≥ 20.11.0, so the lint job was crashing withTypeError [ERR_INVALID_ARG_TYPE]on Node 16.macos-12/macos-11matrix and run onmacos-latestonly. Bothmacos-11(EOL 2024-06) andmacos-12(EOL 2024-12) are no longer available as GitHub-hosted runners. macOS-specific behavior lives insrc/platform/darwin.shand is mediated by Homebrew'sgnu-sed/gnu-getopt, which doesn't vary by macOS version.ubuntu-22.04/ubuntu-20.04matrix and run onubuntu-latestonly.ubuntu-20.04reached EOL on GitHub-hosted runners in 2025-04. The project's Linux dependencies (coreutils, git, tree) don't vary across Ubuntu versions.on: pushtomasteronly. Previouslypushhad no branches filter, so any push to a branch with an open PR fired both thepushandpull_requestevents and ran the workflow twice in parallel.src/platform/darwin.sh. That logic was inherited frompass(a password manager) so secrets in tempfiles could never reach disk.quizstores flashcards, not secrets, and on modern macOS (Apple Silicon, macOS 14/15) thehdid/newfs_hfs/mount -t hfscalls hungmake testindefinitely. Replace with the samemktemp -d+rm -rf-on-EXIT pattern the Linux/dev/shmbranch uses.gnu-getoptto thebrew installstep.darwin.shresolves$GETOPTviabrew --prefix gnu-getopt, which echoes the expected install path even when the formula isn't installed, so$GETOPTwas pointing at a non-existent binary andmake testfailed withNo such file or directory.Test plan
lintjob passes on this PRmacos (macos-latest)job runs to completion (no hang, getopt resolves) and passesubuntu (ubuntu-latest)job runs and passes🤖 Generated with Claude Code