Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
0bd937b
chore(ci): Use pull-requests: write for PR review reminder workflow (…
JPeer264 Apr 29, 2026
8fb1dc7
feat(browser): Always emit `http.client` streamed spans (#20420)
chargome Apr 29, 2026
1bc267d
chore(browser): Remove debug config from tests (#20600)
mydea Apr 29, 2026
2aa76b0
test(browser): Fix flaky loader test (#20596)
mydea Apr 29, 2026
fc4b3fa
ref(tests): Rename streamed http.client span test folders (#20602)
chargome Apr 29, 2026
7aa85f6
Merge pull request #20603 from getsentry/master
github-actions[bot] Apr 29, 2026
d58f82a
feat(deps): bump hono from 4.12.12 to 4.12.14 (#20340)
dependabot[bot] Apr 29, 2026
ae8ff88
feat(browser): Migrate spotlight event processor to `ignoreSpans` (#2…
chargome Apr 30, 2026
f1af9e1
test(browser): Fix browserTracingIntegration unit test (#20604)
mydea Apr 30, 2026
866958e
test(cloudflare): Add e2e test for MCPAgent with DurableObject instru…
JPeer264 Apr 30, 2026
fe75826
chore(skill): Improve test skill to include nested playwright tests (…
s1gr1d Apr 30, 2026
9956476
test(e2e): Remove remaining `npmrc` pointing to Verdaccio (#20611)
s1gr1d Apr 30, 2026
47d9427
test(nextjs): Fix flaky node runtime metrics E2E tests (#20624)
nicohrubec May 4, 2026
3535cb5
test(browser): Fix flaky browser integration test for profiles (#20587)
mydea May 4, 2026
f5b30eb
ci(deps): bump actions/checkout from 4 to 6 (#20620)
dependabot[bot] May 4, 2026
9680821
ci(workflow): Skip PR review reminders when already approved (#20629)
JPeer264 May 4, 2026
a15173f
test(cloudflare): Use Node v24 for Cloudflare e2e tests (#20628)
JPeer264 May 4, 2026
267c9ed
fix(browser): Add `ingest_settings` to v2 log envelope payload (#20453)
nicohrubec May 4, 2026
5f77c76
feat(cloudflare): Support rpc trace propagation for WorkerEntrypoint …
JPeer264 May 4, 2026
b63cfa3
ci(deps): bump hono from 4.12.12 to 4.12.14 in /dev-packages/e2e-test…
dependabot[bot] May 4, 2026
a2f70af
ci(deps): bump next from 16.1.7 to 16.2.3 in /dev-packages/e2e-tests/…
dependabot[bot] May 4, 2026
137609c
ci(deps): bump getsentry/craft from 2.24.1 to 2.26.2 (#20621)
dependabot[bot] May 4, 2026
68d9e1f
ci(deps): bump next from 16.1.7 to 16.2.3 in /dev-packages/e2e-tests/…
dependabot[bot] May 4, 2026
9ac7d0b
test(deps): Bump Next.js in E2E test apps to fix Server Components Do…
chargome May 4, 2026
6e940f8
ci(deps): bump mshick/add-pr-comment from e7516d74559b5514092f5b096ed…
dependabot[bot] May 4, 2026
7bdab8f
chore(skills): Use `yarn-update-dependency` (#20635)
chargome May 4, 2026
054252e
feat(deps): bump follow-redirects from 1.15.11 to 1.16.0 (#20267)
dependabot[bot] May 4, 2026
cada139
feat(deps): bump @xmldom/xmldom from 0.8.12 to 0.8.13 (#20457)
dependabot[bot] May 4, 2026
7c35463
ci(deps): bump actions/create-github-app-token from 2 to 3 (#20079)
dependabot[bot] May 4, 2026
23ab0f1
test(react-router): Fix flaky E2E tests (#20630)
mydea May 4, 2026
4034c52
fix(core): Guard against undefined chained in copyProps (#20637)
nicohrubec May 4, 2026
61b0eaa
chore(size-limit): weekly auto-bump (#20618)
javascript-sdk-gitflow[bot] May 4, 2026
d7e1a11
chore(deps): Bump vulnerable testem version (#20634)
chargome May 4, 2026
fe5cad5
fix: Bump fast-xml-parser to fix vulnerability (#20644)
s1gr1d May 4, 2026
05d2eb6
test(cloudflare): Reduce flakiness for cloudflare with sub workers (#…
mydea May 4, 2026
96955b9
fix(deps): Bump rollup-plugin-license to fix lodash vulnerabilities (…
chargome May 4, 2026
ac6721b
fix: Bump vite versions to fix vulnerability (#20646)
s1gr1d May 4, 2026
803d715
fix(opentelemetry): Respect OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUT…
isaacs Apr 25, 2026
5637aa0
chore(deps): Bump @nestjs packages to fix path-to-regexp ReDoS (#20642)
chargome May 4, 2026
9a4b9b2
feat(deno): Add `processSegmentSpan` to Deno context integration (#20…
chargome May 4, 2026
b1b3c59
ci(flaky-tests): Apply bug label for auto-triage (#20657)
chargome May 4, 2026
ca36617
chore(core): Fix typo in comment (#20658)
chargome May 4, 2026
a5f6198
chore(core): Fix typo in comment (#20658)
chargome May 4, 2026
ffa4a37
test(test-utils): Add MemoryProfiler for heap snapshot testing via CD…
JPeer264 May 4, 2026
ac03cfc
feat(node): vendor ioredis, redis instrumentations (#20510)
isaacs Apr 25, 2026
7adeb9d
fix(redis): handle case when socket data is not available
isaacs May 4, 2026
b64a3d7
test(browser): Fix flaky loader test (#20655)
mydea May 5, 2026
6d0ebc4
fix(hono): Do not capture 3xx and 4xx errors and add tests (#20640)
s1gr1d May 5, 2026
b05b0ca
test(node): Fix ANR test for flakiness (#20656)
mydea May 5, 2026
410600e
test(node): Fix flaky node cron test (#20661)
mydea May 5, 2026
0012645
chore(deps): bump @hono/node-server from 1.19.10 to 1.19.13 (#20117)
dependabot[bot] May 5, 2026
92b0e36
test(node): Unflake mongodb test (#20662)
mydea May 5, 2026
8fccce1
fix(core): drain buffers in flush() when there is no transport (#20207)
sbs44 May 5, 2026
2badb12
chore(dev-deps): bump @actions/io from 1.1.3 to 3.0.2 (#20090)
dependabot[bot] May 5, 2026
eecc6f3
docs(hono): Add new docs link and move to BETA release (#20666)
s1gr1d May 5, 2026
a3ae7dd
ci(deps): Bump denoland/setup-deno from 2.0.3 to 2.0.4 (#20080)
dependabot[bot] May 5, 2026
90c92db
chore: Add external contributor to CHANGELOG.md (#20672)
javascript-sdk-gitflow[bot] May 5, 2026
ff23d65
feat(cloudflare): Capture request body via httpServerIntegration (#20…
JPeer264 May 5, 2026
80cb35a
feat(browser): Add `ingest_settings` to v2 metrics envelope payload (…
nicohrubec May 5, 2026
e8f4c42
test(e2e): Add span streaming test app for next 16 (#20648)
chargome May 5, 2026
a08fc2c
test(cloudflare): Add integration tests for scheduled, D1, and workfl…
JPeer264 May 5, 2026
cea58ff
test(browser): Make browser profiling test less flaky (#20664)
mydea May 5, 2026
ad5fd21
chore: Remove `bundle-analyzer-scenarios` dev packages (#20680)
mydea May 5, 2026
ab03569
core: add getDefaultExport method
isaacs Mar 24, 2026
83e6da1
feat(http): portable node:http client instrumentation (#20393)
isaacs Apr 20, 2026
a152b25
test(node): add integration test for http double-instrumentation
isaacs Apr 28, 2026
4ab98ed
core: detect OTel http client wrapping and print warning for the user
isaacs May 2, 2026
d08f452
fix(test): update flaky test for vi.mock hoisting behavior
isaacs May 3, 2026
a6d7afc
test(e2e): Add span streaming test app for Cloudflare Workers (#20681)
nicohrubec May 5, 2026
bb5b66c
test(e2e): Add node-express-streaming E2E test app (#20684)
chargome May 5, 2026
748d8cc
test(e2e): Add span streaming test app for React Router 7 SPA (#20677)
nicohrubec May 5, 2026
8f7f640
feat(nitro): Add unstorage tracing channel instrumentation (#20615)
logaretm May 5, 2026
4cf5c61
feat(cloudflare): Support tracing for queue producer (#20529)
JPeer264 May 5, 2026
c1b4a33
fix(tests): Use stable instrumentations api in rr tests (#20690)
chargome May 6, 2026
f4eaf92
chore(deps): Bump axios from 1.15.0 to 1.15.2 (#20665)
dependabot[bot] May 6, 2026
d46e885
chore(deps): Bump simple-git from 3.33.0 to 3.36.0 (#20696)
dependabot[bot] May 6, 2026
d34e92c
chore(deps): Bump ip-address from 10.1.0 to 10.2.0 (#20695)
dependabot[bot] May 6, 2026
f1f534c
fix(deps): Bump transitive deps for medium security fixes (#20683)
chargome May 6, 2026
12cd3e5
fix(nextjs): Skip build modification when SRI is enabled (#20694)
chargome May 6, 2026
01d0a70
feat(core): Migrate Vercel AI event processor to span streaming (#20608)
nicohrubec May 6, 2026
7efc03f
feat(core): Apply request data to segment spans in span streaming (#2…
chargome May 6, 2026
a8ab715
feat(replay): Reset replay id from DSC on session expiry/refresh (#20…
billyvg May 6, 2026
7e49571
feat(node): use diagnostics_channel for redis >= 5.12.0 (#20573)
logaretm May 6, 2026
e185818
feat(node-core): Add `processSegmentSpan` to node context integration…
chargome May 7, 2026
11a64f6
meta(changelog): Update changelog for 10.52.0
nicohrubec May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 9 additions & 9 deletions .agents/skills/fix-security-vulnerability/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ git pull origin develop
git checkout -b fix/dependabot-alert-<alert-number>
```

Then apply the fix commands from Step 5 of the single-alert workflow (edit `package.json`, `yarn install`, `yarn dedupe-deps:fix`, verify) — but **skip the "Do NOT commit" instruction**, since user approval was already obtained in Step 2b. After applying:
Then apply the fix commands from Step 5 of the single-alert workflow (`npx yarn-update-dependency@latest <package>`, `yarn dedupe-deps:fix`, verify) — but **skip the "Do NOT commit" instruction**, since user approval was already obtained in Step 2b. After applying:

```bash
# 3. Stage and commit the changes
Expand Down Expand Up @@ -263,8 +263,8 @@ Present findings and **wait for user approval** before making changes:
<One of: Safe to bump / Version-specific test - do not bump / Bump parent package>

### Proposed Fix
1. Update <file>: "<package>": "<new-version>"
2. yarn install && yarn dedupe-deps:fix
1. npx yarn-update-dependency@latest <package>
2. yarn dedupe-deps:fix
3. Verify with: yarn why <package>

Proceed?
Expand All @@ -273,15 +273,14 @@ Proceed?
### Step 5: Apply Fix (After Approval)

```bash
# 1. Edit package.json
# 2. Update lockfile
yarn install
# 3. Deduplicate
# 1. Upgrade the package (updates package.json + lockfile)
npx yarn-update-dependency@latest <package>
# 2. Deduplicate
yarn dedupe-deps:fix
# 4. Verify
# 3. Verify
yarn dedupe-deps:check
yarn why <package>
# 5. Show changes
# 4. Show changes
git diff
```

Expand Down Expand Up @@ -325,6 +324,7 @@ gh api --method PATCH repos/getsentry/sentry-javascript/dependabot/alerts/<numbe

| Command | Purpose |
| ------------------------------------------------------------------------------------------------------------ | ---------------------------- |
| `npx yarn-update-dependency@latest <pkg>` | Upgrade package across repo |
| `yarn why <pkg>` | Show dependency tree |
| `yarn dedupe-deps:fix` | Fix duplicates in yarn.lock |
| `yarn dedupe-deps:check` | Verify no duplicate issues |
Expand Down
104 changes: 95 additions & 9 deletions .agents/skills/write-tests/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,17 @@ Follow these steps in order before writing any test code.
1. **Decide the framework.** Testing a function's return value, side effects, or module interactions
→ Vitest (lives under `packages/<name>/test/`). Testing that a real HTTP request to a running app
produces the correct Sentry envelope → Playwright (lives under
`dev-packages/e2e-tests/test-applications/<app>/tests/`).
`dev-packages/e2e-tests/test-applications/<app>/tests/`). Testing Node SDK instrumentation
against real envelope output → node-integration-tests (lives under
`dev-packages/node-integration-tests/suites/`).

**Parameterization differs by framework — pick the right one:**

| Framework | How to parameterize |
| ---------------------- | ------------------------------------------------------------- |
| Vitest | `it.each` / `it.for` (runner-integrated, one test each) |
| Playwright E2E | `.forEach()` outside `test()` (registers separate tests) |
| Node integration tests | Loops **inside** a single `test()` body (one Node.js process) |

2. **Read 2–3 existing test files** in the target `test/` directory. Specifically note:
- Which `vi.mock` style they use (string path or import form)
Expand Down Expand Up @@ -299,6 +309,64 @@ describe('patchRoute', () => {

---

## Writing node-integration-tests

Node integration tests (`dev-packages/node-integration-tests/`) use `createEsmAndCjsTests` to
run a real Node scenario file and assert on captured Sentry envelopes.

### Minimize `test()` calls — each one spawns a separate Node process

**This is the opposite of the Playwright rule.** In Playwright, each `test()` is cheap — use
`.forEach()` to register many tests. In node-integration-tests, each `test()` forks a fresh Node
process with full startup cost. A `describe.each` matrix that looks reasonable in a unit test
context balloons into dozens of cold starts and slows CI by a large factor.

**Rule: loop inside the test body, not around `test()` calls.**

```typescript
// Bad: 2 routes × 5 methods = 10 separate Node processes
createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => {
describe.each(['/sync', '/async'])('when using %s route', route => {
describe.each(['get', 'post', 'put', 'delete', 'patch'])('when using %s method', method => {
test('handles transaction', async () => {
// ...
});
});
});
});
```

```typescript
// Good: one Node process, all combinations asserted in a single test run
createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => {
test('handles transactions for all route/method/path combinations', async () => {
const runner = createRunner();
const requests: Array<{ method: string; url: string }> = [];

for (const route of ['/sync', '/async']) {
for (const method of ['get', 'post', 'put', 'delete', 'patch']) {
const fullPath = `${route}${path}`;
runner.expect({
transaction: { transaction: `${method.toUpperCase()} ${fullPath}` },
});
requests.push({ method, url: fullPath });
}
}

const started = runner.start();
for (const req of requests) {
await started.makeRequest(req.method, req.url);
}
await started.completed();
}, 60_000);
});
```

If a subset of cases has meaningfully different expectations (e.g., error vs. success), split
into two tests — not thirty.

---

## Writing Playwright E2E tests

### When to write E2E tests
Expand Down Expand Up @@ -366,17 +434,35 @@ expect(mechanism?.type).toBe('auto.http.hono.context_error');

### Parameterized E2E tests

For Playwright tests (unlike Vitest), `for...of` loops are the established codebase convention.
Use `for...of` (not `.forEach()`) so Playwright's test registration works correctly:
For Playwright tests (unlike Vitest), use standard JS `.forEach()` as this is recommended by Playwright,
**not** `it.each` or `it.for`, which are Vitest-only APIs. The `.forEach()` runs at discovery time, registering
each case as its own independent test. All cases then run separately at execution time.

```typescript
for (const { name, prefix } of SCENARIOS) {
test.describe(name, () => {
test('captures named middleware span', async ({ baseURL }) => {
// ...
});
[
{ a: 1, b: 1, expected: 2 },
{ a: 1, b: 2, expected: 3 },
{ a: 2, b: 1, expected: 3 },
].forEach(({ a, b, expected }) => {
test(`given ${a} and ${b} as arguments, returns ${expected}`, ({ page }) => {
expect(a + b).toEqual(expected);
});
}
});
```

**Don't put the loop inside a single test.** That collapses all cases into one test body — a
failure in one iteration aborts the rest, and the runner reports a single failure with no
per-case visibility:

```typescript
// Bad: all routes tested in one test — a failure on /users skips /posts entirely
test('captures transactions for all routes', async ({ baseURL }) => {
for (const route of ['/users', '/posts', '/comments']) {
const txn = await waitForTransaction(APP_NAME, e => e.transaction === `GET ${route}`);
await fetch(`${baseURL}${route}`);
expect(txn.contexts?.trace?.op).toBe('http.server');
}
});
```

### Common pitfalls
Expand Down
2 changes: 1 addition & 1 deletion .github/FLAKY_CI_FAILURE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: '[Flaky CI]: {{ env.JOB_NAME }} - {{ env.TEST_NAME }}'
labels: Tests
labels: Tests, Bug
---

### Flakiness Type
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/auto-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
steps:
- name: Get auth token
id: token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
with:
app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}
Expand Down Expand Up @@ -51,7 +51,7 @@ jobs:
node-version-file: 'package.json'

- name: Prepare release
uses: getsentry/craft@013a7b2113c2cac0ff32d5180cfeaefc7c9ce5b6 # v2.24.1
uses: getsentry/craft@3dc647fee3586e57c7c31eb900fdec7cbb44f23f # v2.26.2
if:
github.event.pull_request.merged == true && steps.version-regex.outputs.match != '' &&
steps.get_version.outputs.version != ''
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ jobs:
pull-requests: write
steps:
- name: PR is opened against master
uses: mshick/add-pr-comment@e7516d74559b5514092f5b096ed29a629a1237c6
uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0
if: ${{ github.base_ref == 'master' && !startsWith(github.head_ref, 'prepare-release/') }}
with:
message: |
Expand Down Expand Up @@ -533,7 +533,7 @@ jobs:
with:
node-version-file: 'package.json'
- name: Set up Deno
uses: denoland/setup-deno@v2.0.3
uses: denoland/setup-deno@v2.0.4
with:
deno-version: v2.1.5
- name: Restore caches
Expand Down Expand Up @@ -1057,7 +1057,7 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Deno
if: matrix.test-application == 'deno' || matrix.test-application == 'deno-streamed'
uses: denoland/setup-deno@v2.0.3
uses: denoland/setup-deno@v2.0.4
with:
deno-version: v2.1.5
- name: Restore caches
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bump-size-limits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v2
uses: actions/create-github-app-token@v3
with:
app-id: ${{ vars.GITFLOW_APP_ID }}
private-key: ${{ secrets.GITFLOW_APP_PRIVATE_KEY }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/external-contributors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:

- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v2
uses: actions/create-github-app-token@v3
with:
app-id: ${{ vars.GITFLOW_APP_ID }}
private-key: ${{ secrets.GITFLOW_APP_PRIVATE_KEY }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/gitflow-sync-develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:

- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v2
uses: actions/create-github-app-token@v3
with:
app-id: ${{ vars.GITFLOW_APP_ID }}
private-key: ${{ secrets.GITFLOW_APP_PRIVATE_KEY }}
Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/pr-review-reminder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@ on:
# Saturday/Sunday are never counted as business days.
- cron: '0 10 * * 1-5'

# pulls.* list + listRequestedReviewers → pull-requests: read
# issues timeline + comments + createComment → issues: write
# pulls.* list + listRequestedReviewers + createComment on PRs → pull-requests: write
# repos.listCollaborators (outside) → Metadata read on the token (see GitHub App permission map)
# checkout → contents: read
permissions:
contents: read
issues: write
pull-requests: read
pull-requests: write

concurrency:
group: ${{ github.workflow }}
Expand All @@ -27,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Remind pending reviewers
uses: actions/github-script@v7
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
steps:
- name: Get auth token
id: token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
with:
app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}
Expand All @@ -36,7 +36,7 @@ jobs:
with:
node-version-file: 'package.json'
- name: Prepare release
uses: getsentry/craft@013a7b2113c2cac0ff32d5180cfeaefc7c9ce5b6 # v2.24.1
uses: getsentry/craft@3dc647fee3586e57c7c31eb900fdec7cbb44f23f # v2.26.2
env:
GITHUB_TOKEN: ${{ steps.token.outputs.token }}
with:
Expand Down
18 changes: 11 additions & 7 deletions .oxlintrc.base.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,13 +131,17 @@
}
},
{
"files": [
"**/scenarios/**",
"**/rollup-utils/**",
"**/bundle-analyzer-scenarios/**",
"**/bundle-analyzer-scenarios/*.cjs",
"**/bundle-analyzer-scenarios/*.js"
],
"files": ["**/integrations/tracing/redis/vendored/**/*.ts"],
"rules": {
"typescript/no-explicit-any": "off",
"typescript/no-unsafe-member-access": "off",
"typescript/no-this-alias": "off",
"max-lines": "off",
"no-bitwise": "off"
}
},
{
"files": ["**/scenarios/**", "**/rollup-utils/**"],
"rules": {
"no-console": "off"
}
Expand Down
Loading
Loading