-
-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathGenerateBundleIdTask.kt
More file actions
84 lines (69 loc) · 2.92 KB
/
GenerateBundleIdTask.kt
File metadata and controls
84 lines (69 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package io.sentry.android.gradle.sourcecontext
import io.sentry.android.gradle.extensions.SentryPluginExtension
import io.sentry.android.gradle.tasks.PropertiesFileOutputTask
import io.sentry.android.gradle.telemetry.SentryTelemetryService
import io.sentry.android.gradle.telemetry.withSentryTelemetry
import io.sentry.android.gradle.util.info
import java.util.Properties
import java.util.UUID
import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.Directory
import org.gradle.api.file.RegularFile
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
@CacheableTask
abstract class GenerateBundleIdTask : PropertiesFileOutputTask() {
init {
description =
"Generates a unique build ID to be used when bundling sources for upload to Sentry"
@Suppress("LeakingThis") onlyIf { includeSourceContext.getOrElse(false) }
}
@get:Input abstract val includeSourceContext: Property<Boolean>
@get:PathSensitive(PathSensitivity.RELATIVE)
@get:InputFiles
abstract val sourceDirs: ConfigurableFileCollection
@get:Internal
override val outputFile: Provider<RegularFile>
get() = output.file(SENTRY_BUNDLE_ID_OUTPUT)
@TaskAction
fun generateProperties() {
val outputDir = output.get().asFile
outputDir.mkdirs()
val debugId = UUID.randomUUID()
val props = Properties().also { it.setProperty(SENTRY_BUNDLE_ID_PROPERTY, debugId.toString()) }
outputFile.get().asFile.writer().use { writer -> props.store(writer, "") }
logger.info { "GenerateSourceBundleIdTask - outputFile: $outputFile, debugId: $debugId" }
}
companion object {
internal const val SENTRY_BUNDLE_ID_OUTPUT = "sentry-bundle-id.properties"
const val SENTRY_BUNDLE_ID_PROPERTY = "io.sentry.bundle-ids"
fun register(
project: Project,
extension: SentryPluginExtension,
sentryTelemetryProvider: Provider<SentryTelemetryService>?,
sourceDirs: Provider<out Collection<Directory>>?,
output: Provider<Directory>? = null,
includeSourceContext: Property<Boolean>,
taskSuffix: String = "",
): TaskProvider<GenerateBundleIdTask> {
val generateBundleIdTask =
project.tasks.register(taskName(taskSuffix), GenerateBundleIdTask::class.java) { task ->
output?.let { task.output.set(it) }
task.includeSourceContext.set(includeSourceContext)
task.withSentryTelemetry(extension, sentryTelemetryProvider)
task.sourceDirs.setFrom(sourceDirs)
}
return generateBundleIdTask
}
fun taskName(taskSuffix: String) = "generateSentryBundleId$taskSuffix"
}
}