From 119dc25f5a06f2c25455ee4151651e272be82bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ullrich=20Sch=C3=A4fer?= Date: Wed, 25 Mar 2026 02:48:16 +0100 Subject: [PATCH] Disable Sentry in CI, tag environment correctly Client: VITE_SENTRY_ENVIRONMENT=ci baked in during CI build, disables Sentry and sets 0 sample rates. Server: checks process.env.CI to disable and tag as "ci" environment. Production remains enabled with "production" environment tag. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/ci.yml | 2 ++ apps/journal/app/entry.client.tsx | 11 +++++++---- apps/journal/app/entry.server.tsx | 6 ++++-- apps/planner/app/entry.client.tsx | 11 +++++++---- apps/planner/server.ts | 6 ++++-- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7487db2..e6a6846 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -177,6 +177,8 @@ jobs: - name: Build for production run: pnpm build + env: + VITE_SENTRY_ENVIRONMENT: ci - name: Run E2E tests run: pnpm test:e2e diff --git a/apps/journal/app/entry.client.tsx b/apps/journal/app/entry.client.tsx index 4536727..656a377 100644 --- a/apps/journal/app/entry.client.tsx +++ b/apps/journal/app/entry.client.tsx @@ -3,14 +3,17 @@ import { startTransition, StrictMode } from "react"; import { hydrateRoot } from "react-dom/client"; import { HydratedRouter } from "react-router/dom"; +const sentryEnvironment = import.meta.env.VITE_SENTRY_ENVIRONMENT ?? + (import.meta.env.PROD ? "production" : "development"); + Sentry.init({ dsn: "https://a32ffcc575d34be072e91b20f247eeee@o4509530546634752.ingest.de.sentry.io/4509530555547728", integrations: [Sentry.browserTracingIntegration(), Sentry.replayIntegration()], - environment: import.meta.env.PROD ? "production" : "development", - tracesSampleRate: 0.1, + environment: sentryEnvironment, + tracesSampleRate: sentryEnvironment === "ci" ? 0 : 0.1, replaysSessionSampleRate: 0, - replaysOnErrorSampleRate: 1.0, - enabled: import.meta.env.PROD, + replaysOnErrorSampleRate: sentryEnvironment === "ci" ? 0 : 1.0, + enabled: import.meta.env.PROD && sentryEnvironment !== "ci", }); startTransition(() => { diff --git a/apps/journal/app/entry.server.tsx b/apps/journal/app/entry.server.tsx index b40a03d..8883803 100644 --- a/apps/journal/app/entry.server.tsx +++ b/apps/journal/app/entry.server.tsx @@ -7,12 +7,14 @@ import { isbot } from "isbot"; import type { RenderToPipeableStreamOptions } from "react-dom/server"; import { renderToPipeableStream } from "react-dom/server"; +const sentryEnvironment = process.env.CI ? "ci" : (process.env.NODE_ENV ?? "development"); + Sentry.init({ dsn: "https://a32ffcc575d34be072e91b20f247eeee@o4509530546634752.ingest.de.sentry.io/4509530555547728", release: process.env.SENTRY_RELEASE, - environment: process.env.NODE_ENV ?? "development", + environment: sentryEnvironment, tracesSampleRate: 0.1, - enabled: process.env.NODE_ENV === "production", + enabled: process.env.NODE_ENV === "production" && !process.env.CI, }); export const streamTimeout = 5_000; diff --git a/apps/planner/app/entry.client.tsx b/apps/planner/app/entry.client.tsx index 8f1d055..d06f0f5 100644 --- a/apps/planner/app/entry.client.tsx +++ b/apps/planner/app/entry.client.tsx @@ -3,14 +3,17 @@ import { startTransition, StrictMode } from "react"; import { hydrateRoot } from "react-dom/client"; import { HydratedRouter } from "react-router/dom"; +const sentryEnvironment = import.meta.env.VITE_SENTRY_ENVIRONMENT ?? + (import.meta.env.PROD ? "production" : "development"); + Sentry.init({ dsn: "https://5215134cd78d5e6c199e29300b8425af@o4509530546634752.ingest.de.sentry.io/4511102546608208", integrations: [Sentry.browserTracingIntegration(), Sentry.replayIntegration()], - environment: import.meta.env.PROD ? "production" : "development", - tracesSampleRate: 0.1, + environment: sentryEnvironment, + tracesSampleRate: sentryEnvironment === "ci" ? 0 : 0.1, replaysSessionSampleRate: 0, - replaysOnErrorSampleRate: 1.0, - enabled: import.meta.env.PROD, + replaysOnErrorSampleRate: sentryEnvironment === "ci" ? 0 : 1.0, + enabled: import.meta.env.PROD && sentryEnvironment !== "ci", }); startTransition(() => { diff --git a/apps/planner/server.ts b/apps/planner/server.ts index a8e1d59..e61a801 100644 --- a/apps/planner/server.ts +++ b/apps/planner/server.ts @@ -5,12 +5,14 @@ import { createReadStream, statSync } from "node:fs"; import { join, extname, resolve } from "node:path"; import { setupYjsWebSocket } from "./app/lib/yjs-server.ts"; +const sentryEnvironment = process.env.CI ? "ci" : (process.env.NODE_ENV ?? "development"); + Sentry.init({ dsn: "https://5215134cd78d5e6c199e29300b8425af@o4509530546634752.ingest.de.sentry.io/4511102546608208", release: process.env.SENTRY_RELEASE, - environment: process.env.NODE_ENV ?? "development", + environment: sentryEnvironment, tracesSampleRate: 0.1, - enabled: process.env.NODE_ENV === "production", + enabled: process.env.NODE_ENV === "production" && !process.env.CI, }); const port = Number(process.env.PORT ?? 3001);