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
363 lines
17 KiB
Plaintext
363 lines
17 KiB
Plaintext
:linkattrs:
|
|
= Gerrit Code Review - Development Processes
|
|
|
|
[[project-governance]]
|
|
[[steering-committee]]
|
|
== Project Governance / Engineering Steering Committee
|
|
|
|
The Gerrit project has an engineering steering committee (ESC) that is
|
|
in charge of:
|
|
|
|
* Gerrit core (the `gerrit` project) and the link:dev-core-plugins.html[core
|
|
plugins]
|
|
* defining the project vision and the project scope
|
|
* maintaining a roadmap, a release plan and a prioritized backlog
|
|
* ensuring timely design reviews
|
|
* ensuring that new features are compatible with the project vision and
|
|
are well aligned with other features (give feedback on new
|
|
link:dev-design-docs.html[design docs] within 14 calendar days)
|
|
* approving/rejecting link:dev-design-docs.html[designs], vetoing new
|
|
features
|
|
* assigning link:dev-roles.html#mentor[mentors] for approved features
|
|
* accepting new plugins as core plugins
|
|
* making changes to the project governance process and the
|
|
link:dev-contributing.html#contribution-processes[contribution
|
|
processes]
|
|
|
|
The steering committee has 5 members:
|
|
|
|
* 3 Googlers that are appointed by Google
|
|
* 2 non-Google maintainers, elected by non-Google maintainers for the
|
|
period of 1 year (see link:#steering-committee-election[below])
|
|
|
|
Refer to the project homepage for the link:https://www.gerritcodereview.com/members.html#engineering-steering-committee[
|
|
list of current committee members,role=external,window=_blank].
|
|
|
|
The steering committee should act in the interest of the Gerrit project
|
|
and the whole Gerrit community.
|
|
|
|
For decisions, consensus between steering committee members and all
|
|
other maintainers is desired. If consensus cannot be reached, decisions
|
|
can also be made by simple majority in the steering committee (should
|
|
be applied only in exceptional situations).
|
|
|
|
The steering committee is empowered to overrule positive/negative votes
|
|
from individual maintainers, but should do so only in exceptional
|
|
situations after attempts to reach consensus have failed.
|
|
|
|
As an integral part of the Gerrit community, the steering committee is
|
|
committed to transparency and to answering incoming requests in a
|
|
timely manner.
|
|
|
|
[[steering-committee-election]]
|
|
=== Election of non-Google steering committee members
|
|
|
|
The election of the non-Google steering committee members happens once
|
|
a year in May. Non-Google link:dev-roles.html#maintainer[maintainers]
|
|
can nominate themselves by posting an informal application on the
|
|
non-public maintainers mailing list by end of April (deadline for 2019
|
|
is Mon 13th of May). By applying to be steering committee member, the
|
|
candidate confirms to be able to dedicate the time that is needed to
|
|
fulfill this role (also see
|
|
link:dev-roles.html#steering-committee-member[steering committee
|
|
member]).
|
|
|
|
Each non-Google maintainer can vote for 2 candidates. The voting
|
|
happens by posting on the maintainer mailing list. The voting period is
|
|
14 calendar days from the nomination deadline (except for 2019, where
|
|
the initial steering committee should be confirmed during the Munich
|
|
hackathon, the voting period goes from 14th May to 16th May).
|
|
|
|
Google maintainers do not take part in this vote, because Google
|
|
already has dedicated seats in the steering committee (see section
|
|
link:steering-committee[steering committee]).
|
|
|
|
[[contribution-process]]
|
|
== Contribution Process
|
|
|
|
See link:dev-contributing.html[here].
|
|
|
|
[[design-doc-review]]
|
|
== Design Doc Review
|
|
|
|
See link:dev-design-docs.html#review[here].
|
|
|
|
[[versioning]]
|
|
== Semantic versioning
|
|
|
|
Gerrit follows a light link:https://semver.org/[semantic versioning scheme,role=external,window=_blank] MAJOR.MINOR[.PATCH[.HOTFIX]]
|
|
format:
|
|
|
|
* MAJOR is incremented when there are substantial incompatible changes and/or
|
|
new features in Gerrit.
|
|
* MINOR is incremented when there are changes that are typically backward compatible
|
|
with the earlier minor version. Features can be removed following the
|
|
link:#deprecating-features[feature deprecation process]. Dependencies can be upgraded
|
|
according to the link:dev-processes.html#upgrading-libraries[libraries upgrade policy].
|
|
* PATCH is incremented when there are backward-compatible bug fixes in Gerrit or its
|
|
dependencies. When PATCH is zero, it can be omitted.
|
|
* HOTFIX is present only when immediately after a patch release, some urgent
|
|
fixes in the code or the packaging format are required but do not justify a
|
|
new patch release.
|
|
|
|
For every MAJOR.MINOR release there is an associated stable branch that follows well defined
|
|
link:#dev-in-stable-branches[rules of development].
|
|
|
|
Within a stable branch, there are multiple MAJOR.MINOR.PATCH tags created associated to the
|
|
bug-fix releases of that stable release.
|
|
|
|
Examples:
|
|
|
|
* Gerrit v3.0.0 contains breaking incompatible changes in the functionality because
|
|
the ReviewDb storage has been totally removed.
|
|
* Gerrit v2.15 contains brand-new features like NoteDb, however, still supports the existing
|
|
ReviewDb storage for changes and thus is considered a minor release.
|
|
* Gerrit v2.14.20 is the 20th patch-release of the stable Gerrit v2.14.* and thus does not contain
|
|
new features but only bug-fixes.
|
|
|
|
[[dev-in-stable-branches]]
|
|
== Development in stable branches
|
|
|
|
As their name suggests stable branches are intended to be stable. This means that generally
|
|
only bug-fixes should be done on stable branches, however this is not strictly enforced and
|
|
exceptions may apply:
|
|
|
|
* When a stable branch is initially created to prepare a new release the Gerrit community
|
|
discusses on the mailing list if there are pending features which should still make it into the
|
|
release. Those features are blocking the release and should be implemented on the stable
|
|
branch before the first release candidate is created.
|
|
* To stabilize the code before doing a major release several release candidates are created. Once
|
|
the first release candidate was done no more features should be accepted on the stable branch.
|
|
If more features are found to be required they should be discussed with the steering committee
|
|
and should only be allowed if the risk of breaking things is considered to be low.
|
|
* Once a major release is done only bug-fixes and documentation updates should be done on the
|
|
stable branch. These updates will be included in the next minor release.
|
|
* For minor releases new features could be acceptable if the following conditions are met:
|
|
** they are result of a new feature introduced through a merge of an earlier stable branch
|
|
** they are justified for completing, extending or fixing an existing feature
|
|
** does not involve API, user-interface changes or data migrations
|
|
** is backward compatible with all existing features
|
|
** the parts of the code in common with existing features are properly covered by end-to-end tests
|
|
** is important to the Gerrit community and no Gerrit maintainers have raised objections.
|
|
* In cases of doubt or conflicting opinions on new features, it's the responsibility of the
|
|
steering committee to evaluate the risk of new features and make a decision based on these
|
|
rules and opinions from the Gerrit community.
|
|
* The older a stable branch is the more stable it should be. This means old stable branches
|
|
should only receive bug-fixes that are either important or low risk. Security fixes, including
|
|
security updates for third party dependencies, are always considered as important and hence can
|
|
always be done on stable branches.
|
|
|
|
Examples:
|
|
|
|
* Gerrit v3.0.0-rc1 and v3.0.0-rc2 may contain new features and API changes without notice,
|
|
even if they are both cut on the same stable-3.0 branch.
|
|
* Gerrit v2.14.8 introduced the support for ElasticSearch as a new feature. This was an exception
|
|
agreed amongst the Gerrit maintainers, did not touch the Lucene indexing code-base, was supported
|
|
by container-based E2E tests and represents a completion of an high-level feature.
|
|
|
|
[[backporting]]
|
|
== Backporting to stable branches
|
|
|
|
From time to time bug fix releases are made for existing stable branches.
|
|
|
|
Developers concerned with stable branches are encouraged to backport or push fixes to these
|
|
branches, even if no new release is planned. Backporting features is only possible in compliance
|
|
with the rules link:#dev-in-stable-branches[above].
|
|
|
|
Fixes that are known to be needed for a particular release should be pushed for review on that
|
|
release's stable branch. They will then be included into the master branch when the stable branch
|
|
is merged back.
|
|
|
|
[[security-issues]]
|
|
== Dealing with Security Issues
|
|
|
|
If a security vulnerability in Gerrit is discovered, we place an link:#embargo[
|
|
embargo] on it until a fixed release or mitigation is available. Fixing the
|
|
issue is usually pursued with high priority (depends on the severity of the
|
|
security vulnerability). The embargo is lifted and the vulnerability is
|
|
disclosed to the community as soon as a fix release or another mitigation is
|
|
available.
|
|
|
|
[[report-security-issue]]
|
|
=== How to report a security vulnerability?
|
|
|
|
To report a security vulnerability file a
|
|
link:https://bugs.chromium.org/p/gerrit/issues/entry?template=Security+Issue[
|
|
security issue,role=external,window=_blank] in the Gerrit issue tracker. The visibility of issues that are
|
|
created with the `Security Issue` template is automatically restricted to
|
|
Gerrit maintainers and a few long-term contributors. This means as a reporter
|
|
you may not be able to see the issue once it is created. Security issues are
|
|
created on the `ESC` component so that they will be discussed at the next
|
|
meeting of the link:#steering-committee[Engineering Steering Committee] which
|
|
takes place biweekly.
|
|
|
|
If an existing issue is found to be a security vulnerability it should be
|
|
turned into a security issue by:
|
|
|
|
. Setting the component to `ESC`
|
|
. Adding the labels `Security` and `NonPublic`
|
|
|
|
In case of doubt, or if an issue cannot wait until the next ESC meeting,
|
|
contact the link:#steering-committee[Engineering Steering Committee] directly
|
|
by sending them an mailto:gerritcodereview-esc@googlegroups.com[email].
|
|
|
|
If needed, the ESC will contact the reporter for additional details.
|
|
|
|
[[embargo]]
|
|
=== The Embargo
|
|
|
|
Once an issue has been identified as security vulnerability, we keep it under
|
|
embargo until a fixed release or a mitigation is available. This means that the
|
|
issue is not discussed publicly, but only on issues with restricted visibility
|
|
(see link:#report-security-issue[above]) and at the mailing lists of the ESC,
|
|
community managers and Gerrit maintainers. Since the `repo-discuss` mailing
|
|
list is public, security issues must not be discussed on this mailing list
|
|
while the embargo is in place.
|
|
|
|
The reason for keeping an embargo is to prevent attackers from taking advantage
|
|
of a vulnerability while no fixed releases are available yet, and Gerrit
|
|
administrators cannot make their systems secure.
|
|
|
|
Once a fix release or mitigation is available, the embargo is lifted and the
|
|
community is informed about the security vulnerability with the advise to
|
|
address the security vulnerability immediately (either by upgrading to a fixed
|
|
release or applying the mitigation). The information about the security
|
|
vulnerability is disclosed via the
|
|
link:https://groups.google.com/d/forum/repo-discuss[repo-discuss,role=external,window=_blank] mailing list.
|
|
|
|
[[handle-security-issue]]
|
|
=== Handling of the Security Vulnerability
|
|
|
|
. Engineering Steering Committee evaluates the security vulnerability:
|
|
+
|
|
The ESC discusses the security vulnerability and which actions should be taken
|
|
to address it. One person, usually one of the Gerrit maintainers, should be
|
|
appointed to drive and coordinate the investigation and the fix of the security
|
|
vulnerability. This coordinator doesn't need to do all the work alone, but is
|
|
responsible that the security vulnerability is getting fixed in a timely
|
|
manner.
|
|
+
|
|
If the security vulnerability affects multiple or older releases the ESC should
|
|
decide which of the releases should be fixed. For critical security issue we
|
|
also consider fixing old releases that are otherwise not receiving any
|
|
bug-fixes anymore.
|
|
+
|
|
It's also possible that the ESC decides that an issue is not a security issue
|
|
and the embargo is lifted immediately.
|
|
|
|
. Implementation of the security fix:
|
|
+
|
|
To keep the embargo intact, security fixes cannot be developed and reviewed in
|
|
the public `gerrit` repository. In particular it's not secure to use private
|
|
changes for implementing and reviewing security fixes (see general notes about
|
|
link:intro-user.html[security-fixes]).
|
|
+
|
|
Instead security fixes should be implemented and reviewed in the non-public
|
|
link:https://gerrit-review.googlesource.com/admin/repos/gerrit-security-fixes[
|
|
gerrit-security-fixes,role=external,window=_blank] repository which is only accessible by Gerrit
|
|
maintainers and Gerrit community members that work on security fixes.
|
|
+
|
|
The change that fixes the security vulnerability should contain an integration
|
|
test that verifies that the security vulnerability is no longer present.
|
|
+
|
|
Review and approval of the security fixes must be done by the Gerrit
|
|
maintainers. Verifications must be done manually since the Gerrit CI doesn't
|
|
build and test changes of the `gerrit-security-fixes` repository (and it
|
|
shouldn't because everything on the CI server is public which would break
|
|
the embargo).
|
|
+
|
|
Once a security fix is ready and submitted, it should be cherry-picked to all
|
|
branches that should be fixed.
|
|
|
|
. Creation of fixed releases and announcement of the security vulnerability:
|
|
+
|
|
A release manager should create new bug fix releases for all fixed branches.
|
|
+
|
|
The new releases should be tested against the security vulnerability to
|
|
double-check that the release was built from the correct source that contains
|
|
the fix for the security vulnerability.
|
|
+
|
|
Before publishing the fixed releases, an announcement to the Gerrit community
|
|
should be prepared. The announcement should clearly describe the security
|
|
vulnerability, which releases are affected and which releases contain the fix.
|
|
The announcement should recommend to upgrade to fixed releases immediately.
|
|
+
|
|
Once all releases are ready and tested and the announcement is prepared, the
|
|
releases should be all published at the same time. Immediately after that, the
|
|
announcement should be sent out to the
|
|
link:https://groups.google.com/d/forum/repo-discuss[repo-discuss,role=external,window=_blank] mailing list.
|
|
+
|
|
This ends the embargo and any issue that discusses the security vulnerability
|
|
should be made public.
|
|
|
|
. Follow-Up
|
|
+
|
|
The ESC should discuss if there are any learnings from the security
|
|
vulnerability and define action items to follow up in the
|
|
link:https://bugs.chromium.org/p/gerrit[issue tracker,role=external,window=_blank].
|
|
|
|
[[core-plugins]]
|
|
== Core Plugins
|
|
|
|
See link:dev-core-plugins.html[here].
|
|
|
|
[[upgrading-libraries]]
|
|
== Upgrading Libraries
|
|
|
|
Changes that add new libraries or upgrade existing libraries require an approval on the
|
|
`Library-Compliance` label. For an approval the following things are checked:
|
|
|
|
* The library has a license that is suitable for use within Gerrit.
|
|
* If the library is used within Google, the version of the library must be compatible with the
|
|
version that is used at Google.
|
|
|
|
Only maintainers from Google can vote on the `Library-Compliance` label.
|
|
|
|
Gerrit's library dependencies should only be upgraded if the new version contains
|
|
something we need in Gerrit. This includes new features, API changes as well as bug
|
|
or security fixes.
|
|
An exception to this rule is that right after a new Gerrit release was branched
|
|
off, all libraries should be upgraded to the latest version to prevent Gerrit
|
|
from falling behind. Doing those upgrades should conclude at the latest two
|
|
months after the branch was cut. This should happen on the master branch to ensure
|
|
that they are vetted long enough before they go into a release and we can be sure
|
|
that the update doesn't introduce a regression.
|
|
|
|
[[deprecating-features]]
|
|
== Deprecating features
|
|
|
|
Gerrit should be as stable as possible and we aim to add only features that last.
|
|
However, sometimes we are required to deprecate and remove features to be able
|
|
to move forward with the project and keep the code-base clean. The following process
|
|
should serve as a guideline on how to deprecate functionality in Gerrit. Its purpose
|
|
is that we have a structured process for deprecation that users, administrators and
|
|
developers can agree and rely on.
|
|
|
|
General process:
|
|
|
|
* Make sure that the feature (e.g. a field on the API) is not needed anymore or blocks
|
|
further development or improvement. If in doubt, consult the mailing list.
|
|
* If you can provide a schema migration that moves users to a comparable feature, do
|
|
so and stop here.
|
|
* Mark the feature as deprecated in the documentation and release notes.
|
|
* If possible, mark the feature deprecated in any user-visible interface. For example,
|
|
if you are deprecating a Git push option, add a message to the Git response if
|
|
the user provided the option informing them about deprecation.
|
|
* Annotate the code with `@Deprecated` and `@RemoveAfter(x.xx)` if applicable.
|
|
Alternatively, use `// DEPRECATED, remove after x.xx` (where x.xx is the version
|
|
number that has to be branched off before removing the feature)
|
|
* Gate the feature behind a config that is off by default (forcing admins to turn
|
|
the deprecated feature on explicitly).
|
|
* After the next release was branched off, remove any code that backed the feature.
|
|
|
|
You can optionally consult the mailing list to ask if there are users of the feature you
|
|
wish to deprecate. If there are no major users, you can remove the feature without
|
|
following this process and without the grace period of one release.
|
|
|
|
GERRIT
|
|
------
|
|
Part of link:index.html[Gerrit Code Review]
|
|
|
|
SEARCHBOX
|
|
---------
|