develop icon indicating copy to clipboard operation
develop copied to clipboard

Setting Release Automatically

Open smeubank opened this issue 3 years ago • 3 comments

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/

smeubank avatar Nov 08 '22 14:11 smeubank

Python SDK tries the following things:

  • release parameter
  • SENTRY_RELEASE env variable
  • Output of git rev-parse HEAD

see: https://github.com/getsentry/sentry-python/blob/master/sentry_sdk/utils.py#L59-L95

antonpirker avatar Nov 10 '22 14:11 antonpirker

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.

Swatinem avatar Nov 10 '22 15:11 Swatinem

Node SDK tries:

  1. the release parameter: https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/node/src/sdk.ts#L133
  2. the SENTRY_RELEASE env var: https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/node/src/sdk.ts#L238
  3. the SENTRY_RELEASE.id global 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 ||
  1. and then falls back to undefined

Browser SDK tries:

  1. the SENTRY_RELEASE global var injected by bundlers (like webpack plugin): https://github.com/getsentry/sentry-javascript/blob/411b0fa069e7faf8cc4d782cd21a118f909aefdf/packages/browser/src/sdk.ts#L98
  2. and then falls back to undefined

AbhiPrasad avatar Nov 10 '22 15:11 AbhiPrasad