-
-
Notifications
You must be signed in to change notification settings - Fork 31
/
SentryUploadNativeSymbolsTask.kt
107 lines (87 loc) · 2.85 KB
/
SentryUploadNativeSymbolsTask.kt
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package io.sentry.android.gradle.tasks
import io.sentry.android.gradle.util.info
import java.io.File
import org.apache.tools.ant.taskdefs.condition.Os
import org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Exec
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional
abstract class SentryUploadNativeSymbolsTask : Exec() {
init {
description = "Uploads native symbols to Sentry"
}
@get:Input
abstract val cliExecutable: Property<String>
@get:Input
abstract val autoUploadNativeSymbol: Property<Boolean>
@get:InputFile
@get:Optional
abstract val sentryProperties: RegularFileProperty
@get:Input
@get:Optional
abstract val sentryOrganization: Property<String>
@get:Input
@get:Optional
abstract val sentryProject: Property<String>
@get:Input
abstract val includeNativeSources: Property<Boolean>
@get:Internal
abstract val variantName: Property<String>
override fun exec() {
computeCommandLineArgs().let {
commandLine(it)
logger.info("cli args: $it")
}
setSentryPropertiesEnv()
super.exec()
}
internal fun setSentryPropertiesEnv() {
val sentryProperties = sentryProperties.orNull
if (sentryProperties != null) {
environment("SENTRY_PROPERTIES", sentryProperties)
} else {
logger.info { "sentryProperties is null" }
}
}
internal fun computeCommandLineArgs(): List<String> {
val args = mutableListOf(
cliExecutable.get(),
"upload-dif"
)
if (!autoUploadNativeSymbol.get()) {
args.add("--no-upload")
}
sentryOrganization.orNull?.let {
args.add("--org")
args.add(it)
}
sentryProject.orNull?.let {
args.add("--project")
args.add(it)
}
val sep = File.separator
// eg absoluteProjectFolderPath/build/intermediates/merged_native_libs/{variantName}
// where {variantName} could be debug/release...
args.add(
File(
project.buildDir,
"intermediates${sep}merged_native_libs${sep}${variantName.get()}"
).absolutePath
)
// Only include sources if includeNativeSources is enabled, as this is opt-in feature
if (includeNativeSources.get()) {
args.add("--include-sources")
}
if (Os.isFamily(FAMILY_WINDOWS)) {
args.add(0, "cmd")
args.add(1, "/c")
}
return args
}
}