chore: bump Node 22 -> 24 (Active LTS) - #28
Merged
Merged
Conversation
Node 22 entered Maintenance LTS on 2025-10-21; 24 is the current Active LTS line (maintenance 2026-10-20, end-of-life 2028-04-30). Production should run Active LTS, so all three pins that scripts/check-node-version.sh forces to agree move together: Dockerfile (both stages), .nvmrc, and package.json engines. @types/node moves to ^24 in the same commit so the types match the runtime rather than describing APIs it does not have. The Node 22.9 --env-file-if-exists rationale is preserved in .npmrc, the Dockerfile, and docs/ops.md — the floor is now well above it, but that is still why engine-strict is load-bearing for the release command. Also corrects the two hard-coded majors in the dependabot.yml comments added by the preceding commit, which is why this is stacked on tooling-deps.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
guarzo
added a commit
that referenced
this pull request
Aug 3, 2026
* chore: add Dependabot config and a PR template Dependabot over Renovate: 25 dependencies and one maintainer do not justify installing a third-party GitHub App with write access. Dependabot's grouping covers the need with no added trust surface and no infrastructure. Grouping is ordered first-match-wins so that things which must move together do (React + its types, drizzle-orm + drizzle-kit), tooling churn batches into one CI run, and MAJORS of the runtime dependencies — next, zod, pg, pg-boss, jose, tsx, typescript — match no group and so arrive as individual PRs. Steady state is roughly one to three PRs a week rather than twenty. `applies-to` is left unset, so this governs version updates only: security updates stay ungrouped and immediate. @types/node majors are ignored. They track Node majors, which this repo pins in three files that scripts/check-node-version.sh forces to agree; types ahead of the runtime pass typecheck and fail at execution instead. The docker ecosystem is deliberately absent — reasoning in the file. The PR template asks only for what CI cannot check: hand-run verification, deploy ordering (secrets before the deploy, migration safety), and unprompted findings. No CODEOWNERS: see the PR description. * chore: bump Node 22 -> 24 (Active LTS) (#28) Node 22 entered Maintenance LTS on 2025-10-21; 24 is the current Active LTS line (maintenance 2026-10-20, end-of-life 2028-04-30). Production should run Active LTS, so all three pins that scripts/check-node-version.sh forces to agree move together: Dockerfile (both stages), .nvmrc, and package.json engines. @types/node moves to ^24 in the same commit so the types match the runtime rather than describing APIs it does not have. The Node 22.9 --env-file-if-exists rationale is preserved in .npmrc, the Dockerfile, and docs/ops.md — the floor is now well above it, but that is still why engine-strict is load-bearing for the release command. Also corrects the two hard-coded majors in the dependabot.yml comments added by the preceding commit, which is why this is stacked on tooling-deps. * Update .github/pull_request_template.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update .github/pull_request_template.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.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.
Stacked on #24 — merge #24 first. This branch is based on
tooling-deps, notmain, because it corrects two hard-coded Node majors in the comments #24 adds to.github/dependabot.yml. Once #24 merges, GitHub will retarget this tomainand the diff will be the eight files below.What changed and why
Node 22 went to Maintenance LTS on 2025-10-21. Node 24 is the current Active LTS line (maintenance 2026-10-20, EOL 2028-04-30), verified against
nodejs/Release/schedule.json. Production should run Active LTS.scripts/check-node-version.shforces the Dockerfile,.nvmrcandpackage.jsonenginesto agree on the major, so all three move in one commit, plus@types/node^22 -> ^24so the types describe the runtime that actually ships.engines: >=24still accepts a local Node 26.Note 26 was not chosen: it is Current, not LTS, until 2026-10-28.
The
--env-file-if-exists(Node 22.9) rationale is preserved in.npmrc, the Dockerfile anddocs/ops.md. The floor is now far above it, but it is still whyengine-strict=trueis load-bearing —npm run db:migrateis fly.toml'srelease_command.What CI cannot check
docker build— CI does not build the image, so this was run locally against the realnode:24-alpine:Both
npm cistages passed underengine-strict=true, and the runtime image parses the flag the floor exists for:Everything CI does run was also run locally:
bash scripts/check-node-version.sh->node version OK: Dockerfile=24 .nvmrc=24 engines='>=24'npm run typecheck-> cleannpm run lint->4 problems (0 errors, 4 warnings)— the pre-existing@next/next/no-img-elementwarnings, unchangednpm run format:check->All matched files use Prettier code style!npm run build-> succeeded, 15 routesnpm test->Test Files 44 passed (44) / Tests 313 passed (313)npm run test:e2e->8 passed (19.9s)Unit and e2e were run serially against a dedicated Postgres on
:5434, not the shared:5433.Deploy notes
The next deploy after this merges builds on
node:24-alpineand runs the releasedb:migrateon Node 24. No migration, no secret, no fly.toml change.Flags
node-version-file: .nvmrc, so there was no separate CI pin to update — the bump propagates automatically.npm installreports 8 pre-existing vulnerabilities (4 moderate, 4 high). Unrelated to this change; Dependabot security alerts are now enabled and will file them individually.