|  | :linkattrs: | 
|  | = Gerrit Code Review - Core Plugins | 
|  |  | 
|  | [[definition]] | 
|  | == What are core plugins? | 
|  |  | 
|  | Core plugins are plugins that are packaged within the Gerrit war file. This | 
|  | means during the link:pgm-init.html[Gerrit initialization] they can be easily | 
|  | installed without downloading any additional files. | 
|  |  | 
|  | To make working with core plugins easy, they are linked as | 
|  | link:https://gerrit.googlesource.com/gerrit/+/refs/heads/master/.gitmodules[Git | 
|  | submodules,role=external,window=_blank] in the `gerrit` repository. E.g. this means they can be easily | 
|  | link:dev-readme.html#clone[cloned] together with Gerrit. | 
|  |  | 
|  | All core plugins are developed and maintained by the | 
|  | link:dev-roles.html#maintainers[Gerrit maintainers] and everyone can | 
|  | link:dev-contributing.html[contribute] to them. | 
|  |  | 
|  | Adding a new core plugin feature that is large or complex requires a | 
|  | link:dev-design-doc.html[design doc] (also see | 
|  | link:dev-contributing.html#design-driven-contribution-process[design-driven | 
|  | contribution process]). The link:dev-processes.html#steering-committee[ | 
|  | engineering steering committee (ESC)] is the authority that approves the design | 
|  | docs. The ESC is also in charge of adding and removing core plugins. | 
|  |  | 
|  | Non-Gerrit maintainers cannot have link:access-control.html#category_owner[ | 
|  | Owner] permissions for core plugins. | 
|  |  | 
|  | [[list]] | 
|  | == Which core plugins exist? | 
|  |  | 
|  | See link:config-plugins.html#core-plugins[here]. | 
|  |  | 
|  | [[criteria]] | 
|  | === Criteria for Core Plugins | 
|  |  | 
|  | To be considered as a core plugin, a plugin must fulfill the following | 
|  | criteria: | 
|  |  | 
|  | 1. License: | 
|  | + | 
|  | The plugin code is available under the | 
|  | link:http://www.apache.org/licenses/LICENSE-2.0[Apache License Version 2.0,role=external,window=_blank]. | 
|  |  | 
|  | 2. Hosting: | 
|  | + | 
|  | The plugin development is hosted on the | 
|  | link:https://gerrit-review.googlesource.com[gerrit-review,role=external,window=_blank] Gerrit Server. | 
|  |  | 
|  | 3. Scope: | 
|  | + | 
|  | The plugin functionality is Gerrit-related, has a clear scope and does not | 
|  | conflict with other core plugins or existing and planned Gerrit core features. | 
|  |  | 
|  | 4. Relevance: | 
|  | + | 
|  | The plugin functionality is relevant to a majority of the Gerrit community: | 
|  | + | 
|  | -- | 
|  | ** An out of the box Gerrit installation would seem like it is missing | 
|  | something if the plugin is not installed. | 
|  | ** It's expected that most sites would use the plugin. | 
|  | ** Multiple parties (different organizations/companies) already use the plugin | 
|  | and agree that it should be offered as core plugin. | 
|  | ** If the same or similar functionality is provided by multiple plugins, | 
|  | the plugin is the clear recommended solution by the community. | 
|  | -- | 
|  | + | 
|  | Whether a plugin is relevant to a majority of the Gerrit community must be | 
|  | discussed on a case-by-case basis. In case of doubt, it's up to the | 
|  | link:dev-processes.html#steering-committee[engineering steering committee] to | 
|  | make a decision. | 
|  |  | 
|  | 5. Code Quality: | 
|  | + | 
|  | The plugin code is mature and has a good test coverage. Maintaining the plugin | 
|  | code creates only little overhead for the Gerrit maintainers. | 
|  |  | 
|  | 6. Documentation: | 
|  | + | 
|  | The plugin functionality is fully documented. | 
|  |  | 
|  | 7. Ownership: | 
|  | + | 
|  | Existing plugin owners which are not Gerrit maintainers must agree to give up | 
|  | their ownership. If the current plugin owners disagree, forking the plugin is | 
|  | possible, but this should happen only in exceptional cases. | 
|  |  | 
|  | [[process-to-make-a-plugin-a-core-plugin]] | 
|  | == Process to make a plugin a core plugin | 
|  |  | 
|  | Anyone can propose to make a plugin a core plugin, but to be accepted as core | 
|  | plugin the plugin must fulfill certain link:#criteria[criteria]. | 
|  |  | 
|  | 1. Propose a plugin as core plugin: | 
|  | + | 
|  | File a link:https://bugs.chromium.org/p/gerrit/issues/entry?template=Core+Plugin+Request[ | 
|  | Core Plugin Request] in the issue tracker and provide the information that is | 
|  | being asked for in the request template. | 
|  |  | 
|  | 2. Community Feedback: | 
|  | + | 
|  | Anyone can comment on the issue to raise concerns or to support the request. | 
|  | The issue should stay open for at least 10 calendar days so that everyone in | 
|  | the community has a chance to comment. | 
|  |  | 
|  | 3. ESC Decision: | 
|  | + | 
|  | The ESC should discuss the request and reject/approve it or ask for further | 
|  | information that the reporter or commenters should provide. | 
|  | + | 
|  | Any decision must be based on the link:#criteria[criteria] that core plugins | 
|  | are expected to fulfill and should take the feedback from the community into | 
|  | account. | 
|  | + | 
|  | Accepting the request is only possible if the issue was open for at least 10 | 
|  | calendar days (see 2., this gives the community time to comment). | 
|  | + | 
|  | When the ESC approves/rejects the request a summary of the reasons for the | 
|  | decision should be added to the issue. | 
|  | + | 
|  | If a request is rejected, it's possible to ask for a revalidation if the | 
|  | concerns that led to the rejection have been addressed (e.g. the plugin was | 
|  | rejected due to missing tests, but tests have been added afterwards). | 
|  |  | 
|  | 4. Add plugin as core plugin: | 
|  | + | 
|  | If the request was accepted, a Gerrit maintainer should add the plugin as | 
|  | core plugin: | 
|  | + | 
|  | -- | 
|  | ** Host the plugin repo on link:https://gerrit-review.googlesource.com/[ | 
|  | gerrit-review]. | 
|  | ** Ensure that the plugin repo inherits from the | 
|  | link:https://gerrit-review.googlesource.com/admin/repos/Public-Plugins[ | 
|  | Public-Plugins] repo. | 
|  | ** Remove all permissions on the plugin repo (the inherited permissions from | 
|  | `Public-Plugins` should be enough). Especially make sure that there are no | 
|  | link:access-control.html#category_owner[Owner], | 
|  | link:access-control.html#category_push_direct[Direct Push], | 
|  | link:access-control.html#category_submit[Submit] or | 
|  | link:access-control.html#category_review_labels[Code-Review+2] | 
|  | permissions for non-Gerrit maintainers. | 
|  | ** Create a component for the plugin in | 
|  | link:https://bugs.chromium.org/p/gerrit/adminComponents[Monorail] and assign | 
|  | all issues that already exist for the plugin to this component. | 
|  | ** Add the plugin as | 
|  | link:https://gerrit.googlesource.com/gerrit/+/refs/heads/master/.gitmodules[Git | 
|  | submodule]. | 
|  | ** Register the plugin as core plugin in | 
|  | link:https://gerrit.googlesource.com/gerrit/+/refs/heads/master/tools/bzl/plugins.bzl[ | 
|  | plugins.bzl]. | 
|  | ** Announce the new core plugin in the | 
|  | link:https://www.gerritcodereview.com/news.html[project news]. | 
|  | -- | 
|  |  | 
|  | [[removing]] | 
|  | === Removing Core Plugins | 
|  |  | 
|  | A core plugin could be subject to NOT be considered core anymore if: | 
|  |  | 
|  | 1. Does not respect the license: | 
|  | + | 
|  | The plugin code or the libraries used are not following anymore the | 
|  | Apache License Version 2.0. | 
|  |  | 
|  | 2. Is out of scope: | 
|  | + | 
|  | The plugin functionality has gone outside the Gerrit-related scope, | 
|  | has a clear scope or conflict with other core plugins or existing and | 
|  | planned Gerrit core features. | 
|  | + | 
|  | NOTE: The plugin would need to remain core until the planned replacement gets | 
|  | implemented. Otherwise the feature is likely missing between the removal and | 
|  | planned implementation times. | 
|  |  | 
|  | 3. Is not relevant: | 
|  | + | 
|  | The plugin functionality is no more relevant to a majority of the Gerrit community: | 
|  | + | 
|  | -- | 
|  | ** An out of the box Gerrit installation won’t be missing anything if the plugin is | 
|  | not installed. | 
|  | ** It isn’t anymore used by most sites. | 
|  | ** Multiple parties (different organizations/companies) have abandoned the use of | 
|  | the plugin and agree that it should not be anymore a core plugin. | 
|  | ** If the same or similar functionality is provided by multiple plugins, the plugin | 
|  | is not a clear recommended solution anymore by the community. | 
|  | ** Whether a plugin is no more relevant to a majority of the Gerrit community must be | 
|  | discussed on a case-by-case basis. In case of doubt, it’s up to the engineering | 
|  | steering committee to make a decision. | 
|  | -- | 
|  |  | 
|  | 4. Degraded code quality: | 
|  | + | 
|  | The plugin code maintenance is lacking and has not anymore good test coverage. | 
|  | Maintaining the plugin code creates a significant overhead for the Gerrit maintainers. | 
|  |  | 
|  | 5. Outdated documentation: | 
|  | + | 
|  | The plugin functionality documented is significantly outdated. | 
|  |  | 
|  | GERRIT | 
|  | ------ | 
|  | Part of link:index.html[Gerrit Code Review] | 
|  |  | 
|  | SEARCHBOX | 
|  | --------- |