## Apache Tamaya — Release Guide

Performing a release requires several steps. This document describes each step, so everybody in the committer’s team should be able to perform the release procedure.

### Tell the others you would proceed with the release procedure

        first steps for the next release

        hi @ all,

        if there are no objections, i'll start with the first steps for the next release (review, documentation,...).
        it would be great to start with the release procedure next week.

        regards,
        [name]

### Check everything is ready

- Check the jenkins builds.

- Ensure all JIRA-tickets targeting the release are resolved. If not, get in contact with the ticket owner/assignee to check

  - if the ticket can be postponed for the next release

  - how long it takes to resolve it and if one can help.

### Prepare the release

- Create release notes and commit them to `tamaya/readme/` (format `ReleaseNotes-[version].html`)

- Create a release branch in git and switch to this branch:

#### Using the release plugin

For performing the release you can use the maven release plugin:

        git checkout -b vote-tamaya-[release version]

        export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=200m"
        mvn release:prepare -DdryRun=true -DperformRelease=true

        // optionally pass GPG params for signing with: -Darguments="-Dgpg.keyname=1336D3E6 -Dgpg.passphrase=XXXXXX"

        //copy prepared workspace (to continue faster if an upload fails in the next step)

- If something fails you may switch to the master branch, fix whatever is needed and rebase your release branch to accomodate the latest changes done.

- On success you can check the release packages from `dist/target`.

- If everything looks good you can proceed with the release:

        export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=200m"
        mvn release:prepare -DperformRelease=true
        mvn release:perform -DperformRelease=true

#### Preparing the release without the Release Plugin

The release plugin is great, but in some cases it breaks even, when release:prepare -DdryRun=true was successful. Preparing the release vote without the release plugin is stright forward:

- As described checkout a release branch of the current head

- Then us maven and git commands to prepare the release:

        git checkout -b vote-tamaya-[release version]

        export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=200m"
        mvn versions:set versions:commit -DnewVersion=[release version] -DperformRelease=true

        // build the release locally and sign it with your certs
        mvn clean install -DperformRelease=true -Dgpg.keyname=1336D3E6 -Dgpg.passphrase=XXXXXX

- Check if everything is in place and correct, when finished you can tag and deploy the release…​

    mvn deploy -DperformRelease=true -Dgpg.keyname=1336D3E6 -Dgpg.passphrase=XXXXXX

- check the created commits including user-name and email

- login to https://repository.apache.org/ and go to "Staging Repositories"

- check the contents of the newly created tamaya staging repository

- close the repository to let Nexus do its validations

- On success:

- push the release-branch to the git repo

    git add -A
    git commit -m "Release Prepare: Set release version."
    git tag vote01-[release-version]
    git push --tags

Finally open the next development version:

    # example: newVersion=0.3-incubating-SNAPSHOT
    mvn version:set versions:commit -DnewVersion=[development-version]
    git add -A
    git commit -m "Release Prepare: Open new development version."

- Add the distribution artifacts to the dev repositories:

        svn co https://dist.apache.org/repos/dist/dev/incubator/tamaya/
        mkdir [version]
        set RELEASE_HOME='pwd'/[version]
        cd PROJECT_ROOT
        cp DISCLAIMER $RELEASE_HOME
        cp NOTICE $RELEASE_HOME
        cp LICENCE $RELEASE_HOME
        cp rat.txt $RELEASE_HOME

        // Copy everything from
        //  $STAGING_REPO/distribution/0.2-incubating/tamaya-distribution-[version]-distribution-* into $RELEASE_HOME

        svn add [version]
        svn commit --username <apacheId>

- Check contents on version

### Start the vote

        [VOTE] Release of Apache Tamaya [version]

        Hi,

        I was running the needed tasks to get the [version] release of Apache Tamaya out.
        The artifacts are deployed to Nexus [1] (and [2]) and releases [4].

        The tag is available at [3] and will renamed once the vote passed.

        Please take a look at the artifacts and vote!

        Please note:
        This vote is a "majority approval" with a minimum of three +1 votes (see [5]).

        ------------------------------------------------
        [ ] +1 for community members who have reviewed the bits
        [ ] +0
        [ ] -1 for fatal flaws that should cause these bits not to be released, and why..............
        ------------------------------------------------

        Thanks,
        [name]

        [1] https://repository.apache.org/content/repositories/...
        [2] https://repository.apache.org/content/repositories/org/apache/tamaya/tamaya-distribution/[version]/tamaya-[version]-source-release.zip
            https://repository.apache.org/content/repositories/org/apache/tamaya/tamaya-distribution/[version]/tamaya-[version]-bin-release.zip
        [3] https://git1-us-west.apache.org/repos/asf?p=incubator-tamaya.git;a=commit;h=2910da468fce16210e6dd77d8ba23ddbdd434efe
        [4] https://dist.apache.org/repos/dist/dev/incubator/tamaya/[release-version]
        [5] http://www.apache.org/foundation/voting.html#ReleaseVotes

- Announce the Vote

  - Create a short link to the release at http://s.apache.org (format Tamaya_[version])

  - Tweet about the vote via @TamayaConf

- After 72 hours close the vote write a reult email, e.g.

        [Result] (was: Re: [VOTE] Release of Apache Tamaya [version])

        thank you for voting!

        X binding +1 votes (pmc):
        [list]

        Y non-binding +1 votes:
        [list]

        Z -1 votes
        [list]

- After the vote on the PPMC has been finished and is successful, repeaat the voting process on the incubator mailing list.

## Perform the release

If the binding majority approved the vote on both lists continue:

- Login to https://repository.apache.org/ and release the repository

- Rename the vote branch:

        git branch -m vote01-tamaya-[release-version] tamaya-[release-version]

- Add a release tag:

        git tag -a tamaya-[release-version]

- Merge master with the new prepared version:

        git checkout master
        git merge tamaya-[release-version]
        git push origin tamaya-[release-version]
        git push origin master

- Close the release and corresponding tickets at JIRA

- Wait some minutes and check `http://repo2.maven.org/maven2/org/apache/tamaya`

- Upload the distribution Artifacts

        svn co https://dist.apache.org/repos/dist/release/incubator/tamaya/
        mkdir [version]
        // add and commit the artifacts (*source-release.zip, *bin-release.zip + asc, md5, sha1)
        // use the artifacts from:
        //  http://repo1.maven.org/maven2/org/apache/tamaya/tamaya-distribution/[version]/

### Updating the Tamaya Project Site

Basically the new site should be directly deployable, just execute

    mvn site site:deploy

### Announce the new version

Announce the new version on @TamayaConf and other social media channels. Also drop a short mail on the amiling list.