Skip to content

Commit 93fe406

Browse files
authored
Merge pull request #13351 from getsentry/prepare-release/8.26.0
meta: Update Changelog for 8.26.0
2 parents fd4fa69 + 2d4e4f5 commit 93fe406

File tree

168 files changed

+3731
-1225
lines changed

Some content is hidden

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

168 files changed

+3731
-1225
lines changed

.craft.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ targets:
206206
onlyIfPresent: /^sentry-remix-\d.*\.tgz$/
207207
'npm:@sentry/solid':
208208
onlyIfPresent: /^sentry-solid-\d.*\.tgz$/
209+
'npm:@sentry/solidstart':
210+
onlyIfPresent: /^sentry-solidstart-\d.*\.tgz$/
209211
'npm:@sentry/svelte':
210212
onlyIfPresent: /^sentry-svelte-\d.*\.tgz$/
211213
'npm:@sentry/sveltekit':

.github/workflows/build.yml

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ jobs:
9696
profiling_node:
9797
- 'packages/profiling-node/**'
9898
- 'dev-packages/e2e-tests/test-applications/node-profiling/**'
99+
any_code:
100+
- '!**/*.md'
99101
100102
101103
- name: Get PR labels
@@ -109,6 +111,8 @@ jobs:
109111
is_release: ${{ startsWith(github.ref, 'refs/heads/release/') }}
110112
changed_profiling_node: ${{ steps.changed.outputs.profiling_node == 'true' }}
111113
changed_ci: ${{ steps.changed.outputs.workflow == 'true' }}
114+
changed_any_code: ${{ steps.changed.outputs.any_code == 'true' }}
115+
112116
# When merging into master, or from master
113117
is_gitflow_sync: ${{ github.head_ref == 'master' || github.ref == 'refs/heads/master' }}
114118
has_gitflow_label:
@@ -123,6 +127,7 @@ jobs:
123127
runs-on: ubuntu-20.04
124128
timeout-minutes: 15
125129
if: |
130+
needs.job_get_metadata.outputs.changed_any_code == 'true' &&
126131
(needs.job_get_metadata.outputs.is_gitflow_sync == 'false' && needs.job_get_metadata.outputs.has_gitflow_label == 'false')
127132
steps:
128133
- name: Check out base commit (${{ github.event.pull_request.base.sha }})
@@ -274,24 +279,37 @@ jobs:
274279

275280
job_check_format:
276281
name: Check file formatting
277-
needs: [job_get_metadata, job_build]
282+
needs: [job_get_metadata]
278283
timeout-minutes: 10
279284
runs-on: ubuntu-20.04
280285
steps:
281286
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
282287
uses: actions/checkout@v4
283288
with:
284289
ref: ${{ env.HEAD_COMMIT }}
290+
285291
- name: Set up Node
286292
uses: actions/setup-node@v4
287293
with:
288294
node-version-file: 'package.json'
295+
296+
# we use a hash of yarn.lock as our cache key, because if it hasn't changed, our dependencies haven't changed,
297+
# so no need to reinstall them
298+
- name: Compute dependency cache key
299+
id: compute_lockfile_hash
300+
run: echo "hash=${{ hashFiles('yarn.lock', '**/package.json') }}" >> "$GITHUB_OUTPUT"
301+
289302
- name: Check dependency cache
290-
uses: actions/cache/restore@v4
303+
uses: actions/cache@v4
304+
id: cache_dependencies
291305
with:
292306
path: ${{ env.CACHED_DEPENDENCY_PATHS }}
293-
key: ${{ needs.job_build.outputs.dependency_cache_key }}
294-
fail-on-cache-miss: true
307+
key: ${{ steps.compute_lockfile_hash.outputs.hash }}
308+
309+
- name: Install dependencies
310+
if: steps.cache_dependencies.outputs.cache-hit != 'true'
311+
run: yarn install --ignore-engines --frozen-lockfile
312+
295313
- name: Check file formatting
296314
run: yarn lint:prettier && yarn lint:biome
297315

@@ -818,10 +836,10 @@ jobs:
818836
pattern: profiling-node-binaries-${{ github.sha }}-*
819837
path: ${{ github.workspace }}/packages/profiling-node/lib/
820838
merge-multiple: true
839+
# End rebuild profiling
821840

822-
- name: Build Profiling tarball
841+
- name: Build tarballs
823842
run: yarn build:tarball
824-
# End rebuild profiling
825843

826844
- name: Stores tarballs in cache
827845
uses: actions/cache/save@v4
@@ -867,6 +885,7 @@ jobs:
867885
'create-remix-app-express',
868886
'create-remix-app-express-legacy',
869887
'create-remix-app-express-vite-dev',
888+
'default-browser',
870889
'node-express-esm-loader',
871890
'node-express-esm-preload',
872891
'node-express-esm-without-loader',

.size-limit.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ module.exports = [
5555
path: 'packages/browser/build/npm/esm/index.js',
5656
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'feedbackIntegration'),
5757
gzip: true,
58-
limit: '90 KB',
58+
limit: '91 KB',
5959
},
6060
{
6161
name: '@sentry/browser (incl. Tracing, Replay, Feedback, metrics)',
@@ -143,7 +143,7 @@ module.exports = [
143143
name: 'CDN Bundle (incl. Tracing)',
144144
path: createCDNPath('bundle.tracing.min.js'),
145145
gzip: true,
146-
limit: '37 KB',
146+
limit: '38 KB',
147147
},
148148
{
149149
name: 'CDN Bundle (incl. Tracing, Replay)',
@@ -170,7 +170,7 @@ module.exports = [
170170
path: createCDNPath('bundle.tracing.min.js'),
171171
gzip: false,
172172
brotli: false,
173-
limit: '110 KB',
173+
limit: '111 KB',
174174
},
175175
{
176176
name: 'CDN Bundle (incl. Tracing, Replay) - uncompressed',
@@ -193,7 +193,7 @@ module.exports = [
193193
import: createImport('init'),
194194
ignore: ['next/router', 'next/constants'],
195195
gzip: true,
196-
limit: '38 KB',
196+
limit: '39 KB',
197197
},
198198
// SvelteKit SDK (ESM)
199199
{

.vscode/settings.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,11 @@
3636
],
3737
"deno.enablePaths": ["packages/deno/test"],
3838
"editor.codeActionsOnSave": {
39-
"source.organizeImports.biome": "explicit",
39+
"source.organizeImports.biome": "explicit"
4040
},
4141
"editor.defaultFormatter": "biomejs.biome",
4242
"[typescript]": {
4343
"editor.defaultFormatter": "biomejs.biome"
44-
}
44+
},
45+
"cSpell.words": ["arrayify"]
4546
}

CHANGELOG.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,60 @@
1010

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

13+
## 8.26.0
14+
15+
### Important Changes
16+
17+
- **feat(node): Add `fsInstrumentation` (#13291)**
18+
19+
This release adds `fsIntegration`, an integration that instruments the `fs` API to the Sentry Node SDK. The
20+
integration creates spans with naming patterns of `fs.readFile`, `fs.unlink`, and so on.
21+
22+
This integration is not enabled by default and needs to be registered in your `Sentry.init` call. You can configure
23+
via options whether to include path arguments or error messages as span attributes when an fs call fails:
24+
25+
```js
26+
Sentry.init({
27+
integrations: [
28+
Sentry.fsIntegration({
29+
recordFilePaths: true,
30+
recordErrorMessagesAsSpanAttributes: true,
31+
}),
32+
],
33+
});
34+
```
35+
36+
**WARNING:** This integration may add significant overhead to your application. Especially in scenarios with a lot of
37+
file I/O, like for example when running a framework dev server, including this integration can massively slow down
38+
your application.
39+
40+
### Other Changes
41+
42+
- feat(browser): Add spotlightBrowser integration (#13263)
43+
- feat(browser): Allow sentry in safari extension background page (#13209)
44+
- feat(browser): Send CLS as standalone span (experimental) (#13056)
45+
- feat(core): Add OpenTelemetry-specific `getTraceData` implementation (#13281)
46+
- feat(nextjs): Always add `browserTracingIntegration` (#13324)
47+
- feat(nextjs): Always transmit trace data to the client (#13337)
48+
- feat(nextjs): export SentryBuildOptions (#13296)
49+
- feat(nextjs): Update `experimental_captureRequestError` to reflect `RequestInfo.path` change in Next.js canary
50+
(#13344)
51+
52+
- feat(nuxt): Always add tracing meta tags (#13273)
53+
- feat(nuxt): Set transaction name for server error (#13292)
54+
- feat(replay): Add a replay-specific logger (#13256)
55+
- feat(sveltekit): Add bundle size optimizations to plugin options (#13318)
56+
- feat(sveltekit): Always add browserTracingIntegration (#13322)
57+
- feat(tracing): Make long animation frames opt-out (#13255)
58+
- fix(astro): Correctly extract request data (#13315)
59+
- fix(astro): Only track access request headers in dynamic page requests (#13306)
60+
- fix(nuxt): Add import line for disabled `autoImport` (#13342)
61+
- fix(nuxt): Add vue to excludeEsmLoaderHooks array (#13346)
62+
- fix(opentelemetry): Do not overwrite http span name if kind is internal (#13282)
63+
- fix(remix): Ensure `origin` is correctly set for remix server spans (#13305)
64+
65+
Work in this release was contributed by @MonstraG, @undead-voron and @Zen-cronic. Thank you for your contributions!
66+
1367
## 8.25.0
1468

1569
### Important Changes

dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/interactions/test.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ sentryTest('should capture interaction transaction. @firefox', async ({ browserN
3333
expect(eventData.contexts).toMatchObject({ trace: { op: 'ui.action.click' } });
3434
expect(eventData.platform).toBe('javascript');
3535
expect(eventData.type).toBe('transaction');
36-
expect(eventData.spans).toHaveLength(1);
3736

38-
const interactionSpan = eventData.spans![0];
37+
const spans = eventData.spans?.filter(span => !span.op?.startsWith('ui.long-animation-frame'));
38+
expect(spans).toHaveLength(1);
39+
40+
const interactionSpan = spans![0];
3941
expect(interactionSpan.op).toBe('ui.interaction.click');
4042
expect(interactionSpan.description).toBe('body > button.clicked');
4143
expect(interactionSpan.timestamp).toBeDefined();
@@ -63,7 +65,8 @@ sentryTest(
6365
await page.waitForTimeout(1000);
6466
await page.locator('[data-test-id=interaction-button]').click();
6567
const envelope = await envelopePromise;
66-
expect(envelope[0].spans).toHaveLength(1);
68+
const spans = envelope[0].spans?.filter(span => !span.op?.startsWith('ui.long-animation-frame'));
69+
expect(spans).toHaveLength(1);
6770
}
6871
},
6972
);
@@ -89,10 +92,10 @@ sentryTest(
8992
const envelopes = await envelopePromise;
9093
expect(envelopes).toHaveLength(1);
9194
const eventData = envelopes[0];
95+
const spans = eventData.spans?.filter(span => !span.op?.startsWith('ui.long-animation-frame'));
96+
expect(spans).toHaveLength(1);
9297

93-
expect(eventData.spans).toHaveLength(1);
94-
95-
const interactionSpan = eventData.spans![0];
98+
const interactionSpan = spans![0];
9699
expect(interactionSpan.op).toBe('ui.interaction.click');
97100
expect(interactionSpan.description).toBe('body > AnnotatedButton');
98101
},
@@ -120,9 +123,10 @@ sentryTest(
120123
expect(envelopes).toHaveLength(1);
121124

122125
const eventData = envelopes[0];
123-
expect(eventData.spans).toHaveLength(1);
126+
const spans = eventData.spans?.filter(span => !span.op?.startsWith('ui.long-animation-frame'));
127+
expect(spans).toHaveLength(1);
124128

125-
const interactionSpan = eventData.spans![0];
129+
const interactionSpan = spans![0];
126130
expect(interactionSpan.op).toBe('ui.interaction.click');
127131
expect(interactionSpan.description).toBe('body > StyledButton');
128132
},

dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-disabled/init.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ window.Sentry = Sentry;
44

55
Sentry.init({
66
dsn: 'https://[email protected]/1337',
7-
integrations: [Sentry.browserTracingIntegration({ enableLongTask: false, idleTimeout: 9000 })],
7+
integrations: [
8+
Sentry.browserTracingIntegration({ enableLongTask: false, enableLongAnimationFrame: false, idleTimeout: 9000 }),
9+
],
810
tracesSampleRate: 1,
911
});

dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-enabled/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Sentry.init({
77
integrations: [
88
Sentry.browserTracingIntegration({
99
idleTimeout: 9000,
10+
enableLongAnimationFrame: false,
1011
}),
1112
],
1213
tracesSampleRate: 1,
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import * as Sentry from '@sentry/browser';
2+
3+
window.Sentry = Sentry;
4+
5+
Sentry.init({
6+
dsn: 'https://[email protected]/1337',
7+
integrations: [
8+
Sentry.browserTracingIntegration({
9+
idleTimeout: 9000,
10+
_experiments: {
11+
enableStandaloneClsSpans: true,
12+
},
13+
}),
14+
],
15+
tracesSampleRate: 1,
16+
debug: true,
17+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { simulateCLS } from '../../../../utils/web-vitals/cls.ts';
2+
3+
// Simulate Layout shift right at the beginning of the page load, depending on the URL hash
4+
// don't run if expected CLS is NaN
5+
const expectedCLS = Number(location.hash.slice(1));
6+
if (expectedCLS && expectedCLS >= 0) {
7+
simulateCLS(expectedCLS).then(() => window.dispatchEvent(new Event('cls-done')));
8+
}
9+
10+
// Simulate layout shift whenever the trigger-cls event is dispatched
11+
// Cannot trigger cia a button click because expected layout shift after
12+
// an interaction doesn't contribute to CLS.
13+
window.addEventListener('trigger-cls', () => {
14+
simulateCLS(0.1).then(() => {
15+
window.dispatchEvent(new Event('cls-done'));
16+
});
17+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
</head>
6+
<body>
7+
<div id="content"></div>
8+
<p>
9+
Some content
10+
</p>
11+
</body>
12+
</html>

0 commit comments

Comments
 (0)