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
hopefully 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]]
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


[[security]]
Security-Fix
~~~~~~~~~~~~

`security-fix` releases should only contain bug fixes for security
issues.

For security issues it is important that they are only announced
*after* fixed versions for all relevant releases have been published.
Because of this, `security-fix` releases can't be prepared in the public
`gerrit` project.

`security-fix` releases are prepared in the `gerrit-security-fixes`
project which is only readable by the Gerrit Maintainers. Only after
a `security-fix` release has been published will the commits/tags made in
the `gerrit-security-fixes` project be taken over into the public
`gerrit` project.


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

To create a Gerrit release the following steps have to be done:

. link:#subproject[Release Subprojects]
. link:#prepare-gerrit[Prepare the Gerrit Release]
.. link:#prepare-war-and-plugin-api[Prepare the Gerrit WAR and the Plugin API Jar]
.. link:#prepare-core-plugins[Prepare the Core Plugins]
.. link:#prepare-war-with-plugins[Prepare Gerrit WAR with Core Plugins]
. link:#publish-gerrit[Publish the Gerrit Release]
.. link:#extension-and-plugin-api[Publish the Extension and Plugin API Jars]
.. link:#publish-core-plugins[Publish the Core Plugins]
.. link:#publish-gerrit-war[Publish the Gerrit WAR (with Core Plugins)]
.. link:#push-stable[Push the Stable Branch]
.. link:#push-tag[Push the Release Tag]
.. link:#upload-documentation[Upload the Documentation]
.. link:#update-issues[Update the Issues]
.. link:#announce[Announce on Mailing List]
. link:#increase-version[Increase Gerrit Version for Current Development]
. link:#merge-stable[Merge `stable` into `master`]


[[subproject]]
Release Subprojects
~~~~~~~~~~~~~~~~~~~

The subprojects to be released are:

* `gwtexpui`
* `gwtjsonrpc`
* `gwtorm`
* `prolog-cafe`

For each subproject do:

* Check the dependency to the Subproject in the Gerrit parent `pom.xml`:
+
If a `SNAPSHOT` version of the subproject is referenced the subproject
needs to be released so that Gerrit can reference a released version of
the subproject.

* link:dev-release-subproject.html#make-snapshot[Make a snapshot and test it]
* link:dev-release-subproject.html#prepare-release[Prepare the Release]
* link:dev-release-subproject.html#publish-release[Publish the Release]

* Update the version of the Subproject in the Gerrit parent `pom.xml`
to the released version


[[build-gerrit]]
Build Gerrit
~~~~~~~~~~~~

* Build the Gerrit WAR
+
====
 rm -f ~/.m2/settings.xml
 ./tools/release.sh
====
+
[WARNING]
========================================================================
Make sure you are compiling the release for all browsers. Check in your
Maven `~/.m2/settings.xml` file that no Maven profile is active that
limits the compilation to a certain browser.
========================================================================

* Sanity check WAR
* Test the new Gerrit version

[[publish-gerrit]]
Publish the Gerrit Release
~~~~~~~~~~~~~~~~~~~~~~~~~~


[[extension-and-plugin-api]]
Publish the Extension and Plugin API Jars
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* Make sure you have done the
link:dev-release-deploy-config.html#deploy-configuration-settings-xml[
configuration needed for deployment]

* Push the Jars to `commondatastorage.googleapis.com`:
+
----
  ./tools/deploy_api.sh
----


[[publish-core-plugins]]
Publish the Core Plugins
^^^^^^^^^^^^^^^^^^^^^^^^

* link:dev-release-subproject.html#publish-release[Publish the Release]


[[publish-gerrit-war]]
Publish the Gerrit WAR (with Core Plugins)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* The WAR file to upload is `gerrit-package-plugins\target\gerrit-full-v2.5.war`
* Upload WAR to `code.google.com/p/gerrit` (manual via 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`


[[push-stable]]
Push the Stable Branch
^^^^^^^^^^^^^^^^^^^^^^

* create the stable branch `stable-2.5` in the `gerrit` project
+
Via the link:https://gerrit-review.googlesource.com/#/admin/projects/gerrit,branches[
Gerrit WebUI] or by push.

* Push the commits done on `stable-2.5` to `refs/for/stable-2.5` and
get them merged


[[push-tag]]
Push the Release Tag
^^^^^^^^^^^^^^^^^^^^

* Push the new Release Tag
+
For an `RC`:
+
====
 git push gerrit-review refs/tags/v2.5-rc0:refs/tags/v2.5-rc0
====
+
For a final `stable` release:
+
====
 git push gerrit-review refs/tags/v2.5:refs/tags/v2.5
====


[[upload-documentation]]
Upload the Documentation
^^^^^^^^^^^^^^^^^^^^^^^^

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


[[update-issues]]
Update the Issues
^^^^^^^^^^^^^^^^^

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

By hand.

Our current process is an issue should be updated to say `Status =
Submitted, FixedIn-2.5` 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.5'' 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.


[[announce]]
Announce on 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, click the "Display this top first" checkbox
** and Save

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


[[increase-version]]
Increase Gerrit Version for Current Development
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

All new development that is done in the `master` branch will be
included in the next Gerrit release. Update the Gerrit version in each
`pom.xml` file to the next `SNAPSHOT`version. Push the change for
review and get it merged.

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


[[merge-stable]]
Merge `stable` into `master`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

After every release, stable should be merged to master to ensure that
none of the changes/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]
