/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */


// This adds a root project task to install all artifacts to a build-local
// Maven repository (so that pom files can be manually reviewed).

configure(rootProject) {
  ext {
    mavenLocalDir = file("${buildDir}/maven-local")
  }

  task mavenToLocalFolder() {
    group "Publishing"
    description "Publish Maven JARs and POMs locally to " + mavenLocalDir

    doLast {
      logger.lifecycle "Local maven artifacts (poms, jars) created at: ${mavenLocalDir}"
    }
  }

  task mavenToLocalRepo() {
    group "Publishing"
    description "Publish Maven JARs and POMs to current user's local maven repository."
  }

  task mavenLocalClean(type: Delete) {
    delete mavenLocalDir
  }

  configure(subprojects.findAll { it.path in rootProject.published }) {
    plugins.withType(PublishingPlugin) {
      publishing {
        repositories {
          maven {
            name = 'build'
            url = mavenLocalDir
          }
        }
      }

      tasks.matching { it.name == "publishJarsPublicationToMavenLocal" }.all { task ->
        mavenToLocalRepo.dependsOn task
      }

      tasks.matching { it.name == "publishJarsPublicationToBuildRepository" }.all { task ->
        // Clean local repo prior to republishing artifacts.
        task.dependsOn mavenLocalClean
        // Attach to root project's mavenLocal task.
        mavenToLocalFolder.dependsOn task
      }
    }
  }
}