blob: 61cf60d185ed4163dba984ffd83cfa092eac3562 [file] [log] [blame] [view]
Edwin Kempin6b2a18c2020-09-22 17:04:56 +02001# Validation
2
3The code owners functionality relies on the validity of the following:
4
5* [code owner config files](user-guide.html#codeOwnerConfigFiles) that define
6 the code owners
7* [code-owner.config](config.html#projectLevelConfigFile) files in the
8 'refs/meta/config' branches of the projects that contain the project-level
9 configuration of the `@PLUGIN@` plugin
10
11To reduce the risk that these files become invalid, they are validated when
Edwin Kempin3d489e22020-09-30 12:57:08 +020012they are modified and invalid modifications are rejected. In addition code owner
13config files in a repository can be validated on demand by the [Check code
14owners files REST endpoint](rest-api.html#check-code-owner-config-files).
Edwin Kempin6b2a18c2020-09-22 17:04:56 +020015
16**NOTE:** Most configuration issues are gracefully handled and do not break the
17code owners functionality (e.g. non-resolveable code owners or non-resolveable
18imports are silently ignored), however some configuration issue (non-parseable
19configuration files, configuration of a non-existing [backend](backends.html)
20etc.) are severe errors and block the submission of all changes for which the
21affected configuration files are relevant.
22
Edwin Kempin205285a2020-12-01 09:53:04 +010023**NOTE:** It's possible to disable the validation of code owner config files on
24push and setup an [external
25validation](config-guide.html#externalValidationOfCodeOwnerConfigs) by a CI bot
26instead. In this case findings would be posted on the change.
27
Edwin Kempin6b2a18c2020-09-22 17:04:56 +020028All validations are best effort to prevent invalid configurations from
29entering the repository, but not all possible issues can be prevented. Doing the
30validation is useful since it prevents most issues and also gives quick feedback
31to uploaders about typos (e.g. if an email is misspelled it's not breaking
32anything, but the intended change of the uploader is not working).
33
34No validation is done when:
35
36* the `@PLUGIN@` plugin is not installed/enabled (this means when the `@PLUGIN@`
37 plugin gets installed/enabled, it is possible that invalid configuration files
38 already exist in the repository)
39* updates happen behind Gerrit's back (e.g. pushes that bypass Gerrit)
Edwin Kempinb05f24f2020-12-11 13:03:29 +010040* the validation is disabled via the
41 [enableValidationOnCommitReceived](config.html#codeOwnersEnableValidationOnCommitReceived)
42 or [enableValidationOnSubmit](config.html#codeOwnersEnableValidationOnSubmit)
43 config options
Edwin Kempinea5f8322021-03-12 15:37:48 +010044* the [--code-owners~skip-validation](#skipCodeOwnerConfigValidationOnDemand)
45 push option was specified on push
Edwin Kempin6b2a18c2020-09-22 17:04:56 +020046
47In addition for [code owner config files](user-guide.html#codeOwnerConfigFiles)
48no validation is done when:
49
50* the code owners functionality is disabled for the repository or branch (this
51 means when the code owners functionality gets enabled, it is possible that
52 invalid code owner configs already exist in the repository)
53* the `@PLUGIN@` plugin configuration is invalid (in this case we don't know
54 which files are code owner config files, so we allow all uploads rather than
55 blocking all uploads, to reduce the risk of breaking the plugin configuration
56 `code-owner.config` files are validated too)
57
Edwin Kempin29b692c2021-01-19 11:45:22 +010058## <a id="howCodeOwnerConfigsCanGetIssuesAfterSubmit">
Edwin Kempin6b2a18c2020-09-22 17:04:56 +020059In addition it is possible that [code owner config
60files](user-guide.hmtl#codeOwnerConfigFiles) get issues after they have been
61submitted:
62
63* configuration parameters that are relevant for the validation are changed
64 (e.g. the [accounts.visibility](../../../Documentation/config-gerrit.html#accounts.visibility)
65 setting is changed, [another code owners backend is
66 configured](setup-guide.html#configureCodeOwnersBackend) which now uses a
Edwin Kempinc85684a2021-01-19 12:01:01 +010067 different syntax or different names for code owner config files, the [file
68 extension for code owner config file is set/changed](config.html#codeOwnersFileExtension),
69 or the [allowed email domains are changed](config.html#pluginCodeOwnersAllowedEmailDomain))
Edwin Kempin6b2a18c2020-09-22 17:04:56 +020070* emails of users may change so that emails in code owner configs can no longer
71 be resolved
72* imported code owner config files may get deleted or renamed so that import
73 references can no longer be resolved
74
75When updating [code owner config files](user-guide.html#codeOwnerConfigFiles)
76the validation only rejects the update if it introduces **new** issues. This
77means the update is allowed if:
78
79* there are issues that are still present after the update, but the update
80 doesn't introduce any new issues
81* the file was non-parseable and the update makes it parseable, but issues are
82 present (since a parseable file with issues is better than a non-parseable
83 file)
84* the file was non-parseable and with the update it is still non-parseable
85
86For [code owner config files](user-guide.html#codeOwnerConfigFiles) the
Edwin Kempin1914db52021-03-24 15:31:23 +010087validation may also be performed on submit (in addition to the validation that
88is performed on upload of the change, see
89[enableValidationOnSubmit](config.html#codeOwnersEnableValidationOnSubmit)
90config setting). Repeating the validation on submit can make sense because
91relevant configuration can change between the time a change is uploaded and the
92time a change is submitted. If enabled, on submit we repeat the exact same
93validation that was done on upload. This means, all visibility checks will be
94done from the perspective of the uploader.
Edwin Kempin6b2a18c2020-09-22 17:04:56 +020095
Edwin Kempin2fd84e02021-05-17 09:02:53 +000096## <a id="skipCodeOwnerConfigValidationOnDemand">Skip code owner config validation on demand
97
98By setting the `--code-owners~skip-validation` push option it is possible to
99skip the code owner config validation on push.
100
101Using this push option requires the calling user to have to
102`Can Skip Code Owner Config Validation` global capability. Host administrators
103have this capability implicitly assigned via the `Administrate Server` global
104capability.
105
106**NOTE:** Using this option only makes sense if the [code owner config validation
107on submit](config.html#pluginCodeOwnersEnableValidationOnSubmit) is disabled, as
108otherwise it's not possible to submit the created change (using the push option
109only skips the validation for the push, but not for the submission of the
110change).
111
Edwin Kempin6b2a18c2020-09-22 17:04:56 +0200112### <a id="codeOwnerConfigFileChecks">Validation checks for code owner config files
113
114For [code owner config files](user-guide.html#codeOwnerConfigFiles) the
115following checks are performed:
116
117* the code owner config files are parseable
Edwin Kempin91664dd2021-03-24 14:12:50 +0100118* the code owner emails are resolveable (unless this check is
119 [disabled](config.html#codeOwnersRejectNonResolvableCodeOwners)):\
Edwin Kempin6b2a18c2020-09-22 17:04:56 +0200120 a code owners email is not resolveable if:
121 * the account that owns it is inactive
122 * the account that owns it is not visible to the uploader (according to
123 [accounts.visibility](../../../Documentation/config-gerrit.html#accounts.visibility)
124 setting)
125 * it is a non-visible secondary email
126 * there is no account that has this email assigned
Edwin Kempinba6cd402021-02-24 10:11:35 +0100127 * it is ambiguous (the same email is assigned to multiple active accounts)
Edwin Kempin6b2a18c2020-09-22 17:04:56 +0200128 * it has an email domain that is disallowed (see
129 [allowedEmailDomain](config.html#pluginCodeOwnersAllowedEmailDomain))
130 configuration
Edwin Kempin91664dd2021-03-24 14:12:50 +0100131* the imports are resolveable (unless this check is
132 [disabled](config.html#codeOwnersRejectNonResolvableImports)):\
Edwin Kempin6b2a18c2020-09-22 17:04:56 +0200133 an import is not resolveable if:
134 * the imported file is not a code owner config file
135 * the imported file is not parseable
136 * the imported file doesn't exists
137 * the branch from which the file should be imported doesn't exist or is not
138 visible to the uploader
139 * the project from which the file should be imported doesn't exist or is not
140 visible to the uploader
141 * the project from which the file should be imported doesn't permit reads
142 (e.g. has the state `HIDDEN`)
143
Edwin Kempin21660042020-12-11 15:42:54 +0100144**NOTE:** Whether commits that newly add non-resolvable code owners and
145non-resolvable imports are rejected on commit received and on submit is
146controlled by the
147[rejectNonResolvableCodeOwners](config.html#pluginCodeOwnersRejectNonResolvableCodeOwners)
148and [rejectNonResolvableImports](config.html#pluginCodeOwnersRejectNonResolvableImports)
149config settings.
150
Edwin Kempin6b2a18c2020-09-22 17:04:56 +0200151The following things are **not** checked (not an exhaustive list):
152
153* Cycles in imports of owner config files:\
154 Detecting cycles in imports can be expensive and they are not seen as a
155 problem. When imports are resolved we keep track of the imported code owner
156 config files and stop if we see a code owner config file that weve imported
157 already. This behaviour is consistent with how Gerrit handles cycles in group
158 includes.
159* Impossible code owner configurations:\
160 It is possible to create a code owner configuration where some folders/files
161 have no code owners. In this case nobody can give a code owner approval for
162 these folders/files, and submitting changes to them requires a
163 [code owner override](user-guide.html#codeOwnerOverride).
164
165
Edwin Kempinbdb32822020-12-11 14:05:24 +0100166### <a id="codeOwnersConfigFileChecks">Validation checks for code-owners.config files
Edwin Kempin6b2a18c2020-09-22 17:04:56 +0200167
168For the [code-owner.config](config.html#projectLevelConfigFile) in the
169`refs/meta/config` branch the following checks are performed:
170
171* `code-owner.config` file is parseable
172* the [codeOwners.backend](config.html#codeOwnersBackend) and
173 [codeOwners.\<branch\>.backend](config.html#codeOwnersBranchBackend)
174 configurations are valid (that they reference an existing [code owner
175 backend](backends.html))
176* the [codeOwners.disabled](config.html#codeOwnersDisabled) and
177 [codeOwners.disabledBranch](config.html#codeOwnersDisabledBranch)
178 configurations are valid (that they have parseable value)
179* the [codeOwners.requiredApproval](config.html#codeOwnersRequiredApproval)
180 and [codeOwners.overrideApproval](config.html#codeOwnersOverrideApproval)
181 configurations are valid (that they reference an existing label that has a
182 range that covers the specified voting value, it's currently not possible to
183 add the definition of this label in the same commit but it must be present
184 before)
Edwin Kempin748b63a2020-09-24 09:13:50 +0200185* the [codeOwners.mergeCommitStrategy](config.html#codeOwnersMergeCommitStrategy)
186 configuration is valid
Edwin Kempine1849882020-11-26 13:19:13 +0100187* the [codeOwners.fallbackCodeOwners](config.html#codeOwnersFallbackCodeOwners)
188 configuration is valid
Edwin Kempinaa2c2552020-12-14 09:29:29 +0100189* the [codeOwners.maxPathsInChangeMessages](config.html#codeOwnersMaxPathsInChangeMessages)
190 configuration is valid
Edwin Kempin6b2a18c2020-09-22 17:04:56 +0200191
192---
193
194Back to [@PLUGIN@ documentation index](index.html)
195
196Part of [Gerrit Code Review](../../../Documentation/index.html)