Skip to content

chore(ci): Node 20 → 22 (EOL) + markdownlint-cli2 ^0.23.0 retiring js-yaml/markdown-it overrides - #986

Merged
artyhoo merged 2 commits into
stagingfrom
chore/ci-node-22
Jul 11, 2026
Merged

chore(ci): Node 20 → 22 (EOL) + markdownlint-cli2 ^0.23.0 retiring js-yaml/markdown-it overrides#986
artyhoo merged 2 commits into
stagingfrom
chore/ci-node-22

Conversation

@artyhoo

@artyhoo artyhoo commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Invited follow-up to PR #980. Two commits: CI Node 20 → 22; markdownlint-cli2 ^0.23.0 replacing the two temporary overrides.

Why

  • Node 20 reached EOL 2026-04-30 (verified via endoflife.date API 2026-07-11) — CI ran an unsupported runtime for 2+ months. The '20' pin was never a decision: introduced without rationale in 3f55ee281 (2026-05-07, first CI job) and copy-pasted across 23 jobs. Node 22 = active LTS until 2027-04-30.
  • The js-yaml / markdown-it overrides from PR fix(deps): resolve all 16 open Dependabot alerts — triaged bumps, overrides where unavoidable #980 existed ONLY because markdownlint-cli2 0.23.0 requires node>=22 while CI was on 20. With CI on 22, the clean parent bump replaces the forced pins.

What changed / what deliberately didn't

Surface Action
23 × node-version: '20' in .github/workflows/ (4 files) '22'; actionlint clean
root package.json: markdownlint-cli2 ^0.22.1 ^0.23.0 (brings js-yaml 5.2.0 nested + markdown-it 14.2.0 natively)
root overrides: js-yaml, markdown-it removed — no longer needed
overrides.qs stays — still unavoidable (latest typed-rest-client pins vulnerable qs)
f17 matrix ['20','22'] (audit-self.yml:1222) untouched — consumer-compat coverage, not our runtime
shipped templates + .nvmrc (20.19.0) untouched — consumer CI reads node-version-file: '.nvmrc', cannot drift from our pins (tests/install-sh/f11-ci-node-version.test.sh 6/6, nvmrc-ci-drift.test.sh 7/7 green). Bumping the consumer-facing .nvmrc default is a separate maintainer decision — surfaced, not smuggled in.

Verification

  • No vulnerable version reappears after overrides removal — full-lock check: js-yaml 4.2.0 (@eslint/eslintrc) + 5.2.0 (mdl2 nested), markdown-it 14.2.0, qs 6.15.2, handlebars 4.7.9 (all ≥ Dependabot fixed versions).
  • Lint-behavior parity: markdownlint-cli2 0.22.1 vs 0.23.0 over all 897 tracked *.md — error sets byte-identical (160 pre-existing findings, 0 new-only, 0 old-only). The bump changes nothing for pre-commit.
  • NODE_ENV=development build:synth-bundle:check green; actionlint clean locally; local node 24 ≥ mdl2's engines floor.

§1.7 Self-discipline check (REQUIRED if PR touches discipline-bearing files)

§1.7 Skipped: mechanical maintenance — version-pin flips (23 CI pins, 1 devDep range, 2 override removals) with no rule/discipline semantics introduced or extended; enforcement surfaces untouched (verified: tests/install-sh/f11-ci-node-version.test.sh 6/6, nvmrc-ci-drift.test.sh 7/7, actionlint clean).

Node 20 reached EOL 2026-04-30 (endoflife.date verified 2026-07-11); CI ran
on an unsupported runtime for 2+ months. The original '20' pin (3f55ee2,
2026-05-07) carried no recorded rationale — convention copy-pasted across 23
jobs, never a decision. Node 22 = active LTS until 2027-04-30.

Untouched on purpose: f17 matrix ['20','22'] (consumer-compat coverage, not
our runtime); shipped templates (consumer CI reads node-version-file .nvmrc —
f11-ci-node-version.test.sh 6/6 + nvmrc-ci-drift.test.sh 7/7 green); shipped
.nvmrc 20.19.0 (consumer-facing default — separate decision, surfaced to
maintainer).
…verrides

The two overrides from PR #980 existed only because markdownlint-cli2 0.23.0
requires node>=22 while CI ran node 20. With CI on 22 (previous commit), the
clean parent bump replaces the forced pins: mdl2 0.23.0 brings js-yaml 5.2.0
(nested) + markdown-it 14.2.0 natively; @eslint/eslintrc keeps js-yaml 4.2.0.
No vulnerable version reappears (all >= Dependabot fixed versions; verified
over the full lock). The qs override stays — still unavoidable upstream.

Lint-behavior parity verified: markdownlint-cli2 0.22.1 vs 0.23.0 error sets
over all 897 tracked *.md files are IDENTICAL (160 pre-existing findings,
0 new-only, 0 old-only).

Prior-art: skipped — no new capability: devDep version bump within existing tooling + removal of two overrides entries; security-maintenance follow-up to PR #980
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedmarkdownlint-cli2@​0.22.1 ⏵ 0.23.099 +1100100 +189 +6100

View full report

@artyhoo
artyhoo merged commit 41cbbcd into staging Jul 11, 2026
69 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants