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

* Create a `stable-2.5` branch for making the new release

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

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

* Checkout the `stable-2.5` branch
* Update the top level `pom.xml` in Gerrit to ensure that none of the
Subprojects point to snapshot releases

* Tag

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

* Build (without plugins)

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

[[plugin-api]]
Publish the Plugin API JAR File
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

Prepare the Core Plugins
~~~~~~~~~~~~~~~~~~~~~~~~
* link:dev-release-subproject.html[Release and publish] the core plugins

Package Gerrit with Plugins
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Ensure that the core plugins listed in `gerrit-package-plugins/pom.xml`
point to the latest release version (no dependency to snapshot versions)
* Include core plugins into WAR
====
 $ ./tools/version.sh --release && mvn clean package -f gerrit-package-plugins/pom.xml
 $ ./tools/version.sh --reset
====

* Find WAR that includes the core plugins at
`gerrit-package-plugins\target\gerrit-v2.5.war`
* 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

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]
