Skip to content

Move kit to Node 26 on bookworm - #1598

Draft
stuartc wants to merge 18 commits into
pnpm-without-corepackfrom
stuart/ofn-4772-kit
Draft

stuartc wants to merge 18 commits into
pnpm-without-corepackfrom
stuart/ofn-4772-kit

Conversation

@stuartc

@stuartc stuartc commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Short Description

Moves kit to Node 26.12.0 on Debian bookworm, using the official Node image, with one pinned version in .tool-versions. Stacked on #1597.

Fixes OFN-4772

Implementation Details

  • Worker image built on node:26.12.0-bookworm-slim; devcontainer and integration-test images moved to Node 26 on bookworm; the CLI integration-test image removed.
  • Runtime registers its ESM hook with module.registerHooks() instead of the deprecated module.register() (DEP0205).
  • @sentry/node upgraded to 11.8.0, which also stops DEP0205 in the worker. Sentry 11 dedupes identical errors by default.
  • CircleCI runs on cimg/node:26.12.0 (integration tests on 24.22.0 and 26.12.0), with a script that fails CI if any Node pin drifts from .tool-versions, plus a worker image build job.
  • Unit tests moved from mock-fs (broken on Node 26.12.0) to memfs.

QA Notes

Checked locally on the built amd64 and arm64 images: worker starts, motherduck and common install and load as user node (plain and aliased), integration tests pass inside the image, and a real job with a Sentry DSN and --trace-deprecation shows no deprecations. pnpm test passes on 26.12.0 and 24.22.0. The image is about 215MB larger raw from the move off alpine to bookworm (git and its packages are about 100MB of that), plus about 37MB (amd64) and 63MB (arm64) from Sentry 11's dependencies.

AI Usage

Please disclose whether you've used AI anywhere in this PR (it's cool, we just want to know!):

  • I have used Claude Code
  • I have used another model
  • I have not used AI

You can read more details in our Responsible AI Policy

The devcontainer reads Node's version from .tool-versions through nvm and
installs pnpm at the packageManager version. The integration-test images
use node:${NODE_VERSION}-bookworm-slim.
Falls back to module.register() on Node versions without registerHooks,
and registers once per thread so repeated runs don't chain the hook.
Every job except legacy_test checks node -v, the Dockerfile NODE_VERSION
ARGs and the cimg/node tags against .tool-versions, and installs pnpm at
the packageManager version now corepack is gone. The integration matrix
drops Node 22. A new worker_image job builds the worker image, checks its
Node version and loads motherduck as user node.
It hasn't built since the CLI integration tests took workspace dependencies,
and nothing in CI uses it. The tests run with test:dev locally and through
the globally installed CLI in CircleCI.
@sentry/node-core 10.x called module.register() from Sentry.init, which
Node 26 deprecates. 11.x no longer does, so the upgrade alone fixes it.

11.x turns on the Dedupe integration by default, which drops an event
identical to the one before it. The test helper turns it off, since
otherwise one test's report is swallowed by an earlier test's.
mock-fs 5.5.0 crashes on Node 26.12.0. Each package that used it gets a
test/helpers/memfs.ts that swaps node:fs and node:fs/promises for memfs,
leaving the repo's node_modules on the real disk so lazy requires still work.
# Conflicts:
#	pnpm-lock.yaml
@github-project-automation github-project-automation Bot moved this to New Issues in Core Oct 20, 2026
waitForSentryReport takes a predicate and throws SENTRY_REPORT_TIMEOUT
when nothing matches, so a capture from an earlier test that lands late
can no longer be mistaken for the report a test expects. The Sentry
changeset now notes that repeated identical errors are deduplicated.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: New Issues

Development

Successfully merging this pull request may close these issues.

2 participants