Making a Release of a Gerrit Subproject / Core Plugin
=====================================================

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

* Only for plugins:
** In the `pom.xml` update the Gerrit version under `properties` >
`Gerrit-ApiVersion` to the version of the new Gerrit
release.
** Make sure that the URL for the Maven repository with the id
`gerrit-api-repository` in the `pom.xml` is correct.
+
If `Gerrit-ApiVersion` references a released Gerrit version it must be
`https://gerrit-api.commondatastorage.googleapis.com/release/`, if
`Gerrit-ApiVersion` references a snapshot Gerrit version it must be
`https://gerrit-api.commondatastorage.googleapis.com/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 version in the Gerrit parent `pom.xml` for the Subproject
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/plugin]

* Update the top level `pom.xml` in the subproject/plugin 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] or
link:dev-release-deploy-config.html#deploy-configuration-core-plugins[Core Plugins]

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