Setting Release Automatically
Problem Statement
Releases are not being consistently set across all SDKs. There are varying attempts to detect release variables and set them, but it is not consistent.
Leading to first and subsequent releases not being set.
Methods per SDK
| SDK - Platfrom | Approach | Approach |
|---|---|---|
| Content Cell | Content Cell | Content Cell |
| Python | - release parameter SENTRY_RELEASE env variable - Output of git rev-parse HEAD | see |
| Rust SDK | falls back to SENTRY_RELEASE env if nothing was explicitly sent. & example snippets include release: sentry::release_name!() |
|
| Node SDK | 1. release parameter 2. SENTRY_RELEASE env var 3. SENTRY_RELEASE.id global var 4. variety of `env variables |
Content Cell |
Solution Brainstorm
Referencing different SDKs strategies we should collect and apply them all where it makes sense, with prioritized order for setting the release when a customer is not doing it manually.
Ruby SDKAttempts-> https://github.com/getsentry/sentry-ruby/issues/873#issuecomment-673925398
https://docs.sentry.io/platforms/ruby/guides/rails/configuration/releases/ Comment explanation should be in docs
Node SDK Attempts-> Something similar to Ruby witch checking for sentry variable, and different platforms like vercel. But this is not doc'd
https://github.com/getsentry/sentry-javascript/blob/351be067ac7ff280155c128011f79dac9caf6475/packages/node/src/sdk.ts#L232-L262
Go SDK Attempts-> if it is a git repo then it will always use the SHA if it is a GH repo
No mention in docs https://docs.sentry.io/platforms/go/performance/
Python SDK tries the following things:
-
releaseparameter -
SENTRY_RELEASEenv variable - Output of
git rev-parse HEAD
see: https://github.com/getsentry/sentry-python/blob/master/sentry_sdk/utils.py#L59-L95
Rust falls back to SENTRY_RELEASE env if nothing was explicitly sent.
All example snippets include release: sentry::release_name!() which is the way a release is set in Rust.
Unfortunately it needs to be explicitly copy/pasted, as the code needs to be part of the user code.
Node SDK tries:
- the
release parameter: https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/node/src/sdk.ts#L133 - the
SENTRY_RELEASEenv var: https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/node/src/sdk.ts#L238 - the
SENTRY_RELEASE.idglobal var: https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/node/src/sdk.ts#L243
- a variety of `env variables: https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/node/src/sdk.ts#L246-L261
// 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 ||
process.env.VERCEL_GITHUB_COMMIT_SHA ||
process.env.VERCEL_GITLAB_COMMIT_SHA ||
process.env.VERCEL_BITBUCKET_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 ||
- and then falls back to
undefined
Browser SDK tries:
- the
SENTRY_RELEASEglobal var injected by bundlers (like webpack plugin): https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/browser/src/sdk.ts#L98 - and then falls back to
undefined