fix(deno)!: require deno >=2.8.3 - #22790
Merged
Merged
Conversation
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
requested review from
andreiborza and
mydea
and removed request for
a team
July 28, 2026 19:51
Contributor
size-limit report 📦
|
3 tasks
This was referenced Sep 2, 2026
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>
47 tasks
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>
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.
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