Making a Gerrit Release
=======================

[NOTE]
========================================================================
This document is meant primarily for Gerrit maintainers
who have been given approval and submit status to the Gerrit
projects.  Additionally, maintainers should be given owner
status to the Gerrit web site.
========================================================================

To make a Gerrit release involves a great deal of complex
tasks and it is easy to miss a step so this document should
hopefuly serve as both a how to for those new to the process
and as a checklist for those already familiar with these
tasks.


Gerrit Release Type
-------------------

Here are some guidelines on release approaches depending on the
type of release you want to make (stable-fix, stable, RC0, RC1...).

Stable
~~~~~~

A stable release is generally built from the master branch and may need to
undergo some stabilization before releasing the final release.

* Propose the release with any plans/objectives to the mailing list

* Create a Gerrit RC0

* If needed create a Gerrit RC1

[NOTE]
========================================================================
You may let in a few features to this release
========================================================================

* If needed create a Gerrit RC2

[NOTE]
========================================================================
There should be no new features in this release, only bug fixes
========================================================================

* Finally create the stable release (no RC)


Stable-Fix
~~~~~~~~~~

Stable-fix releases should likely only contain bug fixes and doc updates.

* Propose the release with any plans/objectives to the mailing list

* This type of release does not need any RCs, release when the objectives
  are met



Create the Actual Release
---------------------------

In the example commands below we assume that the last release was '2.4' and that
we are preparing '2.5' release.

Prepare the Subprojects
~~~~~~~~~~~~~~~~~~~~~~~

* Publish the latest snapshot for all subprojects
* Freeze all subprojects and link:dev-release-subproject.html[publish]
  them!


Prepare Gerrit
~~~~~~~~~~~~~~

* In the 'stable-2.5' branch: Update the top level pom in Gerrit to ensure that
none of the Subprojects point to snapshot releases

* In the 'master' branch: Update the poms for the Gerrit version, push for
review, get merged

====
 tools/version.sh --snapshot=2.5
====

* Tag

====
 git tag -a -m "gerrit 2.5-rc0" v2.5-rc0
 git tag -a -m "gerrit 2.5" v2.5
====

* Build

====
 ./tools/release.sh
====

* Sanity check WAR


Publish to the Project Locations
--------------------------------

WAR File
~~~~~~~~

* Upload WAR to code.google.com/p/gerrit (manual web browser)
** Go to http://code.google.com/p/gerrit/downloads/list
** Use the "New Download" button

* Update labels:
** new war: [release-candidate], featured...
** old war: deprecated

Plugin API JAR File
~~~~~~~~~~~~~~~~~~~

* Push JAR to commondatastorage.googleapis.com
** Run tools/deploy_api.sh

Tag
~~~

* Push the New Tag

====
 git push gerrit-review refs/tags/v2.5-rc0:refs/tags/v2.5-rc0
 git push gerrit-review refs/tags/v2.5:refs/tags/v2.5
====


Docs
~~~~

====
 make -C Documentation PRIOR=2.4 update
 make -C ReleaseNotes update
====

(no +PRIOR=+... if updating the same release again during RCs)

* Update Google Code project links
** Go to http://code.google.com/p/gerrit/admin
** Point the main page to the new docs. The link to the documentation has to be
updated at two places: in the project description and also in the Links
section.
** Point the main page to the new release notes

[NOTE]
========================================================================
The docs makefile does an svn cp of the prior revision of the docs to branch
the docs so you have less to upload on the new docs.

User and password from here:

    https://code.google.com/hosting/settings

If subversion assumes a different username than your google one and asks for a
password right away simply hit enter. Subversion will fail and then ask for
another username and password. This time enter the username and password from
the page linked above. After that subversion should save the username/password
somewhere under `~/.subversion/auth` folder.
========================================================================


Issues
~~~~~~

====
 How do the issues get updated?  Do you run a script to do
 this?  When do you do it, after the final 2.2.2 is released?
====

By hand.

Our current process is an issue should be updated to say Status =
Submitted, FixedIn-2.2.2 once the change is submitted, but before the
release.

After the release is actually made, you can search in Google Code for
``Status=Submitted FixedIn=2.2.2'' and then batch update these changes
to say Status=Released. Make sure the pulldown says ``All Issues''
because Status=Submitted is considered a closed issue.


Mailing List
~~~~~~~~~~~~

* Send an email to the mailing list to announce the release, consider including some or all of the following in the email:
** A link to the release and the release notes (if a final release)
** A link to the docs
** Describe the type of release (stable, bug fix, RC)

----
To: Repo and Gerrit Discussion <repo-discuss@googlegroups.com>
Subject: Announce: Gerrit 2.2.2.1  (Stable bug fix update)

I am pleased to announce Gerrit Code Review 2.2.2.1.

Download:

  http://code.google.com/p/gerrit/downloads/list


This release is a stable bug fix release with some
documentation updates including a new "Contributing to
Gerrit" doc:

  http://gerrit-documentation.googlecode.com/svn/Documentation/2.2.2/dev-contributing.html


To read more about the bug fixes:

  http://gerrit-documentation.googlecode.com/svn/ReleaseNotes/ReleaseNotes-2.2.2.1.html

-Martin
----

* Add an entry to the NEWS section of the main Gerrit project web page
** Go to: http://code.google.com/p/gerrit/admin
** Add entry like:
----
 * Jun 14, 2012 - Gerrit 2.4.1 [https://groups.google.com/d/topic/repo-discuss/jHg43gixqzs/discussion Released]
----

* Update the new discussion group announcement to be sticky
** Go to: http://groups.google.com/group/repo-discuss/topics
** Click on the announcement thread
** Near the top right, click on options
** Under options, cick the "Display this top first" checkbox
** and Save

* Update the previous discussion group announcement to no longer be sticky
** See above (unclick checkbox)


Merging Stable Fixes to master
------------------------------

After every stable-fix release, stable should be merged to master to
ensure that none of the fixes ever get lost.

====
 git config merge.summary true
 git checkout master
 git reset --hard origin/master
 git branch -f stable origin/stable
 git merge stable
====


GERRIT
------
Part of link:index.html[Gerrit Code Review]
