Skip to content

Commit f609d05

Browse files
authored
Merge pull request #13100 from getsentry/prepare-release/8.21.0
meta: Update CHANGELOG for 8.21.0
2 parents 102fdc4 + 67b978d commit f609d05

File tree

139 files changed

+2379
-382
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

139 files changed

+2379
-382
lines changed

.craft.yml

+3
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ targets:
7575
- name: npm
7676
id: '@sentry/vercel-edge'
7777
includeNames: /^sentry-vercel-edge-\d.*\.tgz$/
78+
- name: npm
79+
id: '@sentry/cloudflare'
80+
includeNames: /^sentry-cloudflare-\d.*\.tgz$/
7881
- name: npm
7982
id: '@sentry/deno'
8083
includeNames: /^sentry-deno-\d.*\.tgz$/

.github/ISSUE_TEMPLATE/bug.yml

+6-3
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,14 @@ body:
8080
- type: textarea
8181
id: sdk-setup
8282
attributes:
83-
label: SDK Setup/Reproduction Example
83+
label: Reproduction Example/SDK Setup
8484
description:
85-
How do you set up your Sentry SDK? Please show us your `Sentry.init` code.
86-
Or even better—share a link to a reproduction example.
85+
To ensure that we can help you as fast as possible, please share a link to a reproduction example (GitHub repo or online code editor).
86+
This enables us to quickly understand and address your issue.
87+
If you do not post a link, kindly paste your `Sentry.init` code, so we can see how you set up Sentry.
8788
placeholder: |-
89+
https://some-JS-online-code-editor.com/my-example
90+
8891
```javascript
8992
Sentry.init({
9093
dsn: __YOUR_DSN__

.github/workflows/build.yml

+13-12
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ jobs:
519519
strategy:
520520
fail-fast: false
521521
matrix:
522-
node: [14, 16, 18, 20, 22.4]
522+
node: [14, 16, 18, 20, 22]
523523
steps:
524524
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
525525
uses: actions/checkout@v4
@@ -579,7 +579,7 @@ jobs:
579579
strategy:
580580
fail-fast: false
581581
matrix:
582-
node: [14, 16, 18, 20, 22.4]
582+
node: [14, 16, 18, 20, 22]
583583
steps:
584584
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
585585
uses: actions/checkout@v4
@@ -816,12 +816,12 @@ jobs:
816816
strategy:
817817
fail-fast: false
818818
matrix:
819-
node: [14, 16, 18, 20, 22.4]
819+
node: [14, 16, 18, 20, 22]
820820
typescript:
821821
- false
822822
include:
823823
# Only check typescript for latest version (to streamline CI)
824-
- node: 22.4
824+
- node: 22
825825
typescript: '3.8'
826826
steps:
827827
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
@@ -858,7 +858,7 @@ jobs:
858858
strategy:
859859
fail-fast: false
860860
matrix:
861-
node: [18, 20, 22.4]
861+
node: [18, 20, 22]
862862
remix: [1, 2]
863863
# Remix v2 only supports Node 18+, so run 16 tests separately
864864
include:
@@ -990,6 +990,7 @@ jobs:
990990
'node-express-esm-without-loader',
991991
'node-express-cjs-preload',
992992
'node-otel-sdk-node',
993+
'node-otel-custom-sampler',
993994
'ember-classic',
994995
'ember-embroider',
995996
'nextjs-app-dir',
@@ -1384,7 +1385,7 @@ jobs:
13841385
- os: ubuntu-20.04
13851386
node: 20
13861387
- os: ubuntu-20.04
1387-
node: 22.4
1388+
node: 22
13881389

13891390
# x64 musl
13901391
- os: ubuntu-20.04
@@ -1398,7 +1399,7 @@ jobs:
13981399
node: 20
13991400
- os: ubuntu-20.04
14001401
container: node:22-alpine3.18
1401-
node: 22.4
1402+
node: 22
14021403

14031404
# arm64 glibc
14041405
- os: ubuntu-20.04
@@ -1412,7 +1413,7 @@ jobs:
14121413
node: 20
14131414
- os: ubuntu-20.04
14141415
arch: arm64
1415-
node: 22.4
1416+
node: 22
14161417

14171418
# arm64 musl
14181419
- os: ubuntu-20.04
@@ -1430,7 +1431,7 @@ jobs:
14301431
- os: ubuntu-20.04
14311432
arch: arm64
14321433
container: node:22-alpine3.18
1433-
node: 22.4
1434+
node: 22
14341435

14351436
# macos x64
14361437
- os: macos-13
@@ -1443,7 +1444,7 @@ jobs:
14431444
node: 20
14441445
arch: x64
14451446
- os: macos-13
1446-
node: 22.4
1447+
node: 22
14471448
arch: x64
14481449

14491450
# macos arm64
@@ -1461,7 +1462,7 @@ jobs:
14611462
target_platform: darwin
14621463
- os: macos-13
14631464
arch: arm64
1464-
node: 22.4
1465+
node: 22
14651466
target_platform: darwin
14661467

14671468
# windows x64
@@ -1475,7 +1476,7 @@ jobs:
14751476
node: 20
14761477
arch: x64
14771478
- os: windows-2022
1478-
node: 22.4
1479+
node: 22
14791480
arch: x64
14801481

14811482
steps:

.size-limit.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module.exports = [
1515
path: 'packages/browser/build/npm/esm/index.js',
1616
import: createImport('init', 'browserTracingIntegration'),
1717
gzip: true,
18-
limit: '35 KB',
18+
limit: '36 KB',
1919
},
2020
{
2121
name: '@sentry/browser (incl. Tracing, Replay)',
@@ -29,7 +29,7 @@ module.exports = [
2929
path: 'packages/browser/build/npm/esm/index.js',
3030
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
3131
gzip: true,
32-
limit: '65 KB',
32+
limit: '66 KB',
3333
modifyWebpackConfig: function (config) {
3434
const webpack = require('webpack');
3535
config.plugins.push(
@@ -48,14 +48,14 @@ module.exports = [
4848
path: 'packages/browser/build/npm/esm/index.js',
4949
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
5050
gzip: true,
51-
limit: '76 KB',
51+
limit: '78 KB',
5252
},
5353
{
5454
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
5555
path: 'packages/browser/build/npm/esm/index.js',
5656
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'feedbackIntegration'),
5757
gzip: true,
58-
limit: '89 KB',
58+
limit: '90 KB',
5959
},
6060
{
6161
name: '@sentry/browser (incl. Tracing, Replay, Feedback, metrics)',
@@ -107,7 +107,7 @@ module.exports = [
107107
import: createImport('init', 'ErrorBoundary', 'reactRouterV6BrowserTracingIntegration'),
108108
ignore: ['react/jsx-runtime'],
109109
gzip: true,
110-
limit: '38 KB',
110+
limit: '39 KB',
111111
},
112112
// Vue SDK (ESM)
113113
{

CHANGELOG.md

+31-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,43 @@
11
# Changelog
22

3-
> [!IMPORTANT]
3+
> [!IMPORTANT] Important
4+
>
45
> If you are upgrading to the `8.x` versions of the SDK from `7.x` or below, make sure you follow our
56
> [migration guide](https://docs.sentry.io/platforms/javascript/migration/) first.
67
78
## Unreleased
89

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

12+
## 8.21.0
13+
14+
### Important Changes
15+
16+
- **Alpha release of Official Cloudflare SDK**
17+
- feat(cloudflare): Add `withSentry` method (#13025)
18+
- feat(cloudflare): Add cloudflare sdk scaffolding (#12953)
19+
- feat(cloudflare): Add basic cloudflare package and tests (#12861)
20+
21+
This release contains the alpha version of `@sentry/cloudflare`, our SDK for the
22+
[Cloudflare Workers JavaScript Runtime](https://developers.cloudflare.com/workers/)! For details on how to use it,
23+
please see the [README](./packages/cloudflare/README.md). Any feedback/bug reports are greatly appreciated, please
24+
[reach out on GitHub](https://github.com/getsentry/sentry-javascript/issues/12620).
25+
26+
Please note that only Cloudflare Workers are tested and supported - official Cloudflare Pages support will come in an
27+
upcoming release.
28+
29+
### Other Changes
30+
31+
- feat(feedback): Make cropped screenshot area draggable (#13071)
32+
- feat(core): Adapt spans for client-side fetch to streaming responses (#12723)
33+
- feat(core): Capture # of dropped spans through `beforeSendTransaction` (#13022)
34+
- feat(deps): bump @opentelemetry/instrumentation-aws-sdk from 0.43.0 to 0.43.1 (#13089)
35+
- feat(deps): bump @opentelemetry/instrumentation-express from 0.41.0 to 0.41.1 (#13090)
36+
- feat(nuxt): Add connected tracing meta tags (#13098)
37+
- feat(nuxt): Add vue-router instrumentation (#13054)
38+
- fix(feedback): Ensure pluggable feedback CDN bundle is correctly built (#13081)
39+
- fix(node): Improve OTEL validation logic (#13079)
40+
1141
## 8.20.0
1242

1343
### Important Changes

dev-packages/browser-integration-tests/README.md

+12
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,15 @@ occur while writing tests for Sentry Browser SDK.
100100
- If a `subject.js` is defined for the test case.
101101
- If either of `init.js` or `subject.js` contain non-browser code.
102102
- If the webpack configuration is valid.
103+
104+
- #### Debugging Tests
105+
106+
To debug one or multiple test scenarios, you can use playwright's UI mode. This opens a simulated browser window with
107+
console logs, a timeline of the page and how it was rendered, a list of steps within the test and filtering
108+
capabilities to run the specific test. This is really helpful to understand what happened during the test or for
109+
example when a timeout occurred.
110+
111+
To use UI mode, simply call `yarn test --ui` and filter on the test in the UI.
112+
113+
Note: passing [the `-g` flag](#running-tests-locally) along with the `--ui` command doesn't give you an advantage as
114+
you have to filter on the test again in the UI.

dev-packages/browser-integration-tests/suites/feedback/captureFeedback/init.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import * as Sentry from '@sentry/browser';
2+
// Import this separately so that generatePlugin can handle it for CDN scenarios
3+
import { feedbackIntegration } from '@sentry/browser';
24

35
window.Sentry = Sentry;
46

57
Sentry.init({
68
dsn: 'https://[email protected]/1337',
79
integrations: [
8-
Sentry.feedbackIntegration({
10+
feedbackIntegration({
911
tags: { from: 'integration init' },
1012
}),
1113
],

dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/hasSampling/init.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import * as Sentry from '@sentry/browser';
2+
// Import this separately so that generatePlugin can handle it for CDN scenarios
3+
import { feedbackIntegration } from '@sentry/browser';
24

35
window.Sentry = Sentry;
46

@@ -12,6 +14,6 @@ Sentry.init({
1214
flushMaxDelay: 200,
1315
minReplayDuration: 0,
1416
}),
15-
Sentry.feedbackIntegration(),
17+
feedbackIntegration(),
1618
],
1719
});
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import * as Sentry from '@sentry/browser';
2+
// Import this separately so that generatePlugin can handle it for CDN scenarios
3+
import { feedbackIntegration } from '@sentry/browser';
24

35
window.Sentry = Sentry;
46

57
Sentry.init({
68
dsn: 'https://[email protected]/1337',
7-
integrations: [Sentry.browserTracingIntegration(), Sentry.feedbackIntegration()],
9+
integrations: [Sentry.browserTracingIntegration(), feedbackIntegration()],
810
tracePropagationTargets: ['http://example.com'],
911
tracesSampleRate: 1,
1012
});

dev-packages/browser-integration-tests/utils/generatePlugin.ts

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ const useLoader = bundleKey.startsWith('loader');
2424

2525
// These are imports that, when using CDN bundles, are not included in the main CDN bundle.
2626
// In this case, if we encounter this import, we want to add this CDN bundle file instead
27+
// IMPORTANT NOTE: In order for this to work, you need to import this from browser like this:
28+
// import { httpClientIntegration } from '@sentry/browser';
29+
// You cannot use e.g. Sentry.httpClientIntegration, as this will not be detected
2730
const IMPORTED_INTEGRATION_CDN_BUNDLE_PATHS: Record<string, string> = {
2831
httpClientIntegration: 'httpclient',
2932
captureConsoleIntegration: 'captureconsole',
@@ -34,6 +37,7 @@ const IMPORTED_INTEGRATION_CDN_BUNDLE_PATHS: Record<string, string> = {
3437
extraErrorDataIntegration: 'extraerrordata',
3538
reportingObserverIntegration: 'reportingobserver',
3639
sessionTimingIntegration: 'sessiontiming',
40+
feedbackIntegration: 'feedback',
3741
};
3842

3943
const BUNDLE_PATHS: Record<string, Record<string, string>> = {

dev-packages/browser-integration-tests/utils/helpers.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -246,15 +246,11 @@ export function shouldSkipTracingTest(): boolean {
246246
}
247247

248248
/**
249-
* We can only test feedback tests in certain bundles/packages:
250-
* - NPM (ESM, CJS)
251-
* - CDN bundles that contain the Replay integration
252-
*
253-
* @returns `true` if we should skip the feedback test
249+
* Today we always run feedback tests, but this can be used to guard this if we ever need to.
254250
*/
255251
export function shouldSkipFeedbackTest(): boolean {
256-
const bundle = process.env.PW_BUNDLE as string | undefined;
257-
return bundle != null && !bundle.includes('feedback') && !bundle.includes('esm') && !bundle.includes('cjs');
252+
// We always run these, in bundles the pluggable integration is automatically added
253+
return false;
258254
}
259255

260256
/**

dev-packages/e2e-tests/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Test applications are completely standalone applications that can be used to ver
4343
these commands:
4444

4545
```sh
46-
cd packages/e2e-tests
46+
cd dev-packages/e2e-tests
4747

4848
# Create a new test application folder
4949
mkdir test-applications/my-new-test-application # Name of the new folder doesn't technically matter but choose something meaningful

dev-packages/e2e-tests/test-applications/create-remix-app-express-legacy/tests/server-transactions.test.ts

+15
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,21 @@ import { uuid4 } from '@sentry/utils';
33

44
import { waitForTransaction } from '@sentry-internal/test-utils';
55

6+
test.describe.configure({ mode: 'serial' });
7+
8+
test('Sends parameterized transaction name to Sentry', async ({ page }) => {
9+
const transactionPromise = waitForTransaction('create-remix-app-express-legacy', transactionEvent => {
10+
return transactionEvent.contexts?.trace?.op === 'http.server';
11+
});
12+
13+
await page.goto('/user/123');
14+
15+
const transaction = await transactionPromise;
16+
17+
expect(transaction).toBeDefined();
18+
expect(transaction.transaction).toBe('routes/user.$id');
19+
});
20+
621
test('Sends form data with action span to Sentry', async ({ page }) => {
722
await page.goto('/action-formdata');
823

dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/tests/server-transactions.test.ts

+15
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,21 @@ import { uuid4 } from '@sentry/utils';
33

44
import { waitForTransaction } from '@sentry-internal/test-utils';
55

6+
test.describe.configure({ mode: 'serial' });
7+
8+
test('Sends parameterized transaction name to Sentry', async ({ page }) => {
9+
const transactionPromise = waitForTransaction('create-remix-app-express-vite-dev', transactionEvent => {
10+
return transactionEvent.contexts?.trace?.op === 'http.server';
11+
});
12+
13+
await page.goto('/user/123');
14+
15+
const transaction = await transactionPromise;
16+
17+
expect(transaction).toBeDefined();
18+
expect(transaction.transaction).toBe('GET user/:id');
19+
});
20+
621
test('Sends two linked transactions (server & client) to Sentry', async ({ page }) => {
722
// We use this to identify the transactions
823
const testTag = uuid4();

0 commit comments

Comments
 (0)