= 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:#build-gerrit[Build the Gerrit Release]
. link:#publish-gerrit[Publish the Gerrit Release]
.. link:#publish-to-maven-central[Publish the Gerrit artifacts to Maven Central]
.. link:#publish-to-google-storage[Publish the Gerrit WAR to Google Storage]
.. 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:

* `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 `id`, `bin_sha1`, and `src_sha1` values in the `maven_jar`
for the Subproject in `/lib/BUCK` to the released version.

[[update-versions]]
=== Update Versions and Create Release Tag

Before doing the release build, the `GERRIT_VERSION` in the `VERSION`
file must be updated, e.g. change it from `2.5-SNAPSHOT` to `2.5`.

In addition the version must be updated in a number of pom.xml files.

To do this run the `./tools/version.py` script and provide the new
version as parameter, e.g.:

----
  ./tools/version.py 2.5
----

Also check and update the referenced `archetypeVersion` and the
`archetypeRepository` in the `Documentation/dev-plugins.txt` file.
If the referenced `archetypeVersion` will be available in the Maven central,
delete the line with the `archetypeRepository`.

Commit the changes and create the release tag on the new commit:

----
  git tag -a v2.5
----

Tag the plugins:

----
  git submodule foreach git tag -a v2.5
----

[[build-gerrit]]
=== Build Gerrit

* Build the Gerrit WAR, API JARs and documentation
+
----
  buck clean
  buck build --no-cache release docs
  ./tools/maven/api.sh install
----

* Sanity check WAR
* Test the new Gerrit version

* Verify plugin versions
+
Sometimes `buck` doesn't rebuild plugins after they are tagged, and the
versions don't reflect the tag. Verify the versions:
+
----
  java -jar ./buck-out/gen/release/release.war init --list-plugins
----

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

[[publish-to-maven-central]]
==== Publish the Gerrit artifacts to Maven Central

* Make sure you have done the
link:dev-release-deploy-config.html#deploy-configuration-setting-maven-central[
configuration] for deploying to Maven Central

* Make sure that the version is updated in the `VERSION` file and in
the `pom.xml` files as described in the link:#update-versions[Update
Versions and Create Release Tag] section.

* Push the WAR to Maven Central:
+
----
  ./tools/maven/api.sh war_deploy
----

* Push the plugin artifacts to Maven Central:
+
----
  ./tools/maven/api.sh deploy
----
+
If no artifacts are uploaded, clean the `buck-out` folder and retry:
+
----
  buck clean ; rm -rf buck-out
----

* Push the plugin Maven archetypes to Maven Central:
+
----
  ./tools/plugin_archetype_deploy.sh
----

* To where the artifacts are uploaded depends on the `GERRIT_VERSION` in
the `VERSION` file:

** SNAPSHOT versions are directly uploaded into the Sonatype snapshots
repository and no further action is needed:
+
https://oss.sonatype.org/content/repositories/snapshots/com/google/gerrit/

** Release versions are uploaded into a staging repository in the
link:https://oss.sonatype.org/[Sonatype Nexus Server].

* Verify the staging repository

** Go to the link:https://oss.sonatype.org/[Sonatype Nexus Server] and
sign in with your Sonatype credentials.

** Click on 'Build Promotion' in the left navigation bar under
'Staging Repositories' and find the `comgooglegerrit-XXXX` staging
repository.

** Verify its content
+
While the staging repository is open you can upload further content and
also replace uploaded artifacts. If something is wrong with the staging
repository you can drop it by selecting it and clicking on `Drop`.

** Run Sonatype validations on the staging repository
+
Select the staging repository and click on `Close`. This runs the
Sonatype validations on the staging repository. The repository will
only be closed if everything is OK. A closed repository cannot be
modified anymore, but you may still drop it if you find any issues.

** Test closed staging repository
+
Once a repository is closed you can find the URL to it in the `Summary`
section, e.g. https://oss.sonatype.org/content/repositories/comgooglegerrit-1029
+
Use this URL for further testing of the artifacts in this repository,
e.g. to try building a plugin against the plugin API in this repository
update the version in the `pom.xml` and configure the repository:
+
----
  <repositories>
    <repository>
      <id>gerrit-staging-repository</id>
      <url>https://oss.sonatype.org/content/repositories/comgooglegerrit-1029</url>
    </repository>
  </repositories>
----

* Release the staging repository
+
How to release a staging repository is described in the
link:https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-8.a.2.ReleasingaStagingRepository[
Sonatype OSS Maven Repository Usage Guide].
+
[WARNING]
Releasing artifacts to Maven Central cannot be undone!

** Find the closed staging repository in the
link:https://oss.sonatype.org/[Sonatype Nexus Server], select it and
click on `Release`.

** The released artifacts are available in
https://oss.sonatype.org/content/repositories/releases/com/google/gerrit/

** It may take up to 2 hours until the artifacts appear on Maven
Central:
+
http://central.maven.org/maven2/com/google/gerrit/

* [optional]: View download statistics

** Sign in to the
link:https://oss.sonatype.org/[Sonatype Nexus Server].

** Click on 'Views/Repositories' in the left navigation bar under
'Central Statistics'.

** Select `com.google.gerrit` as `Project`.


[[publish-to-google-storage]]
==== Publish the Gerrit WAR to the Google Cloud Storage

* go to the link:https://console.cloud.google.com/storage/browser/gerrit-releases/?project=api-project-164060093628[
gerrit-releases bucket in the Google cloud storage console]
* make sure you are signed in with your Gmail account
* manually upload the Gerrit WAR file by using the `Upload` button

[[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 Web UI] 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:

----
  git push gerrit-review tag v2.5
----

Push the new Release Tag on the plugins:

----
  git submodule foreach git push gerrit-review tag v2.5
----


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

* Build the release notes:
+
----
  buck build releasenotes
----

* Extract the release notes files from the zip file generated from the previous
step: `buck-out/gen/ReleaseNotes/html/html.zip`.

* Extract the documentation files from the zip file generated from
`buck build docs`: `buck-out/gen/Documentation/searchfree/searchfree.zip`.

* Upload the files manually via web browser to the appropriate folder
in the
link:https://console.cloud.google.com/storage/browser/gerrit-documentation/?project=api-project-164060093628[
gerrit-documentation] storage bucket.

[[update-links]]
==== Update homepage links

Upload a change on the link:https://gerrit-review.googlesource.com/#/admin/projects/homepage[
homepage project] to change the version numbers to the new version.

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

Update the issues by hand. There is no script for this.

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)
** Hash values (SHA1, SHA256, MD5) for the release WAR file.
+
The SHA1 and MD5 can be taken from the artifact page on Sonatype. The
SHA256 can be generated with
`openssl sha -sha256 buck-out/gen/release/release.war` or an equivalent
command.

* 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 actions
** Under actions, click the "Display this top first" checkbox

* 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. The Gerrit version should be set to the snapshot version
for the next release.

Use the `version` tool to set the version in the `VERSION` file and plugin
archetypes' `pom.xml` files:

----
 ./tools/version.py 2.11-SNAPSHOT
----

Verify that the changes made by the tool are sane, then commit them, push
the change for review on the master branch, and get it merged.

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

SEARCHBOX
---------
