diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt index 6781e0b724d..dcd16315deb 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt @@ -120,10 +120,11 @@ abstract class DackkaPlugin : Plugin { project.afterEvaluate { if (shouldWePublish(project)) { val generateDocumentation = registerGenerateDackkaDocumentationTask(project) - val outputDirectory = generateDocumentation.flatMap { it.outputDirectory } - val firesiteTransform = registerFiresiteTransformTask(project, outputDirectory) - val copyJavaDocToCommonDirectory = registerCopyJavaDocToCommonDirectoryTask(project, outputDirectory) - val copyKotlinDocToCommonDirectory = registerCopyKotlinDocToCommonDirectoryTask(project, outputDirectory) + val dackkaFilesDirectory = generateDocumentation.flatMap { it.outputDirectory } + val firesiteTransform = registerFiresiteTransformTask(project, dackkaFilesDirectory) + val transformedFilesDirectory = firesiteTransform.flatMap { it.outputDirectory } + val copyJavaDocToCommonDirectory = registerCopyJavaDocToCommonDirectoryTask(project, transformedFilesDirectory) + val copyKotlinDocToCommonDirectory = registerCopyKotlinDocToCommonDirectoryTask(project, transformedFilesDirectory) project.tasks.register("kotlindoc") { group = "documentation" @@ -238,12 +239,12 @@ abstract class DackkaPlugin : Plugin { clientName.set(project.firebaseConfigValue { artifactId }) } - // TODO(b/243833009): Make task cacheable - private fun registerFiresiteTransformTask(project: Project, outputDirectory: Provider) = + private fun registerFiresiteTransformTask(project: Project, dackkaFilesDirectory: Provider) = project.tasks.register("firesiteTransform") { mustRunAfter("generateDackkaDocumentation") - dackkaFiles.set(outputDirectory) + dackkaFiles.set(dackkaFilesDirectory) + outputDirectory.set(project.file("${project.buildDir}/dackkaTransformedFiles")) } // TODO(b/246593212): Migrate doc files to single directory @@ -287,5 +288,7 @@ abstract class DackkaPlugin : Plugin { group = "cleanup" delete("${project.buildDir}/dackkaDocumentation") + delete("${project.buildDir}/dackkaTransformedFiles") + delete("${project.rootProject.buildDir}/firebase-kotlindoc") } } diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FiresiteTransformTask.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FiresiteTransformTask.kt index 1ddf097820c..ac7fcd81363 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FiresiteTransformTask.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FiresiteTransformTask.kt @@ -3,7 +3,11 @@ package com.google.firebase.gradle.plugins import java.io.File import org.gradle.api.DefaultTask import org.gradle.api.provider.Property +import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction /** @@ -21,10 +25,15 @@ import org.gradle.api.tasks.TaskAction * **Please note:** * This task is idempotent- meaning it can safely be ran multiple times on the same set of files. */ +@CacheableTask abstract class FiresiteTransformTask : DefaultTask() { @get:InputDirectory + @get:PathSensitive(PathSensitivity.RELATIVE) abstract val dackkaFiles: Property + @get:OutputDirectory + abstract val outputDirectory: Property + @TaskAction fun build() { val namesOfFilesWeDoNotNeed = listOf( @@ -33,14 +42,18 @@ abstract class FiresiteTransformTask : DefaultTask() { "packages.html", "package-list" ) + val rootDirectory = dackkaFiles.get() + val targetDirectory = outputDirectory.get() + targetDirectory.deleteRecursively() + + rootDirectory.walkTopDown().forEach { + if (it.name !in namesOfFilesWeDoNotNeed) { + val relativePath = it.toRelativeString(rootDirectory) + val newFile = it.copyTo(File("${targetDirectory.path}/$relativePath"), true) - dackkaFiles.get().walkTopDown().forEach { - if (it.name in namesOfFilesWeDoNotNeed) { - it.delete() - } else { when (it.extension) { - "html" -> it.fixHTMLFile() - "yaml" -> it.fixYamlFile() + "html" -> newFile.fixHTMLFile() + "yaml" -> newFile.fixYamlFile() } } }