


Apache Felix Dependency Manager Release Guide 
This document describes how to do a source release. It is based on the Release FAQ [1]

Prerequisites
=============

To create a release you must:

* Have Subversion installed on your system;
* Have gpg installed on your system;
* Have a public key added to the keys file, and committed to [2] 
* If you are using an http proxy, configure the following:

  export GRADLE_OPTS="-Dhttps.proxyHost=www.somehost.org -Dhttps.proxyPort=8080"

Before you can start staging a release candidate, you must:

* make sure there are no dependencies on snapshots/unreleased versions;
* increment the ext.dmRelease parameter in release/build.gradle, if not already done, and commit.
* check if release notes are up-to-date, in release/resources/changelog.txt
* under bndtools, release (only) the bundles that needs to be released (using "Release workspace bundles" menu).
* create a tagged version of the sources in preparation of the release candidate.

Release only the necessary bundles
===================================

Click on the bndtools "Release workspace bundles", and release the bundles that have been modified and need to be released.
Don't release other unmodified bundles.
Once done, under the shell prompt, go to the "cnf/releaserepo/" directory, svn remove the previous old released bundles,
and svn add the new released bundles.
refresh the repositories under bndtools, and commit.  

Create a tagged version
=======================

Creating a tagged version of the sources can be done directly through svn (replace r<n> by the actual release number, like "r1"):

svn copy https://svn.apache.org/repos/asf/felix/trunk/dependencymanager https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.dependencymanager-r<n> -m "Release of Apache Felix Dependency Manager r<n>"

Staging a release candidate
===========================

Staging a release starts by checking out a tagged version of the sources (replace r<n> by the actual release number, like "r1"):

svn co https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.dependencymanager-r<n>

The next step is to build/test the software and create the release/staging/ directory (where the source/jars will be packaged):
(replace r<n> by the actual release number, like "r1")

Use a Java7 JDK

$ cd org.apache.felix.dependencymanager-r<n>
$ ./gradlew rat 
$ ./gradlew org.apache.felix.dependencymanager.annotation:jar
$ ./gradlew jar
$ ./gradlew test
$ ./gradlew check

create the staging:

$ ./gradlew makeStaging (this will create ./release/staging/ directory)

Then you sign archives by invoking the following task:

$ ./gradlew signStaging

You can upload the archives and the signatures to our development area, which we use to stage this release candidate. This development area can be found at 
https://dist.apache.org/repos/dist/dev/felix and adding files to it can be done using "svnpubsub" which is taken care of by the following target:

$ ./gradlew commitToStaging

Voting on the release
=====================

Start a vote on the dev@felix.apache.org list, for example (be sure to replace r<n> with the correct release number, like "r1"):

>>>
To: "Felix Developers List" <dev@felix.apache.org>
Subject: [VOTE] Release of Apache Felix Dependency Manager release r<n>

Hi,

We solved N issues in this release:
http://issues.apache.org/jira/...

There are still some outstanding issues:
http://issues.apache.org/jira/...

Staging repository:
https://dist.apache.org/repos/dist/dev/felix/apache-felix-dependencymanager-r<n>/

You can use this UNIX script to download the release and verify the signatures:
http://svn.apache.org/repos/asf/felix/trunk/dependencymanager/release/check_staged_release.sh

Usage:
sh check_staged_release.sh r<n> /tmp/felix-staging

This script, unlike the original Felix check_stage_release.sh, will download staging from https://dist.apache.org/repos/dist/dev/felix instead of 
http://repository.apache.org/content/repositories.


Please vote to approve this release:

[ ] +1 Approve the release
[ ] -1 Veto the release (please provide specific comments)

This vote will be open for 72 hours.
<<<

Promoting the release:
=====================

Move the artifacts from the development area to the final release location at 
https://dist.apache.org/repos/dist/release/felix by invoking the following target:

$ ./gradlew promoteToRelease

Then Edit the ./release/build.gradle script, increment the "ext.dmRelease" property, and commit.

Cancelling the release
======================

$ ./gradlew deleteFromStaging

[1] http://www.apache.org/dev/release.html
[2] http://www.apache.org/dist/felix/KEYS
