a316857594
* stable-3.0: CreateProject: Add @UsedAt annotation ProjectConfig: Add @UsedAt annotation Use bazelisk as first choice for api.sh Change screen: Show abbreviated commit sha1 in patch set dropdown ProjectConfig: Add method to read from repository Remove buck related entries from .gitignore Replace references to bazel-genfiles with bazel-bin Set version to 2.14.21-SNAPSHOT Change-Id: If9f126ab129ae2084a876e81fec81314c773f4e3
173 lines
4.3 KiB
Plaintext
173 lines
4.3 KiB
Plaintext
= Gerrit Code Review - Building plugins
|
|
|
|
|
|
From build process perspective there are three types of plugins:
|
|
|
|
* Maven driven
|
|
* Bazel tree driven
|
|
* Bazel standalone
|
|
|
|
These types can be combined: if both files in plugin's root directory exist:
|
|
|
|
* `BUILD`
|
|
* `pom.xml`
|
|
|
|
the plugin can be built with both Bazel and Maven.
|
|
|
|
|
|
== Maven driven build
|
|
|
|
If plugin contains `pom.xml` file, it can be built with Maven as usually:
|
|
|
|
----
|
|
mvn clean package
|
|
----
|
|
|
|
Exceptions from the rule above:
|
|
|
|
=== Exception 1:
|
|
|
|
|
|
Plugin's `pom.xml` references snapshot version of plugin API:
|
|
`2.8-SNAPSHOT`. In this case there are two possibilities:
|
|
|
|
* switch to release API. Change plugin API version in `pom.xml` from
|
|
`2.8-SNAPSHOT` to `2.8.1` and repeat step 1 above.
|
|
* build and install `SNAPSHOT` version of plugin API in local Maven repository:
|
|
|
|
----
|
|
./tools/maven/api.sh install
|
|
----
|
|
|
|
=== Exception 2:
|
|
|
|
Plugin's `pom.xml` references other own or foreign (unpublished) libraries or
|
|
even other Gerrit plugins. These libraries and/or plugins must be built and
|
|
installed in local Maven repository. Clone the related projects and issue
|
|
|
|
----
|
|
mvn install
|
|
----
|
|
|
|
Repeat step 1. above.
|
|
|
|
|
|
== Bazel in tree driven
|
|
|
|
|
|
The fact that plugin contains `BUILD` file doesn't mean that building this
|
|
plugin from the plugin directory works.
|
|
|
|
Bazel in tree driven means it can only be built from within Gerrit tree. Clone
|
|
or link the plugin into gerrit/plugins directory:
|
|
|
|
----
|
|
cd gerrit
|
|
bazel build plugins/<plugin-name>:<plugin-name>
|
|
----
|
|
|
|
The output can be normally found in the following directory:
|
|
|
|
----
|
|
bazel-bin/plugins/<plugin-name>/<plugin-name>.jar
|
|
----
|
|
|
|
Some plugins describe their build process in `src/main/resources/Documentation/build.md`
|
|
file. It may worth checking.
|
|
|
|
=== Error Prone checks
|
|
|
|
Error Prone checks are enabled by default for core Gerrit and all core plugins. To
|
|
enable the checks for custom plugins, add it in the `error_prone_packages` group
|
|
in `tools/BUILD`.
|
|
|
|
=== Plugins with external dependencies ===
|
|
|
|
If the plugin has external dependencies, then they must be included from Gerrit's
|
|
own WORKSPACE file. This can be achieved by including them in `external_plugin_deps.bzl`.
|
|
During the build in Gerrit tree, this file must be copied over the dummy one in
|
|
`plugins` directory.
|
|
|
|
Example for content of `external_plugin_deps.bzl` file:
|
|
|
|
----
|
|
load("//tools/bzl:maven_jar.bzl", "maven_jar")
|
|
|
|
def external_plugin_deps():
|
|
maven_jar(
|
|
name = 'org_apache_tika_tika_core',
|
|
artifact = 'org.apache.tika:tika-core:1.12',
|
|
sha1 = '5ab95580d22fe1dee79cffbcd98bb509a32da09b',
|
|
)
|
|
----
|
|
|
|
=== Bundle custom plugin in release.war ===
|
|
|
|
To bundle custom plugin(s) in the link:dev-bazel.html#release[release.war] artifact,
|
|
add them to the CUSTOM_PLUGINS list in `tools/bzl/plugins.bzl`.
|
|
|
|
Example of `tools/bzl/plugins.bzl` with custom plugin `my-plugin`:
|
|
|
|
----
|
|
CORE_PLUGINS = [
|
|
"commit-message-length-validator",
|
|
"download-commands",
|
|
"hooks",
|
|
"replication",
|
|
"reviewnotes",
|
|
"singleusergroup",
|
|
]
|
|
|
|
CUSTOM_PLUGINS = [
|
|
"my-plugin",
|
|
]
|
|
|
|
CUSTOM_PLUGINS_TEST_DEPS = [
|
|
# Add custom core plugins with tests deps here
|
|
]
|
|
----
|
|
|
|
If the plugin(s) being bundled in the release have external dependencies, include them
|
|
in `plugins/external_plugin_deps`. Create symbolic link from plugin's own
|
|
`external_plugin_deps()` file in plugins directory and prefix the file with
|
|
plugin name, e.g.:
|
|
|
|
----
|
|
$ cd plugins
|
|
$ ln -s oauth/external_plugin_deps.bzl oauth_external_plugin_deps.bzl
|
|
$ ln -s uploadvalidator/external_plugin_deps.bzl uploadvalidator_external_plugin_deps.bzl
|
|
----
|
|
|
|
Now the plugin specific dependency files can be imported:
|
|
|
|
----
|
|
load(":oauth_external_plugin_deps.bzl", oauth_deps="external_plugin_deps")
|
|
load(":uploadvalidator_external_plugin_deps.bzl", uploadvalidator_deps="external_plugin_deps")
|
|
|
|
def external_plugin_deps():
|
|
oauth_deps()
|
|
uploadvalidator_deps()
|
|
----
|
|
|
|
[NOTE]
|
|
Since `tools/bzl/plugins.bzl` and `plugins/external_plugin_deps.bzl` are part of
|
|
Gerrit's source code and the version of the war is based on the state of the git
|
|
repository that is built; you should commit this change before building, otherwise
|
|
the version will be marked as 'dirty'.
|
|
|
|
== Bazel standalone driven
|
|
|
|
Only few plugins support that mode for now:
|
|
|
|
----
|
|
cd reviewers
|
|
bazel build reviewers
|
|
----
|
|
|
|
GERRIT
|
|
------
|
|
Part of link:index.html[Gerrit Code Review]
|
|
|
|
SEARCHBOX
|
|
---------
|