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