= Making a Release of a Gerrit Subproject

[[make-snapshot]]
== Make a Snapshot

* Build the latest snapshot and install it into the local Maven
repository:
+
----
  mvn clean install
----

* Test Gerrit with this snapshot locally


== Publish Snapshot

If a snapshot for a subproject was created that should be referenced by
Gerrit while current Gerrit development is ongoing, this snapshot needs
to be published.

* Make sure you have done the configuration needed for deployment:
** link:dev-release-deploy-config.html#deploy-configuration-settings-xml[
Configuration in Maven `settings.xml`]
** link:dev-release-deploy-config.html#deploy-configuration-subprojects[
Configuration for Subprojects in `pom.xml`]

* Deploy the new snapshot:
+
----
  mvn deploy
----

* Change the `id`, `bin_sha1`, and `src_sha1` values in the `maven_jar`
for the subproject in `/lib/BUCK` to the `SNAPSHOT` version.
+
When Gerrit gets released, a release of the subproject has to be done
and Gerrit has to reference the released subproject version.


[[prepare-release]]
== Prepare the Release

* link:#make-snapshot[First create (and test) the latest snapshot for
the subproject]

* Update the top level `pom.xml` in the subproject to reflect
the new project version (the exact value of the tag you will create
below)

* Create the Release Tag
+
----
  git tag -a -m "prolog-cafe 1.3" v1.3
----

* Build and install into local Maven repository:
+
----
  mvn clean install
----


[[publish-release]]
== Publish the Release

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

* Deploy the new release:
+
----
  mvn deploy
----

* Push the pom change(s) to the project's repository
`refs/for/<master|stable>`

* Push the Release Tag
+
----
  git push gerrit-review refs/tags/v1.3:refs/tags/v1.3
----


GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
