moved new dm4 from sandbox to trunk.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1663056 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/release/build.gradle b/dependencymanager/release/build.gradle
new file mode 100644
index 0000000..ea12b1d
--- /dev/null
+++ b/dependencymanager/release/build.gradle
@@ -0,0 +1,197 @@
+/*
+ * 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 DM releases (really similar to Apache ACE build.xml)
+ */
+import aQute.bnd.build.Workspace
+
+// Our release number, which has to be monotonically incremented each time we make a new release.
+ext.dmRelease = "r1"
+
+// Our Apache svn Staging repo
+ext.svnStagingPath = "https://dist.apache.org/repos/dist/dev/felix"
+
+// Our Apache svn Release repo
+ext.svnReleasePath = "https://dist.apache.org/repos/dist/release/felix"
+
+apply plugin: 'java'
+apply from: file("rat.gradle")
+
+// Add bnd as a build dependency
+buildscript {
+ dependencies {
+ classpath files('cnf/gradle/biz.aQute.bnd.gradle.jar')
+ }
+}
+
+// Configure RAT plugin to ignore some files
+rat {
+ excludes = [
+ 'rat-report.xml',
+ '**/.git/**',
+ '**/.gradle/**',
+ '**/.project',
+ '**/.settings/**',
+ '**/*.iml',
+ '**/*.iws',
+ '**/*.ipr',
+ '**/.classpath',
+ 'cnf/**',
+ 'gradle/wrapper/**',
+ 'release/**',
+ 'gradlew',
+ 'README',
+ '**/DEPENDENCIES',
+ '**/README',
+ '**/.gitignore',
+ '**/generated/**',
+ 'doc/**',
+ '**/packageinfo',
+ '**/*.txt',
+ 'docs/**',
+ '.metadata/**'
+ ]
+}
+
+// Setup the workspace
+Workspace workspace
+workspace = Workspace.getWorkspace(".")
+
+task makeStaging << {
+ description = 'Packages the source and binary distributions.'
+
+ // Package source and source bin dependencies distributions.
+ logger.lifecycle(" Packaging source distributions.")
+ def topdir="org.apache.felix.dependencymanager-" + dmRelease
+ ant.zip(destfile: "staging/"+topdir+'-src.zip') {
+ zipfileset(dir: '../cnf', prefix: topdir+"-src/cnf", includes: ".project,.classpath,src/**,*.bnd,ext/**")
+ zipfileset(dir: '..', prefix: topdir+"-src", includes: '*.gradle,*.properties')
+ zipfileset(dir: 'resources/src', prefix: topdir+"-src", includes: '*')
+ new File('.').eachFile {
+ if(new File(it, 'bnd.bnd').exists()) {
+ def bndProject = workspace.getProject(it.name)
+ if (! bndProject.isNoBundles() && ! bndProject.getName().endsWith(".benchmark")) {
+ zipfileset(dir: "../${bndProject.name}", prefix: topdir+"-src/${bndProject.name}",
+ includes: "*.gradle,.project,.classpath,.settings/**,src/**,test/**,*.bnd,*.bndrun,run-*/conf/**,resources/**,README*")
+ }
+ }
+ }
+ }
+
+ // Package binary dependencies, needed to build the source distributions.
+ logger.lifecycle(" Packaging binary dependencies.")
+ ant.zip(destfile: "staging/"+topdir+"-deps.zip") {
+ ant.zipfileset(dir: '..', prefix: topdir+"-src", includes: 'gradlew')
+ ant.zipfileset(dir: '../gradle', prefix: topdir+"-src/gradle", includes: '*')
+ ant.zipfileset(dir: 'resources/deps', prefix: topdir+"-src", includes: '*')
+ ant.zipfileset(dir: '../cnf', prefix: topdir+"-src/cnf",
+ includes: 'buildrepo/**,localrepo/**,releaserepo/**,plugins/**,gradle/**')
+ }
+
+ // Package binaries as a simple collection of bundles. We use same license files as for src distrib.
+ logger.lifecycle(" Packaging binary distribution.")
+ ant.zip(destfile: "staging/"+topdir+"-bin.zip") {
+ ant.mappedresources() {
+ // don't include itests, samples, and benchmark in the convenience binary release.
+ ant.fileset(dir: '..', includes: '*/generated/*.jar', excludes: '*.itest/generated/*.jar,*.benchmark/generated/*.jar,*.samples/generated/*.jar')
+ ant.chainedmapper() {
+ ant.flattenmapper()
+ ant.globmapper(from: '*', to: topdir+'-bin/*')
+ }
+ }
+ ant.mappedresources() {
+ ant.fileset(dir: 'resources/bin', includes: '*')
+ ant.chainedmapper() {
+ ant.flattenmapper()
+ ant.globmapper(from: '*', to: topdir+'-bin/*')
+ }
+ }
+ }
+}
+
+// Sign staging directory
+task signStaging << {
+ description = 'Signs the local staging distribution.'
+ 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)
+ }
+ }
+}
+
+
+// Moves the source and binary distributions to staging.
+task commitToStaging << {
+ description = 'Commits the local staging to the Apache svn staging repository.'
+ getProject().exec {
+ commandLine 'svn',
+ 'import', 'staging', svnStagingPath + "/org.apache.felix.dependencymanager-" + dmRelease + "/",
+ '-m', "Staging Apache Felix Dependency Manager release " + dmRelease + "."
+ }
+}
+
+// Promotes the staged distributions to release
+task promoteToRelease << {
+ description = 'Moves the staging repository to the Apache release repository.'
+ getProject().exec {
+ commandLine 'svn',
+ 'move', svnStagingPath+"/org.apache.felix.dependencymanager-" + dmRelease , svnReleasePath,
+ '-m', "Releasing Apache Felix Dependency Manager release " + dmRelease + "."
+ }
+}
+
+// Removes the staged distributions from staging
+task deleteFromStaging << {
+ description = 'Cancels the staged distribution from the Apache staging repository.'
+ getProject().exec {
+ commandLine 'svn',
+ 'delete', svnStagingPath+"/org.apache.felix.dependencymanager-" + dmRelease + "/",
+ "-m", "Removing Apache Felix Dependency Manager release " + dmRelease + " from staging."
+ }
+}
+
+// Clean staging directory
+task clean(overwrite: true) << {
+ new File("release/staging").deleteDir()
+ new File("rat-report.xml").delete()
+}
+
+// Only clean the staging directory
+task cleanStaging << {
+ description = 'Clean the local staging directory.'
+ new File("release/staging").deleteDir()
+}