Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
c82f939
feat(node)!: Make channel-based instrumentation the default
andreiborza Jul 22, 2026
6011fcf
Use the channel-based Express integration by default
andreiborza Jul 22, 2026
3733756
Use the channel-based Koa integration by default
andreiborza Jul 22, 2026
f8b7e84
Use the channel-based Hapi integration by default
andreiborza Jul 22, 2026
cf72e67
Use the channel-based Mongo integration by default
andreiborza Jul 22, 2026
21544de
Use the channel-based Mongoose integration by default
andreiborza Jul 22, 2026
0855c15
Use the channel-based Tedious integration by default
andreiborza Jul 22, 2026
c98ece9
Use the channel-based GenericPool integration by default
andreiborza Jul 22, 2026
216d75c
Use the channel-based LruMemoizer integration by default
andreiborza Jul 22, 2026
2948960
Use the channel-based Amqplib integration by default
andreiborza Jul 22, 2026
f07ed73
Use the channel-based Kafka integration by default
andreiborza Jul 22, 2026
c2104fd
Use the channel-based Mysql2 integration by default
andreiborza Jul 22, 2026
11149f8
Use the channel-based Mysql integration by default
andreiborza Jul 22, 2026
487b2f0
Use the channel-based Postgres integration by default
andreiborza Jul 22, 2026
8d533df
Use the channel-based PostgresJs integration by default
andreiborza Jul 22, 2026
ab6c395
Use the channel-based Graphql integration by default
andreiborza Jul 22, 2026
8e5ea94
Use the channel-based Firebase integration by default
andreiborza Jul 22, 2026
e8b30fb
Use the channel-based OpenAI integration by default
andreiborza Jul 22, 2026
43af17f
Use the channel-based Anthropic integration by default
andreiborza Jul 22, 2026
efd4ac1
Use the channel-based Google GenAI integration by default
andreiborza Jul 22, 2026
051cd29
Use the channel-based LangChain integration by default
andreiborza Jul 22, 2026
8fd3540
Use the channel-based LangGraph integration by default
andreiborza Jul 22, 2026
db04b2a
Use the channel-based Vercel AI integration by default
andreiborza Jul 22, 2026
a7ee18a
Fix e2e tests for channel-based instrumentation default
andreiborza Jul 23, 2026
2325e56
Fix koa middleware span assertion and fixme remaining trpc tests
andreiborza Jul 23, 2026
ffedc7b
Fixme ai@v3 tests in nextjs-15
andreiborza Jul 23, 2026
68f957c
Propagate mounted-middleware route to http.server span in channel Exp…
andreiborza Jul 23, 2026
e9cde04
Use channel-based aws-sdk integration in @sentry/aws-serverless
andreiborza Jul 23, 2026
5713007
Bump @sentry/node size limits for channel-based default
andreiborza Jul 23, 2026
72d682d
Fix stale span-origin assertions in node integration tests
andreiborza Jul 23, 2026
e8cc006
Resolve SENTRY_TRACES_SAMPLE_RATE before gating channel hook registra…
andreiborza Jul 23, 2026
404fb86
Drop non-finite SENTRY_TRACES_SAMPLE_RATE when gating nextjs channel …
andreiborza Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 2 additions & 15 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -782,8 +782,8 @@ jobs:

job_node_integration_tests:
name:
Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }}${{
(matrix.use_orchestrion && format(' (Orchestrion)', matrix.use_orchestrion)) || '' }} Integration Tests
Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }} Integration
Tests
needs: [job_get_metadata, job_build]
if: needs.job_build.outputs.changed_node_integration == 'true' || github.event_name != 'pull_request'
runs-on: ubuntu-24.04
Expand All @@ -794,21 +794,10 @@ jobs:
node: [20.19, 22, 24, 26]
typescript:
- false
use_orchestrion:
- false
include:
# Only check typescript for latest version (to streamline CI)
- node: 24
typescript: '5.0'
# No need to test orchestrion for v18
- node: 20.19
use_orchestrion: 'true'
- node: 22
use_orchestrion: 'true'
- node: 24
use_orchestrion: 'true'
- node: 26
use_orchestrion: 'true'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v7
Expand Down Expand Up @@ -844,8 +833,6 @@ jobs:
- name: Run integration tests
working-directory: dev-packages/node-integration-tests
run: yarn test
env:
INJECT_ORCHESTRION: ${{ matrix.use_orchestrion }}

job_cloudflare_integration_tests:
name: Cloudflare Integration Tests
Expand Down
13 changes: 2 additions & 11 deletions .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -381,16 +381,7 @@ module.exports = [
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '131 KB',
disablePlugins: ['@size-limit/esbuild'],
},
{
name: '@sentry/node (incl. diagnostics channel injection)',
path: 'packages/node/build/esm/index.js',
import: createImport('init', 'experimentalUseDiagnosticsChannelInjection'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '154 KB',
limit: '141 KB',
disablePlugins: ['@size-limit/esbuild'],
},
{
Expand All @@ -406,7 +397,7 @@ module.exports = [
path: 'packages/node/build/esm/index.js',
import: createImport('initWithoutDefaultIntegrations', 'getDefaultIntegrationsWithoutPerformance'),
gzip: true,
limit: '80 KB',
limit: '81 KB',
disablePlugins: ['@size-limit/esbuild'],
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
modifyWebpackConfig: function (config) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
import * as Sentry from '@sentry/astro';
import { experimentalUseDiagnosticsChannelInjection } from '@sentry/node';

// Registers the diagnostics-channel subscribers that turn the build-time
// injected channel events (from the orchestrion Vite plugin) into Sentry spans.
// Must run before Sentry.init()
experimentalUseDiagnosticsChannelInjection();

// Channel-based auto-instrumentation is the default: the SDK subscribes to the build-time injected
// channel events (from the orchestrion Vite plugin) and turns them into Sentry spans.
Sentry.init({
dsn: import.meta.env.PUBLIC_E2E_TEST_DSN,
environment: 'qa',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
const Sentry = require('@sentry/remix');

const injectOrchestrion = process.env.INJECT_ORCHESTRION === 'true';

if (injectOrchestrion) {
// Opt into diagnostics-channel-based auto-instrumentation. This registers the
// channel subscribers (e.g. for mysql and ioredis) that turn the
// diagnostics-channel events - injected at build time by the orchestrion Vite
// plugin (see vite.config.ts) - into Sentry spans. Must run before Sentry.init().
Sentry.experimentalUseDiagnosticsChannelInjection();
}

Sentry.init({
tracesSampleRate: 1.0, // Capture 100% of the transactions, reduce in production!
environment: 'qa', // dynamic sampling bias to keep transactions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ test('Sends an API route transaction', async ({ baseURL }) => {
span_id: expect.stringMatching(/[a-f0-9]{16}/),
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.origin': 'auto.http.otel.nestjs',
'sentry.origin': 'auto.http.orchestrion.nestjs',
'sentry.op': 'handler.nestjs',
component: '@nestjs/core',
'nestjs.version': expect.any(String),
Expand All @@ -118,7 +118,7 @@ test('Sends an API route transaction', async ({ baseURL }) => {
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
origin: 'auto.http.otel.nestjs',
origin: 'auto.http.orchestrion.nestjs',
op: 'handler.nestjs',
},
]),
Expand Down Expand Up @@ -154,15 +154,15 @@ test('API route transaction includes nest middleware span. Spans created in and
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs',
'sentry.origin': 'auto.middleware.orchestrion.nestjs',
},
description: 'ExampleMiddleware',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs',
origin: 'auto.middleware.orchestrion.nestjs',
},
]),
}),
Expand Down Expand Up @@ -234,15 +234,15 @@ test('API route transaction includes nest guard span and span started in guard i
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.guard',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.guard',
},
description: 'ExampleGuard',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.guard',
origin: 'auto.middleware.orchestrion.nestjs.guard',
},
]),
}),
Expand Down Expand Up @@ -298,15 +298,15 @@ test('API route transaction includes nest pipe span for valid request', async ({
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.pipe',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.pipe',
},
description: 'ParseIntPipe',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.pipe',
origin: 'auto.middleware.orchestrion.nestjs.pipe',
},
]),
}),
Expand Down Expand Up @@ -335,15 +335,15 @@ test('API route transaction includes nest pipe span for invalid request', async
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.pipe',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.pipe',
},
description: 'ParseIntPipe',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'internal_error',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.pipe',
origin: 'auto.middleware.orchestrion.nestjs.pipe',
},
]),
}),
Expand Down Expand Up @@ -374,30 +374,30 @@ test('API route transaction includes nest interceptor spans before route executi
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'ExampleInterceptor1',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
{
span_id: expect.stringMatching(/[a-f0-9]{16}/),
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'ExampleInterceptor2',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down Expand Up @@ -492,15 +492,15 @@ test('API route transaction includes exactly one nest interceptor span after rou
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'Interceptors - After Route',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down Expand Up @@ -574,15 +574,15 @@ test('API route transaction includes nest async interceptor spans before route e
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'AsyncInterceptor',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down Expand Up @@ -659,15 +659,15 @@ test('API route transaction includes exactly one nest async interceptor span aft
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
data: {
'sentry.op': 'middleware.nestjs',
'sentry.origin': 'auto.middleware.nestjs.interceptor',
'sentry.origin': 'auto.middleware.orchestrion.nestjs.interceptor',
},
description: 'Interceptors - After Route',
parent_span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
status: 'ok',
op: 'middleware.nestjs',
origin: 'auto.middleware.nestjs.interceptor',
origin: 'auto.middleware.orchestrion.nestjs.interceptor',
},
]),
}),
Expand Down
Loading