


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 a Jdk8 (at least version 1.8.0_71) installed on your system;
* 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; for example:

  export GRADLE_OPTS="-Dhttps.proxyHost=www.somehost.org -Dhttps.proxyPort=8080"
  export http_proxy=www.somehost.org:8080
  export https_proxy=www.somehost.org: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 workspace and module changelogs are up-to-date.
* in the changelog files, also make sure that all bundles which are part of the release are all referenced (bundle names + versions).
* release the bundles that are part of the dm binary distribution.
* create a tagged version of the sources in preparation of the release candidate.

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"):

git tag -a org.apache.felix.dependencymanager-r<n> -m "Release of Apache Felix Dependency Manager r<n>"
git push origin org.apache.felix.dependencymanager-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"):

git clone -–depth 1 -b org.apache.felix.dependencymanager-r<n> http://gitbox.apache.org/repos/asf/felix-dev.git felix-dev-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 Java8 JDK

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

The last command (gradlew release) will create the binary release artifacts in cnf/releaserepo/ directory.

- create the staging:

$ ./gradlew makeStaging --no-daemon

The above will create ./release/staging/ directory. Then you sign archives by invoking the following task:

$ ./gradlew signStaging --no-daemon

(you will be asked to enter your PGP key password; don't forget the --no-daemon option, else stdin won't be read)

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 --no-daemon

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:
https://github.com/apache/felix-dev/blob/master/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 --no-daemon

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

$ ./gradlew deleteFromStaging --no-daemon


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