This page describes how to make a release of Provisionr. It's loosely based on the release guide for Apache Whirr

First time as a release manager

Go through the Release Signing instructions and prepare your key. 

Add your key ID to id.apache.org and to the KEYS file at https://dist.apache.org/repos/dist/release/incubator/provisionr (svn repository)

Make sure you have access to repository.apache.org 

We are building new releases from the master branch unless there is a good reason to branch from an existing tag and backport changes. As a general rule all new code goes to master first.

Run All Tests

Before starting a vote we need to make sure the master branch is in a good shape. We have to three types of tests: unit, integration & live.

The unit & integration tests are executed during the normal Maven build. The live tests require cloud provider credentials and they can be executed by enabling the with-live-tests profile or by using some special bash scripts as documented below. 

Start by configuring your cloud provider credentials in ~/.m2/settings.xml like this:

<profiles>
    <profile>
        <id>provisionr-credentials</id>
        <activation><activeByDefault>true</activeByDefault></activation>
        <properties>
            <test.cloudstack.provider.accessKey>cs-key</test.cloudstack.provider.accessKey>
            <test.cloudstack.provider.secretKey>cs-secret</test.cloudstack.provider.secretKey>
            <test.cloudstack.provider.endpoint>...</test.cloudstack.provider.endpoint>
            <test.cloudstack.provider.zoneId>1</test.cloudstack.provider.zoneId>
            <test.cloudstack.provider.templateId>3012</test.cloudstack.provider.templateId>
            <test.cloudstack.provider.serviceOffering>105</test.cloudstack.provider.serviceOffering>

            <test.amazon.provider.accessKey>xxxxx</test.amazon.provider.accessKey>
            <test.amazon.provider.secretKey>xxxxx</test.amazon.provider.secretKey>
            <test.amazon.provider.region>us-east-1</test.amazon.provider.region>
        </properties>
    </profile>
</profiles>

Run all the unit & integration tests with the following command:

mvn -Pwith-assembly clean install

Run all the tests for individual Activiti activities for a specific provider with the following command:

./scripts/activities_test.sh amazon

Test the pool management process as a whole for a specific provider with the following command:

./scripts/process_test.sh amazon

Check the Release Notes

JIRA has the ability to automatically generate release notes. 

https://issues.apache.org/jira/secure/ConfigureReleaseNote.jspa?projectId=12314423

Make sure the list of closed issues is accurate and nothing is missing. You can cross-check with the git log as needed. 

Build and Deploy Maven Artifacts to Nexus Staging

Add your Apache Nexus repository credentials encrypted to your ~/.m2/settings.xml file like this. You will have to create a ~/.m2/settings-security.xml on the way as documented.  

<settings>
<servers>
<server>
     <id>apache.snapshots.https</id>
     <username>APACHE-ID</username>
     <password>ENCRYPTED-APACHE-PASSWORD</password>
   </server>
   <server>
     <id>apache.staging.https</id>
     <username>APACHE-ID</username>
     <password>ENCRYPTED-APACHE-PASSWORD</password>
   </server>
   <server>
     <id>apache.releases.https</id>
     <username>APACHE-ID</username>
     <password>ENCRYPTED-APACHE-PASSWORD</password>
   </server>
</servers>
</settings>

And run the release script that will automatically change the version numbers and upload the artifacts to Nexus staging:

./scripts/release.sh 0.X.0-incubating 0.Y.0-incubating-SNAPSHOT
git push && git push --tags 

Login to https://repository.apache.org using your Apache credentials. Click on Staging on the left. Then click on org.apache.provisionr in the list of repositories. In the panel below you should see an open repository that is linked to your username and IP. Select this repository and click Close. This will close the repository from future deployments and make it available for others to view.

Copy Binary and Source Release Artifacts

Sign, checksum and copy the source and binary .tar.gz file from karaf/assembly/target/ to people.apache.org:~/public_html/provisionr-0.X.0-incubating-candidate-Y

Sanity Check

Download the artifacts and check the signatures, use Rat to check the licenses, create a pool from a template or with some arbitrary packages (see README for instructions).  

Quick start guide (will be migrated soon): https://github.com/axemblr/axemblr-provisionr/wiki/Axemblr-Provisionr-in-5-Minutes

The following email thread may also be useful: How to build and test a release candidate (0.4.0-incubating) 

Run the Vote

Generic email template:

To: "Provisionr Developers List" <dev@provisionr.incubator.apache.org>
Subject: [VOTE] Release Provisionr version X.Y.Z

This is the first release candidate for Apache Provisionr (incubating), version X.Y.Z.

It fixes the following issues:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12314423&version=12324250


*** Please download, test and vote by [3 working days after sending].

Note that we are voting upon the source (tag), binaries are provided for convenience.

Source and binary files:
http://people.apache.org/~[YOUR USERID]/provisionr-X.Y.Z-candidate-0

Maven staging repo:
https://repository.apache.org/content/repositories/orgapacheprovisionr-[YOUR REPOSITORY ID]

The tag to be voted upon:
https://git-wip-us.apache.org/repos/asf?p=incubator-provisionr.git;a=tag;h=[HASH]

Provisionr's KEYS file containing PGP keys we use to sign the release:
https://dist.apache.org/repos/dist/release/incubator/provisionr/KEYS

The release needs 3 +1's from PPMC (dev@provisionr.incubator.apache.org) and  3 binding +1's from the IPMC (general@incubator.apache.org)

Roll Out

If the vote was successful the first step is to login to repository.apache.org and click the Release button on the staging repository. This will eventually sync the artifacts to Maven Central. You can check at search.maven.org 

Second step is to commit the artifacts from people.apache.org:~/public_html/provisionr-X.Y.Z-incubating-candidate-0 to https://dist.apache.org/repos/dist/release/incubator/provisionr/provisionr-X.Y.Z-incubating and update the symlink as needed.

Before announcing the release you should mark it as released on JIRA (Versions), wait for Maven Central to sync and for mirrors (it takes a few hours at least - all sync from http://www.apache.org/dist/incubator/provisionr/).  

Announcing the release

Generic template:

To: announce@apache.org
Cc: dev <dev@provisionr.incubator.apache.org>
Subject: [ANNOUNCE] Apache Provisionr 0.4.0-incubating released

The Apache Provisionr team is pleased to announce the release of version
0.4.0-incubating from the Apache Incubator.

Apache Provisionr is an effort to develop a service that can be used to
create and manage pools of virtual machines on multiple clouds. Our focus
is on semi-automated workflows, cloud portability and on providing a robust
foundation for configuration and higher level management.

Release notes:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12314423&version=12324250

You can download the archives from any Apache mirror:
http://www.apache.org/dyn/closer.cgi/incubator/provisionr

All the bundles are also available from Maven Central if you want to
integrate Apache Provisionr in your own custom Karaf distribution.

For general information on Apache Provisionr, please visit the project
website:
http://provisionr.incubator.apache.org/

Also make sure you check the following Quick Start Guide on the wiki:
https://cwiki.apache.org/confluence/display/PROVISIONR/Quick+Start+Guide

Disclaimer:
Apache Provisionr is an effort undergoing incubation at the Apache Software
Foundation (ASF), sponsored by the Incubator PMC.

Incubation is required of all newly accepted projects until a further review
indicates that the infrastructure, communications, and decision making
process
have stabilized in a manner consistent with other successful ASF projects.

While incubation status is not necessarily a reflection of the completeness
or stability of the code, it does indicate that the project has yet to be
fully endorsed by the ASF.

Regards,

The Provisionr Team