From e24fb91ab2783e104b3dc51bf721f8e6412216f1 Mon Sep 17 00:00:00 2001 From: Allison Morris Date: Wed, 5 Jun 2019 14:33:14 -0800 Subject: [PATCH] Create `publishChangedToBuildDir` task. This change adds this new task. It leverages the implementation used for the `checkChanged` and similar tasks. --- .../plugins/publish/PublishingPlugin.groovy | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/publish/PublishingPlugin.groovy b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/publish/PublishingPlugin.groovy index 43d82fe654a..e057b5e34cc 100644 --- a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/publish/PublishingPlugin.groovy +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/publish/PublishingPlugin.groovy @@ -14,10 +14,12 @@ package com.google.firebase.gradle.plugins.publish +import com.google.firebase.gradle.plugins.ci.AffectedProjectFinder import com.google.firebase.gradle.plugins.FirebaseLibraryExtension import digital.wup.android_maven_publish.AndroidMavenPublishPlugin import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.ProjectDependency import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.tasks.bundling.Jar import org.gradle.api.tasks.bundling.Zip @@ -83,8 +85,12 @@ class PublishingPlugin implements Plugin { def publishAllToLocal = project.task('publishAllToLocal') def publishAllToBuildDir = project.task('publishAllToBuildDir') + def publishChangedToBuildDir = project.task('publishChangedToBuildDir') def firebasePublish = project.task('firebasePublish') + def changedProjects = + new AffectedProjectFinder(project, changedPaths(project.rootDir), []).find() + project.getGradle().projectsEvaluated { project.subprojects { Project sub -> if (!sub.plugins.hasPlugin('firebase-library')) { @@ -121,10 +127,27 @@ class PublishingPlugin implements Plugin { publisher.decorate(sub, it) } } + + // Add changed projects to publishChangedToBuildDir. + if (changedProjects.contains(sub)) { + publishChangedToBuildDir.dependsOn "$sub.path:publishMavenAarPublicationToBuildDirRepository" + def dependencies = sub.configurations.implementation.dependencies + for (def dep : dependencies) { + if (dep instanceof ProjectDependency) { + def task = dep.getDependencyProject() + .tasks.findByName("publishMavenAarPublicationToBuildDirRepository") + if (task != null) { + publishChangedToBuildDir.dependsOn task + } + } + } + } + publishAllToLocal.dependsOn "$sub.path:publishMavenAarPublicationToMavenLocal" publishAllToBuildDir.dependsOn "$sub.path:publishMavenAarPublicationToBuildDirRepository" } + } project.task('publishProjectsToMavenLocal') { projectsToPublish.each { projectToPublish -> @@ -155,6 +178,13 @@ class PublishingPlugin implements Plugin { } } + private static Set changedPaths(File workDir) { + return 'git diff --name-only --submodule=diff HEAD@{0} HEAD@{1}' + .execute([], workDir) + .text + .readLines() + } + private static String getPublishTask(Project p, String repoName) { return "${p.path}:publishMavenAarPublicationTo$repoName" }