Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package io.sentry.android.gradle.extensions

import javax.inject.Inject
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.jetbrains.annotations.ApiStatus.Experimental

Expand All @@ -16,4 +17,8 @@ open class DistributionExtension @Inject constructor(objects: ObjectFactory) {
*/
val enabledVariants: SetProperty<String> =
objects.setProperty(String::class.java).convention(emptySet())

/** Auth token used for distribution operations. */
val authToken: Property<String> =

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There’s also sentry.authToken (this is sentry.distribution.authToken). This could be confusing since the names may shadow each other. Open to naming suggestions.

objects.property(String::class.java).convention(System.getenv("SENTRY_DISTRIBUTION_AUTH_TOKEN"))
}
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,7 @@ abstract class GenerateDistributionPropertiesTask : PropertiesFileOutputTask() {
}
task.projectSlug.set(projectProvider)

// Auth token only from extension (no fallback)
task.orgAuthToken.set(extension.authToken)
task.orgAuthToken.set(extension.distribution.authToken)

task.buildConfiguration.set(buildConfiguration)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,23 @@ class DistributionExtensionTest {

assertEquals(setOf("freeDebug", "paidRelease"), extension.enabledVariants.get())
}

@Test
fun `authToken uses environment variable by default`() {
val project = ProjectBuilder.builder().build()
val extension = project.objects.newInstance(DistributionExtension::class.java)

val envToken = System.getenv("SENTRY_DISTRIBUTION_AUTH_TOKEN")
assertEquals(envToken, extension.authToken.orNull)
}

@Test
fun `authToken can be configured`() {
val project = ProjectBuilder.builder().build()
val extension = project.objects.newInstance(DistributionExtension::class.java)

extension.authToken.set("test-token")

assertEquals("test-token", extension.authToken.get())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class GenerateDistributionPropertiesTaskTest {
val extension = project.extensions.findByName("sentry") as SentryPluginExtension
extension.org.set("test-org")
extension.projectName.set("test-project")
extension.authToken.set("test-token")
extension.distribution.authToken.set("test-token")

val task: TaskProvider<GenerateDistributionPropertiesTask> =
GenerateDistributionPropertiesTask.register(
Expand Down Expand Up @@ -64,7 +64,7 @@ class GenerateDistributionPropertiesTaskTest {
val extension = project.extensions.findByName("sentry") as SentryPluginExtension
extension.org.set("extension-org")
extension.projectName.set("extension-project")
extension.authToken.set("extension-token")
extension.distribution.authToken.set("extension-token")

val task: TaskProvider<GenerateDistributionPropertiesTask> =
GenerateDistributionPropertiesTask.register(
Expand All @@ -89,7 +89,7 @@ class GenerateDistributionPropertiesTaskTest {
// ext properties should take precedence
assertEquals("ext-org", props.getProperty(ORG_SLUG_PROPERTY))
assertEquals("ext-project", props.getProperty(PROJECT_SLUG_PROPERTY))
// auth token should still come from extension as it's not in ext
// auth token should still come from distribution extension
assertEquals("extension-token", props.getProperty(DISTRIBUTION_AUTH_TOKEN_PROPERTY))
}

Expand Down Expand Up @@ -132,16 +132,17 @@ class GenerateDistributionPropertiesTaskTest {

assertEquals("props-org", props.getProperty(ORG_SLUG_PROPERTY))
assertEquals("props-project", props.getProperty(PROJECT_SLUG_PROPERTY))
// Auth token should not be present (no fallback)
assertNull(props.getProperty(DISTRIBUTION_AUTH_TOKEN_PROPERTY))
// Distribution auth token should match environment variable (if set)
val envToken = System.getenv("SENTRY_DISTRIBUTION_AUTH_TOKEN")
assertEquals(envToken, props.getProperty(DISTRIBUTION_AUTH_TOKEN_PROPERTY))
}

@Test
fun `extension properties override sentry properties file`() {
val project = createProject()
val extension = project.extensions.findByName("sentry") as SentryPluginExtension
extension.org.set("extension-org")
extension.authToken.set("extension-token")
extension.distribution.authToken.set("extension-token")
Comment thread
chromy marked this conversation as resolved.

// Create a sentry.properties file
val sentryPropertiesFile = File(project.projectDir, "sentry.properties")
Expand Down Expand Up @@ -178,7 +179,7 @@ class GenerateDistributionPropertiesTaskTest {
assertEquals("extension-org", props.getProperty(ORG_SLUG_PROPERTY))
// Project should fall back to properties file
assertEquals("props-project", props.getProperty(PROJECT_SLUG_PROPERTY))
// Auth token comes from extension only
// Distribution auth token comes from distribution extension
assertEquals("extension-token", props.getProperty(DISTRIBUTION_AUTH_TOKEN_PROPERTY))
}

Expand Down Expand Up @@ -208,7 +209,9 @@ class GenerateDistributionPropertiesTaskTest {
// Should not write null values
assertNull(props.getProperty(ORG_SLUG_PROPERTY))
assertNull(props.getProperty(PROJECT_SLUG_PROPERTY))
assertNull(props.getProperty(DISTRIBUTION_AUTH_TOKEN_PROPERTY))
// Distribution auth token should match environment variable (if set)
val envToken = System.getenv("SENTRY_DISTRIBUTION_AUTH_TOKEN")
assertEquals(envToken, props.getProperty(DISTRIBUTION_AUTH_TOKEN_PROPERTY))
// Build configuration should always be present
assertEquals("debug", props.getProperty(BUILD_CONFIGURATION_PROPERTY))
}
Expand Down
Loading