Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
45fa810
feat(core): Export a reusable function to add tracing headers (#20076)
JPeer264 Apr 9, 2026
7a59841
Merge pull request #20176 from getsentry/master
github-actions[bot] Apr 9, 2026
86dc30a
feat(core): Add `enableTruncation` option to OpenAI integration (#20167)
andreiborza Apr 10, 2026
b845cfa
feat(deps): bump defu from 6.1.4 to 6.1.6 (#20104)
dependabot[bot] Apr 10, 2026
499f042
chore(size-limit): Bump failing size limit scenario (#20186)
Lms24 Apr 10, 2026
5a7de44
chore(bugbot): Add rules to flag test-flake-provoking patterns (#20192)
Lms24 Apr 10, 2026
d190d26
chore(deps): Bump hono from 4.12.7 to 4.12.12 (#20118)
dependabot[bot] Apr 10, 2026
45d624f
fix(e2e): Add op check to waitForTransaction in React Router e2e test…
Copilot Apr 10, 2026
5a85b6c
enableTruncation for vercel
nicohrubec Apr 10, 2026
01a04ab
fix(deno): Avoid inferring invalid span op from Deno tracer (#20128)
Lms24 Apr 10, 2026
8a1f1bd
chore(deps): Bump axios from 1.13.5 to 1.15.0 in /dev-packages/e2e-te…
dependabot[bot] Apr 10, 2026
b9de893
.
nicohrubec Apr 10, 2026
d176053
.
nicohrubec Apr 10, 2026
bf21665
feat(core): Add `enableTruncation` option to LangChain integration (#…
andreiborza Apr 10, 2026
c9782ae
feat(core): Add `enableTruncation` option to LangGraph integration (#…
andreiborza Apr 10, 2026
468e038
feat(core): Add `enableTruncation` option to Anthropic AI integration…
andreiborza Apr 10, 2026
855d550
feat(core): Add enableTruncation option to Google GenAI integration (…
andreiborza Apr 10, 2026
f83aad7
chore(deps-dev): Bump vite from 7.2.0 to 7.3.2 in /dev-packages/e2e-t…
dependabot[bot] Apr 10, 2026
7cb960b
chore(deps): Bump hono from 4.12.7 to 4.12.12 in /dev-packages/e2e-te…
dependabot[bot] Apr 10, 2026
6b3b09b
chore(deps): Bump axios from 1.13.5 to 1.15.0 (#20180)
dependabot[bot] Apr 10, 2026
a641812
feat(cloudflare): Propagate traceparent to RPC calls - via fetch (#19…
JPeer264 Apr 10, 2026
d8dd265
test(react): Remove duplicated test mock (#20200)
s1gr1d Apr 10, 2026
a3a662d
fix(ci): Prevent command injection in ci-metadata workflow (#19899)
fix-it-felix-sentry[bot] Apr 10, 2026
05ab207
fix(node-integration-tests): Fix flaky kafkajs test race condition (#…
Copilot Apr 10, 2026
f1932c9
ci: Add automatic flaky test detector (#18684)
nicohrubec Apr 10, 2026
2af59be
fix(deno): Handle `reader.closed` rejection from `releaseLock()` in s…
andreiborza Apr 10, 2026
88a4c3e
Add enableTruncation option to Cloudflare, Deno, and Vercel Edge inte…
andreiborza Apr 11, 2026
2b3cfae
feat(core): Automatically disable truncation when span streaming is e…
andreiborza Apr 13, 2026
43ce2ac
feat(core): Automatically disable truncation when span streaming is e…
andreiborza Apr 13, 2026
506d0bc
feat(core): Automatically disable truncation when span streaming is e…
andreiborza Apr 13, 2026
c8c81d0
feat(core): Automatically disable truncation when span streaming is e…
andreiborza Apr 13, 2026
8ace386
feat(core): Automatically disable truncation when span streaming is e…
andreiborza Apr 13, 2026
95b1e95
feat(core): Automatically disable truncation when span streaming is e…
andreiborza Apr 13, 2026
4a5f90b
test: Fix flaky ANR test by increasing blocking duration (#20239)
JPeer264 Apr 13, 2026
4f0c089
Merge pull request #20195 from getsentry/nh/vercel-enable-truncation
mydea Apr 13, 2026
45d7b06
chore(ci): Remove codecov steps from jobs that produce no coverage/JU…
mydea Apr 13, 2026
3b33442
chore(ci): Bump dorny/paths-filter from v3.0.1 to v4.0.1 (#20251)
mydea Apr 13, 2026
6b5e16f
chore(ci): Remove node-overhead GitHub Action (#20246)
mydea Apr 13, 2026
7a9837c
chore: Fix lint warnings (#20250)
mydea Apr 13, 2026
d60b826
fix(core, node): support loading Express options lazily (#20211)
isaacs Apr 10, 2026
68e78ab
feat(node-native): Add support for V8 v14 (Node v25+) (#20125)
timfish Apr 13, 2026
134a66a
feat(node): Include global scope for `eventLoopBlockIntegration` (#20…
timfish Apr 13, 2026
34869c7
feat(cloudflare): Split alarms into multiple traces and link them (#…
JPeer264 Apr 13, 2026
efaf6cf
feat(browser): Add View Hierarchy integration (#14981)
timfish Apr 13, 2026
f6fc6a2
chore: Add PR review reminder workflow (#20175)
Copilot Apr 14, 2026
239eb3b
fix(e2e-tests): Remove flaky navigation breadcrumb assertions from pa…
Copilot Apr 14, 2026
4fccad5
chore(deps-dev): Bump @sveltejs/kit from 2.53.3 to 2.57.1 (#20216)
dependabot[bot] Apr 14, 2026
ac0d888
feat(cloudflare,deno,vercel-edge): Add span streaming support (#20127)
Lms24 Apr 14, 2026
4457493
feat(opentelemetry): Vendor `AsyncLocalStorageContextManager` (#20243)
mydea Apr 14, 2026
61c5602
chore(ci): Remove craft changelog preview (#20271)
chargome Apr 14, 2026
13dc7a1
feat(core): Expose `rewriteSources` top level option (#20142)
chargome Apr 14, 2026
6049804
fix(nextjs): skip custom browser tracing setup for bot user agents (#…
logaretm Apr 14, 2026
f9b07ca
fix(nextjs): preserve directive prologues in turbopack loaders (#20103)
igz0 Apr 14, 2026
47455a0
fix(core): Use `ai.operationId` for Vercel AI V6 operation name mappi…
nicohrubec Apr 14, 2026
2ba05f6
test(cloudflare): Skip flaky durableobject-spans test (#20282)
JPeer264 Apr 14, 2026
5b3eb7e
chore(ci): Skip flaky issue creation for optional tests (#20288)
nicohrubec Apr 14, 2026
7284606
fix(core): Set `conversation_id` only on `gen_ai` spans (#20274)
nicohrubec Apr 14, 2026
3572788
fix(replay): use live click attributes in breadcrumbs (#20262)
logaretm Apr 14, 2026
cf58d90
chore(deps): Bump next from 16.1.7 to 16.2.3 in nextjs-16-cf-workers …
dependabot[bot] Apr 15, 2026
7ded034
ref(nextjs): Refactor `findInjectionIndexAfterDirectives` for better …
s1gr1d Apr 15, 2026
42c4da2
ref(core): Merge embeddings operations constants (#20095)
nicohrubec Apr 15, 2026
608023a
ref(core): Remove unused constants from vercel-ai-attributes.ts (#20096)
nicohrubec Apr 15, 2026
49fb4df
ref(core): Add registry in Vercel ai integration (#20098)
nicohrubec Apr 15, 2026
31fc5d9
test(bun): Add bun integration test folder (#20286)
s1gr1d Apr 15, 2026
73d51f2
test(openai): Use multi-message scenario in no-truncation test (#20194)
nicohrubec Apr 15, 2026
068305b
chore(ci): Replace pr-labels-action with native GitHub expressions (#…
mydea Apr 15, 2026
40a5b93
tests(ai): Fix streaming+truncation integration tests across AI integ…
nicohrubec Apr 15, 2026
9b9d65c
chore(ci): Bump actions/cache to v5 and actions/download-artifact to …
mydea Apr 15, 2026
0007c7b
ci: Extract test names for flaky test issues (#20298)
nicohrubec Apr 15, 2026
8b2a9dc
ci: Remove Docker container for Verdaccio package publishing (#20329)
mydea Apr 15, 2026
684a41f
ref(opentelemetry): Replace `@opentelemetry/resources` with inline `g…
mydea Apr 15, 2026
3332fec
fix(opentelemetry): Use WeakRef for context stored on scope to preven…
JPeer264 Apr 15, 2026
50438f9
feat(browser): Emit web vitals as streamed spans (#19827)
logaretm Apr 16, 2026
5f72df5
feat(cloudflare): Enable RPC trace propagation with enableRpcTracePro…
JPeer264 Apr 16, 2026
bf4e188
meta(changelog): Update changelog for 10.49.0
JPeer264 Apr 16, 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
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .cursor/BUGBOT.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ Do not flag the issues below if they appear in tests.
- Flag usage of `expect.objectContaining` and other relaxed assertions, when a test expects something NOT to be included in a payload but there's no respective assertion.
- Flag usage of conditionals in one test and recommend splitting up the test for the different paths.
- Flag usage of loops testing multiple scenarios in one test and recommend using `(it)|(test).each` instead.
- Flag tests that are likely to introduce flakes. In our case this usually means we wait for some telemetry requests sent from an SDK. Patterns to look out for:
- Only waiting for a request, after an action is performed. Instead, start waiting, perform action, await request promise.
- Race conditions when waiting on multiple requests. Ensure that waiting checks are unique enough and don't depend on a hard order when there's a chance that telemetry can be sent in arbitrary order.
- Timeouts or sleeps in tests. Instead suggest concrete events or other signals to wait on.
- Flag usage of `getFirstEnvelope*`, `getMultipleEnvelope*` or related test helpers. These are NOT reliable anymore. Instead suggest helpers like `waitForTransaction`, `waitForError`, `waitForSpans`, etc.

## Platform-safe code

Expand Down
24 changes: 24 additions & 0 deletions .github/FLAKY_CI_FAILURE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
title: '[Flaky CI]: {{ env.JOB_NAME }} - {{ env.TEST_NAME }}'
labels: Tests
---

### Flakiness Type

Other / Unknown

### Name of Job

{{ env.JOB_NAME }}

### Name of Test

{{ env.TEST_NAME }}

### Link to Test Run

{{ env.RUN_LINK }}

---

_This issue was automatically created._
4 changes: 2 additions & 2 deletions .github/actions/install-playwright/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ runs:
working-directory: ${{ inputs.cwd }}

- name: Restore cached playwright binaries
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
id: playwright-cache
with:
path: |
Expand All @@ -43,7 +43,7 @@ runs:

# Only store cache on develop branch
- name: Store cached playwright binaries
uses: actions/cache/save@v4
uses: actions/cache/save@v5
if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
with:
path: |
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/restore-cache/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ runs:
steps:
- name: Check dependency cache
id: dep-cache
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: ${{ env.CACHED_DEPENDENCY_PATHS }}
key: ${{ inputs.dependency_cache_key }}

- name: Restore build artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: build-output

Expand Down
140 changes: 54 additions & 86 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -152,15 +152,15 @@ jobs:
changed_node:
${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
'@sentry/node') }}
changed_node_overhead_action:
${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
'@sentry-internal/node-overhead-gh-action') }}
changed_deno:
${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
'@sentry/deno') }}
changed_bun:
${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
'@sentry/bun') }}
changed_bun_integration:
${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
'@sentry-internal/bun-integration-tests') }}
changed_browser_integration:
${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
'@sentry-internal/browser-integration-tests') }}
Expand Down Expand Up @@ -208,37 +208,6 @@ jobs:
# Only run comparison against develop if this is a PR
comparison_branch: ${{ (github.event_name == 'pull_request' && github.base_ref) || ''}}

job_node_overhead_check:
name: Node Overhead Check
needs: [job_get_metadata, job_build]
timeout-minutes: 15
runs-on: ubuntu-24.04
if:
(needs.job_build.outputs.changed_node == 'true' && github.event_name == 'pull_request') ||
(needs.job_build.outputs.changed_node_overhead_action == 'true' && github.event_name == 'pull_request') ||
needs.job_get_metadata.outputs.is_base_branch == 'true' || needs.job_get_metadata.outputs.is_release == 'true'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }}
- name: Check node overhead
uses: ./dev-packages/node-overhead-gh-action
env:
DEBUG: '1'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Only run comparison against develop if this is a PR
comparison_branch: ${{ (github.event_name == 'pull_request' && github.base_ref) || ''}}

job_lint:
name: Lint
# Even though the linter only checks source code, not built code, it needs the built code in order check that all
Expand Down Expand Up @@ -605,6 +574,7 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
directory: dev-packages/browser-integration-tests
enable-coverage: false
name:
browser-playwright-${{ matrix.bundle }}-${{ matrix.project }}${{ matrix.shard && format('-{0}',
matrix.shard) || '' }}
Expand Down Expand Up @@ -669,6 +639,7 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
directory: dev-packages/browser-integration-tests
enable-coverage: false
name: browser-loader-${{ matrix.bundle }}

job_check_for_faulty_dts:
Expand Down Expand Up @@ -737,15 +708,6 @@ jobs:
working-directory: dev-packages/node-integration-tests
run: yarn test

- name: Parse and Upload Coverage
if: cancelled() == false
continue-on-error: true
uses: getsentry/codecov-action@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
directory: dev-packages/node-integration-tests
name: node-integration-${{ matrix.node }}${{ matrix.typescript && format('-ts{0}', matrix.typescript) || '' }}

job_node_core_integration_tests:
name:
Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }} Node-Core
Expand Down Expand Up @@ -787,16 +749,6 @@ jobs:
working-directory: dev-packages/node-core-integration-tests
run: yarn test

- name: Parse and Upload Coverage
if: cancelled() == false
continue-on-error: true
uses: getsentry/codecov-action@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
directory: dev-packages/node-core-integration-tests
name:
node-core-integration-${{ matrix.node }}${{ matrix.typescript && format('-ts{0}', matrix.typescript) || ''}}

job_cloudflare_integration_tests:
name: Cloudflare Integration Tests
needs: [job_get_metadata, job_build]
Expand All @@ -820,6 +772,32 @@ jobs:
working-directory: dev-packages/cloudflare-integration-tests
run: yarn test

job_bun_integration_tests:
name: Bun Integration Tests
needs: [job_get_metadata, job_build]
if: needs.job_build.outputs.changed_bun_integration == 'true' || github.event_name != 'pull_request'
runs-on: ubuntu-24.04
timeout-minutes: 15
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Set up Bun
uses: oven-sh/setup-bun@v2
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
dependency_cache_key: ${{ needs.job_build.outputs.dependency_cache_key }}

- name: Run integration tests
working-directory: dev-packages/bun-integration-tests
run: yarn test

job_remix_integration_tests:
name: Remix (Node ${{ matrix.node }}) Tests
needs: [job_get_metadata, job_build]
Expand Down Expand Up @@ -856,15 +834,6 @@ jobs:
cd packages/remix
yarn test:integration:ci

- name: Parse and Upload Coverage
if: cancelled() == false
continue-on-error: true
uses: getsentry/codecov-action@main
with:
directory: packages/remix
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ matrix.node }}

job_e2e_prepare:
name: Prepare E2E tests
# We want to run this if:
Expand Down Expand Up @@ -970,7 +939,7 @@ jobs:
use-installer: true
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Deno
if: matrix.test-application == 'deno'
if: matrix.test-application == 'deno' || matrix.test-application == 'deno-streamed'
uses: denoland/setup-deno@v2.0.3
with:
deno-version: v2.1.5
Expand All @@ -990,20 +959,13 @@ jobs:
if: steps.restore-tarball-cache.outputs.cache-hit != 'true'
run: yarn build:tarball

- name: Get node version
id: versions
run: |
echo "echo node=$(jq -r '.volta.node' dev-packages/e2e-tests/package.json)" >> $GITHUB_OUTPUT

- name: Validate Verdaccio
run: yarn test:validate
working-directory: dev-packages/e2e-tests

- name: Prepare Verdaccio
run: yarn test:prepare
working-directory: dev-packages/e2e-tests
env:
E2E_TEST_PUBLISH_SCRIPT_NODE_VERSION: ${{ steps.versions.outputs.node }}

- name: Copy to temp
run: yarn ci:copy-to-temp ./test-applications/${{ matrix.test-application }} ${{ runner.temp }}/test-application
Expand Down Expand Up @@ -1053,15 +1015,6 @@ jobs:
retention-days: 7
if-no-files-found: ignore

- name: Parse and Upload Coverage
if: cancelled() == false
continue-on-error: true
uses: getsentry/codecov-action@main
with:
directory: dev-packages/e2e-tests
token: ${{ secrets.GITHUB_TOKEN }}
name: e2e-${{ matrix.test-application }}

# - We skip optional tests on release branches
job_optional_e2e_tests:
name: E2E ${{ matrix.label || matrix.test-application }} Test (optional)
Expand Down Expand Up @@ -1116,20 +1069,13 @@ jobs:
if: steps.restore-tarball-cache.outputs.cache-hit != 'true'
run: yarn build:tarball

- name: Get node version
id: versions
run: |
echo "echo node=$(jq -r '.volta.node' dev-packages/e2e-tests/package.json)" >> $GITHUB_OUTPUT

- name: Validate Verdaccio
run: yarn test:validate
working-directory: dev-packages/e2e-tests

- name: Prepare Verdaccio
run: yarn test:prepare
working-directory: dev-packages/e2e-tests
env:
E2E_TEST_PUBLISH_SCRIPT_NODE_VERSION: ${{ steps.versions.outputs.node }}

- name: Copy to temp
run: yarn ci:copy-to-temp ./test-applications/${{ matrix.test-application }} ${{ runner.temp }}/test-application
Expand Down Expand Up @@ -1178,6 +1124,7 @@ jobs:
job_node_integration_tests,
job_node_core_integration_tests,
job_cloudflare_integration_tests,
job_bun_integration_tests,
job_browser_playwright_tests,
job_browser_loader_tests,
job_remix_integration_tests,
Expand All @@ -1192,7 +1139,28 @@ jobs:
# Always run this, even if a dependent job failed
if: always()
runs-on: ubuntu-24.04
permissions:
issues: write
checks: read
steps:
- name: Check out current commit
if: github.ref == 'refs/heads/develop' && contains(needs.*.result, 'failure')
uses: actions/checkout@v6
with:
sparse-checkout: |
.github
scripts

- name: Create issues for failed jobs
if: github.ref == 'refs/heads/develop' && contains(needs.*.result, 'failure')
uses: actions/github-script@v7
with:
script: |
const { default: run } = await import(
`${process.env.GITHUB_WORKSPACE}/scripts/report-ci-failures.mjs`
);
await run({ github, context, core });

- name: Check for failures
if: cancelled() || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: |
Expand Down
7 changes: 0 additions & 7 deletions .github/workflows/canary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,20 +140,13 @@ jobs:
path: ${{ env.CACHED_BUILD_PATHS }}
key: canary-${{ env.HEAD_COMMIT }}

- name: Get node version
id: versions
run: |
echo "echo node=$(jq -r '.volta.node' dev-packages/e2e-tests/package.json)" >> $GITHUB_OUTPUT

- name: Validate Verdaccio
run: yarn test:validate
working-directory: dev-packages/e2e-tests

- name: Prepare Verdaccio
run: yarn test:prepare
working-directory: dev-packages/e2e-tests
env:
E2E_TEST_PUBLISH_SCRIPT_NODE_VERSION: ${{ steps.versions.outputs.node }}

- name: Copy to temp
run: yarn ci:copy-to-temp ./test-applications/${{ matrix.test-application }} ${{ runner.temp }}/test-application
Expand Down
19 changes: 0 additions & 19 deletions .github/workflows/changelog-preview.yml

This file was deleted.

Loading
Loading