Skip to content

meta(changelog): Update changelog for 9.18.0 #16265

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 31 commits into from
May 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
56c4346
feat(react-router): Create a transaction filter for react router
RulaKhaled May 7, 2025
3540666
Update react router sdk tests
RulaKhaled May 7, 2025
aa9e709
Fix linter issues
RulaKhaled May 7, 2025
e4fe07f
fix imports for linter
RulaKhaled May 7, 2025
79ec0d6
Update low quality transaction filter to an integration in react-router
RulaKhaled May 8, 2025
f862390
Fix linter issues
RulaKhaled May 8, 2025
33e0686
Merge pull request #16235 from getsentry/master
github-actions[bot] May 8, 2025
befe970
feat: Export `consoleLoggingIntegration` from vercel edge sdk (#16228)
AbhiPrasad May 8, 2025
f2afa29
feat(cloudflare): Add support for email, queue, and tail handler (#16…
AbhiPrasad May 8, 2025
db2f604
fix(remix): Remove vendored types (#16218)
onurtemizkan May 8, 2025
5dd37a6
feat: Support Node 24 (#16236)
AbhiPrasad May 8, 2025
c59c7c9
fix(test): Make Remix integration tests Node 24 compatible (#16241)
onurtemizkan May 9, 2025
b3242e0
chore(ci): re-enable Node 24 tests for google-cloud-serverless (#16242)
AbhiPrasad May 9, 2025
79480cf
feat(nextjs): Add more attributes for generation functions (#16214)
lforst May 9, 2025
caf789a
Resolve undefined typescript issue
RulaKhaled May 9, 2025
8f7599a
build: Pin node unit tests to ^24.0.1 (#16248)
AbhiPrasad May 9, 2025
497cfc1
Merge branch 'develop' into create-lowQualityTransactionsFilter-for-r…
RulaKhaled May 12, 2025
558d3ff
Merge pull request #16219 from getsentry/create-lowQualityTransaction…
RulaKhaled May 12, 2025
5a12eed
test: Use `%j` instead of `%p` placeholder for vitest (#16258)
mydea May 12, 2025
8f5f2f3
ref(bun): Ensure bun is latest for local tests (#16244)
mydea May 12, 2025
5ed5627
fix(core): Gracefully handle invalid baggage entries (#16257)
mydea May 12, 2025
f1121ce
fix(node): Use sentry forked `@fastify/otel` dependency with pinned O…
andreiborza May 12, 2025
02f280c
deps(node): Bump `import-in-the-middle` to `1.13.1` (#16260)
mydea May 12, 2025
9d659a5
fix(node): Ensure traces are propagated without spans in Node 22+ (#1…
mydea May 12, 2025
d273046
feat(opentelemetry): Widen peer dependencies to support Otel v2 (#16246)
andreiborza May 12, 2025
a874d76
feat(cloudflare): Improve http span data (#16232)
AbhiPrasad May 12, 2025
ce09095
chore: Update lockfile for fastify-otel fork (#16263)
andreiborza May 12, 2025
f533f0a
test(node): Ensure outgoing http & fetch are tested in esm & cjs (#16…
mydea May 12, 2025
f4ee9bf
ref(core): Remove duplicate internal `DEBUG_BUILD` constant (#16264)
mydea May 12, 2025
cdf0445
test(node): Fix integration test issue due to missing rebase (#16266)
mydea May 12, 2025
8dc4161
meta(changelog): Update changelog for 9.18.0
andreiborza May 12, 2025
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
8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node: [18, 20, 22]
node: [18, 20, 22, '^24.0.1']
steps:
- name: Check out base commit (${{ github.event.pull_request.base.sha }})
uses: actions/checkout@v4
Expand Down Expand Up @@ -713,12 +713,12 @@ jobs:
strategy:
fail-fast: false
matrix:
node: ['18.20.5', 20, 22]
node: ['18.20.5', 20, 22, 24]
typescript:
- false
include:
# Only check typescript for latest version (to streamline CI)
- node: 22
- node: 24
typescript: '3.8'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
Expand Down Expand Up @@ -760,7 +760,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node: [18, 20, 22]
node: [18, 20, 22, 24]
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v4
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '70 KB',
limit: '70.1 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand Down
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,27 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 9.18.0

### Important changes

- **feat: Support Node 24 ([#16236](https://github.com/getsentry/sentry-javascript/pull/16236))**

We now also publish profiling binaries for Node 24.

### Other changes

- deps(node): Bump `import-in-the-middle` to `1.13.1` ([#16260](https://github.com/getsentry/sentry-javascript/pull/16260))
- feat: Export `consoleLoggingIntegration` from vercel edge sdk ([#16228](https://github.com/getsentry/sentry-javascript/pull/16228))
- feat(cloudflare): Add support for email, queue, and tail handler ([#16233](https://github.com/getsentry/sentry-javascript/pull/16233))
- feat(cloudflare): Improve http span data ([#16232](https://github.com/getsentry/sentry-javascript/pull/16232))
- feat(nextjs): Add more attributes for generation functions ([#16214](https://github.com/getsentry/sentry-javascript/pull/16214))
- feat(opentelemetry): Widen peer dependencies to support Otel v2 ([#16246](https://github.com/getsentry/sentry-javascript/pull/16246))
- fix(core): Gracefully handle invalid baggage entries ([#16257](https://github.com/getsentry/sentry-javascript/pull/16257))
- fix(node): Ensure traces are propagated without spans in Node 22+ ([#16221](https://github.com/getsentry/sentry-javascript/pull/16221))
- fix(node): Use sentry forked `@fastify/otel` dependency with pinned Otel v1 deps ([#16256](https://github.com/getsentry/sentry-javascript/pull/16256))
- fix(remix): Remove vendored types ([#16218](https://github.com/getsentry/sentry-javascript/pull/16218))

## 9.17.0

- feat(node): Migrate to `@fastify/otel` ([#15542](https://github.com/getsentry/sentry-javascript/pull/15542))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ test('Should set a "not_found" status on a server component span when notFound()
op: 'function.nextjs',
status: 'not_found',
data: expect.objectContaining({
'sentry.nextjs.function.type': 'Page',
'sentry.nextjs.function.route': '/server-component/not-found',
'sentry.nextjs.ssr.function.type': 'Page',
'sentry.nextjs.ssr.function.route': '/server-component/not-found',
}),
}),
);
Expand Down Expand Up @@ -112,8 +112,8 @@ test('Should capture an error and transaction for a app router page', async ({ p
op: 'function.nextjs',
status: 'internal_error',
data: expect.objectContaining({
'sentry.nextjs.function.type': 'Page',
'sentry.nextjs.function.route': '/server-component/faulty',
'sentry.nextjs.ssr.function.type': 'Page',
'sentry.nextjs.ssr.function.route': '/server-component/faulty',
}),
}),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,7 @@
"@sentry/opentelemetry": "latest || *",
"@sentry/react": "latest || *",
"@sentry-internal/replay": "latest || *",
"@sentry/vercel-edge": "latest || *",
"import-in-the-middle": "1.12.0"
},
"overrides": {
"import-in-the-middle": "1.12.0"
"@sentry/vercel-edge": "latest || *"
},
"volta": {
"extends": "../../package.json"
Expand Down
3 changes: 3 additions & 0 deletions dev-packages/node-integration-tests/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ module.exports = {
sourceType: 'module',
ecmaVersion: 'latest',
},
globals: {
fetch: 'readonly',
},
rules: {
'@typescript-eslint/typedef': 'off',
// Explicitly allow ts-ignore with description for Node integration tests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ afterAll(() => {
cleanupChildProcesses();
});

const esmWarning =
'[Sentry] You are using Node.js in ESM mode ("import syntax"). The Sentry Node.js SDK is not compatible with ESM in Node.js versions before 18.19.0 or before 20.6.0. Please either build your application with CommonJS ("require() syntax"), or upgrade your Node.js version.';
const esmWarning = `[Sentry] You are using Node.js v${process.versions.node} in ESM mode ("import syntax"). The Sentry Node.js SDK is not compatible with ESM in Node.js versions before 18.19.0 or before 20.6.0. Please either build your application with CommonJS ("require() syntax"), or upgrade your Node.js version.`;

test("warns if using ESM on Node.js versions that don't support `register()`", async () => {
const nodeMajorVersion = Number(process.versions.node.split('.')[0]);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import * as Sentry from '@sentry/node';
import { loggingTransport } from '@sentry-internal/node-integration-tests';

Sentry.init({
dsn: 'https://[email protected]/1337',
release: '1.0',
tracePropagationTargets: [/\/v0/, 'v1'],
integrations: [],
transport: loggingTransport,
tracesSampleRate: 0.0,
// Ensure this gets a correct hint
beforeBreadcrumb(breadcrumb, hint) {
breadcrumb.data = breadcrumb.data || {};
const req = hint?.request;
breadcrumb.data.ADDED_PATH = req?.path;
return breadcrumb;
},
});
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
import * as Sentry from '@sentry/node';
import { loggingTransport } from '@sentry-internal/node-integration-tests';

Sentry.init({
dsn: 'https://[email protected]/1337',
release: '1.0',
tracePropagationTargets: [/\/v0/, 'v1'],
tracesSampleRate: 1.0,
integrations: [],
transport: loggingTransport,
});
async function run() {
Sentry.addBreadcrumb({ message: 'manual breadcrumb' });

async function run(): Promise<void> {
await fetch(`${process.env.SERVER_URL}/api/v0`).then(res => res.text());
await fetch(`${process.env.SERVER_URL}/api/v1`).then(res => res.text());
await fetch(`${process.env.SERVER_URL}/api/v2`).then(res => res.text());
Expand All @@ -19,5 +11,4 @@ async function run(): Promise<void> {
Sentry.captureException(new Error('foo'));
}

// eslint-disable-next-line @typescript-eslint/no-floating-promises
run();

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,78 +1,80 @@
import { describe, expect, test } from 'vitest';
import { createRunner } from '../../../../utils/runner';
import { describe, expect } from 'vitest';
import { createEsmAndCjsTests } from '../../../../utils/runner';
import { createTestServer } from '../../../../utils/server';

describe('outgoing fetch', () => {
test('outgoing fetch requests create breadcrumbs', async () => {
const [SERVER_URL, closeTestServer] = await createTestServer().start();
createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => {
test('outgoing fetch requests create breadcrumbs xxx', async () => {
const [SERVER_URL, closeTestServer] = await createTestServer().start();

await createRunner(__dirname, 'scenario.ts')
.withEnv({ SERVER_URL })
.ensureNoErrorOutput()
.expect({
event: {
breadcrumbs: [
{
message: 'manual breadcrumb',
timestamp: expect.any(Number),
},
{
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v0`,
status_code: 404,
ADDED_PATH: '/api/v0',
await createRunner()
.withEnv({ SERVER_URL })
.expect({
event: {
breadcrumbs: [
{
message: 'manual breadcrumb',
timestamp: expect.any(Number),
},
timestamp: expect.any(Number),
type: 'http',
},
{
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v1`,
status_code: 404,
ADDED_PATH: '/api/v1',
{
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v0`,
status_code: 404,
ADDED_PATH: '/api/v0',
},
timestamp: expect.any(Number),
type: 'http',
},
timestamp: expect.any(Number),
type: 'http',
},
{
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v2`,
status_code: 404,
ADDED_PATH: '/api/v2',
{
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v1`,
status_code: 404,
ADDED_PATH: '/api/v1',
},
timestamp: expect.any(Number),
type: 'http',
},
timestamp: expect.any(Number),
type: 'http',
},
{
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v3`,
status_code: 404,
ADDED_PATH: '/api/v3',
{
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v2`,
status_code: 404,
ADDED_PATH: '/api/v2',
},
timestamp: expect.any(Number),
type: 'http',
},
timestamp: expect.any(Number),
type: 'http',
},
],
exception: {
values: [
{
type: 'Error',
value: 'foo',
category: 'http',
data: {
'http.method': 'GET',
url: `${SERVER_URL}/api/v3`,
status_code: 404,
ADDED_PATH: '/api/v3',
},
timestamp: expect.any(Number),
type: 'http',
},
],
exception: {
values: [
{
type: 'Error',
value: 'foo',
},
],
},
},
},
})
.start()
.completed();
closeTestServer();
})
.start()
.completed();

closeTestServer();
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import * as Sentry from '@sentry/node';
import { loggingTransport } from '@sentry-internal/node-integration-tests';

Sentry.init({
dsn: 'https://[email protected]/1337',
release: '1.0',
tracePropagationTargets: [/\/v0/, 'v1'],
integrations: [Sentry.nativeNodeFetchIntegration({ spans: false })],
transport: loggingTransport,
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import * as Sentry from '@sentry/node';

async function run() {
await fetch(`${process.env.SERVER_URL}/api/v0`).then(res => res.text());
await fetch(`${process.env.SERVER_URL}/api/v1`).then(res => res.text());
await fetch(`${process.env.SERVER_URL}/api/v2`).then(res => res.text());
await fetch(`${process.env.SERVER_URL}/api/v3`).then(res => res.text());

Sentry.captureException(new Error('foo'));
}

run();

This file was deleted.

Loading
Loading