From 67bf5d2134a12b0b4e76bb378db5fdcb5046bb50 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 20 Mar 2024 09:25:46 +1300 Subject: [PATCH 1/3] Remove CrashLoggingDataProvider.releaseName --- .../android/tracks/crashlogging/CrashLoggingDataProvider.kt | 5 ----- .../tracks/crashlogging/internal/SentryCrashLogging.kt | 1 - .../android/tracks/crashlogging/SentryCrashLoggingTest.kt | 2 +- .../com/automattic/android/tracks/fakes/FakeDataProvider.kt | 1 - .../main/java/com/example/sampletracksapp/MainActivity.kt | 1 - 5 files changed, 1 insertion(+), 9 deletions(-) diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt index c98abffe..e2b1e068 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt @@ -14,11 +14,6 @@ interface CrashLoggingDataProvider { */ val buildType: String - /** - * Provides [CrashLogging] with the name of this release. - */ - val releaseName: String - /** * Provides the [CrashLogging] with information about the user's current locale */ diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt index 17ee8781..8cb9b814 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt @@ -44,7 +44,6 @@ internal class SentryCrashLogging constructor( options.apply { dsn = dataProvider.sentryDSN environment = dataProvider.buildType - release = dataProvider.releaseName this.tracesSampleRate = tracesSampleRate this.profilesSampleRate = profilesSampleRate isDebug = dataProvider.enableCrashLoggingLogs diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt index 437ce9d6..b153f287 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt @@ -80,7 +80,7 @@ class SentryCrashLoggingTest { SoftAssertions().apply { assertThat(options.dsn).isEqualTo(dataProvider.sentryDSN) assertThat(options.environment).isEqualTo(dataProvider.buildType) - assertThat(options.release).isEqualTo(dataProvider.releaseName) + assertThat(options.release).isNull() }.assertAll() } } diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt index be58800b..41051c33 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt @@ -13,7 +13,6 @@ import java.util.Locale class FakeDataProvider( override val sentryDSN: String = BuildConfig.SENTRY_TEST_PROJECT_DSN, override val buildType: String = "testBuildType", - override val releaseName: String = "testReleaseName", override val locale: Locale? = Locale.US, override val enableCrashLoggingLogs: Boolean = true, var crashLoggingEnabled: Boolean = true, diff --git a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt index 512d4ea2..08befc96 100644 --- a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt +++ b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt @@ -41,7 +41,6 @@ class MainActivity : AppCompatActivity() { object : CrashLoggingDataProvider { override val sentryDSN = BuildConfig.SENTRY_TEST_PROJECT_DSN override val buildType = BuildConfig.BUILD_TYPE - override val releaseName = "test" override val locale = Locale.US override val enableCrashLoggingLogs = true override val performanceMonitoringConfig = PerformanceMonitoringConfig.Enabled(sampleRate = 1.0, profilesSampleRate = 1.0) From 73ce78689e8bc7814d7ab458d2ac91ceed98168f Mon Sep 17 00:00:00 2001 From: Wojtek Zieba Date: Thu, 21 Mar 2024 08:25:32 +0100 Subject: [PATCH 2/3] Revert "Remove CrashLoggingDataProvider.releaseName" This reverts commit 6de0efb95d8415c20ec0fa2fb8bdb23f05f499d5. --- .../android/tracks/crashlogging/CrashLoggingDataProvider.kt | 5 +++++ .../tracks/crashlogging/internal/SentryCrashLogging.kt | 1 + .../android/tracks/crashlogging/SentryCrashLoggingTest.kt | 2 +- .../com/automattic/android/tracks/fakes/FakeDataProvider.kt | 1 + .../main/java/com/example/sampletracksapp/MainActivity.kt | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt index e2b1e068..c98abffe 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt @@ -14,6 +14,11 @@ interface CrashLoggingDataProvider { */ val buildType: String + /** + * Provides [CrashLogging] with the name of this release. + */ + val releaseName: String + /** * Provides the [CrashLogging] with information about the user's current locale */ diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt index 8cb9b814..17ee8781 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt @@ -44,6 +44,7 @@ internal class SentryCrashLogging constructor( options.apply { dsn = dataProvider.sentryDSN environment = dataProvider.buildType + release = dataProvider.releaseName this.tracesSampleRate = tracesSampleRate this.profilesSampleRate = profilesSampleRate isDebug = dataProvider.enableCrashLoggingLogs diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt index b153f287..437ce9d6 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt @@ -80,7 +80,7 @@ class SentryCrashLoggingTest { SoftAssertions().apply { assertThat(options.dsn).isEqualTo(dataProvider.sentryDSN) assertThat(options.environment).isEqualTo(dataProvider.buildType) - assertThat(options.release).isNull() + assertThat(options.release).isEqualTo(dataProvider.releaseName) }.assertAll() } } diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt index 41051c33..be58800b 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt @@ -13,6 +13,7 @@ import java.util.Locale class FakeDataProvider( override val sentryDSN: String = BuildConfig.SENTRY_TEST_PROJECT_DSN, override val buildType: String = "testBuildType", + override val releaseName: String = "testReleaseName", override val locale: Locale? = Locale.US, override val enableCrashLoggingLogs: Boolean = true, var crashLoggingEnabled: Boolean = true, diff --git a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt index 08befc96..512d4ea2 100644 --- a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt +++ b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt @@ -41,6 +41,7 @@ class MainActivity : AppCompatActivity() { object : CrashLoggingDataProvider { override val sentryDSN = BuildConfig.SENTRY_TEST_PROJECT_DSN override val buildType = BuildConfig.BUILD_TYPE + override val releaseName = "test" override val locale = Locale.US override val enableCrashLoggingLogs = true override val performanceMonitoringConfig = PerformanceMonitoringConfig.Enabled(sampleRate = 1.0, profilesSampleRate = 1.0) From 8ae5a450ded12eb8164c61557f0bc635a09a1bdf Mon Sep 17 00:00:00 2001 From: Wojtek Zieba Date: Thu, 21 Mar 2024 08:56:03 +0100 Subject: [PATCH 3/3] feat: allow consumer to delegate release name creation to the SDK BREAKING CHANGE: `CrashLoggingDataProvider#releaseName` changed its type from `String` to `ReleaseName` --- .../crashlogging/CrashLoggingDataProvider.kt | 16 +++++++++++++++- .../crashlogging/internal/SentryCrashLogging.kt | 6 +++++- .../crashlogging/SentryCrashLoggingTest.kt | 2 +- .../android/tracks/fakes/FakeDataProvider.kt | 3 ++- .../com/example/sampletracksapp/MainActivity.kt | 3 ++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt index c98abffe..b33e585e 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt @@ -17,7 +17,7 @@ interface CrashLoggingDataProvider { /** * Provides [CrashLogging] with the name of this release. */ - val releaseName: String + val releaseName: ReleaseName /** * Provides the [CrashLogging] with information about the user's current locale @@ -80,6 +80,20 @@ interface CrashLoggingDataProvider { typealias ExtraKnownKey = String +sealed class ReleaseName { + /** + * Sets release name attached for every event sent to Sentry. It's indented to use in debug. + */ + class SetByApplication(val name: String) : ReleaseName() + + /** + * Delegates setting the release name to the Tracks library. It's indented to use in release + * builds. The crash logging framework will single-handledly set the release name based on the + * build configuration. + */ + object SetByTracksLibrary : ReleaseName() +} + sealed class PerformanceMonitoringConfig { object Disabled : PerformanceMonitoringConfig() diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt index 17ee8781..845ef91d 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt @@ -9,6 +9,7 @@ import com.automattic.android.tracks.crashlogging.JsException import com.automattic.android.tracks.crashlogging.JsExceptionCallback import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig.Disabled import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig.Enabled +import com.automattic.android.tracks.crashlogging.ReleaseName import com.automattic.android.tracks.crashlogging.eventLevel import io.sentry.Breadcrumb import io.sentry.Sentry @@ -44,7 +45,10 @@ internal class SentryCrashLogging constructor( options.apply { dsn = dataProvider.sentryDSN environment = dataProvider.buildType - release = dataProvider.releaseName + release = when (val releaseName = dataProvider.releaseName) { + is ReleaseName.SetByApplication -> releaseName.name + ReleaseName.SetByTracksLibrary -> null + } this.tracesSampleRate = tracesSampleRate this.profilesSampleRate = profilesSampleRate isDebug = dataProvider.enableCrashLoggingLogs diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt index 437ce9d6..fed46500 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt @@ -80,7 +80,7 @@ class SentryCrashLoggingTest { SoftAssertions().apply { assertThat(options.dsn).isEqualTo(dataProvider.sentryDSN) assertThat(options.environment).isEqualTo(dataProvider.buildType) - assertThat(options.release).isEqualTo(dataProvider.releaseName) + assertThat(options.release).isEqualTo((dataProvider.releaseName as ReleaseName.SetByApplication).name) }.assertAll() } } diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt index be58800b..ae3c2830 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt @@ -6,6 +6,7 @@ import com.automattic.android.tracks.crashlogging.CrashLoggingUser import com.automattic.android.tracks.crashlogging.EventLevel import com.automattic.android.tracks.crashlogging.ExtraKnownKey import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig +import com.automattic.android.tracks.crashlogging.ReleaseName import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import java.util.Locale @@ -13,7 +14,7 @@ import java.util.Locale class FakeDataProvider( override val sentryDSN: String = BuildConfig.SENTRY_TEST_PROJECT_DSN, override val buildType: String = "testBuildType", - override val releaseName: String = "testReleaseName", + override val releaseName: ReleaseName = ReleaseName.SetByApplication("testReleaseName"), override val locale: Locale? = Locale.US, override val enableCrashLoggingLogs: Boolean = true, var crashLoggingEnabled: Boolean = true, diff --git a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt index 512d4ea2..927e297c 100644 --- a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt +++ b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt @@ -13,6 +13,7 @@ import com.automattic.android.tracks.crashlogging.JsException import com.automattic.android.tracks.crashlogging.JsExceptionCallback import com.automattic.android.tracks.crashlogging.JsExceptionStackTraceElement import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig +import com.automattic.android.tracks.crashlogging.ReleaseName import com.automattic.android.tracks.crashlogging.RequestFormatter import com.automattic.android.tracks.crashlogging.performance.PerformanceMonitoringRepositoryProvider import com.automattic.android.tracks.crashlogging.performance.PerformanceTransactionRepository @@ -41,7 +42,7 @@ class MainActivity : AppCompatActivity() { object : CrashLoggingDataProvider { override val sentryDSN = BuildConfig.SENTRY_TEST_PROJECT_DSN override val buildType = BuildConfig.BUILD_TYPE - override val releaseName = "test" + override val releaseName = ReleaseName.SetByApplication("test") override val locale = Locale.US override val enableCrashLoggingLogs = true override val performanceMonitoringConfig = PerformanceMonitoringConfig.Enabled(sampleRate = 1.0, profilesSampleRate = 1.0)