| :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 |
| --------- |