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