Skip to content

meta(changelog): Update changelog for 9.23.0 #16411

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 27 commits into from
May 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f00ddcb
Merge pull request #16350 from getsentry/master
github-actions[bot] May 20, 2025
593d5b3
test(react-router): Add and fix tests for pre rendered routes (#16346)
RulaKhaled May 21, 2025
1eecb02
doc(node): Fix `ignoreIncomingRequestBody` JSDoc (#16331)
Lms24 May 21, 2025
0a7053b
test(remix): Pin shopify package versions for remix (#16357)
chargome May 21, 2025
9a185ee
fix(browser): Ensure logs are flushed when sendClientReports=false (#…
mydea May 21, 2025
b4bd21f
feat(node): Do not add HTTP & fetch span instrumentation if tracing i…
mydea May 21, 2025
48f1a4f
fix(cloudflare): Capture exceptions thrown in hono (#16355)
s1gr1d May 22, 2025
952373e
test(cloudflare): Add test for hono cloudflare (#16360)
s1gr1d May 23, 2025
3604a08
feat(core): Allow re-use of `captureLog` (#16352)
timfish May 23, 2025
3d18c8e
fix(node): Suppress Spotlight calls (#16380)
BYK May 24, 2025
72057b6
test(angular): Add Angular `20.0.0-rc.2` e2e test (#16364)
Lms24 May 26, 2025
349d7d0
fix(browser): Move `browserTracingIntegration` code to `setup` hook (…
mydea May 26, 2025
76b7f3a
feat(browser): Disable client when browser extension is detected in `…
mydea May 26, 2025
2801d9b
feat(deps): bump @opentelemetry/semantic-conventions from 1.32.0 to 1…
dependabot[bot] May 26, 2025
5c05627
feat(core): Export `_INTERNAL_captureSerializedLog` (#16387)
timfish May 26, 2025
e46c619
fix(opentelemetry): Ensure `withScope` keeps span active & `_getTrace…
mydea May 26, 2025
c297bf9
feat(browser): option to ignore certain resource types (#16389)
bcoe May 26, 2025
0364537
fix(node): Don't warn about Spotlight on empty NODE_ENV (#16381)
BYK May 27, 2025
1a72ed3
feat(deps): bump @sentry/cli from 2.43.0 to 2.45.0 (#16395)
dependabot[bot] May 27, 2025
33ef453
feat(deps): bump @sentry/webpack-plugin from 3.3.1 to 3.5.0 (#16394)
dependabot[bot] May 27, 2025
56137a8
feat(deps): bump @prisma/instrumentation from 6.7.0 to 6.8.2 (#16392)
dependabot[bot] May 27, 2025
bdbd541
feat(nextjs): Include `static/chunks/main-*` files for `widenClientFi…
chargome May 28, 2025
90f6619
feat(nuxt): Added support for nuxt layers (#16372)
Xenossolitarius May 28, 2025
5bbe375
feat: Export `isEnabled` from all SDKs (#16405)
mydea May 28, 2025
a788685
chore: Add external contributor to CHANGELOG.md (#16408)
HazAT May 28, 2025
6e61f82
fix(nuxt): Add `@sentry/nuxt` as external in Rollup (#16407)
s1gr1d May 28, 2025
5eca427
meta(changelog): Update changelog for 9.23.0
andreiborza May 28, 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
6 changes: 6 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -886,7 +886,13 @@ jobs:
- uses: pnpm/action-setup@v4
with:
version: 9.4.0
- name: Set up Node for Angular 20
if: matrix.test-application == 'angular-20'
uses: actions/setup-node@v4
with:
node-version: '20.19.2'
- name: Set up Node
if: matrix.test-application != 'angular-20'
uses: actions/setup-node@v4
with:
node-version-file: 'dev-packages/e2e-tests/package.json'
Expand Down
39 changes: 39 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,45 @@

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

## 9.23.0

### Important changes

- **feat(browser): option to ignore certain resource types ([#16389](https://github.com/getsentry/sentry-javascript/pull/16389))**

Adds an option to opt out of certain `resource.*` spans via `ignoreResourceSpans`.

For example, to opt out of `resource.script` spans:

```js
Sentry.browserTracingIntegration({
ignoreResourceSpans: ['resource.script'],
}),
```

### Other changes

- feat: Export `isEnabled` from all SDKs ([#16405](https://github.com/getsentry/sentry-javascript/pull/16405))
- feat(browser): Disable client when browser extension is detected in `init()` ([#16354](https://github.com/getsentry/sentry-javascript/pull/16354))
- feat(core): Allow re-use of `captureLog` ([#16352](https://github.com/getsentry/sentry-javascript/pull/16352))
- feat(core): Export `_INTERNAL_captureSerializedLog` ([#16387](https://github.com/getsentry/sentry-javascript/pull/16387))
- feat(deps): bump @opentelemetry/semantic-conventions from 1.32.0 to 1.34.0 ([#16393](https://github.com/getsentry/sentry-javascript/pull/16393))
- feat(deps): bump @prisma/instrumentation from 6.7.0 to 6.8.2 ([#16392](https://github.com/getsentry/sentry-javascript/pull/16392))
- feat(deps): bump @sentry/cli from 2.43.0 to 2.45.0 ([#16395](https://github.com/getsentry/sentry-javascript/pull/16395))
- feat(deps): bump @sentry/webpack-plugin from 3.3.1 to 3.5.0 ([#16394](https://github.com/getsentry/sentry-javascript/pull/16394))
- feat(nextjs): Include `static/chunks/main-*` files for `widenClientFileUpload` ([#16406](https://github.com/getsentry/sentry-javascript/pull/16406))
- feat(node): Do not add HTTP & fetch span instrumentation if tracing is disabled ([#15730](https://github.com/getsentry/sentry-javascript/pull/15730))
- feat(nuxt): Added support for nuxt layers ([#16372](https://github.com/getsentry/sentry-javascript/pull/16372))
- fix(browser): Ensure logs are flushed when sendClientReports=false ([#16351](https://github.com/getsentry/sentry-javascript/pull/16351))
- fix(browser): Move `browserTracingIntegration` code to `setup` hook ([#16386](https://github.com/getsentry/sentry-javascript/pull/16386))
- fix(cloudflare): Capture exceptions thrown in hono ([#16355](https://github.com/getsentry/sentry-javascript/pull/16355))
- fix(node): Don't warn about Spotlight on empty NODE_ENV ([#16381](https://github.com/getsentry/sentry-javascript/pull/16381))
- fix(node): Suppress Spotlight calls ([#16380](https://github.com/getsentry/sentry-javascript/pull/16380))
- fix(nuxt): Add `@sentry/nuxt` as external in Rollup ([#16407](https://github.com/getsentry/sentry-javascript/pull/16407))
- fix(opentelemetry): Ensure `withScope` keeps span active & `_getTraceInfoFromScope` works ([#16385](https://github.com/getsentry/sentry-javascript/pull/16385))

Work in this release was contributed by @Xenossolitarius. Thank you for your contribution!

## 9.22.0

### Important changes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ sentryTest(
return !!(window as any).Sentry.isInitialized();
});

expect(isInitialized).toEqual(false);
const isEnabled = await page.evaluate(() => {
return !!(window as any).Sentry.getClient()?.getOptions().enabled;
});

expect(isInitialized).toEqual(true);
expect(isEnabled).toEqual(false);

if (hasDebugLogs()) {
expect(errorLogs.length).toEqual(1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ sentryTest('should not initialize when inside a Chrome browser extension', async
return !!(window as any).Sentry.isInitialized();
});

expect(isInitialized).toEqual(false);
const isEnabled = await page.evaluate(() => {
return !!(window as any).Sentry.getClient()?.getOptions().enabled;
});

expect(isInitialized).toEqual(true);
expect(isEnabled).toEqual(false);

if (hasDebugLogs()) {
expect(errorLogs.length).toEqual(1);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
(() => {
// I do nothing.
})();
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
integrations: [Sentry.browserTracingIntegration(), Sentry.browserTracingIntegration()],
integrations: [
Sentry.browserTracingIntegration({
ignoreResourceSpans: ['resource.script'],
idleTimeout: 9000,
}),
],
tracesSampleRate: 1,
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { Route } from '@playwright/test';
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';
import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers';

sentryTest('should allow specific types of resource spans to be ignored.', async ({ getLocalTestUrl, page }) => {
if (shouldSkipTracingTest()) {
sentryTest.skip();
}

await page.route('**/path/to/script.js', (route: Route) => route.fulfill({ path: `${__dirname}/assets/script.js` }));

const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
const allSpans = eventData.spans?.filter(({ op }) => op?.startsWith('resource.script'));

expect(allSpans?.length).toBe(0);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
integrations: [Sentry.browserTracingIntegration()],
tracePropagationTargets: ['http://sentry-test-site.example'],
tracesSampleRate: 1,
autoSessionTracking: false,
});

// fetch directly after init
fetch('http://sentry-test-site.example/0');
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { expect } from '@playwright/test';
import { sentryTest } from '../../../../utils/fixtures';
import {
envelopeRequestParser,
shouldSkipTracingTest,
waitForTransactionRequestOnUrl,
} from '../../../../utils/helpers';

sentryTest('should create spans for fetch requests called directly after init', async ({ getLocalTestUrl, page }) => {
if (shouldSkipTracingTest()) {
sentryTest.skip();
}

await page.route('http://sentry-test-site.example/*', route => route.fulfill({ body: 'ok' }));

const url = await getLocalTestUrl({ testDir: __dirname });

const req = await waitForTransactionRequestOnUrl(page, url);
const tracingEvent = envelopeRequestParser(req);

const requestSpans = tracingEvent.spans?.filter(({ op }) => op === 'http.client');

expect(requestSpans).toHaveLength(1);

expect(requestSpans![0]).toMatchObject({
description: 'GET http://sentry-test-site.example/0',
parent_span_id: tracingEvent.contexts?.trace?.span_id,
span_id: expect.stringMatching(/[a-f0-9]{16}/),
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
trace_id: tracingEvent.contexts?.trace?.trace_id,
data: {
'http.method': 'GET',
'http.url': 'http://sentry-test-site.example/0',
url: 'http://sentry-test-site.example/0',
'server.address': 'sentry-test-site.example',
type: 'fetch',
},
});
});
17 changes: 17 additions & 0 deletions dev-packages/e2e-tests/test-applications/angular-20/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Editor configuration, see https://editorconfig.org
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.ts]
quote_type = single
ij_typescript_use_double_quotes = false

[*.md]
max_line_length = off
trim_trailing_whitespace = false
44 changes: 44 additions & 0 deletions dev-packages/e2e-tests/test-applications/angular-20/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files.

# Compiled output
/dist
/tmp
/out-tsc
/bazel-out

# Node
/node_modules
npm-debug.log
yarn-error.log

# IDEs and editors
.idea/
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*

# Miscellaneous
/.angular/cache
.sass-cache/
/connect.lock
/coverage
/libpeerconnection.log
testem.log
/typings

# System files
.DS_Store
Thumbs.db

test-results
2 changes: 2 additions & 0 deletions dev-packages/e2e-tests/test-applications/angular-20/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@sentry:registry=http://127.0.0.1:4873
@sentry-internal:registry=http://127.0.0.1:4873
3 changes: 3 additions & 0 deletions dev-packages/e2e-tests/test-applications/angular-20/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Angular 20

E2E test app for Angular 20 and `@sentry/angular`.
87 changes: 87 additions & 0 deletions dev-packages/e2e-tests/test-applications/angular-20/angular.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"angular-20": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:application",
"options": {
"outputPath": "dist/angular-20",
"index": "src/index.html",
"browser": "src/main.ts",
"polyfills": ["zone.js"],
"tsConfig": "tsconfig.app.json",
"assets": [
{
"glob": "**/*",
"input": "public"
}
],
"styles": ["src/styles.css"],
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kB",
"maximumError": "1MB"
},
{
"type": "anyComponentStyle",
"maximumWarning": "4kB",
"maximumError": "8kB"
}
],
"outputHashing": "all"
},
"development": {
"optimization": false,
"extractLicenses": false,
"sourceMap": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
"buildTarget": "angular-20:build:production"
},
"development": {
"buildTarget": "angular-20:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n"
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": ["zone.js", "zone.js/testing"],
"tsConfig": "tsconfig.spec.json",
"assets": [
{
"glob": "**/*",
"input": "public"
}
],
"styles": ["src/styles.css"],
"scripts": []
}
}
}
}
}
}
Loading
Loading