blob: 937f2b8057b591d24411b228ab60e42e1bd44644 [file] [log] [blame]
/*
* 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.
*/
boolean isUsingArtifactory = rootProject.hasProperty('artifactoryUser') && rootProject.artifactoryUser &&
rootProject.hasProperty('artifactoryPassword') && rootProject.artifactoryPassword
if (isUsingArtifactory) {
logger.lifecycle 'Deployment environment set to Artifactory'
}
def embedded = ['asm', 'asm-util', 'asm-analysis', 'asm-tree', 'asm-commons', 'antlr', 'commons-cli', 'openbeans']
def removeJarjaredDependencies = { p ->
p.dependencies.removeAll(p.dependencies.findAll {
it.groupId == 'org.codehaus.groovy' || embedded.contains(it.artifactId)
})
}
allprojects {
if (project == rootProject || modules().contains(project)) {
apply plugin: 'maven'
apply from: "${rootProject.projectDir}/gradle/pomconfigurer.gradle"
install.dependsOn checkCompatibility
}
}
apply from: 'gradle/backports.gradle'
ext.basename = { String s -> s.take(s.lastIndexOf('.')) }
ext.deriveFile = { File archive, String suffix -> new File(archive.parent, basename(archive.name) + "-${suffix}.jar") }
allprojects {
if (project == rootProject || modules().contains(project)) {
ext.addSigFile = { File sigFile, c, ext, n ->
if (sigFile.exists()) {
project.artifacts.add('archives', sigFile) {
if (n) {
name = n
}
classifier = c
type = 'asc'
extension = ext
}
}
}
ext.signWithClassifier = { String c, File f ->
if (rootProject.isReleaseVersion) {
signing.sign(c, f)
def ascFile = new File(f.parent, f.name + '.asc')
addSigFile(ascFile, c, 'jar.asc', null)
}
}
ext.signWithName = { String baseName, File f ->
if (rootProject.isReleaseVersion) {
signing.sign(null, f)
def ascFile = new File(f.parent, f.name + '.asc')
addSigFile(ascFile, null, 'jar.asc', baseName)
}
}
ext.signArchiveTask = { archiveTask ->
if (rootProject.isReleaseVersion) {
signing.sign(archiveTask.classifier, archiveTask.archivePath)
def ascFile = new File(archiveTask.destinationDir, archiveTask.archiveName + '.asc')
addSigFile(ascFile, archiveTask.classifier, archiveTask.extension + '.asc', archiveTask.baseName)
}
}
uploadArchives {
repositories {
mavenDeployer {
pom pomConfigureClosure
beforeDeployment { MavenDeployment deployment -> if (rootProject.isReleaseVersion) signing.signPom(deployment) }
}
}
}
install {
repositories {
mavenInstaller {
pom pomConfigureClosure
beforeDeployment { MavenDeployment deployment -> if (rootProject.isReleaseVersion) signing.signPom(deployment) }
}
}
}
artifacts {
archives jarjar.outputFile
archives sourceJar
archives javadocJar
archives groovydocJar
}
configurations.archives.with {
artifacts.removeAll(artifacts.find { it.name =~ 'raw' } )
}
[uploadArchives, install]*.with {
dependsOn([grooidjar, jarjar, sourceJar, javadocJar, groovydocJar])
if (rootProject.indyCapable()) {
dependsOn jarjarWithIndy
}
doFirst {
if (rootProject.indyCapable()) {
project.artifacts.add('archives', jarjarWithIndy.outputFile)
}
def grooidJarFile = rootProject.ext.deriveFile(jarjar.outputFile, 'grooid')
if (grooidJarFile.exists()) {
project.artifacts.add('archives', grooidJarFile)
}
}
}
install {
doFirst {
// gradle doesn't expect us to mutate configurations like we do here
// so signing the configuration won't work and we do it manually here
signWithName(jar.baseName, jarjar.outputFile)
signArchiveTask(sourceJar)
signArchiveTask(javadocJar)
signArchiveTask(groovydocJar)
def indyJar = rootProject.ext.deriveFile(jarjar.outputFile, 'indy')
if (indyJar.exists()) {
signWithClassifier('indy', indyJar)
}
def grooidJarFile = rootProject.ext.deriveFile(jarjar.outputFile, 'grooid')
if (grooidJarFile.exists()) {
signWithClassifier('grooid', grooidJarFile)
}
}
}
}
}
// the root project generates several alternate artifacts, e.g. 'groovy-all'
// we don't want them in the root project so add them as artifacts with a modified name
// we'll exclude the original artifacts during publication with an exclude pattern
def configureAdditionalArtifacts = {
if (!rootProject.indyCapable()) {
throw new GradleException("Indy must be enabled to upload archives")
}
project.artifacts.add('archives', distBin) { name = 'groovy-binary' }
project.artifacts.add('archives', sourceAllJar) { name = 'groovy-all' }
project.artifacts.add('archives', javadocAllJar) { name = 'groovy-all' }
project.artifacts.add('archives', groovydocAllJar) { name = 'groovy-all' }
signArchiveTask(sourceAllJar)
signArchiveTask(javadocAllJar)
signArchiveTask(groovydocAllJar)
if (isReleaseVersion) {
signing.sign(distBin.archivePath)
def ascFile = new File(distBin.destinationDir, distBin.archiveName + '.asc')
if (ascFile.exists()) {
project.artifacts.add('archives', ascFile) {
name = 'groovy-binary'
type = 'asc'
extension = 'zip.asc'
}
}
signing.sign(distSrc.archivePath)
signing.sign(distDoc.archivePath)
signing.sign(dist.archivePath)
}
tasks.withType(Jar).matching { it.name.startsWith('backport') }.each { t ->
project.artifacts.add('archives', t.archivePath) {
name = t.baseName
type = 'jar'
classifier = t.classifier
}
if (isReleaseVersion) {
signing.sign(t.classifier, t.archivePath)
def ascFile = new File(t.destinationDir, t.archiveName + '.asc')
if (ascFile.exists()) {
project.artifacts.add('archives', ascFile) {
name = t.baseName
classifier = t.classifier
type = 'asc'
extension = t.extension + '.asc'
}
}
}
}
}
def optionalModules = [
'groovy-bsf',
'groovy-cli-commons',
'groovy-dateutil',
'groovy-jaxb',
'groovy-yaml'
]
def pomAll = {
addFilter('groovy') { artifact, file ->
!(artifact.name.contains('groovy-all')) &&
!(artifact.name.contains('groovy-binary')) &&
!(artifact.name.contains('backport'))
}
addFilter('all') { artifact, file ->
// add an arbitrary artifact, so that the pom file is generated
// we adjust the packaging attribute later
artifact.name.contains('groovy-binary')
}
addFilter('binary') { artifact, file ->
artifact.name.contains('groovy-binary')
}
project.backports.each { pkg, classes ->
addFilter("backports-$pkg") { artifact, file ->
artifact.name == "groovy-backports-$pkg"
}
}
// regular pom
def groovypom = pom('groovy', pomConfigureClosure)
// pom for binary zip
def binarypom = pom('binary', pomConfigureClosureWithoutTweaks)
binarypom.artifactId = 'groovy-binary'
// poms for backports
project.backports.each { pkg, classes ->
String id = "backports-$pkg"
def backportPom = pom(id, pomConfigureClosureWithoutTweaks)
backportPom.artifactId = "groovy-$id"
backportPom.whenConfigured { p ->
p.dependencies.clear()
}
}
groovypom.whenConfigured(removeJarjaredDependencies)
binarypom.whenConfigured { p ->
p.dependencies.clear()
}
// pom for "all" dependencies
def allpom = pom('all', pomConfigureClosureWithoutTweaks)
allpom.artifactId = 'groovy-all'
allpom.whenConfigured { p ->
// this is the only way to get a handle on `maven.Dependency`
def dependencyClass = p.dependencies[0].getClass()
p.dependencies.clear()
// defer setting packaging until here otherwise gets overwritten
p.packaging = 'pom'
allprojects {
if (it.name.startsWith('groovy') && !optionalModules.contains(it.name)) {
def dep = dependencyClass.newInstance()
dep.groupId = 'org.codehaus.groovy'
dep.artifactId = it.name
dep.version = version
p.dependencies.add(dep)
}
}
}
beforeDeployment { MavenDeployment deployment -> if (isReleaseVersion) signing.signPom(deployment) }
}
install {
// make sure dependencies poms are built *before* the all pom
dependsOn(modules()*.install)
dependsOn([sourceAllJar, javadocAllJar, groovydocAllJar, distBin, distDoc, dist, distBin])
repositories {
mavenInstaller pomAll
}
doFirst configureAdditionalArtifacts
}
uploadArchives {
// make sure dependencies poms are built *before* the all pom
dependsOn(modules()*.uploadArchives)
dependsOn([sourceAllJar, javadocAllJar, groovydocAllJar, distBin, distDoc, dist, distBin])
repositories {
mavenDeployer pomAll
}
doFirst configureAdditionalArtifacts
}