From b5a31c5c453b93729131c44978cf3bd2e426fa58 Mon Sep 17 00:00:00 2001 From: lcian Date: Thu, 3 Apr 2025 16:24:58 +0200 Subject: [PATCH 1/2] Read build tool info from sentry-debug-meta.properties and attach it to events --- sentry/api/sentry.api | 3 + .../util/DebugMetaPropertiesApplier.java | 37 ++++++++++ .../debugmeta/ResourcesDebugMetaLoaderTest.kt | 72 +++++++++++++++++++ 3 files changed, 112 insertions(+) diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 796284690d..637f19ccdb 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -6364,7 +6364,10 @@ public abstract interface class io/sentry/util/CollectionUtils$Predicate { public final class io/sentry/util/DebugMetaPropertiesApplier { public static field DEBUG_META_PROPERTIES_FILENAME Ljava/lang/String; public fun ()V + public static fun apply (Lio/sentry/SentryOptions;Ljava/util/List;)V public static fun applyToOptions (Lio/sentry/SentryOptions;Ljava/util/List;)V + public static fun getBuildTool (Ljava/util/Properties;)Ljava/lang/String; + public static fun getBuildToolVersion (Ljava/util/Properties;)Ljava/lang/String; public static fun getProguardUuid (Ljava/util/Properties;)Ljava/lang/String; } diff --git a/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java b/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java index 8627845967..236e962682 100644 --- a/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java +++ b/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java @@ -1,5 +1,6 @@ package io.sentry.util; +import io.sentry.SentryIntegrationPackageStorage; import io.sentry.SentryLevel; import io.sentry.SentryOptions; import java.util.List; @@ -11,6 +12,14 @@ public final class DebugMetaPropertiesApplier { public static @NotNull String DEBUG_META_PROPERTIES_FILENAME = "sentry-debug-meta.properties"; + public static void apply( + final @NotNull SentryOptions options, final @Nullable List debugMetaProperties) { + if (debugMetaProperties != null) { + applyToOptions(options, debugMetaProperties); + applyBuildTool(options, debugMetaProperties); + } + } + public static void applyToOptions( final @NotNull SentryOptions options, final @Nullable List debugMetaProperties) { if (debugMetaProperties != null) { @@ -49,7 +58,35 @@ private static void applyProguardUuid( } } + private static void applyBuildTool( + final @NotNull SentryOptions options, @NotNull List debugMetaProperties) { + for (Properties properties : debugMetaProperties) { + final @Nullable String buildTool = getBuildTool(properties); + if (buildTool != null) { + @Nullable String buildToolVersion = getBuildToolVersion(properties); + if (buildToolVersion == null) { + buildToolVersion = "unknown"; + } + options + .getLogger() + .log( + SentryLevel.DEBUG, "Build tool found: %s, version %s", buildTool, buildToolVersion); + SentryIntegrationPackageStorage.getInstance().addPackage(buildTool, buildToolVersion); + break; + } + } + } + public static @Nullable String getProguardUuid(final @NotNull Properties debugMetaProperties) { return debugMetaProperties.getProperty("io.sentry.ProguardUuids"); } + + public static @Nullable String getBuildTool(final @NotNull Properties debugMetaProperties) { + return debugMetaProperties.getProperty("io.sentry.build-tool"); + } + + public static @Nullable String getBuildToolVersion( + final @NotNull Properties debugMetaProperties) { + return debugMetaProperties.getProperty("io.sentry.build-tool-version"); + } } diff --git a/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt b/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt index d9a22224b5..970e9bb214 100644 --- a/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt +++ b/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt @@ -1,7 +1,9 @@ package io.sentry.internal.debugmeta import io.sentry.ILogger +import io.sentry.SentryIntegrationPackageStorage import io.sentry.SentryOptions +import io.sentry.protocol.SentryPackage import io.sentry.util.DebugMetaPropertiesApplier import org.mockito.kotlin.mock import org.mockito.kotlin.whenever @@ -9,7 +11,9 @@ import java.net.URL import java.nio.charset.Charset import java.util.Collections import kotlin.test.Test +import kotlin.test.assertContains import kotlin.test.assertEquals +import kotlin.test.assertFalse import kotlin.test.assertNotNull import kotlin.test.assertNull @@ -132,4 +136,72 @@ class ResourcesDebugMetaLoaderTest { assertNull(sut.loadDebugMeta()) } + + @Test + fun `reads build-tool and build-version and adds them to packages`() { + val sut = fixture.getSut( + content = listOf( + """ + #Generated by sentry-maven-plugin + #Wed May 17 15:33:34 CEST 2023 + io.sentry.ProguardUuids=34077988-a0e5-4839-9618-7400e1616d1b + io.sentry.bundle-ids=88ba82db-cd26-4c09-8b31-21461d286b68 + io.sentry.build-tool=maven + io.sentry.build-tool-version=1.0 + """.trimIndent() + ) + ) + + val options = SentryOptions() + assertNotNull(sut.loadDebugMeta()) { + DebugMetaPropertiesApplier.apply(options, it) + } + + val expected = SentryPackage("maven", "1.0") + assertContains(SentryIntegrationPackageStorage.getInstance().packages, expected) + } + + @Test + fun `reads build-tool and adds it to packages with unknown version if build-tool-version is absent`() { + val sut = fixture.getSut( + content = listOf( + """ + #Generated by sentry-maven-plugin + #Wed May 17 15:33:34 CEST 2023 + io.sentry.ProguardUuids=34077988-a0e5-4839-9618-7400e1616d1b + io.sentry.bundle-ids=88ba82db-cd26-4c09-8b31-21461d286b68 + io.sentry.build-tool=maven + """.trimIndent() + ) + ) + + val options = SentryOptions() + assertNotNull(sut.loadDebugMeta()) { + DebugMetaPropertiesApplier.apply(options, it) + } + + val expected = SentryPackage("maven", "unknown") + assertContains(SentryIntegrationPackageStorage.getInstance().packages, expected) + } + + @Test + fun `does not add build-tool to packages if absent`() { + val sut = fixture.getSut( + content = listOf( + """ + #Generated manually + #Wed May 17 15:33:34 CEST 2023 + io.sentry.ProguardUuids=34077988-a0e5-4839-9618-7400e1616d1b + io.sentry.bundle-ids=88ba82db-cd26-4c09-8b31-21461d286b68 + """.trimIndent() + ) + ) + + val options = SentryOptions() + assertNotNull(sut.loadDebugMeta()) { + DebugMetaPropertiesApplier.apply(options, it) + } + + assertFalse { SentryIntegrationPackageStorage.getInstance().packages.any { it.name.equals("io.sentry.build-tool") } } + } } From 2a4fb268f200254e8ccc615af0b3cfe549d6866a Mon Sep 17 00:00:00 2001 From: lcian Date: Thu, 3 Apr 2025 16:55:13 +0200 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64bb994195..9cd7aaaa5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Internal + +- Read build tool info from `sentry-debug-meta.properties` and attach it to events ([#4314](https://github.com/getsentry/sentry-java/pull/4314)) + ## 8.6.0 ### Behavioral Changes