 -----
 Helix Release Process
 -----
 -----
 2014-03-19
 -----

~~ 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html

Helix Release Process

 [[1]] Post to dev@helix.apache.org a few days before you plan to do a Helix release

 [[2]] Your Maven settings (~/.m2/settings.xml) must contain this entry to be able to deploy.

+-------------
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- ... -->
  <servers>
    <server>
      <id>apache.releases.https</id>
      <username>[USERNAME]</username>
      <password>[PASSWORD]</password>
    </server>
  </servers>
  <!-- ... -->
</settings>
+-------------

 [[3]] Apache DAV passwords

+-------------
 Add the following info into your ~/.netrc
 machine git-wip-us.apache.org login <apache username> <password>

+-------------
 [[4]] Release Helix

    You should have a GPG agent running in the session you will run the maven release commands (preferred), and confirm it works by running "gpg -ab" (type some text and press Ctrl-D).
    If you do not have a GPG agent running, make sure that you have the "apache-release" profile set in your settings.xml as shown below.


  GPG configuration in maven settings (~/.m2/settings.xml):

+-------------
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- ... -->
  <profiles>
    <profile>
      <id>apache-release</id>
      <properties>
        <gpg.passphrase>[GPG_PASSWORD]</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  <!-- ... -->
</settings>
+-------------
   Before release please make sure <<maven-release-plugin version>> in <pom.xml> is <<2.5.1>> or <<newer>>.

   Run the release

+-------------
mvn release:prepare
mvn release:perform
+-------------

 [[5]] Go to https://repository.apache.org and close your staged repository. Log in, click on Staging Repositories, check your repository, and click Close. Note the repository url (format https://repository.apache.org/content/repositories/orgapachehelix-[NNNN])

 [[6]] Stage the release (version format 0.6.6, stagingRepoUrl format https://repository.apache.org/content/repositories/orgapachehelix-[NNNN])

+-------------
svn co https://dist.apache.org/repos/dist/dev/helix helix-dev-release
cd helix-dev-release
sh ./release-script-svn.sh version stagingRepoUrl
svn add <new directory created with new version as name>
gpg -k email@domain.com >> KEYS
gpg --armor --export email@domain.com >> KEYS
svn ci
+-------------

 [[7]] Validate the release

+-------------
# Download sources, extract, build and run tests
mvn clean package

# Verify license headers
mvn -Prat -DskipTests

# Download binaries and .asc files

# Download release manager's public key - From the KEYS file, get the release manager's public key finger print and run the following command
gpg --keyserver pgpkeys.mit.edu --recv-key <key>

# Validate authenticity of key
gpg --fingerprint <key>

# Check signatures of all the binaries
gpg <binary>
+-------------

 [[8]] Call for a vote in the dev list and wait for 72 hours for the vote results.

+-------------
Subject: [VOTE] Apache Helix [VERSION] Release
To: dev@helix.apache.org
---------------------------------------------------------
Hi,

This is to call for a vote on releasing the following candidate as Apache Helix [VERSION]. This is the [N]th release of Helix as an Apache project, as well as the [N - 4]th release as a top-level Apache project.

Apache Helix is a generic cluster management framework that makes it easy to build partitioned and replicated, fault-tolerant and scalable distributed systems.

Release notes:
http://helix.apache.org/releasenotes/release-[VERSION].html

Release artifacts:
https://repository.apache.org/content/repositories/orgapachehelix-[NNNN]

Distribution:
* binaries:
https://dist.apache.org/repos/dist/dev/helix/[VERSION]/binaries/
* sources:
https://dist.apache.org/repos/dist/dev/helix/[VERSION]/src/

The [VERSION] release tag:
https://git-wip-us.apache.org/repos/asf?p=helix.git;a=tag;h=refs/tags/helix-[VERSION]

KEYS file available here:
https://dist.apache.org/repos/dist/dev/helix/KEYS

Please vote on the release. The vote will be open for at least 72 hours.

[+1] -- "YES, release"
[0] -- "No opinion"
[-1] -- "NO, do not release"

Thanks,
The Apache Helix Team
+-------------

 [[9]] If the sum of PMC (binding) votes is at least 3, send the following email. Otherwise, repeat the previous step.

+-------------
Subject: [RESULT][VOTE] Apache Helix [VERSION] Release
To: dev@helix.apache.org
-----------------------------------------------------------------
Thanks for voting on the [VERSION] release. It has now exceeded 72 hours so I am closing the vote.

Binding +1s:
 [Names of PMC members who +1'd this release]

Nonbinding +1s:
 [All other +1s]

Binding 0s:
 [Names of PMC members who 0'd this release]

Nonbinding 0s:
 [All other 0s]

Binding -1s:
 [Names of PMC members who -1'd this release]

Nonbinding -1s:
 [All other -1s]

The vote has passed, thanks a lot to everyone for voting!
+-------------

 [[10]] Move the keys, sources, and binaries from the dev tree to the release tree:

+-------------
svn rm https://dist.apache.org/repos/dist/release/helix/KEYS
svn mv https://dist.apache.org/repos/dist/dev/helix/[VERSION] https://dist.apache.org/repos/dist/release/helix
svn cp https://dist.apache.org/repos/dist/dev/helix/KEYS https://dist.apache.org/repos/dist/release/helix
+-------------

 [[11]] Go to https://repository.apache.org and release your staged repository. Log in, click on Staging Repositories, check your repository, and click Release.

 [[12]] Prepare release notes. Add a page in src/site/apt/releasenotes/ and [VERSION]/src/site/apt/releasenotes and change the value of \<currentRelease\> in parent pom.


 [[13]] Send out an announcement of the release to Helix developers and users:

+-------------
Subject: [ANNOUNCE] Apache Helix [VERSION] Release
To: dev@helix.apache.org; user@helix.apache.org
-------------------------------------------------------------------
The Apache Helix Team is pleased to announce the [NTH] release,
[VERSION], of the Apache Helix project.

Apache Helix is a generic cluster management framework that makes it easy
to build partitioned, fault tolerant, and scalable distributed systems.

The full release notes are available here:
[link to JIRA-generated release notes]

You can declare a maven dependency to use it:

<dependency>
  <groupId>org.apache.helix</groupId>
  <artifactId>helix-core</artifactId>
  <version>[VERSION]</version>
</dependency>

Or download the release sources:
http://helix.apache.org/[VERSION]-docs/download.cgi

Additional info

Website: http://helix.apache.org/
Helix mailing lists: http://helix.apache.org/mail-lists.html

We hope you will enjoy using the latest release of Apache Helix!

Cheers,
Apache Helix Team
+-------------

 [[14]] Celebrate!


