feat: upgrade to Node 24 and modernize build toolchain#4
Merged
dcoraboeuf merged 14 commits intoMay 5, 2026
Merged
Conversation
…ting tags, self-test)
Contributor
Author
|
@dcoraboeuf here is another in the batch for your review, thanks! |
Contributor
|
Available in v3.0.0 Thanks for your contribution @rathpc ! |
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
Upgrade
cli-validationto Node 24, esbuild bundling (replacing@vercel/ncc), ESLint 10, real unit tests, standardized semantic-release with floating major/minor tags, and aCLAUDE.md.Also fixes two latent upstream issues:
Aligns
index.jswith the explicit-status interface advertised inaction.yml. The previousfeat: explicit statuscommit (Nov 2025) updatedaction.ymland the workflow but never updatedindex.jsor rebuiltdist/. The action has been silently broken since then —action.ymladvertises astatusinput, but the bundled action ignores it and tries to poll the GitHub Actions API for astep-namethataction.ymldoesn't expose. This PR rewritesindex.jsto matchaction.yml: takesstatus/type/flagsfrom inputs, falls back toYONTRACK_*env vars from a previouscli-configstep, and never polls the API.Closes #3 (Add a README). Adds a
README.mddocumenting all inputs, several usage examples, and specifically theif: ${{ !cancelled() }}pattern for unconditional validations the issue called out.What changed
engines.nodeset to>=24;action.ymlruntime isnode24; CI workflow installs Node 24.@vercel/nccwithesbuild+esbuild-plugin-license(driven bybuild.js).dist/index.jsproduced by esbuild;dist/licenses.txtcarries third-party attributions.index.jsrewritten in the dependency-injection style of cli-build/cli-setup. A top-level IIFE loads pure-ESM@actions/*packages via dynamic ESM import (namespace, not.default) and callsrunAction({core, exec, github}). Source dropped from 184 lines to 71 — the polling machinery is gone.step-name/polling logic; the action now readsstatus/type/flagsfrom inputs asaction.ymldescribes. Project/branch/build resolve from input →YONTRACK_*env var → context fallback (withbuildrequiring at least one of input/env).index.test.jswith 17 unit tests covering required inputs, env-var fallbacks, status pass-through, validation data (type+flags), and the invocation contract. Tests run in <200ms without secrets or network.eslint8.x → 10.3.0 with new flat config..eslintrc.jsonand.eslintignoreremoved..releasercmatches the standardized template across the repo family. Floating-tag step force-updatesvXandvX.Yafter each release.README.md(closes Add a README #3); newCLAUDE.md.build.ymlreplaced byci.ymlwith the standardized pipeline.Why this is breaking
Two reasons:
engines.node >= 24andruns.using: node24mean self-hosted runners on older Node will fail. GitHub-hosted runners support Node 24 natively.index.jsrewrite removes the (undocumented inaction.yml)step-nameinput the old implementation relied on. The intended interface —statusas input — has been the documented contract since the maintainer'sfeat: explicit statuscommit; this PR makes the implementation match.Test plan
nemerosa+vars.ONTRACK_URL != ''so it skips on fork PRs)v3.0.0v3andv3.0exist; existingv2tags untouchedCHANGELOG.mdis populated by the release commitdist/licenses.txtis regenerated alongside the bundleSquash-merge commit message
When merging, please use this exact commit body: