diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index 9aa7c2f60858..e702506fb892 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -93,14 +93,9 @@ export function init(options: NodeOptions = {}): void { } if (options.release === undefined) { - const global = getGlobalObject(); - // Prefer env var over global - if (process.env.SENTRY_RELEASE) { - options.release = process.env.SENTRY_RELEASE; - } - // This supports the variable that sentry-webpack-plugin injects - else if (global.SENTRY_RELEASE && global.SENTRY_RELEASE.id) { - options.release = global.SENTRY_RELEASE.id; + const detectedRelease = getSentryRelease(); + if (detectedRelease !== undefined) { + options.release = detectedRelease; } } @@ -152,3 +147,32 @@ export async function close(timeout?: number): Promise { } return Promise.reject(false); } + +/** + * A function that returns a Sentry release string dynamically from env variables + */ +function getSentryRelease(): string | undefined { + // Always read first as Sentry takes this as precedence + if (process.env.SENTRY_RELEASE) { + return process.env.SENTRY_RELEASE; + } + + // This supports the variable that sentry-webpack-plugin injects + const global = getGlobalObject(); + if (global.SENTRY_RELEASE && global.SENTRY_RELEASE.id) { + return global.SENTRY_RELEASE.id; + } + + return ( + // GitHub Actions - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables + process.env.GITHUB_SHA || + // Netlify - https://docs.netlify.com/configure-builds/environment-variables/#build-metadata + process.env.COMMIT_REF || + // Vercel - https://vercel.com/docs/v2/build-step#system-environment-variables + process.env.VERCEL_GIT_COMMIT_SHA || + // Zeit (now known as Vercel) + process.env.ZEIT_GITHUB_COMMIT_SHA || + process.env.ZEIT_GITLAB_COMMIT_SHA || + process.env.ZEIT_BITBUCKET_COMMIT_SHA + ); +} diff --git a/packages/node/test/index.test.ts b/packages/node/test/index.test.ts index 1d4efc8f0dfb..1f4ddff69268 100644 --- a/packages/node/test/index.test.ts +++ b/packages/node/test/index.test.ts @@ -278,11 +278,6 @@ describe('SentryNode initialization', () => { // Unsure if this is needed under jest. global.SENTRY_RELEASE = undefined; }); - test('initialization proceeds as normal if global.SENTRY_RELEASE is not set', () => { - // This is mostly a happy-path test to ensure that the initialization doesn't throw an error. - init({ dsn }); - expect(global.__SENTRY__.hub._stack[0].client.getOptions().release).toBeUndefined(); - }); describe('SDK metadata', () => { it('should set SDK data when Sentry.init() is called', () => {