Skip to content

Commit 5c7c409

Browse files
authored
Merge branch 'develop' into rolaabuhasna/js-1527-report-well-known-values-in-gen_aioperationname-attribute
2 parents 02d816c + e0ee7b4 commit 5c7c409

38 files changed

Lines changed: 2142 additions & 1240 deletions

File tree

.claude/skills/e2e/SKILL.md

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
---
2+
name: e2e
3+
description: Run E2E tests for Sentry JavaScript SDK test applications
4+
argument-hint: <test-app-name> [--variant <variant-name>]
5+
---
6+
7+
# E2E Test Runner Skill
8+
9+
This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.
10+
11+
## Input
12+
13+
The user provides a test application name and optionally a variant:
14+
15+
- `e2e-tests/test-applications/nextjs-app-dir` (full path)
16+
- `nextjs-app-dir` (just the app name)
17+
- `nextjs-app-dir --variant nextjs-15` (with variant)
18+
19+
## Workflow
20+
21+
### Step 1: Parse the Test Application Name
22+
23+
Extract the test app name from user input:
24+
25+
- Strip `e2e-tests/test-applications/` prefix if present
26+
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
27+
- Store the clean app name (e.g., `nextjs-app-dir`)
28+
29+
### Step 2: Determine Which Packages Need Rebuilding
30+
31+
If the user recently edited files in `packages/*`, identify which packages were modified:
32+
33+
```bash
34+
# Check which packages have uncommitted changes (including untracked files)
35+
git status --porcelain | grep "^[ MARC?][ MD?] packages/" | cut -d'/' -f2 | sort -u
36+
```
37+
38+
For each modified package, rebuild its tarball:
39+
40+
```bash
41+
cd packages/<package-name>
42+
yarn build && yarn build:tarball
43+
cd ../..
44+
```
45+
46+
**Option C: User Specifies Packages**
47+
48+
If the user says "I changed @sentry/node" or similar, rebuild just that package:
49+
50+
```bash
51+
cd packages/node
52+
yarn build && yarn build:tarball
53+
cd ../..
54+
```
55+
56+
### Step 3: Verify Test Application Exists
57+
58+
Check that the test app exists:
59+
60+
```bash
61+
ls -d dev-packages/e2e-tests/test-applications/<app-name>
62+
```
63+
64+
If it doesn't exist, list available test apps:
65+
66+
```bash
67+
ls dev-packages/e2e-tests/test-applications/
68+
```
69+
70+
Ask the user which one they meant.
71+
72+
### Step 4: Run the E2E Test
73+
74+
Navigate to the e2e-tests directory and run the test:
75+
76+
```bash
77+
cd dev-packages/e2e-tests
78+
yarn test:run <app-name>
79+
```
80+
81+
If a variant was specified:
82+
83+
```bash
84+
cd dev-packages/e2e-tests
85+
yarn test:run <app-name> --variant <variant-name>
86+
```
87+
88+
### Step 5: Report Results
89+
90+
After the test completes, provide a summary:
91+
92+
**If tests passed:**
93+
94+
```
95+
✅ E2E tests passed for <app-name>
96+
97+
All tests completed successfully. Your SDK changes work correctly with this test application.
98+
```
99+
100+
**If tests failed:**
101+
102+
```
103+
❌ E2E tests failed for <app-name>
104+
105+
[Include relevant error output]
106+
```
107+
108+
**If package rebuild was needed:**
109+
110+
```
111+
📦 Rebuilt SDK packages: <list of packages>
112+
🧪 Running E2E tests for <app-name>...
113+
```
114+
115+
## Error Handling
116+
117+
- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
118+
- **Test app not found**: List available apps and ask user to clarify
119+
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
120+
- **Build failures**: Fix build errors before running tests
121+
122+
## Common Test Applications
123+
124+
Here are frequently tested applications:
125+
126+
- `nextjs-app-dir` - Next.js App Router
127+
- `nextjs-15` - Next.js 15.x
128+
- `react-create-hash-router` - React with React Router
129+
- `node-express-esm-loader` - Node.js Express with ESM
130+
- `sveltekit-2` - SvelteKit 2.x
131+
- `remix-2` - Remix 2.x
132+
- `nuxt-3` - Nuxt 3.x
133+
134+
To see all available test apps:
135+
136+
```bash
137+
ls dev-packages/e2e-tests/test-applications/
138+
```
139+
140+
## Example Workflows
141+
142+
### Example 1: After modifying @sentry/node
143+
144+
```bash
145+
# User: "Run e2e tests for node-express-esm-loader"
146+
147+
# Step 1: Detect recent changes to packages/node
148+
# Step 2: Rebuild the modified package
149+
cd packages/node
150+
yarn build && yarn build:tarball
151+
cd ../..
152+
153+
# Step 3: Run the test
154+
cd dev-packages/e2e-tests
155+
yarn test:run node-express-esm-loader
156+
```
157+
158+
### Example 2: First-time test run
159+
160+
```bash
161+
# User: "Run e2e tests for nextjs-app-dir"
162+
163+
# Step 1: Check for existing tarballs
164+
# Step 2: None found, build all packages
165+
yarn build && yarn build:tarball
166+
167+
# Step 3: Run the test
168+
cd dev-packages/e2e-tests
169+
yarn test:run nextjs-app-dir
170+
```
171+
172+
### Example 3: With variant
173+
174+
```bash
175+
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"
176+
177+
# Step 1: Rebuild if needed
178+
# Step 2: Run with variant
179+
cd dev-packages/e2e-tests
180+
yarn test:run nextjs-app-dir --variant nextjs-15
181+
```
182+
183+
## Tips
184+
185+
- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
186+
- **Watch build output**: Build errors must be fixed before testing
187+
188+
## Integration with Development Workflow
189+
190+
This skill integrates with the standard SDK development workflow:
191+
192+
1. Make changes to SDK code in `packages/*`
193+
2. Run `/e2e <app-name>` to test your changes
194+
3. Fix any test failures
195+
196+
The skill automates the tedious parts of:
197+
198+
- Remembering to rebuild tarballs
199+
- Navigating to the correct directory
200+
- Running tests with the right flags

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

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

7+
Work in this release was contributed by @sebws and @harshit078. Thank you for your contributions!
8+
79
- **feat(tanstackstart-react): Auto-instrument global middleware in `sentryTanstackStart` Vite plugin ([#18884](https://github.com/getsentry/sentry-javascript/pull/18844))**
810

911
The `sentryTanstackStart` Vite plugin now automatically instruments `requestMiddleware` and `functionMiddleware` arrays in `createStart()`. This captures performance data without requiring manual wrapping.

CLAUDE.md

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc
145145

146146
#### Running a Single E2E Test
147147

148-
```bash
149-
# Build packages first
150-
yarn build && yarn build:tarball
151-
152-
# Run a specific test app
153-
cd dev-packages/e2e-tests
154-
yarn test:run <app-name>
155-
156-
# Run with a specific variant (e.g., Next.js 15)
157-
yarn test:run <app-name> --variant <variant-name>
158-
```
148+
Run the e2e skill.
159149

160150
#### Common Pitfalls and Debugging
161151

dev-packages/browser-integration-tests/suites/profiling/manualMode/test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ sentryTest('sends profile_chunk envelopes in manual mode', async ({ page, getLoc
4848
const envelopeItemHeader = profileChunkEnvelopeItem[0];
4949
const envelopeItemPayload1 = profileChunkEnvelopeItem[1];
5050

51-
expect(envelopeItemHeader).toHaveProperty('type', 'profile_chunk');
51+
expect(envelopeItemHeader).toEqual({ type: 'profile_chunk', platform: 'javascript' });
5252
expect(envelopeItemPayload1.profile).toBeDefined();
5353

5454
const profilerId1 = envelopeItemPayload1.profiler_id;
@@ -71,7 +71,7 @@ sentryTest('sends profile_chunk envelopes in manual mode', async ({ page, getLoc
7171
const envelopeItemHeader2 = profileChunkEnvelopeItem2[0];
7272
const envelopeItemPayload2 = profileChunkEnvelopeItem2[1];
7373

74-
expect(envelopeItemHeader2).toHaveProperty('type', 'profile_chunk');
74+
expect(envelopeItemHeader2).toEqual({ type: 'profile_chunk', platform: 'javascript' });
7575
expect(envelopeItemPayload2.profile).toBeDefined();
7676

7777
expect(envelopeItemPayload2.profiler_id).toBe(profilerId1); // same profiler id for the whole session

dev-packages/browser-integration-tests/suites/profiling/traceLifecycleMode_multiple-chunks/test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ sentryTest(
5151
const envelopeItemHeader = profileChunkEnvelopeItem[0];
5252
const envelopeItemPayload1 = profileChunkEnvelopeItem[1];
5353

54-
expect(envelopeItemHeader).toHaveProperty('type', 'profile_chunk');
54+
expect(envelopeItemHeader).toEqual({ type: 'profile_chunk', platform: 'javascript' });
5555
expect(envelopeItemPayload1.profile).toBeDefined();
5656

5757
validateProfilePayloadMetadata(envelopeItemPayload1);
@@ -77,7 +77,7 @@ sentryTest(
7777
const envelopeItemHeader2 = profileChunkEnvelopeItem2[0];
7878
const envelopeItemPayload2 = profileChunkEnvelopeItem2[1];
7979

80-
expect(envelopeItemHeader2).toHaveProperty('type', 'profile_chunk');
80+
expect(envelopeItemHeader2).toEqual({ type: 'profile_chunk', platform: 'javascript' });
8181
expect(envelopeItemPayload2.profile).toBeDefined();
8282

8383
validateProfilePayloadMetadata(envelopeItemPayload2);

dev-packages/browser-integration-tests/suites/profiling/traceLifecycleMode_overlapping-spans/test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ sentryTest(
5252
const envelopeItemHeader = profileChunkEnvelopeItem[0];
5353
const envelopeItemPayload = profileChunkEnvelopeItem[1];
5454

55-
expect(envelopeItemHeader).toHaveProperty('type', 'profile_chunk');
55+
expect(envelopeItemHeader).toEqual({ type: 'profile_chunk', platform: 'javascript' });
5656
expect(envelopeItemPayload.profile).toBeDefined();
5757

5858
validateProfilePayloadMetadata(envelopeItemPayload);

dev-packages/cloudflare-integration-tests/suites/tracing/anthropic-ai/test.ts

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
1+
import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';
12
import { expect, it } from 'vitest';
3+
import {
4+
GEN_AI_OPERATION_NAME_ATTRIBUTE,
5+
GEN_AI_REQUEST_MODEL_ATTRIBUTE,
6+
GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE,
7+
GEN_AI_RESPONSE_ID_ATTRIBUTE,
8+
GEN_AI_RESPONSE_MODEL_ATTRIBUTE,
9+
GEN_AI_SYSTEM_ATTRIBUTE,
10+
GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,
11+
GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,
12+
} from '../../../../../packages/core/src/tracing/ai/gen-ai-attributes';
213
import { createRunner } from '../../../runner';
314

415
// These tests are not exhaustive because the instrumentation is
@@ -17,16 +28,16 @@ it('traces a basic message creation request', async ({ signal }) => {
1728
expect.arrayContaining([
1829
expect.objectContaining({
1930
data: expect.objectContaining({
20-
'gen_ai.operation.name': 'chat',
21-
'sentry.op': 'gen_ai.chat',
22-
'sentry.origin': 'auto.ai.anthropic',
23-
'gen_ai.system': 'anthropic',
24-
'gen_ai.request.model': 'claude-3-haiku-20240307',
25-
'gen_ai.request.temperature': 0.7,
26-
'gen_ai.response.model': 'claude-3-haiku-20240307',
27-
'gen_ai.response.id': 'msg_mock123',
28-
'gen_ai.usage.input_tokens': 10,
29-
'gen_ai.usage.output_tokens': 15,
31+
[GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'chat',
32+
[SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat',
33+
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.anthropic',
34+
[GEN_AI_SYSTEM_ATTRIBUTE]: 'anthropic',
35+
[GEN_AI_REQUEST_MODEL_ATTRIBUTE]: 'claude-3-haiku-20240307',
36+
[GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE]: 0.7,
37+
[GEN_AI_RESPONSE_MODEL_ATTRIBUTE]: 'claude-3-haiku-20240307',
38+
[GEN_AI_RESPONSE_ID_ATTRIBUTE]: 'msg_mock123',
39+
[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE]: 10,
40+
[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]: 15,
3041
}),
3142
description: 'chat claude-3-haiku-20240307',
3243
op: 'gen_ai.chat',

0 commit comments

Comments
 (0)