Skip to content

fix(deno)!: require deno >=2.8.3 - #22790

Merged
isaacs merged 1 commit into
developfrom
isaacschlueter/js-3058-require-deno-283
Jul 29, 2026
Merged

isaacs merged 1 commit into
developfrom
isaacschlueter/js-3058-require-deno-283

Conversation

@isaacs

@isaacs isaacs commented Jul 28, 2026

Copy link
Copy Markdown
Member

This avoids some tedious workarounds and caveats regarding a loader hook deadlock bug that was fixed in version 2.8.3.

Since all versions support module loaders fully, we can now unconditionally include the orchestrion instrumentations.

fix: #22301
fix: JS-3058

This avoids some tedious workarounds and caveats regarding a loader hook
deadlock bug that was fixed in version 2.8.3.

Since all versions support module loaders fully, we can now
unconditionally include the orchestrion instrumentations.
@isaacs
isaacs requested review from a team as code owners July 28, 2026 19:51
@isaacs
isaacs requested review from andreiborza and mydea and removed request for a team July 28, 2026 19:51
@linear-code

linear-code Bot commented Jul 28, 2026

Copy link
Copy Markdown

JS-3058

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 29.84 kB - -
@sentry/browser - with treeshaking flags 28.05 kB - -
@sentry/browser (incl. Tracing) 47.12 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 47.13 kB - -
@sentry/browser (incl. Tracing, Profiling) 51.83 kB - -
@sentry/browser (incl. Tracing, Replay) 86.43 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 75.86 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 91.15 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 103.79 kB - -
@sentry/browser (incl. Feedback) 47.15 kB - -
@sentry/browser (incl. sendFeedback) 34.68 kB - -
@sentry/browser (incl. FeedbackAsync) 39.78 kB - -
@sentry/browser (incl. Metrics) 30.91 kB - -
@sentry/browser (incl. Logs) 31.14 kB - -
@sentry/browser (incl. Metrics & Logs) 31.82 kB - -
@sentry/react 31.63 kB - -
@sentry/react (incl. Tracing) 49.35 kB - -
@sentry/vue 34.76 kB - -
@sentry/vue (incl. Tracing) 49.08 kB - -
@sentry/svelte 29.87 kB - -
CDN Bundle 31.89 kB - -
CDN Bundle (incl. Tracing) 47.47 kB - -
CDN Bundle (incl. Logs, Metrics) 33.44 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 48.84 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 72.8 kB - -
CDN Bundle (incl. Tracing, Replay) 85.11 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 86.4 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 90.87 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 92.19 kB - -
CDN Bundle - uncompressed 95.11 kB - -
CDN Bundle (incl. Tracing) - uncompressed 142.33 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 99.82 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 146.31 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 224.58 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 261.58 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 265.55 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 275.29 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 279.24 kB - -
@sentry/nextjs (client) 51.94 kB - -
@sentry/sveltekit (client) 47.54 kB - -
@sentry/core/server 79.78 kB - -
@sentry/core/browser 51.61 kB - -
@sentry/node 121.05 kB -0.01% -12 B 🔽
@sentry/node/import (ESM hook with diagnostics-channel injection) 166 B - -
@sentry/node - without tracing 84.47 kB -0.02% -13 B 🔽
@sentry/aws-serverless 92.69 kB -0.02% -13 B 🔽
@sentry/cloudflare (withSentry) - minified 197.78 kB - -
@sentry/cloudflare (withSentry) 486.16 kB - -

View base workflow run

@andreiborza andreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, clean!

@isaacs
isaacs merged commit 1a87b00 into develop Jul 29, 2026
231 checks passed
@isaacs
isaacs deleted the isaacschlueter/js-3058-require-deno-283 branch July 29, 2026 14:27
isaacs added a commit that referenced this pull request Sep 16, 2026
Five Deno E2E apps become one. `deno-static`, `deno-mysql`, `deno-pg`
and `deno-redis` are deleted, and CI goes from five required rows plus
one optional to two required plus one optional.

The split was accidental rather than designed. `deno-static` was a
verbatim copy of `deno` taken before the span streaming port (#24002),
one of twenty such copies from that rollout. `deno-mysql` and `deno-pg`
were one route each, and carried an `import '@sentry/deno/import'`
first-import rule that a comment tied to Deno 2.8.0 through 2.8.2. That
rule is stale: the SDK now requires Deno >= 2.8.3 (#22790), and the
README documents `--preload` (#24215). Nothing in E2E ran that
documented setup.

The consolidated app now starts with `deno run
--preload=@sentry/deno/import`, so it needs no import ordering rule and
no dynamic `import()`. `mysql`, `pg`, `redis` and `ioredis` are plain
static imports, and one `docker-compose.yml` starts all three databases.

The static trace lifecycle becomes a `sentryTest` variant of the same
app, driven by `E2E_TEST_STATIC`, rather than a second copy. The six
lifecycle-agnostic specs (errors, scope, context, breadcrumbs, logs,
metrics) live once and run in both modes. Only the specs that assert
envelope shape are split, into `tests/streamed/` and `tests/static/`,
selected by `testIgnore`. `isSegmentFor` and the Redis span helpers,
previously copied across four files, move into
`tests/streamed/utils.ts`.

Decisions:

- `deno.json` maps `@sentry/deno/import` to the installed file rather
  than to `npm:@sentry/deno/import`. This app installs the SDK from a
  local tarball, which has no registry version for Deno to match a
  preloaded `npm:` specifier against. `--preload=npm:zod` works here, so
  the limitation is the tarball, not `--preload`.
- The variant runs `pnpm test:build:static` / `pnpm test:assert:static`
  rather than an inline `E2E_TEST_STATIC=true` prefix. The local runner
  wraps the command in `volta run`, which reads a leading assignment as
  the executable name. `node-express`'s existing `E2E_TEST_OTEL_SETUP`
  variant has the same problem and is broken locally today; fixing
  `run.ts` is separate work.
- The database specs stay streaming only, as they are today. There is no
  static database coverage to preserve, and writing it is separate work.
- `docker compose up` stays in the start command. Playwright creates its
  web server tasks before global setup, so the app starts first. The
  three deleted apps all did the same.
- The first-import form keeps its coverage in `deno-integration-tests`
  (`suites/orchestrion-{mysql,postgres}`). Their stale `TODO: revisit
  --preload once Deno 2.8.3 ships` comments are dropped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
isaacs added a commit that referenced this pull request Sep 16, 2026
Five Deno E2E apps become one. `deno-static`, `deno-mysql`, `deno-pg`
and `deno-redis` are deleted, and CI goes from five required rows plus
one optional to two required plus one optional.

The split was accidental rather than designed. `deno-static` was a
verbatim copy of `deno` taken before the span streaming port (#24002),
one of twenty such copies from that rollout. `deno-mysql` and `deno-pg`
were one route each, and carried an `import '@sentry/deno/import'`
first-import rule that a comment tied to Deno 2.8.0 through 2.8.2. That
rule is stale: the SDK now requires Deno >= 2.8.3 (#22790), and the
README documents `--preload` (#24215). Nothing in E2E ran that
documented setup.

The consolidated app now starts with `deno run
--preload=@sentry/deno/import`, so it needs no import ordering rule and
no dynamic `import()`. `mysql`, `pg`, `redis` and `ioredis` are plain
static imports, and one `docker-compose.yml` starts all three databases.

The static trace lifecycle becomes a `sentryTest` variant of the same
app, driven by `E2E_TEST_STATIC`, rather than a second copy. The six
lifecycle-agnostic specs (errors, scope, context, breadcrumbs, logs,
metrics) live once and run in both modes. Only the specs that assert
envelope shape are split, into `tests/streamed/` and `tests/static/`,
selected by `testIgnore`. `isSegmentFor` and the Redis span helpers,
previously copied across four files, move into
`tests/streamed/utils.ts`.

Decisions:

- `deno.json` maps `@sentry/deno/import` to the installed file rather
  than to `npm:@sentry/deno/import`. This app installs the SDK from a
  local tarball, which has no registry version for Deno to match a
  preloaded `npm:` specifier against. `--preload=npm:zod` works here, so
  the limitation is the tarball, not `--preload`.
- The variant runs `pnpm test:build:static` / `pnpm test:assert:static`
  rather than an inline `E2E_TEST_STATIC=true` prefix. The local runner
  wraps the command in `volta run`, which reads a leading assignment as
  the executable name. `node-express`'s existing `E2E_TEST_OTEL_SETUP`
  variant has the same problem and is broken locally today; fixing
  `run.ts` is separate work.
- The database specs stay streaming only, as they are today. There is no
  static database coverage to preserve, and writing it is separate work.
- `docker compose up` stays in the start command. Playwright creates its
  web server tasks before global setup, so the app starts first. The
  three deleted apps all did the same.
- The first-import form keeps its coverage in `deno-integration-tests`
  (`suites/orchestrion-{mysql,postgres}`). Their stale `TODO: revisit
  --preload once Deno 2.8.3 ships` comments are dropped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
isaacs added a commit that referenced this pull request Sep 16, 2026
Five Deno E2E apps become one. `deno-static`, `deno-mysql`, `deno-pg`
and `deno-redis` are deleted, and CI goes from five required rows plus
one optional to two required plus one optional.

The split was accidental rather than designed. `deno-static` was a
verbatim copy of `deno` taken before the span streaming port (#24002),
one of twenty such copies from that rollout. `deno-mysql` and `deno-pg`
were one route each, and carried an `import '@sentry/deno/import'`
first-import rule that a comment tied to Deno 2.8.0 through 2.8.2. That
rule is stale: the SDK now requires Deno >= 2.8.3 (#22790), and the
README documents `--preload` (#24215). Nothing in E2E ran that
documented setup.

The consolidated app now starts with `deno run
--preload=@sentry/deno/import`, so it needs no import ordering rule and
no dynamic `import()`. `mysql`, `pg`, `redis` and `ioredis` are plain
static imports, and one `docker-compose.yml` starts all three databases.

The static trace lifecycle becomes a `sentryTest` variant of the same
app, driven by `E2E_TEST_STATIC`, rather than a second copy. The six
lifecycle-agnostic specs (errors, scope, context, breadcrumbs, logs,
metrics) live once and run in both modes. Only the specs that assert
envelope shape are split, into `tests/streamed/` and `tests/static/`,
selected by `testIgnore`. `isSegmentFor` and the Redis span helpers,
previously copied across four files, move into
`tests/streamed/utils.ts`.

Decisions:

- `deno.json` maps `@sentry/deno/import` to the installed file rather
  than to `npm:@sentry/deno/import`. This app installs the SDK from a
  local tarball, which has no registry version for Deno to match a
  preloaded `npm:` specifier against. `--preload=npm:zod` works here, so
  the limitation is the tarball, not `--preload`.
- The variant runs `pnpm test:build:static` / `pnpm test:assert:static`
  rather than an inline `E2E_TEST_STATIC=true` prefix. The local runner
  wraps the command in `volta run`, which reads a leading assignment as
  the executable name. `node-express`'s existing `E2E_TEST_OTEL_SETUP`
  variant has the same problem and is broken locally today; fixing
  `run.ts` is separate work.
- The database specs stay streaming only, as they are today. There is no
  static database coverage to preserve, and writing it is separate work.
- `docker compose up` stays in the start command. Playwright creates its
  web server tasks before global setup, so the app starts first. The
  three deleted apps all did the same.
- The first-import form keeps its coverage in `deno-integration-tests`
  (`suites/orchestrion-{mysql,postgres}`). Their stale `TODO: revisit
  --preload once Deno 2.8.3 ships` comments are dropped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
isaacs added a commit that referenced this pull request Sep 16, 2026
Five Deno E2E apps become one. `deno-static`, `deno-mysql`, `deno-pg`
and `deno-redis` are deleted, and CI goes from five required rows plus
one optional to two required plus one optional.

The split was accidental rather than designed. `deno-static` was a
verbatim copy of `deno` taken before the span streaming port (#24002),
one of twenty such copies from that rollout. `deno-mysql` and `deno-pg`
were one route each, and carried an `import '@sentry/deno/import'`
first-import rule that a comment tied to Deno 2.8.0 through 2.8.2. That
rule is stale: the SDK now requires Deno >= 2.8.3 (#22790), and the
README documents `--preload` (#24215). Nothing in E2E ran that
documented setup.

The consolidated app now starts with `deno run
--preload=@sentry/deno/import`, so it needs no import ordering rule and
no dynamic `import()`. `mysql`, `pg`, `redis` and `ioredis` are plain
static imports, and one `docker-compose.yml` starts all three databases.

The static trace lifecycle becomes a `sentryTest` variant of the same
app, driven by `E2E_TEST_STATIC`, rather than a second copy. The six
lifecycle-agnostic specs (errors, scope, context, breadcrumbs, logs,
metrics) live once and run in both modes. Only the specs that assert
envelope shape are split, into `tests/streamed/` and `tests/static/`,
selected by `testIgnore`. `isSegmentFor` and the Redis span helpers,
previously copied across four files, move into
`tests/streamed/utils.ts`.

Decisions:

- `deno.json` maps `@sentry/deno/import` to the installed file rather
  than to `npm:@sentry/deno/import`. This app installs the SDK from a
  local tarball, which has no registry version for Deno to match a
  preloaded `npm:` specifier against. `--preload=npm:zod` works here, so
  the limitation is the tarball, not `--preload`.
- The variant runs `pnpm test:build:static` / `pnpm test:assert:static`
  rather than an inline `E2E_TEST_STATIC=true` prefix. The local runner
  wraps the command in `volta run`, which reads a leading assignment as
  the executable name. `node-express`'s existing `E2E_TEST_OTEL_SETUP`
  variant has the same problem and is broken locally today; fixing
  `run.ts` is separate work.
- The database specs stay streaming only, as they are today. There is no
  static database coverage to preserve, and writing it is separate work.
- `docker compose up` stays in the start command. Playwright creates its
  web server tasks before global setup, so the app starts first. The
  three deleted apps all did the same.
- The first-import form keeps its coverage in `deno-integration-tests`
  (`suites/orchestrion-{mysql,postgres}`). Their stale `TODO: revisit
  --preload once Deno 2.8.3 ships` comments are dropped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
isaacs added a commit that referenced this pull request Sep 16, 2026
Five Deno E2E apps become one. `deno-static`, `deno-mysql`, `deno-pg`
and `deno-redis` are deleted, and CI goes from five required rows plus
one optional to two required plus one optional.

The split was accidental rather than designed. `deno-static` was a
verbatim copy of `deno` taken before the span streaming port (#24002),
one of twenty such copies from that rollout. `deno-mysql` and `deno-pg`
were one route each, and carried an `import '@sentry/deno/import'`
first-import rule that a comment tied to Deno 2.8.0 through 2.8.2. That
rule is stale: the SDK now requires Deno >= 2.8.3 (#22790), and the
README documents `--preload` (#24215). Nothing in E2E ran that
documented setup.

The consolidated app now starts with `deno run
--preload=@sentry/deno/import`, so it needs no import ordering rule and
no dynamic `import()`. `mysql`, `pg`, `redis` and `ioredis` are plain
static imports, and one `docker-compose.yml` starts all three databases.

The static trace lifecycle becomes a `sentryTest` variant of the same
app, driven by `E2E_TEST_STATIC`, rather than a second copy. The six
lifecycle-agnostic specs (errors, scope, context, breadcrumbs, logs,
metrics) live once and run in both modes. Only the specs that assert
envelope shape are split, into `tests/streamed/` and `tests/static/`,
selected by `testIgnore`. `isSegmentFor` and the Redis span helpers,
previously copied across four files, move into
`tests/streamed/utils.ts`.

Decisions:

- `deno.json` maps `@sentry/deno/import` to the installed file rather
  than to `npm:@sentry/deno/import`. This app installs the SDK from a
  local tarball, which has no registry version for Deno to match a
  preloaded `npm:` specifier against. `--preload=npm:zod` works here, so
  the limitation is the tarball, not `--preload`.
- The variant runs `pnpm test:build:static` / `pnpm test:assert:static`
  rather than an inline `E2E_TEST_STATIC=true` prefix. The local runner
  wraps the command in `volta run`, which reads a leading assignment as
  the executable name. `node-express`'s existing `E2E_TEST_OTEL_SETUP`
  variant has the same problem and is broken locally today; fixing
  `run.ts` is separate work.
- The database specs stay streaming only, as they are today. There is no
  static database coverage to preserve, and writing it is separate work.
- `docker compose up` stays in the start command. Playwright creates its
  web server tasks before global setup, so the app starts first. The
  three deleted apps all did the same.
- The first-import form keeps its coverage in `deno-integration-tests`
  (`suites/orchestrion-{mysql,postgres}`). Their stale `TODO: revisit
  --preload once Deno 2.8.3 ships` comments are dropped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
isaacs added a commit that referenced this pull request Sep 18, 2026
Five Deno E2E apps become one. `deno-static`, `deno-mysql`, `deno-pg`
and `deno-redis` are deleted, and CI goes from five required rows plus
one optional to two required plus one optional.

The split was accidental rather than designed. `deno-static` was a
verbatim copy of `deno` taken before the span streaming port (#24002),
one of twenty such copies from that rollout. `deno-mysql` and `deno-pg`
were one route each, and carried an `import '@sentry/deno/import'`
first-import rule that a comment tied to Deno 2.8.0 through 2.8.2. That
rule is stale: the SDK now requires Deno >= 2.8.3 (#22790), and the
README documents `--preload` (#24215). Nothing in E2E ran that
documented setup.

The consolidated app now starts with `deno run
--preload=@sentry/deno/import`, so it needs no import ordering rule and
no dynamic `import()`. `mysql`, `pg`, `redis` and `ioredis` are plain
static imports, and one `docker-compose.yml` starts all three databases.

The static trace lifecycle becomes a `sentryTest` variant of the same
app, driven by `E2E_TEST_STATIC`, rather than a second copy. The six
lifecycle-agnostic specs (errors, scope, context, breadcrumbs, logs,
metrics) live once and run in both modes. Only the specs that assert
envelope shape are split, into `tests/streamed/` and `tests/static/`,
selected by `testIgnore`. `isSegmentFor` and the Redis span helpers,
previously copied across four files, move into
`tests/streamed/utils.ts`.

Decisions:

- `deno.json` maps `@sentry/deno/import` to the installed file rather
than to `npm:@sentry/deno/import`. This app installs the SDK from a
local tarball, which has no registry version for Deno to match a
preloaded `npm:` specifier against. `--preload=npm:zod` works here, so
the limitation is the tarball, not `--preload`.
- The variant runs `pnpm test:build:static` / `pnpm test:assert:static`
rather than an inline `E2E_TEST_STATIC=true` prefix. The local runner
wraps the command in `volta run`, which reads a leading assignment as
the executable name. `node-express`'s existing `E2E_TEST_OTEL_SETUP`
variant has the same problem and is broken locally today; fixing
`run.ts` is separate work.
- The database specs stay streaming only, as they are today. There is no
static database coverage to preserve, and writing it is separate work.
- `docker compose up` stays in the start command. Playwright creates its
web server tasks before global setup, so the app starts first. The three
deleted apps all did the same.
- The first-import form keeps its coverage in `deno-integration-tests`
(`suites/orchestrion-{mysql,postgres}`). Their stale `TODO: revisit
--preload once Deno 2.8.3 ships` comments are dropped.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Require Deno >=2.8.3

2 participants