Skip to content

Commit 58fade7

Browse files
runningcodeclaude
andauthored
ref(snapshots): Register snapshot upload tasks per variant (#1105)
* ref(snapshots): Register snapshot upload tasks per variant Move SentryUploadSnapshotsTask registration from SentryPlugin (global) into AndroidComponentsConfig (per-variant), matching the pattern used by proguard mappings, source bundles, and native symbols. This wires applicationId directly from ApplicationVariant, eliminating the need for the SnapshotsExtension and manual appId configuration. Also wires sentry telemetry into the task. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(snapshots): Add --snapshots-path CLI option to upload task Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 8014f2c commit 58fade7

5 files changed

Lines changed: 51 additions & 41 deletions

File tree

plugin-build/src/main/kotlin/io/sentry/android/gradle/AndroidComponentsConfig.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import io.sentry.android.gradle.tasks.SentryGenerateIntegrationListTask
2929
import io.sentry.android.gradle.tasks.SentryGenerateProguardUuidTask
3030
import io.sentry.android.gradle.tasks.SentryUploadAppArtifactTask
3131
import io.sentry.android.gradle.tasks.SentryUploadProguardMappingsTask
32+
import io.sentry.android.gradle.tasks.SentryUploadSnapshotsTask
3233
import io.sentry.android.gradle.tasks.configureNativeSymbolsTask
3334
import io.sentry.android.gradle.tasks.dependencies.SentryExternalDependenciesReportTaskV2
3435
import io.sentry.android.gradle.telemetry.SentryTelemetryService
@@ -141,6 +142,15 @@ fun ApplicationAndroidComponentsExtension.configure(
141142
sentryProject,
142143
)
143144

145+
variant.configureSnapshotsTasks(
146+
project,
147+
extension,
148+
sentryTelemetryProvider,
149+
cliExecutable,
150+
sentryOrg,
151+
sentryProject,
152+
)
153+
144154
// we can't hook into asset generation, nor manifest merging, as all those tasks
145155
// are dependencies of the compilation / minification task
146156
// and as our ProGuard UUID depends on minification itself; creating a
@@ -452,6 +462,30 @@ private fun ApplicationVariant.configureDistributionPropertiesTask(
452462
return null
453463
}
454464

465+
private fun ApplicationVariant.configureSnapshotsTasks(
466+
project: Project,
467+
extension: SentryPluginExtension,
468+
sentryTelemetryProvider: Provider<SentryTelemetryService>,
469+
cliExecutable: Provider<String>,
470+
sentryOrg: String?,
471+
sentryProject: String?,
472+
) {
473+
val variant = AndroidVariant74(this)
474+
val sentryProps = getPropertiesFilePath(project, variant)
475+
476+
SentryUploadSnapshotsTask.register(
477+
project = project,
478+
extension = extension,
479+
sentryTelemetryProvider = sentryTelemetryProvider,
480+
cliExecutable = cliExecutable,
481+
sentryOrgOverride = sentryOrg,
482+
sentryProjectOverride = sentryProject,
483+
applicationId = applicationId,
484+
sentryProperties = sentryProps,
485+
taskSuffix = name.capitalized,
486+
)
487+
}
488+
455489
/**
456490
* Configure the upload AAB and APK tasks and set them up as finalizers on the respective producer
457491
* tasks

plugin-build/src/main/kotlin/io/sentry/android/gradle/SentryPlugin.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.android.build.api.variant.ApplicationAndroidComponentsExtension
44
import io.sentry.BuildConfig
55
import io.sentry.android.gradle.autoinstall.installDependencies
66
import io.sentry.android.gradle.extensions.SentryPluginExtension
7-
import io.sentry.android.gradle.tasks.SentryUploadSnapshotsTask
87
import io.sentry.android.gradle.util.AgpVersions
98
import java.io.File
109
import javax.inject.Inject
@@ -66,14 +65,6 @@ constructor(private val buildEvents: BuildEventListenerRegistryInternal) : Plugi
6665
sentryProjectParameter,
6766
)
6867

69-
SentryUploadSnapshotsTask.register(
70-
project,
71-
extension,
72-
cliExecutable,
73-
sentryOrgParameter,
74-
sentryProjectParameter,
75-
)
76-
7768
project.installDependencies(extension, true)
7869
}
7970
}

plugin-build/src/main/kotlin/io/sentry/android/gradle/extensions/SentryPluginExtension.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,6 @@ abstract class SentryPluginExtension @Inject constructor(project: Project) {
127127
vcsInfoAction.execute(vcsInfo)
128128
}
129129

130-
val snapshots: SnapshotsExtension = objects.newInstance(SnapshotsExtension::class.java)
131-
132-
/** Configure the snapshots upload. */
133-
@Experimental
134-
fun snapshots(snapshotsAction: Action<SnapshotsExtension>) {
135-
snapshotsAction.execute(snapshots)
136-
}
137-
138130
/**
139131
* Disables or enables the reporting of dependencies metadata for Sentry. If enabled the plugin
140132
* will collect external dependencies and will take care of uploading them to Sentry as part of

plugin-build/src/main/kotlin/io/sentry/android/gradle/extensions/SnapshotsExtension.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

plugin-build/src/main/kotlin/io/sentry/android/gradle/tasks/SentryUploadSnapshotsTask.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package io.sentry.android.gradle.tasks
22

3-
import io.sentry.android.gradle.SentryPropertiesFileProvider.getPropertiesFilePath
43
import io.sentry.android.gradle.autoinstall.SENTRY_GROUP
54
import io.sentry.android.gradle.extensions.SentryPluginExtension
5+
import io.sentry.android.gradle.telemetry.SentryTelemetryService
6+
import io.sentry.android.gradle.telemetry.withSentryTelemetry
67
import io.sentry.android.gradle.util.asSentryCliExec
78
import org.gradle.api.Project
89
import org.gradle.api.file.DirectoryProperty
@@ -14,6 +15,7 @@ import org.gradle.api.tasks.Optional
1415
import org.gradle.api.tasks.PathSensitive
1516
import org.gradle.api.tasks.PathSensitivity
1617
import org.gradle.api.tasks.TaskProvider
18+
import org.gradle.api.tasks.options.Option
1719
import org.gradle.work.DisableCachingByDefault
1820

1921
@DisableCachingByDefault(because = "Uploads should not be cached")
@@ -30,6 +32,11 @@ abstract class SentryUploadSnapshotsTask : SentryCliExecTask() {
3032
@get:PathSensitive(PathSensitivity.RELATIVE)
3133
abstract val snapshotsPath: DirectoryProperty
3234

35+
@Option(option = "snapshots-path", description = "Path to the snapshots directory to upload")
36+
fun setSnapshotsPathOption(path: String) {
37+
snapshotsPath.set(project.file(path))
38+
}
39+
3340
@get:Input @get:Optional abstract val vcsHeadSha: Property<String>
3441
@get:Input @get:Optional abstract val vcsBaseSha: Property<String>
3542
@get:Input @get:Optional abstract val vcsProvider: Property<String>
@@ -61,20 +68,22 @@ abstract class SentryUploadSnapshotsTask : SentryCliExecTask() {
6168
fun register(
6269
project: Project,
6370
extension: SentryPluginExtension,
71+
sentryTelemetryProvider: Provider<SentryTelemetryService>?,
6472
cliExecutable: Provider<String>,
6573
sentryOrgOverride: String?,
6674
sentryProjectOverride: String?,
75+
applicationId: Provider<String>,
76+
sentryProperties: String?,
77+
taskSuffix: String,
6778
): TaskProvider<SentryUploadSnapshotsTask> {
6879
return project.tasks.register(
69-
"sentryUploadSnapshots",
80+
"sentryUploadSnapshots$taskSuffix",
7081
SentryUploadSnapshotsTask::class.java,
7182
) { task ->
7283
task.workingDir(project.rootDir)
7384
task.debug.set(extension.debug)
7485
task.cliExecutable.set(cliExecutable)
75-
task.sentryProperties.set(
76-
getPropertiesFilePath(project)?.let { file -> project.file(file) }
77-
)
86+
task.sentryProperties.set(sentryProperties?.let { project.file(it) })
7887
task.sentryOrganization.set(
7988
sentryOrgOverride?.let { project.provider { it } } ?: extension.org
8089
)
@@ -83,8 +92,7 @@ abstract class SentryUploadSnapshotsTask : SentryCliExecTask() {
8392
)
8493
task.sentryAuthToken.set(extension.authToken)
8594
task.sentryUrl.set(extension.url)
86-
task.appId.set(extension.snapshots.appId)
87-
task.snapshotsPath.set(extension.snapshots.path)
95+
task.appId.set(applicationId)
8896
task.vcsHeadSha.set(extension.vcsInfo.headSha)
8997
task.vcsBaseSha.set(extension.vcsInfo.baseSha)
9098
task.vcsProvider.set(extension.vcsInfo.vcsProvider)
@@ -93,6 +101,8 @@ abstract class SentryUploadSnapshotsTask : SentryCliExecTask() {
93101
task.vcsHeadRef.set(extension.vcsInfo.headRef)
94102
task.vcsBaseRef.set(extension.vcsInfo.baseRef)
95103
task.vcsPrNumber.set(extension.vcsInfo.prNumber)
104+
sentryTelemetryProvider?.let { task.sentryTelemetryService.set(it) }
105+
task.withSentryTelemetry(extension, sentryTelemetryProvider)
96106
task.asSentryCliExec()
97107
}
98108
}

0 commit comments

Comments
 (0)