From 38edf60b42a28a07e24a78ea45b0e9b83b905faf Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 31 Jul 2023 12:12:03 +0200 Subject: [PATCH 1/3] disable source context tasks if not enabled --- .../gradle/sourcecontext/SourceContext.kt | 15 ++++++++ .../SentryGenerateDebugMetaPropertiesTask.kt | 2 +- .../android/gradle/util/PropertiesUtil.kt | 8 +++++ .../SentrySourceContextNonAndroidTest.kt | 36 +++++++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt index 796adbdcf..e5763646c 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt @@ -65,6 +65,21 @@ class SourceContext { taskSuffix ) + project.afterEvaluate { + generateBundleIdTask.configure { + it.enabled = extension.includeSourceContext.get() + } + collectSourcesTask.configure { + it.enabled = extension.includeSourceContext.get() + } + bundleSourcesTask.configure { + it.enabled = extension.includeSourceContext.get() + } + uploadSourceBundleTask.configure { + it.enabled = extension.includeSourceContext.get() + } + } + return SourceContextTasks( generateBundleIdTask, collectSourcesTask, diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTask.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTask.kt index 2b10cb3eb..78b0ed64d 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTask.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTask.kt @@ -34,7 +34,7 @@ abstract class SentryGenerateDebugMetaPropertiesTask : DirectoryOutputTask() { val props = Properties() props.setProperty("io.sentry.build-tool", "gradle") inputFiles.forEach { inputFile -> - props.putAll(PropertiesUtil.load(inputFile)) + PropertiesUtil.loadMaybe(inputFile)?.let { props.putAll(it) } } debugMetaPropertiesFile.writer().use { props.store( diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/util/PropertiesUtil.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/util/PropertiesUtil.kt index 0281fc20e..572c780ff 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/util/PropertiesUtil.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/util/PropertiesUtil.kt @@ -16,5 +16,13 @@ class PropertiesUtil { } } } + + fun loadMaybe(file: File): Properties? { + if (!file.exists()) { + return null + } + + return load(file) + } } } diff --git a/plugin-build/src/test/kotlin/io/sentry/android/gradle/SentrySourceContextNonAndroidTest.kt b/plugin-build/src/test/kotlin/io/sentry/android/gradle/SentrySourceContextNonAndroidTest.kt index 04b572858..e3d1ecaba 100644 --- a/plugin-build/src/test/kotlin/io/sentry/android/gradle/SentrySourceContextNonAndroidTest.kt +++ b/plugin-build/src/test/kotlin/io/sentry/android/gradle/SentrySourceContextNonAndroidTest.kt @@ -42,6 +42,42 @@ class SentrySourceContextNonAndroidTest( assertTrue { "BUILD SUCCESSFUL" in result.output } } + @Test + fun `skips bundle and upload tasks if disabled`() { + appBuildFile.writeText( + // language=Groovy + """ + plugins { + id "org.jetbrains.kotlin.jvm" + id "io.sentry.jvm.gradle" + } + + sentry { + includeSourceContext = false + } + """.trimIndent() + ) + + sentryPropertiesFile.writeText("") + + testProjectDir.withDummyKtFile() + testProjectDir.withDummyJavaFile() + + val result = runner + .appendArguments("app:assemble") + .build() + + assertEquals( + result.task(":app:sentryUploadSourceBundleJava")?.outcome, + SKIPPED + ) + assertEquals( + result.task(":app:sentryBundleSourcesJava")?.outcome, + SKIPPED + ) + assertTrue { "BUILD SUCCESSFUL" in result.output } + } + @Test fun `bundles source context`() { appBuildFile.writeText( From 37128500c38b3bc4078bc14e382ccbfb46621e86 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 31 Jul 2023 12:40:32 +0200 Subject: [PATCH 2/3] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d81e8647..c20aea11c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ - Add release information args to proguard mapping upload task ([#476](https://github.com/getsentry/sentry-android-gradle-plugin/pull/476)) - Auto install Sentry integrations for Java Backend, Desktop, etc. ([#521](https://github.com/getsentry/sentry-android-gradle-plugin/pull/521)) +### Fixes + +- Disable source context tasks if not enabled ([#536](https://github.com/getsentry/sentry-android-gradle-plugin/pull/536)) + ### Dependencies - Bump CLI from v2.19.1 to v2.20.0 ([#520](https://github.com/getsentry/sentry-android-gradle-plugin/pull/520), [#531](https://github.com/getsentry/sentry-android-gradle-plugin/pull/531)) From 4314b077b78065eb13cbc3063e2029e7c33032db Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 1 Aug 2023 12:09:41 +0200 Subject: [PATCH 3/3] use onlyIf --- .../gradle/sourcecontext/BundleSourcesTask.kt | 6 +++++- .../sourcecontext/CollectSourcesTask.kt | 3 +++ .../sourcecontext/GenerateBundleIdTask.kt | 3 +++ .../gradle/sourcecontext/SourceContext.kt | 19 ++++--------------- .../sourcecontext/UploadSourceBundleTask.kt | 6 +++++- .../gradle/tasks/GenerateBundleIdTaskTest.kt | 2 ++ ...ntryGenerateDebugMetaPropertiesTaskTest.kt | 2 ++ 7 files changed, 24 insertions(+), 17 deletions(-) diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/BundleSourcesTask.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/BundleSourcesTask.kt index 97fe2b383..62371c109 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/BundleSourcesTask.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/BundleSourcesTask.kt @@ -140,6 +140,7 @@ abstract class BundleSourcesTask : Exec() { sentryOrg: Provider, sentryProject: Provider, sentryAuthToken: Property, + includeSourceContext: Property, taskSuffix: String = "" ): TaskProvider { return project.tasks.register( @@ -157,7 +158,10 @@ abstract class BundleSourcesTask : Exec() { } task.bundleIdFile.set(generateDebugIdTask.flatMap { it.outputFile }) task.output.set(output) - task.onlyIf { !task.sourceDir.asFileTree.isEmpty } + task.onlyIf { + includeSourceContext.getOrElse(false) && + !task.sourceDir.asFileTree.isEmpty + } } } } diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/CollectSourcesTask.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/CollectSourcesTask.kt index abf78d935..ae82bec8c 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/CollectSourcesTask.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/CollectSourcesTask.kt @@ -10,6 +10,7 @@ import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.InputFiles @@ -42,6 +43,7 @@ abstract class CollectSourcesTask : DirectoryOutputTask() { project: Project, sourceDirs: Provider>, output: Provider, + includeSourceContext: Property, taskSuffix: String = "" ): TaskProvider { return project.tasks.register( @@ -50,6 +52,7 @@ abstract class CollectSourcesTask : DirectoryOutputTask() { ) { task -> task.sourceDirs.setFrom(sourceDirs) task.output.set(output) + task.onlyIf { includeSourceContext.getOrElse(false) } } } } diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/GenerateBundleIdTask.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/GenerateBundleIdTask.kt index db912351a..62884ad63 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/GenerateBundleIdTask.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/GenerateBundleIdTask.kt @@ -7,6 +7,7 @@ import java.util.UUID import org.gradle.api.Project 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.Internal import org.gradle.api.tasks.TaskAction @@ -50,6 +51,7 @@ abstract class GenerateBundleIdTask : PropertiesFileOutputTask() { fun register( project: Project, output: Provider? = null, + includeSourceContext: Property, taskSuffix: String = "" ): TaskProvider { val generateBundleIdTask = project.tasks.register( @@ -57,6 +59,7 @@ abstract class GenerateBundleIdTask : PropertiesFileOutputTask() { GenerateBundleIdTask::class.java ) { task -> output?.let { task.output.set(it) } + task.onlyIf { includeSourceContext.getOrElse(false) } } return generateBundleIdTask } diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt index e5763646c..072c95e15 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/SourceContext.kt @@ -28,6 +28,7 @@ class SourceContext { val generateBundleIdTask = GenerateBundleIdTask.register( project, output = paths.bundleIdDir, + extension.includeSourceContext, taskSuffix ) @@ -35,6 +36,7 @@ class SourceContext { project, sourceFiles, output = paths.sourceDir, + extension.includeSourceContext, taskSuffix ) @@ -49,6 +51,7 @@ class SourceContext { sentryOrg?.let { project.provider { it } } ?: extension.org, sentryProject?.let { project.provider { it } } ?: extension.projectName, extension.authToken, + extension.includeSourceContext, taskSuffix ) @@ -62,24 +65,10 @@ class SourceContext { sentryOrg?.let { project.provider { it } } ?: extension.org, sentryProject?.let { project.provider { it } } ?: extension.projectName, extension.authToken, + extension.includeSourceContext, taskSuffix ) - project.afterEvaluate { - generateBundleIdTask.configure { - it.enabled = extension.includeSourceContext.get() - } - collectSourcesTask.configure { - it.enabled = extension.includeSourceContext.get() - } - bundleSourcesTask.configure { - it.enabled = extension.includeSourceContext.get() - } - uploadSourceBundleTask.configure { - it.enabled = extension.includeSourceContext.get() - } - } - return SourceContextTasks( generateBundleIdTask, collectSourcesTask, diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/UploadSourceBundleTask.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/UploadSourceBundleTask.kt index 625f2c462..71794f588 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/UploadSourceBundleTask.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/sourcecontext/UploadSourceBundleTask.kt @@ -122,6 +122,7 @@ abstract class UploadSourceBundleTask : Exec() { sentryOrg: Provider, sentryProject: Provider, sentryAuthToken: Property, + includeSourceContext: Property, taskSuffix: String = "" ): TaskProvider { return project.tasks.register( @@ -138,7 +139,10 @@ abstract class UploadSourceBundleTask : Exec() { SentryPropertiesFileProvider.getPropertiesFilePath(project, variant)?.let { task.sentryProperties.set(File(it)) } - task.onlyIf { !task.sourceBundleDir.asFileTree.isEmpty } + task.onlyIf { + includeSourceContext.getOrElse(false) && + !task.sourceBundleDir.asFileTree.isEmpty + } } } } diff --git a/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/GenerateBundleIdTaskTest.kt b/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/GenerateBundleIdTaskTest.kt index ccd642f5b..d06ed2be4 100644 --- a/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/GenerateBundleIdTaskTest.kt +++ b/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/GenerateBundleIdTaskTest.kt @@ -21,6 +21,7 @@ class GenerateBundleIdTaskTest { GenerateBundleIdTask.register( project, project.layout.buildDirectory.dir("dummy/folder/"), + project.objects.property(Boolean::class.java).convention(true), "test" ) @@ -41,6 +42,7 @@ class GenerateBundleIdTaskTest { GenerateBundleIdTask.register( project, project.layout.buildDirectory.dir("dummy/folder/"), + project.objects.property(Boolean::class.java).convention(true), "test" ) val expectedFile = File(project.buildDir, "dummy/folder/sentry-bundle-id.properties") diff --git a/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTaskTest.kt b/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTaskTest.kt index feec5ee2d..d78ab91ec 100644 --- a/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTaskTest.kt +++ b/plugin-build/src/test/kotlin/io/sentry/android/gradle/tasks/SentryGenerateDebugMetaPropertiesTaskTest.kt @@ -20,6 +20,7 @@ class SentryGenerateDebugMetaPropertiesTaskTest { val bundleIdTask = GenerateBundleIdTask.register( project, project.layout.buildDirectory.dir("dummy/folder/"), + project.objects.property(Boolean::class.java).convention(true), "test" ) val proguardIdTask = SentryGenerateProguardUuidTask.register( @@ -57,6 +58,7 @@ class SentryGenerateDebugMetaPropertiesTaskTest { val bundleIdTask = GenerateBundleIdTask.register( project, project.layout.buildDirectory.dir("dummy/folder/"), + project.objects.property(Boolean::class.java).convention(true), "test" ) val proguardIdTask = SentryGenerateProguardUuidTask.register(