diff --git a/.craft.yml b/.craft.yml
index c5055acf329c..f2ffca132f23 100644
--- a/.craft.yml
+++ b/.craft.yml
@@ -4,14 +4,14 @@ preReleaseCommand: bash scripts/craft-pre-release.sh
targets:
# NPM Targets
## 1. Base Packages, node or browser SDKs depend on
- ## 1.1 Types
- - name: npm
- id: '@sentry/types'
- includeNames: /^sentry-types-\d.*\.tgz$/
- ## 1.2 Core SDKs
+ ## 1.1 Core SDKs
- name: npm
id: '@sentry/core'
includeNames: /^sentry-core-\d.*\.tgz$/
+ ## 1.2 Types
+ - name: npm
+ id: '@sentry/types'
+ includeNames: /^sentry-types-\d.*\.tgz$/
- name: npm
id: '@sentry/node-core'
includeNames: /^sentry-node-core-\d.*\.tgz$/
@@ -153,6 +153,7 @@ targets:
- nodejs18.x
- nodejs20.x
- nodejs22.x
+ - nodejs24.x
license: MIT
# CDN Bundle Target
diff --git a/.cursor/BUGBOT.md b/.cursor/BUGBOT.md
index d70f36ff6c94..891b91d50f90 100644
--- a/.cursor/BUGBOT.md
+++ b/.cursor/BUGBOT.md
@@ -32,7 +32,11 @@ Do not flag the issues below if they appear in tests.
- When calling any `startSpan` API (`startInactiveSpan`, `startSpanManual`, etc), always ensure that the following span attributes are set:
- `SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN` (`'sentry.origin'`) with a proper span origin
+ - a proper origin must only contain [a-z], [A-Z], [0-9], `_` and `.` characters.
+ - flag any non-conforming origin values as invalid and link to the trace origin specification (https://develop.sentry.dev/sdk/telemetry/traces/trace-origin/)
- `SEMANTIC_ATTRIBUTE_SENTRY_OP` (`'sentry.op'`) with a proper span op
+ - Span ops should be lower case only, and use snake_case. The `.` character is used to delimit op parts.
+ - flag any non-conforming origin values as invalid and link to the span op specification (https://develop.sentry.dev/sdk/telemetry/traces/span-operations/)
- When calling `captureException`, always make sure that the `mechanism` is set:
- `handled`: must be set to `true` or `false`
- `type`: must be set to a proper origin (i.e. identify the integration and part in the integration that caught the exception).
diff --git a/.cursor/commands/bump_otel_instrumentations.md b/.cursor/commands/bump_otel_instrumentations.md
new file mode 100644
index 000000000000..ff1e6cfcbcc8
--- /dev/null
+++ b/.cursor/commands/bump_otel_instrumentations.md
@@ -0,0 +1,32 @@
+# Bump OpenTelemetry instrumentations
+
+1. Ensure you're on the `develop` branch with the latest changes:
+ - If you have unsaved changes, stash them with `git stash -u`.
+ - If you're on a different branch than `develop`, check out the develop branch using `git checkout develop`.
+ - Pull the latest updates from the remote repository by running `git pull origin develop`.
+
+2. Create a new branch `bump-otel-{yyyy-mm-dd}`, e.g. `bump-otel-2025-03-03`
+
+3. Create a new empty commit with the commit message `feat(deps): Bump OpenTelemetry instrumentations`
+
+4. Push the branch and create a draft PR, note down the PR number as {PR_NUMBER}
+
+5. Create a changelog entry in `CHANGELOG.md` under
+ `- "You miss 100 percent of the chances you don't take. â Wayne Gretzky" â Michael Scott` with the following format:
+ `- feat(deps): Bump OpenTelemetry instrumentations ([#{PR_NUMBER}](https://github.com/getsentry/sentry-javascript/pull/{PR_NUMBER}))`
+
+6. Find the "Upgrade OpenTelemetry instrumentations" rule in `.cursor/rules/upgrade_opentelemetry_instrumentations` and
+ follow those complete instructions step by step.
+ - Create one commit per package in `packages/**` with the commit message
+ `Bump OpenTelemetry instrumentations for {SDK}`, e.g. `Bump OpenTelemetry instrumentation for @sentry/node`
+
+ - For each OpenTelemetry dependency bump, record an entry in the changelog with the format indented under the main
+ entry created in step 5: `- Bump @opentelemetry/{instrumentation} from {previous_version} to {new_version}`, e.g.
+ `- Bump @opentelemetry/instrumentation from 0.204.0 to 0.207.0` **CRITICAL**: Avoid duplicated entries, e.g. if we
+ bump @opentelemetry/instrumentation in two packages, keep a single changelog entry.
+
+7. Regenerate the yarn lockfile and run `yarn yarn-deduplicate`
+
+8. Run `yarn fix` to fix all formatting issues
+
+9. Finally update the PR description to list all dependency bumps
diff --git a/.cursor/rules/publishing_release.mdc b/.cursor/rules/publishing_release.mdc
index 4d6fecca5d2a..f50a5ea57f93 100644
--- a/.cursor/rules/publishing_release.mdc
+++ b/.cursor/rules/publishing_release.mdc
@@ -12,13 +12,18 @@ Use these guidelines when publishing a new Sentry JavaScript SDK release.
The release process is outlined in [publishing-a-release.md](mdc:docs/publishing-a-release.md).
-1. Make sure you are on the latest version of the `develop` branch. To confirm this, run `git pull origin develop` to get the latest changes from the repo.
+1. Ensure you're on the `develop` branch with the latest changes:
+ - If you have unsaved changes, stash them with `git stash -u`.
+ - If you're on a different branch than `develop`, check out the develop branch using `git checkout develop`.
+ - Pull the latest updates from the remote repository by running `git pull origin develop`.
+
2. Run `yarn changelog` on the `develop` branch and copy the output. You can use `yarn changelog | pbcopy` to copy the output of `yarn changelog` into your clipboard.
3. Decide on a version for the release based on [semver](mdc:https://semver.org). The version should be decided based on what is in included in the release. For example, if the release includes a new feature, we should increment the minor version. If it includes only bug fixes, we should increment the patch version. You can find the latest version in [CHANGELOG.md](mdc:CHANGELOG.md) at the very top.
4. Create a branch `prepare-release/VERSION`, eg. `prepare-release/8.1.0`, off `develop`.
-5. Update [CHANGELOG.md](mdc:CHANGELOG.md) to add an entry for the next release number and a list of changes since the last release from the output of `yarn changelog`. See the `Updating the Changelog` section in [publishing-a-release.md](mdc:docs/publishing-a-release.md) for more details. If you remove changelog entries because they are not applicable, please let the user know.
+5. Update [CHANGELOG.md](mdc:CHANGELOG.md) to add an entry for the next release number and a list of changes since the last release from the output of `yarn changelog`. See the `Updating the Changelog` section in [publishing-a-release.md](mdc:docs/publishing-a-release.md) for more details. Do not remove any changelog entries.
6. Commit the changes to [CHANGELOG.md](mdc:CHANGELOG.md) with `meta(changelog): Update changelog for VERSION` where `VERSION` is the version of the release, e.g. `meta(changelog): Update changelog for 8.1.0`
7. Push the `prepare-release/VERSION` branch to origin and remind the user that the release PR needs to be opened from the `master` branch.
+8. In case you were working on a different branch, you can checkout back to the branch you were working on and continue your work by unstashing the changes you stashed earlier with the command `git stash pop` (only if you stashed changes).
## Key Commands
diff --git a/.cursor/rules/upgrade_opentelemetry_instrumentations.mdc b/.cursor/rules/upgrade_opentelemetry_instrumentations.mdc
new file mode 100644
index 000000000000..b650ae1f5041
--- /dev/null
+++ b/.cursor/rules/upgrade_opentelemetry_instrumentations.mdc
@@ -0,0 +1,33 @@
+---
+description: Use this rule if you are looking to grade OpenTelemetry instrumentations for the Sentry JavaScript SDKs
+globs: *
+alwaysApply: false
+---
+
+# Upgrading OpenTelemetry instrumentations
+
+1. For every package in packages/\*\*:
+ - When upgrading dependencies for OpenTelemetry instrumentations we need to first upgrade `@opentelemetry/instrumentation` to the latest version.
+ **CRITICAL**: `@opentelemetry/instrumentation` MUST NOT include any breaking changes.
+ Read through the changelog of `@opentelemetry/instrumentation` to figure out if breaking changes are included and fail with the reason if it does include breaking changes.
+ You can find the changelog at `https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/CHANGELOG.md`
+
+ - After successfully upgrading `@opentelemetry/instrumentation` upgrade all `@opentelemetry/instrumentation-{instrumentation}` packages, e.g. `@opentelemetry/instrumentation-pg`
+ **CRITICAL**: `@opentelemetry/instrumentation-{instrumentation}` MUST NOT include any breaking changes.
+ Read through the changelog of `@opentelemetry/instrumentation-{instrumentation}` to figure out if breaking changes are included and fail with the reason if it does including breaking changes.
+ You can find the changelogs at `https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/packages/instrumentation-{instrumentation}/CHANGELOG.md`.
+
+ - Finally, upgrade third party instrumentations to their latest versions, these are currently:
+ - @prisma/instrumentation
+
+ **CRITICAL**: Upgrades to third party instrumentations MUST NOT include breaking changes.
+ Read through the changelog of each third party instrumentation to figure out if breaking changes are included and fail with the reason if it does include breaking changes.
+
+2. For packages and apps in dev-packages/\*\*:
+ - If an app depends on `@opentelemetry/instrumentation` >= 0.200.x upgrade it to the latest version.
+ **CRITICAL**: `@opentelemetry/instrumentation` MUST NOT include any breaking changes.
+
+ - If an app depends on `@opentelemetry/instrumentation-http` >= 0.200.x upgrade it to the latest version.
+ **CRITICAL**: `@opentelemetry/instrumentation-http` MUST NOT include any breaking changes.
+
+3. Generate a new yarn lock file.
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 8acac6fd2709..c09984de5c3b 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -136,13 +136,14 @@ body:
id: additional
attributes:
label: Additional Context
- description:
- Add any other context here. Please keep the pre-filled text, which helps us manage issue prioritization.
- value: |-
- Tip: React with đ to help prioritize this issue. Please use comments to provide useful context, avoiding `+1` or `me too`, to help us triage it.
+ description: Add any other context here.
validations:
required: false
- - type: markdown
+ - type: dropdown
attributes:
- value: |-
- ## Thanks đ
+ label: 'Priority'
+ description: Please keep the pre-filled option, which helps us manage issue prioritization.
+ default: 0
+ options:
+ - React with đ to help prioritize this issue. Please use comments to provide useful context, avoiding `+1`
+ or `me too`, to help us triage it.
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
index 2859c10d2dc0..3809730ade4c 100644
--- a/.github/ISSUE_TEMPLATE/feature.yml
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -27,14 +27,14 @@ body:
id: additional
attributes:
label: Additional Context
- description:
- Add any other context here. Please keep the pre-filled text, which helps us manage feature prioritization.
- value: |-
- Tip: React with đ to help prioritize this improvement. Please use comments to provide useful context, avoiding `+1` or `me too`, to help us triage it.
+ description: Add any other context here.
validations:
required: false
- - type: markdown
+ - type: dropdown
attributes:
- value: |-
- ## Thanks đ
- Check our [triage docs](https://open.sentry.io/triage/) for what to expect next.
+ label: 'Priority'
+ description: Please keep the pre-filled option, which helps us manage issue prioritization.
+ default: 0
+ options:
+ - React with đ to help prioritize this issue. Please use comments to provide useful context, avoiding `+1`
+ or `me too`, to help us triage it.
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 1df50881932d..66d551fabef8 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -14,9 +14,15 @@ updates:
interval: 'weekly'
allow:
- dependency-name: '@sentry/*'
- - dependency-name: '@opentelemetry/*'
- - dependency-name: '@prisma/instrumentation'
- dependency-name: '@playwright/test'
+ - dependency-name: '@opentelemetry/*'
+ ignore:
+ - dependency-name: '@opentelemetry/instrumentation'
+ - dependency-name: '@opentelemetry/instrumentation-*'
+ groups:
+ opentelemetry:
+ patterns:
+ - '@opentelemetry/*'
versioning-strategy: increase
commit-message:
prefix: feat
diff --git a/.github/dependency-review-config.yml b/.github/dependency-review-config.yml
index 1a8f76e430d1..8608d2381ace 100644
--- a/.github/dependency-review-config.yml
+++ b/.github/dependency-review-config.yml
@@ -9,3 +9,5 @@ allow-ghsas:
- GHSA-v784-fjjh-f8r4
# Next.js Cache poisoning - We require a vulnerable version for E2E testing
- GHSA-gp8f-8m3g-qvj9
+ # devalue vulnerability - this is just used by nuxt & astro as transitive dependency
+ - GHSA-vj54-72f3-p5jv
diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml
index 0507fe879c27..e1f22cff2f64 100644
--- a/.github/workflows/auto-release.yml
+++ b/.github/workflows/auto-release.yml
@@ -15,12 +15,12 @@ jobs:
steps:
- name: Get auth token
id: token
- uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1
+ uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0
with:
app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
token: ${{ steps.token.outputs.token }}
fetch-depth: 0
@@ -42,7 +42,7 @@ jobs:
echo "version=$version" >> $GITHUB_OUTPUT
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 46d6e7d4fac9..b351bdc647a0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -71,7 +71,7 @@ jobs:
pull-requests: read
steps:
- name: Check out current commit
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
# We need to check out not only the fake merge commit between the PR and the base branch which GH creates, but
@@ -131,18 +131,18 @@ jobs:
(needs.job_get_metadata.outputs.is_gitflow_sync == 'false' && needs.job_get_metadata.outputs.has_gitflow_label == 'false')
steps:
- name: Check out base commit (${{ github.event.pull_request.base.sha }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
if: github.event_name == 'pull_request'
with:
ref: ${{ github.event.pull_request.base.sha }}
- name: 'Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})'
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
@@ -181,7 +181,7 @@ jobs:
run: yarn build
- name: Upload build artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: build-output
path: ${{ env.CACHED_BUILD_PATHS }}
@@ -238,11 +238,11 @@ jobs:
needs.job_get_metadata.outputs.is_release == 'true'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -267,11 +267,11 @@ jobs:
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@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -296,11 +296,11 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -325,12 +325,12 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
@@ -348,11 +348,11 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -370,11 +370,11 @@ jobs:
if: needs.job_get_metadata.outputs.is_release == 'true'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -386,7 +386,7 @@ jobs:
run: yarn build:tarball
- name: Archive artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: ${{ github.sha }}
retention-days: 90
@@ -405,17 +405,17 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out base commit (${{ github.event.pull_request.base.sha }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
if: github.event_name == 'pull_request'
with:
ref: ${{ github.event.pull_request.base.sha }}
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -452,11 +452,11 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Set up Bun
@@ -477,11 +477,11 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Set up Deno
@@ -509,16 +509,16 @@ jobs:
node: [18, 20, 22, 24]
steps:
- name: Check out base commit (${{ github.event.pull_request.base.sha }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
if: github.event_name == 'pull_request'
with:
ref: ${{ github.event.pull_request.base.sha }}
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
- name: Restore caches
@@ -603,11 +603,11 @@ jobs:
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -629,7 +629,7 @@ jobs:
format(' --shard={0}/{1}', matrix.shard, matrix.shards) || '' }}
- name: Upload Playwright Traces
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: failure()
with:
name:
@@ -667,11 +667,11 @@ jobs:
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -692,7 +692,7 @@ jobs:
yarn test:loader
- name: Upload Playwright Traces
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: failure()
with:
name: playwright-traces-job_browser_loader_tests-${{ matrix.bundle}}
@@ -715,11 +715,11 @@ jobs:
timeout-minutes: 5
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -753,11 +753,11 @@ jobs:
typescript: '3.8'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
- name: Restore caches
@@ -789,11 +789,11 @@ jobs:
timeout-minutes: 15
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -810,18 +810,18 @@ jobs:
needs: [job_get_metadata, job_build]
if: needs.job_build.outputs.changed_remix == 'true' || github.event_name != 'pull_request'
runs-on: ubuntu-24.04
- timeout-minutes: 10
+ timeout-minutes: 15
strategy:
fail-fast: false
matrix:
node: [18, 20, 22, 24]
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
- name: Restore caches
@@ -864,16 +864,16 @@ jobs:
matrix-optional: ${{ steps.matrix-optional.outputs.matrix }}
steps:
- name: Check out base commit (${{ github.event.pull_request.base.sha }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
if: github.event_name == 'pull_request'
with:
ref: ${{ github.event.pull_request.base.sha }}
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Restore caches
@@ -934,14 +934,14 @@ jobs:
matrix: ${{ fromJson(needs.job_e2e_prepare.outputs.matrix) }}
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- uses: pnpm/action-setup@v4
with:
version: 9.15.9
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json'
- name: Set up Bun
@@ -992,6 +992,8 @@ jobs:
working-directory: ${{ runner.temp }}/test-application
timeout-minutes: 7
run: ${{ matrix.build-command || 'pnpm test:build' }}
+ env:
+ SENTRY_E2E_WORKSPACE_ROOT: ${{ github.workspace }}
- name: Install Playwright
uses: ./.github/actions/install-playwright
@@ -1003,9 +1005,11 @@ jobs:
working-directory: ${{ runner.temp }}/test-application
timeout-minutes: 10
run: ${{ matrix.assert-command || 'pnpm test:assert' }}
+ env:
+ SENTRY_E2E_WORKSPACE_ROOT: ${{ github.workspace }}
- name: Upload Playwright Traces
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: failure()
with:
name: playwright-traces-job_e2e_playwright_tests-${{ matrix.test-application}}
@@ -1019,7 +1023,7 @@ jobs:
node ./scripts/normalize-e2e-test-dump-transaction-events.js
- name: Upload E2E Test Event Dumps
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: failure()
with:
name: E2E Test Dump (${{ matrix.label || matrix.test-application }})
@@ -1064,14 +1068,14 @@ jobs:
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- uses: pnpm/action-setup@v4
with:
version: 9.15.9
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json'
- name: Restore caches
@@ -1131,7 +1135,7 @@ jobs:
node ./scripts/normalize-e2e-test-dump-transaction-events.js
- name: Upload E2E Test Event Dumps
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: failure()
with:
name: E2E Test Dump (${{ matrix.label || matrix.test-application }})
diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml
index 29814ffea09c..1e71125ddad2 100644
--- a/.github/workflows/canary.yml
+++ b/.github/workflows/canary.yml
@@ -31,11 +31,11 @@ jobs:
timeout-minutes: 30
steps:
- name: Check out current commit
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Check canary cache
@@ -117,7 +117,7 @@ jobs:
steps:
- name: Check out current commit
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
- uses: pnpm/action-setup@v4
@@ -125,7 +125,7 @@ jobs:
version: 9.15.9
- name: Set up Node
if: matrix.test-application != 'angular-20'
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json'
diff --git a/.github/workflows/cleanup-pr-caches.yml b/.github/workflows/cleanup-pr-caches.yml
index 2c9bba513605..eb65d9a642c1 100644
--- a/.github/workflows/cleanup-pr-caches.yml
+++ b/.github/workflows/cleanup-pr-caches.yml
@@ -14,7 +14,7 @@ jobs:
contents: read
steps:
- name: Check out code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Cleanup
run: |
diff --git a/.github/workflows/clear-cache.yml b/.github/workflows/clear-cache.yml
index 97aeb53365e7..3c76486cdbe2 100644
--- a/.github/workflows/clear-cache.yml
+++ b/.github/workflows/clear-cache.yml
@@ -23,10 +23,10 @@ jobs:
name: Delete all caches
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 8c042c5aa44f..00e6203b6b55 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -46,11 +46,11 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v3
+ uses: github/codeql-action/init@v4
with:
config-file: ./.github/codeql/codeql-config.yml
queries: security-extended
@@ -63,7 +63,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@v3
+ uses: github/codeql-action/autobuild@v4
# âšī¸ Command-line programs to run using the OS shell.
# đ https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
@@ -77,4 +77,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
+ uses: github/codeql-action/analyze@v4
diff --git a/.github/workflows/create-issue-for-unreferenced-prs.yml b/.github/workflows/create-issue-for-unreferenced-prs.yml
new file mode 100644
index 000000000000..a47df32738d7
--- /dev/null
+++ b/.github/workflows/create-issue-for-unreferenced-prs.yml
@@ -0,0 +1,129 @@
+# This GitHub Action workflow checks if a new or updated pull request
+# references a GitHub issue in its title or body. If no reference is found,
+# it automatically creates a new issue. This helps ensure all work is
+# tracked, especially when syncing with tools like Linear.
+
+name: Create issue for unreferenced PR
+
+# This action triggers on pull request events
+on:
+ pull_request:
+ types: [opened, edited, reopened, synchronize, ready_for_review]
+
+# Cancel in progress workflows on pull_requests.
+# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ check_for_issue_reference:
+ runs-on: ubuntu-latest
+ if: |
+ !contains(github.event.pull_request.labels.*.name, 'Dev: Gitflow')
+ && !startsWith(github.event.pull_request.head.ref, 'external-contributor/')
+ && !startsWith(github.event.pull_request.head.ref, 'prepare-release/')
+ && !startsWith(github.event.pull_request.head.ref, 'dependabot/')
+ steps:
+ - name: Check PR Body and Title for Issue Reference
+ uses: actions/github-script@v8
+ with:
+ script: |
+ const pr = context.payload.pull_request;
+ if (!pr) {
+ core.setFailed('Could not get PR from context.');
+ return;
+ }
+
+ // Don't create an issue for draft PRs
+ if (pr.draft) {
+ console.log(`PR #${pr.number} is a draft, skipping issue creation.`);
+ return;
+ }
+
+ // Bail if this edit was made by the GitHub Actions bot (this workflow)
+ // This prevents infinite loops when we update the PR body with the new issue reference
+ // We check login specifically to not skip edits from other legitimate bots
+ if (context.payload.sender && context.payload.sender.login === 'github-actions[bot]') {
+ console.log(`PR #${pr.number} was edited by github-actions[bot] (this workflow), skipping.`);
+ return;
+ }
+
+ // Check if the PR is already approved
+ const reviewsResponse = await github.rest.pulls.listReviews({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: pr.number,
+ });
+
+ if (reviewsResponse.data.some(review => review.state === 'APPROVED')) {
+ console.log(`PR #${pr.number} is already approved, skipping issue creation.`);
+ return;
+ }
+
+ const prBody = pr.body || '';
+ const prTitle = pr.title || '';
+ const prAuthor = pr.user.login;
+ const prUrl = pr.html_url;
+ const prNumber = pr.number;
+
+ // Regex for GitHub issue references (e.g., #123, fixes #456)
+ // https://regex101.com/r/eDiGrQ/1
+ const issueRegexGitHub = /(?:(?:close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved):?\s*)?(#\d+|https:\/\/github\.com\/getsentry\/[\w-]+\/issues\/\d+)/i;
+
+ // Regex for Linear issue references (e.g., ENG-123, resolves ENG-456)
+ const issueRegexLinear = /(?:(?:close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved):?\s*)?[A-Z]+-\d+/i;
+
+ const contentToCheck = `${prTitle} ${prBody}`;
+ const hasIssueReference = issueRegexGitHub.test(contentToCheck) || issueRegexLinear.test(contentToCheck);
+
+ if (hasIssueReference) {
+ console.log(`PR #${prNumber} contains a valid issue reference.`);
+ return;
+ }
+
+ // Check if there's already an issue created by this automation for this PR
+ // Search for issues that mention this PR and were created by github-actions bot
+ const existingIssuesResponse = await github.rest.search.issuesAndPullRequests({
+ q: `repo:${context.repo.owner}/${context.repo.repo} is:issue is:open author:app/github-actions "${prUrl}" in:title in:body`,
+ });
+
+ if (existingIssuesResponse.data.total_count > 0) {
+ const existingIssue = existingIssuesResponse.data.items[0];
+ console.log(`An issue (#${existingIssue.number}) already exists for PR #${prNumber}, skipping creation.`);
+ return;
+ }
+
+ core.warning(`PR #${prNumber} does not have an issue reference. Creating a new issue so it can be tracked in Linear.`);
+
+ // Construct the title and body for the new issue
+ const issueTitle = `${prTitle}`;
+ const issueBody = `> [!NOTE]
+ > The pull request "[${prTitle}](${prUrl})" was created by @${prAuthor} but did not reference an issue. Therefore this issue was created for better visibility in external tools like Linear.
+
+ ${prBody}
+ `;
+
+ // Create the issue using the GitHub API
+ const newIssue = await github.rest.issues.create({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ title: issueTitle,
+ body: issueBody,
+ assignees: [prAuthor]
+ });
+
+ const issueID = newIssue.data.number;
+ console.log(`Created issue #${issueID}.`);
+
+ // Update the PR body to reference the new issue
+ const updatedPrBody = `${prBody}\n\nCloses #${issueID} (added automatically)`;
+
+ await github.rest.pulls.update({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: prNumber,
+ body: updatedPrBody
+ });
+
+ console.log(`Updated PR #${prNumber} to reference newly created issue #${issueID}.`);
diff --git a/.github/workflows/external-contributors.yml b/.github/workflows/external-contributors.yml
index 1735a89a5446..1566299d67e9 100644
--- a/.github/workflows/external-contributors.yml
+++ b/.github/workflows/external-contributors.yml
@@ -20,9 +20,9 @@ jobs:
&& github.event.pull_request.author_association != 'OWNER'
&& endsWith(github.event.pull_request.user.login, '[bot]') == false
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
@@ -36,7 +36,7 @@ jobs:
author_association: ${{ github.event.pull_request.author_association }}
- name: Create PR with changes
- uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e
+ uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412
with:
# This token is scoped to Daniel Griesser
# If we used the default GITHUB_TOKEN, the resulting PR would not trigger CI :(
diff --git a/.github/workflows/flaky-test-detector.yml b/.github/workflows/flaky-test-detector.yml
index 5103f1f43a2d..bb3169ecb410 100644
--- a/.github/workflows/flaky-test-detector.yml
+++ b/.github/workflows/flaky-test-detector.yml
@@ -30,9 +30,9 @@ jobs:
if: ${{ github.base_ref != 'master' && github.ref != 'refs/heads/master' }}
steps:
- name: Check out current branch
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
cache: 'yarn'
@@ -71,7 +71,7 @@ jobs:
TEST_RUN_COUNT: 'AUTO'
- name: Upload Playwright Traces
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: failure() && steps.test.outcome == 'failure'
with:
name: playwright-test-results
diff --git a/.github/workflows/gitflow-merge-conflict.yml b/.github/workflows/gitflow-merge-conflict.yml
new file mode 100644
index 000000000000..8b31d07afd6a
--- /dev/null
+++ b/.github/workflows/gitflow-merge-conflict.yml
@@ -0,0 +1,112 @@
+name: 'Gitflow: Merge Conflict Issue'
+
+on:
+ pull_request:
+ types: [opened]
+ branches:
+ - develop
+
+jobs:
+ check-merge-conflicts:
+ name: Detect merge conflicts in gitflow PRs
+ runs-on: ubuntu-24.04
+ if: |
+ ${{ contains(github.event.pull_request.labels.*.name, 'Dev: Gitflow') }}
+ permissions:
+ issues: write
+ steps:
+ - name: Check for merge conflicts with retry
+ uses: actions/github-script@v8
+ with:
+ script: |
+ const initialDelay = 60_000; // Wait 1 minute before first check to let CI start
+ const retryInterval = 30_000;
+ const maxRetries = 10; // (30 seconds * 10 retries) = 5 minutes
+
+ async function isMergeable() {
+ const { data: pr } = await github.rest.pulls.get({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: context.payload.pull_request.number
+ });
+
+ return pr.mergeable;
+ }
+
+ async function sleep(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+ }
+
+ let attempt = 0;
+ let mergeable = null;
+
+ // Wait before first check to give CI time to start
+ console.log(`Waiting ${initialDelay/1000} seconds before first check to let CI start...`);
+ await sleep(initialDelay);
+
+ while (attempt < maxRetries) {
+ attempt++;
+ console.log(`Attempt ${attempt}/${maxRetries}: Checking if PR is mergeable...`);
+
+ mergeable = await isMergeable();
+ console.log(`Mergeable: ${mergeable}`);
+
+ // If mergeable is not null, GitHub has finished computing merge state
+ if (mergeable !== null) {
+ break;
+ }
+
+ if (attempt < maxRetries) {
+ console.log(`Waiting ${retryInterval/1000} seconds before retry...`);
+ await sleep(retryInterval);
+ }
+ }
+
+ // Check if we have merge conflicts
+ if (mergeable === false) {
+ const issueTitle = '[Gitflow] Merge Conflict';
+
+ // Check for existing open issues with the same title
+ const { data: existingIssues } = await github.rest.issues.listForRepo({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ state: 'open',
+ labels: 'Dev: Gitflow'
+ });
+
+ const existingOpenIssue = existingIssues.find(issue =>
+ issue.title === issueTitle && !issue.pull_request
+ );
+
+ if (!existingOpenIssue) {
+ const issueBody = [
+ '## Gitflow Merge Conflict Detected',
+ '',
+ `The automated gitflow PR #${context.payload.pull_request.number} has merge conflicts and cannot be merged automatically.`,
+ '',
+ '### How to resolve',
+ '',
+ `Follow the steps documented in [docs/gitflow.md](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/develop/docs/gitflow.md#what-to-do-if-there-is-a-merge-conflict):`,
+ '',
+ `1. Close the automated PR #${context.payload.pull_request.number}`,
+ '2. Create a new branch on top of `master` (e.g., `manual-develop-sync`)',
+ '3. Merge `develop` into this branch with a **merge commit** (fix any merge conflicts)',
+ '4. Create a PR against `develop` from your branch',
+ '5. Merge that PR with a **merge commit**'
+ ].join('\n');
+
+ await github.rest.issues.create({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ title: issueTitle,
+ body: issueBody,
+ labels: ['Dev: Gitflow']
+ });
+
+ console.log('Created new issue for merge conflict');
+ }
+ } else if (mergeable === null) {
+ console.log('Could not determine mergeable state after maximum retries');
+ } else {
+ console.log('No merge conflicts detected - PR can be merged');
+ }
diff --git a/.github/workflows/gitflow-sync-develop.yml b/.github/workflows/gitflow-sync-develop.yml
index 96c69d952264..ff649d6ee204 100644
--- a/.github/workflows/gitflow-sync-develop.yml
+++ b/.github/workflows/gitflow-sync-develop.yml
@@ -23,7 +23,7 @@ jobs:
contents: write
steps:
- name: git checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
# https://github.com/marketplace/actions/github-pull-request-action
- name: Create Pull Request
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 05c465036ce4..4a0278ae85a4 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,16 +19,16 @@ jobs:
steps:
- name: Get auth token
id: token
- uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1
+ uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0
with:
app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
token: ${{ steps.token.outputs.token }}
fetch-depth: 0
- name: Set up Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version-file: 'package.json'
- name: Prepare release
diff --git a/.size-limit.js b/.size-limit.js
index 7106f2e29b03..6e6ee0f68303 100644
--- a/.size-limit.js
+++ b/.size-limit.js
@@ -5,14 +5,14 @@ module.exports = [
// Browser SDK (ESM)
{
name: '@sentry/browser',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init'),
gzip: true,
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
@@ -35,28 +35,28 @@ module.exports = [
},
{
name: '@sentry/browser (incl. Tracing)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
- limit: '41 KB',
+ limit: '42 KB',
},
{
name: '@sentry/browser (incl. Tracing, Profiling)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'browserTracingIntegration', 'browserProfilingIntegration'),
gzip: true,
limit: '48 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '80 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75 KB',
@@ -79,35 +79,35 @@ module.exports = [
},
{
name: '@sentry/browser (incl. Tracing, Replay with Canvas)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '85 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'feedbackIntegration'),
gzip: true,
limit: '97 KB',
},
{
name: '@sentry/browser (incl. Feedback)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'feedbackIntegration'),
gzip: true,
limit: '42 KB',
},
{
name: '@sentry/browser (incl. sendFeedback)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
- path: 'packages/browser/build/npm/esm/index.js',
+ path: 'packages/browser/build/npm/esm/prod/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '35 KB',
@@ -127,7 +127,7 @@ module.exports = [
import: createImport('init', 'ErrorBoundary', 'reactRouterV6BrowserTracingIntegration'),
ignore: ['react/jsx-runtime'],
gzip: true,
- limit: '43 KB',
+ limit: '44 KB',
},
// Vue SDK (ESM)
{
@@ -142,7 +142,7 @@ module.exports = [
path: 'packages/vue/build/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
- limit: '43 KB',
+ limit: '44 KB',
},
// Svelte SDK (ESM)
{
@@ -157,13 +157,13 @@ module.exports = [
name: 'CDN Bundle',
path: createCDNPath('bundle.min.js'),
gzip: true,
- limit: '27 KB',
+ limit: '27.5 KB',
},
{
name: 'CDN Bundle (incl. Tracing)',
path: createCDNPath('bundle.tracing.min.js'),
gzip: true,
- limit: '42 KB',
+ limit: '42.5 KB',
},
{
name: 'CDN Bundle (incl. Tracing, Replay)',
@@ -183,21 +183,21 @@ module.exports = [
path: createCDNPath('bundle.min.js'),
gzip: false,
brotli: false,
- limit: '80 KB',
+ limit: '82 KB',
},
{
name: 'CDN Bundle (incl. Tracing) - uncompressed',
path: createCDNPath('bundle.tracing.min.js'),
gzip: false,
brotli: false,
- limit: '124 KB',
+ limit: '127 KB',
},
{
name: 'CDN Bundle (incl. Tracing, Replay) - uncompressed',
path: createCDNPath('bundle.tracing.replay.min.js'),
gzip: false,
brotli: false,
- limit: '240 KB',
+ limit: '245 KB',
},
{
name: 'CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed',
@@ -231,7 +231,7 @@ module.exports = [
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
- limit: '51 KB',
+ limit: '52 KB',
},
// Node SDK (ESM)
{
@@ -240,7 +240,7 @@ module.exports = [
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
- limit: '158 KB',
+ limit: '160 KB',
},
{
name: '@sentry/node - without tracing',
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d91a753f6544..d967a7c39408 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,407 @@
- "You miss 100 percent of the chances you don't take. â Wayne Gretzky" â Michael Scott
+## 10.30.0
+
+- feat(nextjs): Deprecate Webpack top-level options ([#18343](https://github.com/getsentry/sentry-javascript/pull/18343))
+- feat(node): Capture scope when event loop blocked ([#18040](https://github.com/getsentry/sentry-javascript/pull/18040))
+- fix(aws-serverless): Remove hyphens from AWS-lambda origins ([#18353](https://github.com/getsentry/sentry-javascript/pull/18353))
+- fix(core): Parse method from Request object in fetch ([#18453](https://github.com/getsentry/sentry-javascript/pull/18453))
+- fix(react): Add transaction name guards for rapid lazy-route navigations ([#18346](https://github.com/getsentry/sentry-javascript/pull/18346))
+
+ Internal Changes
+
+- chore(ci): Fix double issue creation for unreferenced PRs ([#18442](https://github.com/getsentry/sentry-javascript/pull/18442))
+- chore(deps): bump next from 15.5.4 to 15.5.7 in /dev-packages/e2e-tests/test-applications/nextjs-15 ([#18411](https://github.com/getsentry/sentry-javascript/pull/18411))
+- chore(deps): bump next from 15.5.4 to 15.5.7 in /dev-packages/e2e-tests/test-applications/nextjs-15-intl ([#18400](https://github.com/getsentry/sentry-javascript/pull/18400))
+- chore(deps): bump next from 16.0.0 to 16.0.7 in /dev-packages/e2e-tests/test-applications/nextjs-16 ([#18399](https://github.com/getsentry/sentry-javascript/pull/18399))
+- chore(deps): bump next from 16.0.0 to 16.0.7 in /dev-packages/e2e-tests/test-applications/nextjs-16-cacheComponents ([#18427](https://github.com/getsentry/sentry-javascript/pull/18427))
+- chore(deps): bump next from 16.0.0 to 16.0.7 in /dev-packages/e2e-tests/test-applications/nextjs-16-tunnel ([#18439](https://github.com/getsentry/sentry-javascript/pull/18439))
+- chore(publish): Fix publish order for `@sentry/types` ([#18429](https://github.com/getsentry/sentry-javascript/pull/18429))
+- ci(deps): bump actions/create-github-app-token from 2.1.4 to 2.2.0 ([#18362](https://github.com/getsentry/sentry-javascript/pull/18362))
+
+ Internal Changes
+
+- chore(tanstackstart-react): clean up re-exported types ([#18393](https://github.com/getsentry/sentry-javascript/pull/18393))
+- ref(core): Avoid looking up openai integration options ([#17695](https://github.com/getsentry/sentry-javascript/pull/17695))
+- test(nuxt): Relax captured unhandled error assertion ([#18397](https://github.com/getsentry/sentry-javascript/pull/18397))
+- test(tanstackstart-react): Set up E2E test application ([#18358](https://github.com/getsentry/sentry-javascript/pull/18358))
+
+Internal Changes
+
+- chore: Allow URLs as issue ([#18372](https://github.com/getsentry/sentry-javascript/pull/18372))
+- chore(changelog): Add entry for [#18304](https://github.com/getsentry/sentry-javascript/pull/18304) ([#18329](https://github.com/getsentry/sentry-javascript/pull/18329))
+- chore(ci): Add action to track all PRs as issues ([#18363](https://github.com/getsentry/sentry-javascript/pull/18363))
+- chore(github): Adjust `BUGBOT.md` rules to flag invalid op and origin values during review ([#18352](https://github.com/getsentry/sentry-javascript/pull/18352))
+- ci: Add action to create issue on gitflow merge conflicts ([#18319](https://github.com/getsentry/sentry-javascript/pull/18319))
+- ci(deps): bump actions/checkout from 5 to 6 ([#18268](https://github.com/getsentry/sentry-javascript/pull/18268))
+- ci(deps): bump peter-evans/create-pull-request from 7.0.8 to 7.0.9 ([#18361](https://github.com/getsentry/sentry-javascript/pull/18361))
+- test(cloudflare): Add typechecks for cloudflare-worker e2e test ([#18321](https://github.com/getsentry/sentry-javascript/pull/18321))
+
+ Internal Changes
+ - build(deps): bump hono from 4.9.7 to 4.10.3 in /dev-packages/e2e-tests/test-applications/cloudflare-hono ([#18038](https://github.com/getsentry/sentry-javascript/pull/18038))
+ - chore: Add `bump_otel_instrumentations` cursor command ([#18253](https://github.com/getsentry/sentry-javascript/pull/18253))
+ - chore: Add external contributor to CHANGELOG.md ([#18297](https://github.com/getsentry/sentry-javascript/pull/18297))
+ - chore: Add external contributor to CHANGELOG.md ([#18300](https://github.com/getsentry/sentry-javascript/pull/18300))
+ - chore: Do not update opentelemetry ([#18254](https://github.com/getsentry/sentry-javascript/pull/18254))
+ - chore(angular): Add Angular 21 Support ([#18274](https://github.com/getsentry/sentry-javascript/pull/18274))
+ - chore(deps): bump astro from 4.16.18 to 5.15.9 in /dev-packages/e2e-tests/test-applications/cloudflare-astro ([#18259](https://github.com/getsentry/sentry-javascript/pull/18259))
+ - chore(dev-deps): Update some dev dependencies ([#17816](https://github.com/getsentry/sentry-javascript/pull/17816))
+ - ci(deps): Bump actions/create-github-app-token from 2.1.1 to 2.1.4 ([#17825](https://github.com/getsentry/sentry-javascript/pull/17825))
+ - ci(deps): bump actions/setup-node from 4 to 6 ([#18077](https://github.com/getsentry/sentry-javascript/pull/18077))
+ - ci(deps): bump actions/upload-artifact from 4 to 5 ([#18075](https://github.com/getsentry/sentry-javascript/pull/18075))
+ - ci(deps): bump github/codeql-action from 3 to 4 ([#18076](https://github.com/getsentry/sentry-javascript/pull/18076))
+ - doc(sveltekit): Update documentation link for SvelteKit guide ([#18298](https://github.com/getsentry/sentry-javascript/pull/18298))
+ - test(e2e): Fix astro config in test app ([#18282](https://github.com/getsentry/sentry-javascript/pull/18282))
+ - test(nextjs): Remove debug logs from e2e test ([#18250](https://github.com/getsentry/sentry-javascript/pull/18250))
+ Internal Changes
+
+- chore: Fix missing changelog quote we use for attribution placement ([#18237](https://github.com/getsentry/sentry-javascript/pull/18237))
+- chore: move tip about prioritizing issues ([#18071](https://github.com/getsentry/sentry-javascript/pull/18071))
+- chore(e2e): Pin `@embroider/addon-shim` to 1.10.0 for the e2e ember-embroider ([#18173](https://github.com/getsentry/sentry-javascript/pull/18173))
+- chore(react-router): Fix casing on deprecation notices ([#18221](https://github.com/getsentry/sentry-javascript/pull/18221))
+- chore(test): Use correct `testTimeout` field in bundler-tests vitest config
+- chore(e2e): Bump zod in e2e tests ([#18251](https://github.com/getsentry/sentry-javascript/pull/18251))
+- test(browser-integration): Fix incorrect tag value assertions ([#18162](https://github.com/getsentry/sentry-javascript/pull/18162))
+- test(profiling): Add test utils to validate Profile Chunk envelope ([#18170](https://github.com/getsentry/sentry-javascript/pull/18170))
+- ref(e2e-ember): Remove `@embroider/addon-shim` override ([#18180](https://github.com/getsentry/sentry-javascript/pull/18180))
+- ref(browser): Move trace lifecycle listeners to class function ([#18231](https://github.com/getsentry/sentry-javascript/pull/18231))
+- ref(browserprofiling): Move and rename profiler class to UIProfiler ([#18187](https://github.com/getsentry/sentry-javascript/pull/18187))
+- ref(core): Move ai integrations from utils to tracing ([#18185](https://github.com/getsentry/sentry-javascript/pull/18185))
+- ref(core): Optimize `Scope.setTag` bundle size and adjust test ([#18182](https://github.com/getsentry/sentry-javascript/pull/18182))
+
+ Internal Changes
+
+- chore(build): Fix incorrect versions after merge ([#18154](https://github.com/getsentry/sentry-javascript/pull/18154))
+ Internal Changes
+
+- chore: X handle update ([#18117](https://github.com/getsentry/sentry-javascript/pull/18117))
+- chore(eslint): Add eslint-plugin-regexp rule (dev-packages) ([#18063](https://github.com/getsentry/sentry-javascript/pull/18063))
+- test(next): fix flakey tests ([#18100](https://github.com/getsentry/sentry-javascript/pull/18100))
+- test(node-core): Proof that withMonitor doesn't create a new trace ([#18057](https://github.com/getsentry/sentry-javascript/pull/18057))
+ Internal Changes
+
+- fix(tests): un-override nitro dep version for nuxt-3 test ([#18056](https://github.com/getsentry/sentry-javascript/pull/18056))
+- fix(e2e): Add p-map override to fix React Router 7 test builds ([#18068](https://github.com/getsentry/sentry-javascript/pull/18068))
+- feat: Add a note to save changes before starting ([#17987](https://github.com/getsentry/sentry-javascript/pull/17987))
+- test(browser): Add test for INP target name after navigation or DOM changes ([#18033](https://github.com/getsentry/sentry-javascript/pull/18033))
+- chore: Add external contributor to CHANGELOG.md ([#18032](https://github.com/getsentry/sentry-javascript/pull/18032))
+- chore(aws-serverless): Fix typo in timeout warning function name ([#18031](https://github.com/getsentry/sentry-javascript/pull/18031))
+- chore(browser): upgrade fake-indexeddb to v6 ([#17975](https://github.com/getsentry/sentry-javascript/pull/17975))
+- chore(tests): pass test flags through to the test command ([#18062](https://github.com/getsentry/sentry-javascript/pull/18062))
+
+