From 5b7fc0bcad3ead7bce00bdf10a0d8cd39c75d9ef Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 20 Feb 2023 08:51:26 +0000 Subject: [PATCH 1/3] feat(nextjs): Default to `VERCEL_ENV` as environment --- packages/nextjs/src/client/index.ts | 4 +++- packages/nextjs/src/edge/index.ts | 5 ++--- packages/nextjs/src/server/index.ts | 5 ++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/nextjs/src/client/index.ts b/packages/nextjs/src/client/index.ts index c2d512b3ef00..6b94fd29b594 100644 --- a/packages/nextjs/src/client/index.ts +++ b/packages/nextjs/src/client/index.ts @@ -38,7 +38,9 @@ const globalWithInjectedValues = global as typeof global & { export function init(options: BrowserOptions): void { applyTunnelRouteOption(options); buildMetadata(options, ['nextjs', 'react']); - options.environment = options.environment || process.env.NODE_ENV; + + options.environment = options.environment || process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.NODE_ENV; + addClientIntegrations(options); reactInit(options); diff --git a/packages/nextjs/src/edge/index.ts b/packages/nextjs/src/edge/index.ts index 9bfd7046474f..0d02c6c8692c 100644 --- a/packages/nextjs/src/edge/index.ts +++ b/packages/nextjs/src/edge/index.ts @@ -46,9 +46,8 @@ export function init(options: EdgeOptions = {}): void { } } - if (options.environment === undefined && process.env.SENTRY_ENVIRONMENT) { - options.environment = process.env.SENTRY_ENVIRONMENT; - } + options.environment = + options.environment || process.env.SENTRY_ENVIRONMENT || process.env.VERCEL_ENV || process.env.NODE_ENV; if (options.autoSessionTracking === undefined && options.dsn !== undefined) { options.autoSessionTracking = true; diff --git a/packages/nextjs/src/server/index.ts b/packages/nextjs/src/server/index.ts index 9afdedd9ae91..6a6cba77a5fb 100644 --- a/packages/nextjs/src/server/index.ts +++ b/packages/nextjs/src/server/index.ts @@ -79,7 +79,10 @@ export function init(options: NodeOptions): void { } buildMetadata(options, ['nextjs', 'node']); - options.environment = options.environment || process.env.NODE_ENV; + + options.environment = + options.environment || process.env.SENTRY_ENVIRONMENT || process.env.VERCEL_ENV || process.env.NODE_ENV; + addServerIntegrations(options); // Right now we only capture frontend sessions for Next.js options.autoSessionTracking = false; From 3be7e84435259d1ea9e44deb199d395075a6d8f0 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 20 Feb 2023 08:57:14 +0000 Subject: [PATCH 2/3] `vercel-` prefix --- packages/nextjs/src/client/index.ts | 5 ++++- packages/nextjs/src/edge/index.ts | 5 ++++- packages/nextjs/src/server/index.ts | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/nextjs/src/client/index.ts b/packages/nextjs/src/client/index.ts index 6b94fd29b594..6a55fa8e3832 100644 --- a/packages/nextjs/src/client/index.ts +++ b/packages/nextjs/src/client/index.ts @@ -39,7 +39,10 @@ export function init(options: BrowserOptions): void { applyTunnelRouteOption(options); buildMetadata(options, ['nextjs', 'react']); - options.environment = options.environment || process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.NODE_ENV; + options.environment = + options.environment || + (process.env.NEXT_PUBLIC_VERCEL_ENV ? `vercel-${process.env.NEXT_PUBLIC_VERCEL_ENV}` : undefined) || + process.env.NODE_ENV; addClientIntegrations(options); diff --git a/packages/nextjs/src/edge/index.ts b/packages/nextjs/src/edge/index.ts index 0d02c6c8692c..ea62fc2a9ab4 100644 --- a/packages/nextjs/src/edge/index.ts +++ b/packages/nextjs/src/edge/index.ts @@ -47,7 +47,10 @@ export function init(options: EdgeOptions = {}): void { } options.environment = - options.environment || process.env.SENTRY_ENVIRONMENT || process.env.VERCEL_ENV || process.env.NODE_ENV; + options.environment || + process.env.SENTRY_ENVIRONMENT || + (process.env.VERCEL_ENV ? `vercel-${process.env.VERCEL_ENV}` : undefined) || + process.env.NODE_ENV; if (options.autoSessionTracking === undefined && options.dsn !== undefined) { options.autoSessionTracking = true; diff --git a/packages/nextjs/src/server/index.ts b/packages/nextjs/src/server/index.ts index 6a6cba77a5fb..0b3f2aacb537 100644 --- a/packages/nextjs/src/server/index.ts +++ b/packages/nextjs/src/server/index.ts @@ -81,7 +81,10 @@ export function init(options: NodeOptions): void { buildMetadata(options, ['nextjs', 'node']); options.environment = - options.environment || process.env.SENTRY_ENVIRONMENT || process.env.VERCEL_ENV || process.env.NODE_ENV; + options.environment || + process.env.SENTRY_ENVIRONMENT || + (process.env.VERCEL_ENV ? `vercel-${process.env.VERCEL_ENV}` : undefined) || + process.env.NODE_ENV; addServerIntegrations(options); // Right now we only capture frontend sessions for Next.js From dfc5d20f744a48ca2a9833263a1f87b6fd505613 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 20 Feb 2023 09:31:35 +0000 Subject: [PATCH 3/3] Extract into function --- packages/nextjs/src/client/index.ts | 6 ++---- packages/nextjs/src/common/getVercelEnv.ts | 9 +++++++++ packages/nextjs/src/edge/index.ts | 6 ++---- packages/nextjs/src/server/index.ts | 6 ++---- 4 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 packages/nextjs/src/common/getVercelEnv.ts diff --git a/packages/nextjs/src/client/index.ts b/packages/nextjs/src/client/index.ts index 6a55fa8e3832..27eb57858e40 100644 --- a/packages/nextjs/src/client/index.ts +++ b/packages/nextjs/src/client/index.ts @@ -4,6 +4,7 @@ import { configureScope, init as reactInit, Integrations } from '@sentry/react'; import { BrowserTracing, defaultRequestInstrumentationOptions, hasTracingEnabled } from '@sentry/tracing'; import type { EventProcessor } from '@sentry/types'; +import { getVercelEnv } from '../common/getVercelEnv'; import { buildMetadata } from '../common/metadata'; import { addOrUpdateIntegration } from '../common/userIntegrations'; import { nextRouterInstrumentation } from './performance'; @@ -39,10 +40,7 @@ export function init(options: BrowserOptions): void { applyTunnelRouteOption(options); buildMetadata(options, ['nextjs', 'react']); - options.environment = - options.environment || - (process.env.NEXT_PUBLIC_VERCEL_ENV ? `vercel-${process.env.NEXT_PUBLIC_VERCEL_ENV}` : undefined) || - process.env.NODE_ENV; + options.environment = options.environment || getVercelEnv(true) || process.env.NODE_ENV; addClientIntegrations(options); diff --git a/packages/nextjs/src/common/getVercelEnv.ts b/packages/nextjs/src/common/getVercelEnv.ts new file mode 100644 index 000000000000..98755c91409d --- /dev/null +++ b/packages/nextjs/src/common/getVercelEnv.ts @@ -0,0 +1,9 @@ +/** + * Returns an environment setting value determined by Vercel's `VERCEL_ENV` environment variable. + * + * @param isClient Flag to indicate whether to use the `NEXT_PUBLIC_` prefixed version of the environment variable. + */ +export function getVercelEnv(isClient: boolean): string | undefined { + const vercelEnvVar = isClient ? process.env.NEXT_PUBLIC_VERCEL_ENV : process.env.VERCEL_ENV; + return vercelEnvVar ? `vercel-${vercelEnvVar}` : undefined; +} diff --git a/packages/nextjs/src/edge/index.ts b/packages/nextjs/src/edge/index.ts index ea62fc2a9ab4..087e0a1482d5 100644 --- a/packages/nextjs/src/edge/index.ts +++ b/packages/nextjs/src/edge/index.ts @@ -10,6 +10,7 @@ import { stackParserFromStackParserOptions, } from '@sentry/utils'; +import { getVercelEnv } from '../common/getVercelEnv'; import { EdgeClient } from './edgeclient'; import { makeEdgeTransport } from './transport'; @@ -47,10 +48,7 @@ export function init(options: EdgeOptions = {}): void { } options.environment = - options.environment || - process.env.SENTRY_ENVIRONMENT || - (process.env.VERCEL_ENV ? `vercel-${process.env.VERCEL_ENV}` : undefined) || - process.env.NODE_ENV; + options.environment || process.env.SENTRY_ENVIRONMENT || getVercelEnv(false) || process.env.NODE_ENV; if (options.autoSessionTracking === undefined && options.dsn !== undefined) { options.autoSessionTracking = true; diff --git a/packages/nextjs/src/server/index.ts b/packages/nextjs/src/server/index.ts index 0b3f2aacb537..b27d07d11733 100644 --- a/packages/nextjs/src/server/index.ts +++ b/packages/nextjs/src/server/index.ts @@ -9,6 +9,7 @@ import { escapeStringForRegex, logger } from '@sentry/utils'; import * as domainModule from 'domain'; import * as path from 'path'; +import { getVercelEnv } from '../common/getVercelEnv'; import { buildMetadata } from '../common/metadata'; import type { IntegrationWithExclusionOption } from '../common/userIntegrations'; import { addOrUpdateIntegration } from '../common/userIntegrations'; @@ -81,10 +82,7 @@ export function init(options: NodeOptions): void { buildMetadata(options, ['nextjs', 'node']); options.environment = - options.environment || - process.env.SENTRY_ENVIRONMENT || - (process.env.VERCEL_ENV ? `vercel-${process.env.VERCEL_ENV}` : undefined) || - process.env.NODE_ENV; + options.environment || process.env.SENTRY_ENVIRONMENT || getVercelEnv(false) || process.env.NODE_ENV; addServerIntegrations(options); // Right now we only capture frontend sessions for Next.js