Skip to content

feat(react-router): Export createSentryHandleError from the Cloudflare entry - #26343

Open
JPeer264 wants to merge 1 commit into
developfrom
jp/react-router-cloudflare-handle-error
Open

JPeer264 wants to merge 1 commit into
developfrom
jp/react-router-cloudflare-handle-error

Conversation

@JPeer264

Copy link
Copy Markdown
Member

This exports createSentryHandleError from @sentry/react-router/cloudflare, so a Worker uses the same handleError as a Node server:

import * as Sentry from '@sentry/react-router/cloudflare';

export const handleError = Sentry.createSentryHandleError({ logErrors: false });

The Cloudflare entry of the react-router-8-framework e2e app uses it now, so the server error tests cover it on Cloudflare.

Why

Until now, Worker apps had to write their own handleError that calls captureException. The function only uses @sentry/core, which the Cloudflare entry already imports. The React Router Cloudflare quick start in getsentry/sentry-docs#20724 can use it after the release.

…e entry

Worker apps can now use the same handleError as Node apps instead of
calling captureException in their own handler. The function only uses
@sentry/core, which the Cloudflare entry already imports.

The Cloudflare entry of the react-router-8-framework e2e app uses it now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

Compared: 879c591 (PR test merge using develop at c9e61e3)

Against: c9e61e3 (develop) · base run #65906

✅ Baseline matches: this diff contains only this PR's changes.

Path Size % Change Change
@sentry/browser 30.04 kB - -
@sentry/browser - with treeshaking flags 28.23 kB - -
@sentry/browser - with treeshaking flags tracing without tracing 28.12 kB - -
@sentry/browser (incl. Tracing) 52.2 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 52.2 kB - -
@sentry/browser (incl. Tracing, Profiling) 55.17 kB - -
@sentry/browser (incl. Tracing, Replay) 92.73 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 81.52 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 97.08 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 110.51 kB - -
@sentry/browser (incl. Feedback) 47.66 kB - -
@sentry/browser (incl. sendFeedback) 30.62 kB - -
@sentry/browser (incl. FeedbackAsync) 35.62 kB - -
@sentry/browser (incl. Metrics) 31.36 kB - -
@sentry/browser (incl. Logs) 31.64 kB - -
@sentry/browser (incl. Metrics & Logs) 32.3 kB - -
@sentry/react 32.04 kB - -
@sentry/react (incl. Tracing) 54.86 kB - -
@sentry/vue 38.21 kB - -
@sentry/vue (incl. Tracing) 55.14 kB - -
@sentry/svelte 30.05 kB - -
@sentry/remix (Remix 3 client bundle) 57.96 kB - -
CDN Bundle 31.79 kB - -
CDN Bundle (incl. Tracing) 52.58 kB - -
CDN Bundle (incl. Logs, Metrics) 34.58 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 55.14 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 75.61 kB - -
CDN Bundle (incl. Tracing, Replay) 90.63 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 93.25 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 96 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 98.6 kB - -
CDN Bundle - uncompressed 92.69 kB - -
CDN Bundle (incl. Tracing) - uncompressed 155.13 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 101.03 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 162.76 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 231.11 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 275.27 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 282.9 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 287.07 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 294.69 kB - -
@sentry/nextjs (client) 58.23 kB - -
@sentry/sveltekit (client) 53.26 kB - -
@sentry/core/server 44.53 kB - -
@sentry/core/browser 13.99 kB - -
@sentry/node 149.35 kB -0.01% -4 B 🔽
@sentry/node/import (ESM hook with diagnostics-channel injection) 83.18 kB - -
@sentry/node - without tracing 88.28 kB -0.01% -4 B 🔽
@sentry/node - without channel injection 138.45 kB -0.01% -2 B 🔽
@sentry/aws-serverless 97.19 kB -0.01% -4 B 🔽
@sentry/cloudflare (withSentry) - minified 204.35 kB - -
@sentry/cloudflare (withSentry) 474.32 kB - -
@sentry/nextjs/cloudflare (withSentry) - minified 229.66 kB - -

View base workflow run

@JPeer264 JPeer264 self-assigned this Nov 13, 2026
@JPeer264
JPeer264 marked this pull request as ready for review November 13, 2026 07:03
@JPeer264
JPeer264 requested a review from a team November 13, 2026 07:03
@JPeer264
JPeer264 requested a review from a team as a code owner November 13, 2026 07:03
@JPeer264
JPeer264 requested review from andreiborza and isaacs and removed request for chargome and s1gr1d November 13, 2026 07:03
@github-actions

Copy link
Copy Markdown
Contributor

Optional E2E tests

All optional checks were successful. 1 successful. See the run.

Successful checks
Check Status
✅ CI: Optional E2E Tests / E2E react-router-7-framework-instrumentation Test (optional) Successful in 2m Details

mydea added a commit that referenced this pull request Nov 13, 2026
**Why:** The sub-teams' "Only notify requested team members" setting
(managed in security-as-code) only stops the team-wide notification if a
team member is *already* requested when the team request lands. GitHub
requests the CODEOWNERS teams the moment a PR is opened or marked ready.
`assign-reviewers` requests individuals about 10s later. That's too
late, so the whole sub-team still gets pinged. In #26343, for example,
`team-javascript-sdks-framework` was requested at 07:03:05 and the
workflow's picks at 07:03:15.

No ruleset requires code owner review (`require_code_owner_review:
false` on develop, master, v7 and v8/9/10). CODEOWNERS only routes
reviewers, and the workflow does that now. So the same rules move to
`.github/REVIEWERS`, which GitHub ignores and only the workflow reads.
The sub-teams stop getting team requests, and the workflow keeps picking
3 people from them.

The develop ruleset still requests `team-javascript-sdks` on every PR.
getsentry/security-as-code#3923 turns on auto-assignment of 1 member for
that team, so GitHub requests a person together with the team and the
whole team isn't notified. GitHub can pick a manager there, and
Terraform can't exclude members from auto-assignment. So pending review
requests from `NEVER_REQUEST` users don't count towards the 3, and the
workflow still requests 3 other people. A PR can end up with 4 requested
reviewers.

**How to review:** The rename plus the two path changes (the rules
didn't change), then the `NEVER_REQUEST` filter in
`scripts/assign-reviewers.mjs`.

**Unsure about:**
- We lose GitHub's "owned by" badge in the file view and the code owner
shortcut in the reviewer picker.
- Reviews that managers have already submitted still count towards the
3. Only pending requests are skipped.
- GitHub's pick isn't filtered for the requester of a Junior PR the way
the workflow's picks are.
- `pull_request_target` runs the base branch's workflow, so this PR
still routes reviewers from the old path until it merges.
- Merge together with getsentry/security-as-code#3923.

<!-- junior-request-attribution:start -->
via @mydea.
<!-- junior-request-attribution:end -->

<!-- junior-session-footer:start -->
<!-- junior-conversation-id:slack%3AD0CA8FXFXAS%3A1794557278.893269 -->

--

[View
Session](https://junior-prod.sentry.dev/conversations/slack%3AD0CA8FXFXAS%3A1794557278.893269)
[[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AD0CA8FXFXAS%3A1794557278.893269/?project=4510944073809921)

<!-- junior-session-footer:end -->

---------

Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com>
Co-authored-by: Francesco Gringl-Novy <2411343+mydea@users.noreply.github.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants