|  | 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: | 
|  |  | 
|  | * `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 | 
|  | + | 
|  | ==== | 
|  | ./tools/release.sh | 
|  | ==== | 
|  |  | 
|  | * 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 `storage.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] | 
|  |  | 
|  | SEARCHBOX | 
|  | --------- |