diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FireEscapeArtifactPlugin.java b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FireEscapeArtifactPlugin.java deleted file mode 100644 index 815897103fb..00000000000 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FireEscapeArtifactPlugin.java +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.firebase.gradle.plugins; - -import java.io.File; -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.Task; -import org.gradle.api.publish.PublishingExtension; -import org.gradle.api.publish.maven.MavenPublication; -import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; -import org.gradle.api.tasks.bundling.Jar; -import org.gradle.api.tasks.bundling.Zip; - -/** - * Injects release related artifact into the maven publication. - * - *

The artifact contains the following files in it: - * - *

- */ -public class FireEscapeArtifactPlugin implements Plugin { - private Project project; - - @Override - public void apply(Project project) { - this.project = project; - project.afterEvaluate( - p -> { - FirebaseLibraryExtension firebaseLibrary = - p.getExtensions().findByType(FirebaseLibraryExtension.class); - if (firebaseLibrary == null) { - return; - } - - Zip fireEscapeTask = - p.getTasks() - .create( - "mavenAarFireEscapeArtifact", Zip.class, t -> t.setClassifier("fireescape")); - - p.getPlugins() - .withType( - MavenPublishPlugin.class, - plugin -> - p.getExtensions() - .configure( - PublishingExtension.class, - pub -> - pub.getPublications() - .withType( - MavenPublication.class, - publication -> { - if ("mavenAar".equals(publication.getName())) { - configurePublication( - publication, - fireEscapeTask, - firebaseLibrary.type); - } - }))); - }); - } - - private void configurePublication( - MavenPublication publication, Zip artifactTask, LibraryType libraryType) { - publication.artifact(artifactTask); - artifactTask.from(apiTxtFileTask()); - if (libraryType.equals(LibraryType.ANDROID)) { - artifactTask.from(proguardMappingFileTask()); - } - publication.artifact(javadocTask()); - } - - private Task proguardMappingFileTask() { - return project - .getTasks() - .create( - "fireEscapeProguardMapping", - task -> { - project - .getTasks() - .all( - it -> { - if (it.getName().equals("assembleRelease")) { - task.dependsOn(it); - } - }); - task.getOutputs() - .file(new File(project.getBuildDir(), "outputs/mapping/release/mapping.txt")); - }); - } - - private Task apiTxtFileTask() { - return project - .getTasks() - .create( - "fireEscapeApiTxt", - task -> { - task.dependsOn(TasksKt.JAVADOC_TASK_NAME); - task.getOutputs().file(new File(project.getBuildDir(), "tmp/javadoc/api.txt")); - }); - } - - private Task javadocTask() { - return project - .getTasks() - .create( - "fireescapeJavadocJar", - Jar.class, - javadoc -> { - javadoc.dependsOn(TasksKt.JAVADOC_TASK_NAME); - javadoc.from(new File(project.getBuildDir(), "/docs/javadoc/reference")); - javadoc.include("**/*"); - javadoc.setArchiveName("fireescape-javadoc.jar"); - javadoc.setClassifier("javadoc"); - }); - } -} diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FireEscapeArtifactPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FireEscapeArtifactPlugin.kt new file mode 100644 index 00000000000..dd53d7b52f4 --- /dev/null +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FireEscapeArtifactPlugin.kt @@ -0,0 +1,78 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.firebase.gradle.plugins + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.api.tasks.bundling.Zip +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.getByName +import org.gradle.kotlin.dsl.register + +class FireEscapeArtifactPlugin : Plugin { + + override fun apply(target: Project) { + target.afterEvaluate { + if (supportsMavenPublishing(target)) { + val apiTxtFile = registerApiTxtFileTask(project) + val proguardMappingFile = registerProguardMappingFileTask(project) + val javadoc = registerJavadocTask(project) + + val zippedArtifact = + project.tasks.register("maven") { + from(apiTxtFile) + if (project.isAndroid()) { + from(proguardMappingFile) + } + } + + extensions.configure { + publications.getByName("mavenAar") { + artifact(zippedArtifact) + artifact(javadoc) + } + } + } + } + } + private fun supportsMavenPublishing(project: Project): Boolean = + project.plugins.hasPlugin(MavenPublishPlugin::class.java) + + private fun registerProguardMappingFileTask(project: Project): TaskProvider = + project.tasks.register("fireEscapeProguardMapping") { + outputs.file(project.fileFromBuildDir("outputs/mapping/release/mapping.txt")) + } + + private fun registerApiTxtFileTask(project: Project): TaskProvider = + project.tasks.register("fireEscapeApiText") { + dependsOn(JAVADOC_TASK_NAME) + outputs.file(project.fileFromBuildDir("tmp/javadoc/api.txt")) + } + + private fun registerJavadocTask(project: Project): TaskProvider = + project.tasks.register("fireescapeJavadocJar") { + dependsOn(JAVADOC_TASK_NAME) + project.fileFromBuildDir("/docs/javadoc/reference") + include("**/*") + archiveFileName.set("fireescape-javadoc.jar") + archiveClassifier.set("javadoc") + } +}