Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
edc5643
chore: Ignore dependabot, prepare-release and Gitflow for PR referenc…
JPeer264 Dec 2, 2025
f271bbb
feat: update eslint to v8 (#18264)
JPeer264 Dec 2, 2025
20c7c8f
chore(ci): Add an initial delay to let gitflow ci start before checki…
andreiborza Dec 3, 2025
c8d8d21
chore(e2e): Pin react router framework test apps (#18390)
chargome Dec 3, 2025
3f666da
meta(changelog): Update changelog for 10.28.0
andreiborza Dec 2, 2025
21b0e48
meta(changelog): Update changelog for 10.28.0
andreiborza Dec 2, 2025
55914d3
release: 10.28.0
getsentry-bot Dec 2, 2025
c3cd039
chore(tanstackstart-react): clean up re-exported types (#18393)
nicohrubec Dec 3, 2025
66c1216
Merge pull request #18387 from getsentry/manual-sync-dev
andreiborza Dec 3, 2025
e559d73
fix(logs): Add support for `msg` in pino integration (#18389)
chargome Dec 3, 2025
2f134c2
test(tanstackstart-react): Set up E2E test application (#18358)
nicohrubec Dec 3, 2025
f961771
ref(core): Avoid looking up openai integration options (#17695)
mydea Dec 3, 2025
df4c541
feat(solid|solidstart): Bump accepted @solidjs/router range (#18395)
andreiborza Dec 3, 2025
65f5006
fix(tracing): Add missing attributes in vercel-ai spans (#18333)
isaacs Nov 26, 2025
b6eb205
fix(node): Include system message in anthropic-ai messages span (#18332)
isaacs Nov 25, 2025
862f415
test(nuxt): Relax captured unhandled error assertion (#18397)
logaretm Dec 4, 2025
3c5d47f
Merge branch 'develop' into manual-master-sync-dev
andreiborza Dec 4, 2025
cf5c4ba
Merge pull request #18406 from getsentry/manual-master-sync-dev
andreiborza Dec 4, 2025
477f6ad
meta(changelog): Update changelog for 10.29.0
andreiborza Dec 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/create-issue-for-unreferenced-prs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ concurrency:
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
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/gitflow-merge-conflict.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ jobs:
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

Expand All @@ -39,6 +40,10 @@ jobs:
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...`);
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,30 @@

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

## 10.29.0

### Important Changes

- **feat(solid|solidstart): Bump accepted @solidjs/router range ([#18395](https://github.com/getsentry/sentry-javascript/pull/18395))**

We expanded the supported version range for `@solidjs/router` to include `0.14.x` and `0.15.x` versions.

### Other Changes

- fix(logs): Add support for `msg` in pino integration ([#18389](https://github.com/getsentry/sentry-javascript/pull/18389))
- fix(node): Include system message in anthropic-ai messages span ([#18332](https://github.com/getsentry/sentry-javascript/pull/18332))
- fix(tracing): Add missing attributes in vercel-ai spans ([#18333](https://github.com/getsentry/sentry-javascript/pull/18333))

<details>
<summary> <strong>Internal Changes</strong> </summary>

- 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))

</details>

## 10.28.0

### Important Changes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ export function collectReplayRequests(
const replayEvents: ReplayEvent[] = [];
const replayRecordingSnapshots: RecordingSnapshot[] = [];

// eslint-disable-next-line @typescript-eslint/no-floating-promises
const promise = page.waitForResponse(res => {
const req = res.request();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@
"isbot": "^5.1.22",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router": "^7.6.0",
"react-router-dom": "^7.6.0"
"react-router": "7.9.6",
"react-router-dom": "7.9.6"
},
"devDependencies": {
"@graphql-codegen/cli": "5.0.2",
"@playwright/test": "~1.53.2",
"@react-router/dev": "7.6.0",
"@react-router/fs-routes": "7.6.0",
"@react-router/dev": "7.9.6",
"@react-router/fs-routes": "7.9.6",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@shopify/cli": "3.80.4",
"@shopify/hydrogen-codegen": "^0.3.3",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,11 @@ test.describe('Server Middleware Instrumentation', () => {
type: 'Error',
mechanism: expect.objectContaining({
handled: false,
type: 'auto.middleware.nuxt',
// Type changes depending on whether it is being wrapped by Nitro or not
// This is a timing problem, sometimes Nitro can capture the error first, and sometimes it can't
// If nitro captures the error first, the type will be 'chained'
// If Sentry captures the error first, the type will be 'auto.middleware.nuxt'
type: expect.stringMatching(/^(auto\.middleware\.nuxt|chained)$/),
}),
}),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router": "^7.1.5",
"@react-router/node": "^7.1.5",
"@react-router/serve": "^7.1.5",
"react-router": "7.9.6",
"@react-router/node": "7.9.6",
"@react-router/serve": "7.9.6",
"@sentry/react-router": "latest || *",
"isbot": "^5.1.17"
},
"devDependencies": {
"@types/react": "18.3.1",
"@types/react-dom": "18.3.1",
"@types/node": "^20",
"@react-router/dev": "^7.1.5",
"@react-router/dev": "7.9.6",
"@playwright/test": "~1.53.2",
"@sentry-internal/test-utils": "link:../../../test-utils",
"typescript": "^5.6.3",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@
},
"dependencies": {
"@sentry/react-router": "latest || *",
"@react-router/node": "^7.5.3",
"@react-router/serve": "^7.5.3",
"@react-router/node": "7.9.6",
"@react-router/serve": "7.9.6",
"isbot": "^5.1.27",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router": "^7.1.5"
"react-router": "7.9.6"
},
"devDependencies": {
"@playwright/test": "~1.53.2",
"@react-router/dev": "^7.5.3",
"@react-router/dev": "7.9.6",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@tailwindcss/vite": "^4.1.4",
"@types/node": "^20",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@playwright/test": "~1.53.2",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.13.4",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "^1.0.2",
"@solidjs/testing-library": "^0.8.7",
"@testing-library/jest-dom": "^6.4.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@playwright/test": "~1.53.2",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.13.4",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "^1.0.2",
"@solidjs/testing-library": "^0.8.7",
"@testing-library/jest-dom": "^6.4.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@playwright/test": "~1.53.2",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.13.4",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "^1.0.2",
"@solidjs/testing-library": "^0.8.7",
"@testing-library/jest-dom": "^6.4.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@playwright/test": "~1.53.2",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.13.4",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "^1.0.2",
"@solidjs/testing-library": "^0.8.7",
"@testing-library/jest-dom": "^6.4.2",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@sentry:registry=http://127.0.0.1:4873
@sentry-internal:registry=http://127.0.0.1:4873
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import * as Sentry from '@sentry/tanstackstart-react';

Sentry.init({
environment: 'qa', // dynamic sampling bias to keep transactions
dsn: process.env.E2E_TEST_DSN,
tunnel: `http://localhost:3031/`, // proxy server
tracesSampleRate: 1,
transportOptions: {
// We expect the app to send a lot of events in a short time
bufferSize: 1000,
},
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"name": "tanstackstart-react",
"private": true,
"version": "0.0.1",
"type": "module",
"scripts": {
"build": "vite build && cp instrument.server.mjs .output/server",
"start": "node --import ./.output/server/instrument.server.mjs .output/server/index.mjs",
"test": "playwright test",
"clean": "npx rimraf node_modules pnpm-lock.yaml",
"test:build": "pnpm install && pnpm build",
"test:assert": "pnpm test"
},
"dependencies": {
"@sentry/tanstackstart-react": "latest || *",
"@tanstack/react-start": "^1.139.12",
"@tanstack/react-router": "^1.139.12",
"react": "^19.2.0",
"react-dom": "^19.2.0"
},
"devDependencies": {
"@types/react": "^19.2.0",
"@types/react-dom": "^19.2.0",
"@types/node": "^24.10.0",
"@typescript-eslint/eslint-plugin": "^7.2.0",
"@typescript-eslint/parser": "^7.2.0",
"@vitejs/plugin-react-swc": "^3.5.0",
"typescript": "^5.9.0",
"vite": "7.2.0",
"vite-tsconfig-paths": "^5.1.4",
"nitro": "^3.0.0",
"@playwright/test": "~1.53.2",
"@sentry-internal/test-utils": "link:../../../test-utils"
},
"volta": {
"extends": "../../package.json"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { getPlaywrightConfig } from '@sentry-internal/test-utils';

const config = getPlaywrightConfig({
startCommand: `pnpm start`,
port: 3000,
});

export default config;
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import * as Sentry from '@sentry/tanstackstart-react';
import { createRouter } from '@tanstack/react-router';
import { routeTree } from './routeTree.gen';

export const getRouter = () => {
const router = createRouter({
routeTree,
scrollRestoration: true,
});

if (!router.isServer) {
Sentry.init({
environment: 'qa', // dynamic sampling bias to keep transactions
dsn: 'https://public@dsn.ingest.sentry.io/1337',
integrations: [Sentry.tanstackRouterBrowserTracingIntegration(router)],
// We recommend adjusting this value in production, or using tracesSampler
// for finer control
tracesSampleRate: 1.0,
release: 'e2e-test',
tunnel: 'http://localhost:3031/', // proxy server
});
}

return router;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import type { ReactNode } from 'react';
import { Outlet, createRootRoute, HeadContent, Scripts } from '@tanstack/react-router';

export const Route = createRootRoute({
head: () => ({
meta: [
{
charSet: 'utf-8',
},
{
name: 'viewport',
content: 'width=device-width, initial-scale=1',
},
{
title: 'TanStack Start Starter',
},
],
}),
component: RootComponent,
});

function RootComponent() {
return (
<RootDocument>
<Outlet />
</RootDocument>
);
}

function RootDocument({ children }: Readonly<{ children: ReactNode }>) {
return (
<html>
<head>
<HeadContent />
</head>
<body>
{children}
<Scripts />
</body>
</html>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import * as Sentry from '@sentry/tanstackstart-react';
import { createFileRoute } from '@tanstack/react-router';

export const Route = createFileRoute('/api/error')({
server: {
handlers: {
GET: async () => {
try {
throw new Error('Sentry API Route Test Error');
} catch (error) {
Sentry.captureException(error);
throw error;
}
},
},
},
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { createFileRoute } from '@tanstack/react-router';
import { createServerFn } from '@tanstack/react-start';

const throwServerError = createServerFn().handler(async () => {
throw new Error('Sentry Server Function Test Error');
});

export const Route = createFileRoute('/')({
component: Home,
});

function Home() {
return (
<div>
<button
type="button"
onClick={() => {
throw new Error('Sentry Client Test Error');
}}
>
Break the client
</button>
<button
type="button"
onClick={async () => {
await throwServerError();
}}
>
Break server function
</button>
<button
type="button"
onClick={async () => {
await fetch('/api/error');
}}
>
Break API route
</button>
</div>
);
}
Loading
Loading