Skip to content

test(e2e): Consolidate the Deno E2E test applications - #24408

Closed
isaacs wants to merge 1 commit into
isaacs/deno-require-jsonfrom
test/consolidate-deno-e2e-apps
Closed

isaacs wants to merge 1 commit into
isaacs/deno-require-jsonfrom
test/consolidate-deno-e2e-apps

Conversation

@isaacs

@isaacs isaacs commented Sep 16, 2026

Copy link
Copy Markdown
Member

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.

@isaacs
isaacs requested review from a team as code owners September 16, 2026 00:54
@isaacs
isaacs requested review from JPeer264 and mydea and removed request for a team September 16, 2026 00:54
@isaacs
isaacs force-pushed the test/consolidate-deno-e2e-apps branch from a533ba6 to 781691e Compare September 16, 2026 00:56
@isaacs
isaacs changed the base branch from develop to isaacs/deno-require-json September 16, 2026 00:58
@isaacs
isaacs added this pull request to stack #24410 September 16, 2026 00:58
@github-actions

github-actions Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 29.09 kB - -
@sentry/browser - with treeshaking flags 27.35 kB - -
@sentry/browser - with treeshaking flags tracing without tracing 27.26 kB - -
@sentry/browser (incl. Tracing) 50.6 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 50.62 kB - -
@sentry/browser (incl. Tracing, Profiling) 53.61 kB - -
@sentry/browser (incl. Tracing, Replay) 90.15 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 79.25 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 94.85 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 107.83 kB - -
@sentry/browser (incl. Feedback) 46.62 kB - -
@sentry/browser (incl. sendFeedback) 34.15 kB - -
@sentry/browser (incl. FeedbackAsync) 39.26 kB - -
@sentry/browser (incl. Metrics) 30.1 kB - -
@sentry/browser (incl. Logs) 30.35 kB - -
@sentry/browser (incl. Metrics & Logs) 31.02 kB - -
@sentry/react 30.84 kB - -
@sentry/react (incl. Tracing) 52.94 kB - -
@sentry/vue 36.34 kB - -
@sentry/vue (incl. Tracing) 52.91 kB - -
@sentry/svelte 29.11 kB - -
CDN Bundle 30.8 kB - -
CDN Bundle (incl. Tracing) 51.15 kB - -
CDN Bundle (incl. Logs, Metrics) 33.06 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 53.09 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 73.75 kB - -
CDN Bundle (incl. Tracing, Replay) 88.69 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 90.63 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 94.73 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 96.71 kB - -
CDN Bundle - uncompressed 91.16 kB - -
CDN Bundle (incl. Tracing) - uncompressed 152.66 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 97.73 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 158.61 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 227.14 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 272.23 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 278.17 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 285.93 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 291.86 kB - -
@sentry/nextjs (client) 55.27 kB - -
@sentry/sveltekit (client) 51.05 kB - -
@sentry/core/server 37.13 kB - -
@sentry/core/browser 13.66 kB - -
@sentry/node 132.26 kB +0.05% +66 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection) 82.08 kB +0.07% +56 B 🔺
@sentry/node - without tracing 89.89 kB +0.09% +78 B 🔺
@sentry/node - without channel injection 111.08 kB +0.02% +14 B 🔺
@sentry/aws-serverless 98.12 kB +0.06% +57 B 🔺
@sentry/cloudflare (withSentry) - minified 203.54 kB - -
@sentry/cloudflare (withSentry) 506.83 kB - -

View base workflow run

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
isaacs force-pushed the test/consolidate-deno-e2e-apps branch from 15918a3 to 907d83d Compare September 16, 2026 03:58
@isaacs isaacs closed this Sep 16, 2026
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.

1 participant