ebeb15460c
Asciidoc may fail to render link attributes for external links supposed to open in a new window correctly. This change adds :linkattrs: to the beginning of such files to force parsing link attributes correctly. Bug: Issue 12068 Change-Id: If18be60de646ff78f672239dd4fa435fd4fd92ab
256 lines
9.6 KiB
Plaintext
256 lines
9.6 KiB
Plaintext
:linkattrs:
|
|
= Plugin Lifecycle
|
|
|
|
Most of the plugins are hosted on the same instance as the
|
|
link:https://gerrit-review.googlesource.com[Gerrit project itself,role=external,window=_blank] to make them
|
|
more discoverable and have more chances to be reviewed by the whole community.
|
|
|
|
[[hosting_lifecycle]]
|
|
== Hosting Lifecycle
|
|
|
|
The process of writing a new plugin goes through different phases:
|
|
|
|
- Ideation and Discussion:
|
|
+
|
|
The idea of creating a new plugin is posted and discussed on the
|
|
link:https://groups.google.com/d/forum/repo-discuss[repo-discuss,role=external,window=_blank] mailing list.
|
|
+
|
|
Also see section link#ideation_discussion[Ideation and discussion] below.
|
|
|
|
- Prototyping (optional):
|
|
+
|
|
The author of the plugin creates a working prototype on a public repository
|
|
accessible to the community.
|
|
+
|
|
Also see section link#plugin_prototyping[Plugin Prototyping] below.
|
|
|
|
- Proposal and Hosting:
|
|
+
|
|
The author proposes to release the plugin under the
|
|
link:https://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0 OpenSource
|
|
license,role=external,window=_blank] and requests the plugin to be hosted on
|
|
link:https://gerrit-review.googlesource.com[the Gerrit project site,role=external,window=_blank]. The
|
|
proposal must be accepted by at least one Gerrit maintainer. In case of
|
|
disagreement between maintainers, the issue can be escalated to the
|
|
link:dev-processes.html#steering-committee[Engineering Steering Committee]. If
|
|
the plugin is accepted, the Gerrit maintainer creates the project under the
|
|
plugins path on link:https://gerrit-review.googlesource.com[the Gerrit project
|
|
site,role=external,window=_blank].
|
|
+
|
|
Also see section link#plugin_proposal[Plugin Proposal] below.
|
|
|
|
- Build:
|
|
+
|
|
To make the consumption of the plugin easy and to notice plugin breakages early
|
|
the plugin author should setup build jobs on
|
|
link:https://gerrit-ci.gerritforge.com[the GerritForge CI,role=external,window=_blank] that build the
|
|
plugin for each Gerrit version that it supports.
|
|
+
|
|
Also see section link#build[Build] below.
|
|
|
|
- Development and Contribution:
|
|
+
|
|
The author develops a production-ready code base of the plugin, with
|
|
contributions, reviews, and help from the Gerrit community.
|
|
+
|
|
Also see section link#development_contribution[Development and contribution]
|
|
below.
|
|
|
|
- Release:
|
|
+
|
|
The author releases the plugin by creating a Git tag and announcing the plugin
|
|
on the link:https://groups.google.com/d/forum/repo-discuss[repo-discuss,role=external,window=_blank]
|
|
mailing list.
|
|
+
|
|
Also see section link#plugin_release[Plugin release] below.
|
|
|
|
- Maintenance:
|
|
+
|
|
The author maintains their plugins as new Gerrit versions are released, updates
|
|
them when necessary, develops further existing or new features and reviews
|
|
incoming contributions.
|
|
|
|
- Deprecation:
|
|
+
|
|
The author declares that the plugin is not maintained anymore or is deprecated
|
|
and should not be used anymore.
|
|
+
|
|
Also see section link#plugin_deprecation[Plugin deprecation] below.
|
|
|
|
[[ideation_discussion]]
|
|
== Ideation and Discussion
|
|
|
|
Starting a new plugin project is a community effort: it starts with the
|
|
identification of a gap in the Gerrit Code Review product but evolves with the
|
|
contribution of ideas and suggestions by the whole community.
|
|
|
|
The ideator of the plugin starts with an RFC (Request For Comments) post on the
|
|
link:https://groups.google.com/d/forum/repo-discuss[repo-discuss,role=external,window=_blank] mailing list
|
|
with a description of the main reasons for starting a new plugin.
|
|
|
|
Example of a post:
|
|
|
|
----
|
|
[RFC] Code-Formatter plugin
|
|
|
|
Hello, community,
|
|
I am proposing to create a new plugin for Gerrit called 'Code-Formatter', see
|
|
the details below.
|
|
|
|
*The gap*
|
|
Often, when I post a new change to Gerrit, I forget to run the common code
|
|
formatting tool (e.g. Google-Java-Format for the Gerrit project). I would
|
|
like Gerrit to be in charge of highlighting these issues to me and save many
|
|
people's time.
|
|
|
|
*The proposal*
|
|
The Code-Formatter plugin reads the formatting rules in the project config
|
|
and applies them automatically to every patch-set. Any issue is reported as a
|
|
regular review comment to the patchset, highlighting the part of the code to
|
|
be changed.
|
|
|
|
What do you think? Did anyone have the same idea or need?
|
|
----
|
|
|
|
The idea is discussed on the mailing list and can evolve based on the needs and
|
|
inputs from the entire community.
|
|
|
|
After the discussion, the ideator of the plugin can decide to start prototyping
|
|
on it or park the proposal, if the feedback provided an alternative solution to
|
|
the problem. The prototype phase can be optionally skipped if the idea is clear
|
|
enough and receives a general agreement from the Gerrit maintainers. The author
|
|
can be given a "leap of faith" and can go directly to the format plugin
|
|
proposal (see below) and the creation of the plugin repository.
|
|
|
|
[[plugin_prototyping]]
|
|
== Plugin Prototyping
|
|
|
|
The initial idea is translated to code by the plugin author. The development
|
|
can happen on any public or private source code repository and can involve one
|
|
or more contributors. The purpose of prototyping is to verify that the idea can
|
|
be implemented and provides the expected benefits.
|
|
|
|
Once a working prototype is ready, it can be announced as a follow-up to the
|
|
initial RFC proposal so that other members of the community can see the code
|
|
and try the plugin themselves.
|
|
|
|
[[plugin_proposal]]
|
|
== Plugin Proposal
|
|
|
|
The author decides that the plugin prototype makes sense as a general purpose
|
|
plugin and decides to release the code with the same
|
|
link:https://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0 license,role=external,window=_blank]
|
|
as the Gerrit Code Review project and have it hosted on
|
|
link:https://gerrit-review.googlesource.com[the Gerrit project site,role=external,window=_blank].
|
|
|
|
The plugin author formalizes the proposal with a follow-up of the initial RFC
|
|
post and asks for public opinion on it.
|
|
|
|
Example:
|
|
|
|
----
|
|
Re - [RFC] Code-Formatter plugin
|
|
|
|
Hello, community,
|
|
thanks for your feedback on the prototype. I have now decided to donate the
|
|
project to the Gerrit Code Review project and make it a plugin:
|
|
|
|
Plugin name:
|
|
/plugins/code-formatter
|
|
|
|
Plugin description:
|
|
Plugin to allow automatic posting review based on code-formatting rules
|
|
----
|
|
|
|
The community discusses the proposal and the value of the plugin for the whole
|
|
project; the result of the discussion can end up in one of the following cases:
|
|
|
|
- The plugin's project request is widely appreciated and formally accepted by
|
|
at least one Gerrit maintainer who creates the repository as child project of
|
|
'Public-Projects' on link:https://gerrit-review.googlesource.com[the Gerrit
|
|
project site,role=external,window=_blank], creates an associated plugin owners group with "Owner"
|
|
permissions for the plugin and adds the plugin's author as member of it.
|
|
- The plugin's project is widely appreciated; however, another existing plugin
|
|
already partially covers the same use-case and thus it would make more sense
|
|
to have the features integrated into the existing plugin. The new plugin's
|
|
author contributes his prototype commits refactored to be included as change
|
|
into the existing plugin.
|
|
- The plugin's project is found useful; however, it is too specific to the
|
|
author's use-case and would not make sense outside of it. The plugin remains
|
|
in a public repository, widely accessible and OpenSource, but not hosted on
|
|
link:https://gerrit-review.googlesource.com[the Gerrit project site,role=external,window=_blank].
|
|
|
|
[[build]]
|
|
== Build
|
|
|
|
The plugin's maintainer creates a job on the
|
|
link:https://gerrit-ci.gerritforge.com[GerritForge CI,role=external,window=_blank] by creating a new YAML
|
|
definition in the link:https://gerrit.googlesource.com/gerrit-ci-scripts[Gerrit
|
|
CI Scripts,role=external,window=_blank] repository.
|
|
|
|
Example of a YAML CI job for plugins:
|
|
|
|
----
|
|
- project:
|
|
name: code-formatter
|
|
jobs:
|
|
- 'plugin-{name}-bazel-{branch}':
|
|
branch:
|
|
- master
|
|
----
|
|
|
|
[[development_contribution]]
|
|
== Development and Contribution
|
|
|
|
The plugin follows the same lifecycle as Gerrit Code Review and needs to be
|
|
kept up-to-date with the current active branches, according to the
|
|
link:https://www.gerritcodereview.com/#support[current support policy,role=external,window=_blank].
|
|
During the development, the plugin's maintainer can reward contributors
|
|
requesting to be more involved and making them maintainers of his plugin,
|
|
adding them to the list of the project owners.
|
|
|
|
[[plugin_release]]
|
|
== Plugin Release
|
|
|
|
The plugin's maintainer is the only person responsible for making and
|
|
announcing the official releases, typically, but not limited to, in conjunction
|
|
with the major releases of Gerrit Code Review. The plugin's maintainer may tag
|
|
his plugin and follow the notation and semantics of the Gerrit Code Review
|
|
project; however it is not mandatory and many of the plugins do not have any
|
|
tags or releases.
|
|
|
|
Example of a YAML CI job for a plugin compatible with multiple Gerrit versions:
|
|
|
|
----
|
|
- project:
|
|
name: code-formatter
|
|
jobs:
|
|
- 'plugin-{name}-bazel-{branch}-{gerrit-branch}':
|
|
branch:
|
|
- master
|
|
gerrit-branch:
|
|
- master
|
|
- stable-3.0
|
|
- stable-2.16
|
|
----
|
|
|
|
[[plugin_deprecation]]
|
|
== Plugin Deprecation
|
|
|
|
The plugin's maintainer and the community have agreed that the plugin is not
|
|
useful anymore or there isn't anyone willing to contribute to bringing it
|
|
forward and keeping it up-to-date with the recent versions of Gerrit Code
|
|
Review.
|
|
|
|
The plugin's maintainer puts a deprecation notice in the README.md of the
|
|
plugin and pushes it for review. If nobody is willing to bring the code
|
|
forward, the change gets merged, and the master branch is removed from the list
|
|
of branches to be built on the GerritFoge CI.
|
|
|
|
GERRIT
|
|
------
|
|
Part of link:index.html[Gerrit Code Review]
|
|
|
|
SEARCHBOX
|
|
---------
|