blob: 4d9f6dc0368eddcf83e63493a4b630737d021095 [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.
*/
/**
* Gradle script used to perform Ace releases (really similar to Apache Ace build.gradle)
*/
import aQute.bnd.build.Workspace
// Our release number, which has to be monotonically incremented each time we make a new release.
version = '2.1.0'
// Base name for release archives Full name will be ${archivesBaseName}-${version}-${classifier} (e.g. apache-ace-2.0.1-src)
archivesBaseName = "apache-ace"
// Our Apache svn Staging repo
ext.svnStagingPath = "https://dist.apache.org/repos/dist/dev/ace"
// Our Apache svn Release repo
ext.svnReleasePath = "https://dist.apache.org/repos/dist/release/ace"
apply plugin: 'java'
apply from: file("rat.gradle")
// Configure RAT plugin to ignore some files
rat {
excludes = [
'.git/**',
'.gradle/**',
'.metadata/**',
'org.apache.ace.client.repository/test/*.txt',
'org.apache.ace.client.repository/test/*.xml',
'org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css',
'**/.project',
'**/.classpath',
'**/.settings/**',
'**/.recommenders/**',
'**/*.iml',
'**/*.iws',
'**/*.ipr',
'**/build.xml',
'**/DEPENDENCIES',
'**/README*',
'**/.gitignore',
'**/generated/**',
'**/packageinfo',
'**/bundle-cache/**',
'**/test-output/**',
'**/store/**',
'**/bin_test/**',
'**/bin/**',
'cnf/**',
'gradle/wrapper/**',
'gradle.properties',
'gradlew',
'gradlew.bat',
'rat-report.xml',
]
}
// Setup the workspace
Workspace workspace
workspace = Workspace.getWorkspace(".")
task stageSrc(type: Zip) {
description = 'Create a source archive in the local staging folder'
classifier = 'src'
destinationDir = file('staging')
with([
// LICENSE, NOTICE, README
copySpec {
from 'resources/src'
},
copySpec {
from '..'
include('*/.project',
'*/.classpath',
'*/.settings/**',
'*/src/**',
'*/test/**',
'*/resources/**',
'*/*.bnd',
'*/*.bndrun',
'run-*/conf/**',
'cnf/ext/**',
'cnf/gradle/*.gradle',
'build.gradle',
'settings.gradle',
'gradle.properties')
}
] as CopySpec[])
into "${archivesBaseName}-${version}-src"
}
task stageDeps(type: Zip) {
description = 'Create a deps archive in the local staging folder'
classifier = 'deps'
destinationDir = file('staging')
with([
// LICENSE, NOTICE, README
copySpec {
from 'resources/deps'
},
copySpec {
from '..'
include('cnf/buildrepo/**',
'cnf/localrepo/**',
'cnf/releaserepo/**',
'cnf/lib/**',
'cnf/plugins/**',
'cnf/gradle/*.jar',
'gradle/**',
'gradlew',
'gradlew.bat')
}
] as CopySpec[]);
into "${archivesBaseName}-${version}-src"
}
def aceLauncherCopySpec = copySpec {
from '../org.apache.ace.agent.launcher/generated/org.apache.ace.agent.launcher.felix.jar'
rename('org.apache.ace.agent.launcher.felix.jar', 'ace-launcher.jar')
}
def obrContentsCopySpec = [
aceLauncherCopySpec,
copySpec {
from '../cnf/localrepo/org.apache.felix.deployment.rp.autoconf/org.apache.felix.deployment.rp.autoconf-0.1.8.jar'
}
] as CopySpec[];
task stageBin(type: Zip) {
description = 'Create a binary release archive in the local staging folder'
classifier = 'bin'
destinationDir = file('staging')
with([
// LICENSE, NOTICE, README
copySpec {
from 'resources/bin'
},
// server-allinone
copySpec {
from '../run-server-allinone/generated/distributions/executable/server-allinone.jar'
into 'server-allinone'
},
copySpec {
from '../run-server-allinone/conf'
into 'server-allinone/conf'
},
copySpec {
with obrContentsCopySpec
into 'server-allinone/store'
},
// server
copySpec {
from '../run-server/generated/distributions/executable/server.jar'
into 'server'
},
copySpec {
from '../run-server/conf'
into 'server/conf'
},
// relay
copySpec {
from '../run-relay/generated/distributions/executable/relay.jar'
into 'relay'
},
copySpec {
from '../run-relay/conf'
into 'relay/conf'
},
// client
copySpec {
from '../run-client/generated/distributions/executable/client.jar'
into 'client'
},
copySpec {
from '../run-client/conf'
into 'client/conf'
},
// obr
copySpec {
from '../run-obr/generated/distributions/executable/obr.jar'
into 'obr'
},
copySpec {
from '../run-obr/conf'
into 'obr/conf'
},
copySpec {
with obrContentsCopySpec
into 'obr/store'
},
//target
copySpec {
from '../run-target/conf'
into 'target/conf'
},
copySpec {
from '../run-target/scripts'
into 'target/bin'
},
copySpec {
with aceLauncherCopySpec
into 'target/bin'
}
] as CopySpec[])
into "${archivesBaseName}-${version}"
}
task stageMaven(type: Zip) {
description = 'Create an archive in the local staging folder containing artifacts that can be uploaded to a maven repo'
classifier = 'maven'
destinationDir = file('staging')
with([
// LICENSE, NOTICE, README
copySpec {
from 'resources/bin'
},
// agent
copySpec {
from '../org.apache.ace.agent/generated'
into 'org.apache.ace.agent'
include('org.apache.ace.agent.pom',
'org.apache.ace.agent.jar',
'org.apache.ace.agent-sources.jar',
'org.apache.ace.agent-javadoc.jar')
}
] as CopySpec[]);
into "${archivesBaseName}-${version}-maven"
}
task signStaging() {
description = 'Signs the local staging distribution.'
dependsOn = ['stageSrc', 'stageDeps', 'stageBin', 'stageMaven']
doLast {
fileTree("staging").visit { FileVisitDetails details ->
logger.lifecycle(" Signing " + details.file.path)
ant.exec(executable: 'gpg', dir: 'staging') {
ant.arg(line: '--armor')
ant.arg(line: '--output')
ant.arg(line: details.file.name + ".asc")
ant.arg(line: "--detach-sig")
ant.arg(line: details.file.name)
}
ant.exec(executable: 'gpg', dir: 'staging', output: "staging/" + details.file.name + ".md5") {
ant.arg(line: '--print-md')
ant.arg(line: 'MD5')
ant.arg(line: details.file.name)
}
ant.exec(executable: 'gpg', dir: 'staging', output: "staging/" + details.file.name + ".sha") {
ant.arg(line: '--print-md')
ant.arg(line: 'SHA512')
ant.arg(line: details.file.name)
}
}
}
}
task makeStaging() {
description = 'Stage new release'
group = 'release'
dependsOn = ['signStaging']
}
task commitToStaging() {
description = 'Commits the local staging to the Apache svn staging repository.'
group = 'release'
doLast {
getProject().exec {
commandLine 'svn',
'import', 'staging', svnStagingPath + "/${archivesBaseName}-${version}" + "/",
'-m', "Staging Apache Ace release ${version}."
}
}
}
task promoteToRelease() {
description = 'Moves the staging repository to the Apache release repository.'
group = 'release'
doLast {
// Move all artifacts from the staging repo to the release repo
getProject().exec {
commandLine 'svn',
'move', svnStagingPath + "/${archivesBaseName}-${version}" ,
svnReleasePath,
'-m', "Releasing Apache Ace release ${version}."
}
}
}
task deleteFromStaging() {
description = 'Cancels the staged distribution from the Apache staging repository.'
group = 'release'
doLast {
getProject().exec {
commandLine 'svn',
'delete', svnStagingPath + "/${archivesBaseName}-${version}/",
"-m", "Removing Apache Ace release ${version} from staging."
}
}
}
task clean(overwrite: true) << {
new File("build/staging").deleteDir()
new File("rat-report.xml").delete()
}
task cleanStaging << {
description = 'Clean the local staging directory.'
new File("build/staging").deleteDir()
new File("build/staging-copy").deleteDir()
}