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


[[prepare-gerrit]]
Prepare Gerrit
~~~~~~~~~~~~~~

In all example commands it is assumed that the last release was `2.4`
and that now the `2.5` release is prepared.


[[prepare-war-and-plugin-api]]
Prepare the Gerrit WAR and the Plugin API Jar
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* link:dev-readme.html#run-acceptance-tests[Run the acceptance tests]

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

* Check in the Gerrit parent `pom.xml` that no `SNAPSHOT` version of a
Subproject is referenced
+
If there is a dependency to a `SNAPSHOT` version,
link:#subproject[release the subproject] first.

* Create a tag for the Gerrit release
+
For an `RC` release:
+
====
 git tag -a -m "gerrit 2.5-rc0" v2.5-rc0
====
+
For a final `stable` release:
+
====
 git tag -a -m "gerrit 2.5" v2.5
====

* Build the Gerrit WAR (without plugins) and the Plugin API Jar
+
====
 ./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


[[prepare-core-plugins]]
Prepare Core Plugins
^^^^^^^^^^^^^^^^^^^^
The core plugins to be prepared are:

* `plugins/replication`

For each core plugin do:

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

* Update the version of the Core Plugin in
`gerrit-package-plugins/pom.xml` to the released version

[WARNING]
========================================================================
Updating the plugin versions in `gerrit-package-plugins/pom.xml`
invalidates the Gerrit Release Tag which was created before.

If needed delete the tag and recreate it!
========================================================================


[[prepare-war-with-plugins]]
Prepare Gerrit WAR with Core Plugins
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* Ensure that the Core Plugins listed in `gerrit-package-plugins/pom.xml`
point to the latest release version (no dependency to `SNAPSHOT` versions)

* Ensure that the release tag points to the `HEAD` commit

* 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-full-v2.5.war`

* Compare `gerrit-package-plugins\target\gerrit-full-v2.5.war` with
  `gerrit-war\target\gerrit-v2.5.war`
+
The only difference should be the core plugins jars under
`WEB-INF\plugins`.

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