================
Releasing Tephra
================

This page describes the step-by-step process of how to perform an official Tephra version release,
including deploying the release artifacts to Maven repositories and the additional administrative
steps to complete the release process.

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

Maven Settings File
-------------------

Prior to performing a Tephra release, you must have an entry such as this in your
``~/.m2/settings.xml`` file to authenticate when deploying the release artifacts::

  <?xml version="1.0" encoding="UTF-8"?>
  <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
      xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <servers>
      <server>
        <id>sonatype.snapshots</id>
        <username>USERNAME</username>
        <password>PASSWORD</password>
      </server>
      <server>
        <id>sonatype.release</id>
        <username>USERNAME</username>
        <password>PASSWORD</password>
      </server>
    </servers>
  </settings>
  
Replace ``USERNAME`` and ``PASSWORD`` with the correct values for your user account.  See the
`Maven Encryption Guide <http://maven.apache.org/guides/mini/guide-encryption.html>`_ for details
on how to avoid storing the plaintext password in the settings.xml file.

PGP Key
-------

You will also need to have created a PGP (or GPG) key pair, which will be used in signing the release
artifacts.  For more information on using the Maven GPG plugin, see this `introduction
<http://blog.sonatype.com/2010/01/how-to-generate-pgp-signatures-with-maven/>`_ from Sonatype and
the Maven GPG Plugin `usage page
<https://maven.apache.org/plugins/maven-gpg-plugin/usage.html>`_.  You may also want to run
gpg-agent in order to avoid being prompted multiple times for the GPG key passphrase when
performing a release.


Performing the Release
======================

Ensure Local Branch is Up-to-date
---------------------------------

First, make sure your local copy of the ``develop`` branch is up-to-date with all changes::

  git checkout develop
  git pull

Create the Release Branch
-------------------------

Next, create a release branch from ``develop``::

  git checkout -b release/N.N.N

replacing ``N.N.N`` with the desired release version.

Prepare the Release
-------------------

While on the release branch, prepare the release::
  
  mvn clean release:prepare -P release
  
This will prompt you for the release version and the git tag to use for the release.  By
convention, we use ``vN.N.N`` for the release tag (ie. v0.6.0 for release 0.6.0).

Perform the Release
-------------------

Perform the release by running::
  
  mvn release:perform -P release

This will checkout the source code using the release tag, build the release and deploy it to the
oss.sonatype.org repository.

Release the Staging Repository in Artifactory
---------------------------------------------

Release the artifact bundle in Artifactory:

1. Login to https://oss.sonatype.org (you will need to use the same credentials you have
   configured in your ``~/.m2/settings.xml`` file).
2. Go to "Staging Repos".
3. Find the "comcontinuuity" repo with the Tephra release.  Be sure to expand the contents of the
   repo to confirm that it contains the correct Tephra artifacts. 
4. Click on the "Release" button at top, and enter a brief description, such as "Tephra N.N.N
   release".

Update Git Branches
-------------------

After the release is complete, update the other git branches with the release changes::
  
  git checkout master
  git merge release/N.N.N
  git push origin master

  git checkout develop
  git merge master
  git push origin develop


Announcing and Completing the Release
=====================================

Mark the release as complete in JIRA (in the Tephra Administration section):

1. Add a release for the next version, if necessary
2. Set a release date and release the released version

Create a new release in github:

1. Create a new release based on the release tag used
2. Add the release description
3. Upload release artifacts from ``tephra-distribution/target/``

Finally, announce the release on the Tephra mailing lists: tephra-user@googlegroups.com, tephra-dev@googlegroups.com
