From 992aaf8adb96e61e8f919514b109f33258f77aef Mon Sep 17 00:00:00 2001 From: Aurimas Liutikas Date: Fri, 5 Sep 2025 08:56:29 -0700 Subject: [PATCH] Make sure clean task skips when there is nothing to clean Fixes #330 Test: Added a new test --- .../plugin/LicensesCleanUpTask.groovy | 2 ++ .../gms/oss/licenses/plugin/EndToEndTest.kt | 32 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/oss-licenses-plugin/src/main/groovy/com/google/android/gms/oss/licenses/plugin/LicensesCleanUpTask.groovy b/oss-licenses-plugin/src/main/groovy/com/google/android/gms/oss/licenses/plugin/LicensesCleanUpTask.groovy index 815e9b4..704cc98 100644 --- a/oss-licenses-plugin/src/main/groovy/com/google/android/gms/oss/licenses/plugin/LicensesCleanUpTask.groovy +++ b/oss-licenses-plugin/src/main/groovy/com/google/android/gms/oss/licenses/plugin/LicensesCleanUpTask.groovy @@ -20,6 +20,7 @@ import org.gradle.api.DefaultTask import org.gradle.api.file.DirectoryProperty import org.gradle.api.tasks.InputDirectory import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.SkipWhenEmpty import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault @@ -29,6 +30,7 @@ import org.gradle.work.DisableCachingByDefault @DisableCachingByDefault(because = "Local deletion operation") abstract class LicensesCleanUpTask extends DefaultTask { @Optional + @SkipWhenEmpty @InputDirectory abstract DirectoryProperty getGeneratedDirectory() diff --git a/oss-licenses-plugin/src/test/java/com/google/android/gms/oss/licenses/plugin/EndToEndTest.kt b/oss-licenses-plugin/src/test/java/com/google/android/gms/oss/licenses/plugin/EndToEndTest.kt index 6fa9c93..64050fd 100644 --- a/oss-licenses-plugin/src/test/java/com/google/android/gms/oss/licenses/plugin/EndToEndTest.kt +++ b/oss-licenses-plugin/src/test/java/com/google/android/gms/oss/licenses/plugin/EndToEndTest.kt @@ -3,6 +3,7 @@ package com.google.android.gms.oss.licenses.plugin import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome import org.junit.Assert +import org.junit.Before import org.junit.Test import org.junit.rules.TemporaryFolder import org.junit.Rule @@ -30,9 +31,11 @@ class EndToEndTest(private val agpVersion: String, private val gradleVersion: St private fun isBuiltInKotlinEnabled() = agpVersion.startsWith("9.") - @Test - fun basic() { - val projectDir = tempDirectory.newFolder("basic") + private lateinit var projectDir: File + + @Before + fun setup() { + projectDir = tempDirectory.newFolder("basic") File(projectDir, "build.gradle").writeText( """ plugins { @@ -70,6 +73,10 @@ class EndToEndTest(private val agpVersion: String, private val gradleVersion: St } """.trimIndent() ) + } + + @Test + fun basic() { val result = GradleRunner.create() .withProjectDir(projectDir) .withGradleVersion(gradleVersion) @@ -84,7 +91,26 @@ class EndToEndTest(private val agpVersion: String, private val gradleVersion: St val metadata = File(projectDir, "build/generated/resources/releaseOssLicensesTask/raw/third_party_license_metadata") Assert.assertEquals(expectedContents(isBuiltInKotlinEnabled()), metadata.readText()) + + val cleanResult = GradleRunner.create() + .withProjectDir(projectDir) + .withGradleVersion(gradleVersion) + .withArguments("clean", "-s") + .build() + Assert.assertFalse(File(projectDir, "build").exists()) + Assert.assertEquals(cleanResult.task(":clean")!!.outcome, TaskOutcome.SUCCESS) } + + @Test + fun clean() { + val result = GradleRunner.create() + .withProjectDir(projectDir) + .withGradleVersion(gradleVersion) + .withArguments("clean", "-s") + .build() + Assert.assertEquals(result.task(":clean")!!.outcome, TaskOutcome.UP_TO_DATE) + } + } private fun expectedDependenciesJson(builtInKotlinEnabled: Boolean) = """[