surface growthbook flags in sentry

This commit is contained in:
Samuel Newman
2026-09-07 10:11:08 +03:00
committed by GitHub
parent 13a9941c66
commit 3fc48cf48c
4 changed files with 62 additions and 0 deletions
+2
View File
@@ -9,6 +9,7 @@ import {Platform} from 'react-native'
import {type Result, type WidenPrimitives} from '@growthbook/growthbook-react'
import {Logger} from '#/logger'
import {recordFeatureFlagEvaluation} from '#/logger/sentry/featureFlags'
import {
Features,
features as feats,
@@ -313,6 +314,7 @@ export function AnalyticsFeaturesContext({
? sessionMetadataForResult(parentContext, result.experimentResult)
: undefined,
)
recordFeatureFlagEvaluation(feature, result.value)
})
setAttributes(parentContext.metadata)
+45
View File
@@ -0,0 +1,45 @@
import {beforeEach, describe, expect, it, jest} from '@jest/globals'
import {
featureFlagsIntegration,
recordFeatureFlagEvaluation,
} from '#/logger/sentry/featureFlags'
jest.mock('#/logger/sentry/lib', () => ({
Sentry: {
featureFlagsIntegration: jest.fn(() => ({
addFeatureFlag: jest.fn(),
})),
},
}))
describe('recordFeatureFlagEvaluation', () => {
beforeEach(() => {
jest.clearAllMocks()
})
it('records boolean feature flags', () => {
recordFeatureFlagEvaluation('enabled-flag', true)
recordFeatureFlagEvaluation('disabled-flag', false)
expect(featureFlagsIntegration.addFeatureFlag).toHaveBeenNthCalledWith(
1,
'enabled-flag',
true,
)
expect(featureFlagsIntegration.addFeatureFlag).toHaveBeenNthCalledWith(
2,
'disabled-flag',
false,
)
})
it.each([['value'], [1], [['value']], [{value: true}], [null], [undefined]])(
'ignores unsupported value %p',
value => {
recordFeatureFlagEvaluation('non-boolean-flag', value)
expect(featureFlagsIntegration.addFeatureFlag).not.toHaveBeenCalled()
},
)
})
+13
View File
@@ -0,0 +1,13 @@
import {Sentry} from '#/logger/sentry/lib'
export const featureFlagsIntegration = Sentry.featureFlagsIntegration()
/**
* Records a feature flag evaluation on Sentry error events and active spans.
* Sentry currently only supports boolean feature flag values.
*/
export function recordFeatureFlagEvaluation(name: string, value: unknown) {
if (typeof value === 'boolean') {
featureFlagsIntegration.addFeatureFlag(name, value)
}
}
+2
View File
@@ -1,5 +1,6 @@
import {getGlobalScope, init} from '@sentry/react-native'
import {featureFlagsIntegration} from '#/logger/sentry/featureFlags'
import * as env from '#/env'
init({
@@ -10,6 +11,7 @@ init({
environment: env.ENV,
dist: env.BUNDLE_IDENTIFIER,
release: env.RELEASE_VERSION,
integrations: [featureFlagsIntegration],
ignoreErrors: [
/*
* Unknown internals errors