Skip to content

Commit 8432443

Browse files
authored
Merge e997d5a into 0eaac1e
2 parents 0eaac1e + e997d5a commit 8432443

File tree

6 files changed

+119
-2
lines changed

6 files changed

+119
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
### Features
66

7-
- Add `installGroupsOverride` parameter and `installGroups` property to Build Distribution SDK ([#5062](https://github.com/getsentry/sentry-java/pull/5062))
7+
- Add `installGroupsOverride` parameter to Build Distribution SDK for programmatic filtering, with support for configuration via properties file using `io.sentry.distribution.install-groups-override` ([#5066](https://github.com/getsentry/sentry-java/pull/5066))
8+
- Add `installGroups` property to Build Distribution SDK ([#5062](https://github.com/getsentry/sentry-java/pull/5062))
89
- Update Android targetSdk to API 36 (Android 16) ([#5016](https://github.com/getsentry/sentry-java/pull/5016))
910
- Add AndroidManifest support for Spotlight configuration via `io.sentry.spotlight.enable` and `io.sentry.spotlight.url` ([#5064](https://github.com/getsentry/sentry-java/pull/5064))
1011

sentry-android-distribution/src/main/java/io/sentry/android/distribution/DistributionIntegration.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ public class DistributionIntegration(context: Context) : Integration, IDistribut
150150
versionCode = versionCode,
151151
versionName = versionName,
152152
buildConfiguration = buildConfiguration,
153+
installGroupsOverride = sentryOptions.distribution.installGroupsOverride,
153154
)
154155
} catch (e: PackageManager.NameNotFoundException) {
155156
sentryOptions.logger.log(SentryLevel.ERROR, e, "Failed to get package info")

sentry/api/sentry.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3754,6 +3754,7 @@ public final class io/sentry/SentryOptions$Cron {
37543754

37553755
public final class io/sentry/SentryOptions$DistributionOptions {
37563756
public field buildConfiguration Ljava/lang/String;
3757+
public field installGroupsOverride Ljava/util/List;
37573758
public field orgAuthToken Ljava/lang/String;
37583759
public field orgSlug Ljava/lang/String;
37593760
public field projectSlug Ljava/lang/String;

sentry/src/main/java/io/sentry/SentryOptions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,9 @@ public static final class DistributionOptions {
664664

665665
/** Optional build configuration name for filtering (e.g., "debug", "release", "staging") */
666666
public @Nullable String buildConfiguration = null;
667+
668+
/** Optional install groups for filtering updates */
669+
public @Nullable List<String> installGroupsOverride = null;
667670
}
668671

669672
private @NotNull DistributionOptions distribution = new DistributionOptions();

sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,14 @@ private static void applyDistributionOptions(
9898
final @Nullable String projectSlug = getDistributionProjectSlug(properties);
9999
final @Nullable String orgAuthToken = getDistributionAuthToken(properties);
100100
final @Nullable String buildConfiguration = getDistributionBuildConfiguration(properties);
101+
final @Nullable String installGroupsOverride =
102+
getDistributionInstallGroupsOverride(properties);
101103

102104
if (orgSlug != null
103105
|| projectSlug != null
104106
|| orgAuthToken != null
105-
|| buildConfiguration != null) {
107+
|| buildConfiguration != null
108+
|| installGroupsOverride != null) {
106109
final @NotNull SentryOptions.DistributionOptions distributionOptions =
107110
options.getDistribution();
108111

@@ -139,6 +142,26 @@ private static void applyDistributionOptions(
139142
distributionOptions.buildConfiguration = buildConfiguration;
140143
}
141144

145+
if (installGroupsOverride != null
146+
&& !installGroupsOverride.isEmpty()
147+
&& distributionOptions.installGroupsOverride == null) {
148+
final @NotNull String[] groups = installGroupsOverride.split(",", -1);
149+
final @NotNull List<String> groupList = new java.util.ArrayList<>();
150+
for (final String group : groups) {
151+
final String trimmedGroup = group.trim();
152+
if (!trimmedGroup.isEmpty()) {
153+
groupList.add(trimmedGroup);
154+
}
155+
}
156+
if (!groupList.isEmpty()) {
157+
options
158+
.getLogger()
159+
.log(
160+
SentryLevel.DEBUG, "Distribution install groups override found: %s", groupList);
161+
distributionOptions.installGroupsOverride = groupList;
162+
}
163+
}
164+
142165
// We only process the first properties file that contains distribution options
143166
// to maintain consistency with other properties like proguardUuid
144167
break;
@@ -165,4 +188,9 @@ private static void applyDistributionOptions(
165188
final @NotNull Properties debugMetaProperties) {
166189
return debugMetaProperties.getProperty("io.sentry.distribution.build-configuration");
167190
}
191+
192+
private static @Nullable String getDistributionInstallGroupsOverride(
193+
final @NotNull Properties debugMetaProperties) {
194+
return debugMetaProperties.getProperty("io.sentry.distribution.install-groups-override");
195+
}
168196
}

sentry/src/test/java/io/sentry/util/DebugMetaPropertiesApplierTest.kt

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,87 @@ class DebugMetaPropertiesApplierTest {
138138
assertEquals("", options.distribution.orgAuthToken)
139139
assertNull(options.distribution.buildConfiguration)
140140
}
141+
142+
@Test
143+
fun `applies installGroupsOverride from properties`() {
144+
val properties = Properties()
145+
properties.setProperty(
146+
"io.sentry.distribution.install-groups-override",
147+
"internal,beta-testers",
148+
)
149+
150+
val options = SentryOptions()
151+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
152+
153+
assertEquals(listOf("internal", "beta-testers"), options.distribution.installGroupsOverride)
154+
}
155+
156+
@Test
157+
fun `applies installGroupsOverride with trimming`() {
158+
val properties = Properties()
159+
properties.setProperty(
160+
"io.sentry.distribution.install-groups-override",
161+
" internal , beta-testers , qa ",
162+
)
163+
164+
val options = SentryOptions()
165+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
166+
167+
assertEquals(
168+
listOf("internal", "beta-testers", "qa"),
169+
options.distribution.installGroupsOverride,
170+
)
171+
}
172+
173+
@Test
174+
fun `applies single installGroupsOverride value`() {
175+
val properties = Properties()
176+
properties.setProperty("io.sentry.distribution.install-groups-override", "internal")
177+
178+
val options = SentryOptions()
179+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
180+
181+
assertEquals(listOf("internal"), options.distribution.installGroupsOverride)
182+
}
183+
184+
@Test
185+
fun `does not override existing installGroupsOverride`() {
186+
val properties = Properties()
187+
properties.setProperty("io.sentry.distribution.install-groups-override", "properties-group")
188+
189+
val options = SentryOptions()
190+
options.distribution.installGroupsOverride = listOf("existing-group")
191+
192+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
193+
194+
assertEquals(listOf("existing-group"), options.distribution.installGroupsOverride)
195+
}
196+
197+
@Test
198+
fun `does not apply empty installGroupsOverride`() {
199+
val properties = Properties()
200+
properties.setProperty("io.sentry.distribution.install-groups-override", "")
201+
202+
val options = SentryOptions()
203+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
204+
205+
assertNull(options.distribution.installGroupsOverride)
206+
}
207+
208+
@Test
209+
fun `ignores empty values in installGroupsOverride list`() {
210+
val properties = Properties()
211+
properties.setProperty(
212+
"io.sentry.distribution.install-groups-override",
213+
"internal,,beta-testers, ,qa",
214+
)
215+
216+
val options = SentryOptions()
217+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
218+
219+
assertEquals(
220+
listOf("internal", "beta-testers", "qa"),
221+
options.distribution.installGroupsOverride,
222+
)
223+
}
141224
}

0 commit comments

Comments
 (0)