ci: reduce CI runtime and drop EOL Node.js versions#593
Open
hmalik88 wants to merge 11 commits into
Open
Conversation
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
preparejob and itsneeds: preparegate from all downstream jobsvalidate-changelogfrom 16 matrix jobs to oneactions/checkoutfrom v4 to v5>=22yarn constraintscall from thelintscriptWhy
preparewas adding ~52s to every run for no reason. Every job inbuild-lint-test.ymlhadneeds: prepare, meaning nothing could startuntil prepare finished. The only thing prepare produced that any job
actually consumed was a workspace package names list, used to fan out
validate-changeloginto a per-package matrix.lint,build, andtesthad no real dependency on it — they were blocked purely as a sideeffect of the matrix design.
The
validate-changelogmatrix was 16 jobs for one command.changelog:validatehas no cross-package dependencies, so 16 separatecheckout+setup cycles (each ~35–40s of overhead) for a script that takes
a few seconds is pure waste.
yarn workspaces foreach --all --no-private --parallel run changelog:validatedoes the same work in one job.Collapsing the matrix also eliminates the need for
prepare's output,which is what makes removing
preparepossible.actions/checkout@v4targets Node.js 20, which GitHub Actions runnersnow force to run on Node.js 24, generating a deprecation annotation on
every run.
Node.js 18 and 20 are both past end-of-life (April 2025 and April
2026 respectively) and no longer receive security patches. Testing against
them provides no signal and wastes runner slots. Node 22 is Active LTS
until April 2027.
yarn constraintswas running twice per CI push. Thelintscriptcalled it explicitly, and the dedicated
Lint (constraints)CI job alsoran it as a separate matrix entry. Since they run in parallel there was no
wall-clock cost, but it was redundant work. Removed the call from the
lintscript so it only runs in the dedicated job.Impact
validate-changelogrunner slotsyarn constraintsruns per pushAbout a 30% improvement, which will probably be even better when caches are warm. This should also make the range of CI times more consistent.
Test plan
mainvalidate-changelogcatches a bad changelog entry (manual spot-check)Note
Cursor Bugbot is generating a summary for commit 68ec507. Configure here.