Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 1 | # Validation |
| 2 | |
| 3 | The 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 | |
| 11 | To reduce the risk that these files become invalid, they are validated when |
Edwin Kempin | 3d489e2 | 2020-09-30 12:57:08 +0200 | [diff] [blame] | 12 | they are modified and invalid modifications are rejected. In addition code owner |
| 13 | config files in a repository can be validated on demand by the [Check code |
| 14 | owners files REST endpoint](rest-api.html#check-code-owner-config-files). |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 15 | |
| 16 | **NOTE:** Most configuration issues are gracefully handled and do not break the |
| 17 | code owners functionality (e.g. non-resolveable code owners or non-resolveable |
| 18 | imports are silently ignored), however some configuration issue (non-parseable |
| 19 | configuration files, configuration of a non-existing [backend](backends.html) |
| 20 | etc.) are severe errors and block the submission of all changes for which the |
| 21 | affected configuration files are relevant. |
| 22 | |
Edwin Kempin | 205285a | 2020-12-01 09:53:04 +0100 | [diff] [blame] | 23 | **NOTE:** It's possible to disable the validation of code owner config files on |
| 24 | push and setup an [external |
| 25 | validation](config-guide.html#externalValidationOfCodeOwnerConfigs) by a CI bot |
| 26 | instead. In this case findings would be posted on the change. |
| 27 | |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 28 | All validations are best effort to prevent invalid configurations from |
| 29 | entering the repository, but not all possible issues can be prevented. Doing the |
| 30 | validation is useful since it prevents most issues and also gives quick feedback |
| 31 | to uploaders about typos (e.g. if an email is misspelled it's not breaking |
| 32 | anything, but the intended change of the uploader is not working). |
| 33 | |
| 34 | No 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 Kempin | b05f24f | 2020-12-11 13:03:29 +0100 | [diff] [blame] | 40 | * the validation is disabled via the |
| 41 | [enableValidationOnCommitReceived](config.html#codeOwnersEnableValidationOnCommitReceived) |
| 42 | or [enableValidationOnSubmit](config.html#codeOwnersEnableValidationOnSubmit) |
| 43 | config options |
Edwin Kempin | ea5f832 | 2021-03-12 15:37:48 +0100 | [diff] [blame] | 44 | * the [--code-owners~skip-validation](#skipCodeOwnerConfigValidationOnDemand) |
| 45 | push option was specified on push |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 46 | |
| 47 | In addition for [code owner config files](user-guide.html#codeOwnerConfigFiles) |
| 48 | no 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 Kempin | 29b692c | 2021-01-19 11:45:22 +0100 | [diff] [blame] | 58 | ## <a id="howCodeOwnerConfigsCanGetIssuesAfterSubmit"> |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 59 | In addition it is possible that [code owner config |
| 60 | files](user-guide.hmtl#codeOwnerConfigFiles) get issues after they have been |
| 61 | submitted: |
| 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 Kempin | c85684a | 2021-01-19 12:01:01 +0100 | [diff] [blame] | 67 | 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 Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 70 | * 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 | |
| 75 | When updating [code owner config files](user-guide.html#codeOwnerConfigFiles) |
| 76 | the validation only rejects the update if it introduces **new** issues. This |
| 77 | means 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 | |
| 86 | For [code owner config files](user-guide.html#codeOwnerConfigFiles) the |
Edwin Kempin | 1914db5 | 2021-03-24 15:31:23 +0100 | [diff] [blame] | 87 | validation may also be performed on submit (in addition to the validation that |
| 88 | is performed on upload of the change, see |
| 89 | [enableValidationOnSubmit](config.html#codeOwnersEnableValidationOnSubmit) |
| 90 | config setting). Repeating the validation on submit can make sense because |
| 91 | relevant configuration can change between the time a change is uploaded and the |
| 92 | time a change is submitted. If enabled, on submit we repeat the exact same |
| 93 | validation that was done on upload. This means, all visibility checks will be |
| 94 | done from the perspective of the uploader. |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 95 | |
Edwin Kempin | 2fd84e0 | 2021-05-17 09:02:53 +0000 | [diff] [blame^] | 96 | ## <a id="skipCodeOwnerConfigValidationOnDemand">Skip code owner config validation on demand |
| 97 | |
| 98 | By setting the `--code-owners~skip-validation` push option it is possible to |
| 99 | skip the code owner config validation on push. |
| 100 | |
| 101 | Using this push option requires the calling user to have to |
| 102 | `Can Skip Code Owner Config Validation` global capability. Host administrators |
| 103 | have this capability implicitly assigned via the `Administrate Server` global |
| 104 | capability. |
| 105 | |
| 106 | **NOTE:** Using this option only makes sense if the [code owner config validation |
| 107 | on submit](config.html#pluginCodeOwnersEnableValidationOnSubmit) is disabled, as |
| 108 | otherwise it's not possible to submit the created change (using the push option |
| 109 | only skips the validation for the push, but not for the submission of the |
| 110 | change). |
| 111 | |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 112 | ### <a id="codeOwnerConfigFileChecks">Validation checks for code owner config files |
| 113 | |
| 114 | For [code owner config files](user-guide.html#codeOwnerConfigFiles) the |
| 115 | following checks are performed: |
| 116 | |
| 117 | * the code owner config files are parseable |
Edwin Kempin | 91664dd | 2021-03-24 14:12:50 +0100 | [diff] [blame] | 118 | * the code owner emails are resolveable (unless this check is |
| 119 | [disabled](config.html#codeOwnersRejectNonResolvableCodeOwners)):\ |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 120 | 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 Kempin | ba6cd40 | 2021-02-24 10:11:35 +0100 | [diff] [blame] | 127 | * it is ambiguous (the same email is assigned to multiple active accounts) |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 128 | * it has an email domain that is disallowed (see |
| 129 | [allowedEmailDomain](config.html#pluginCodeOwnersAllowedEmailDomain)) |
| 130 | configuration |
Edwin Kempin | 91664dd | 2021-03-24 14:12:50 +0100 | [diff] [blame] | 131 | * the imports are resolveable (unless this check is |
| 132 | [disabled](config.html#codeOwnersRejectNonResolvableImports)):\ |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 133 | 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 Kempin | 2166004 | 2020-12-11 15:42:54 +0100 | [diff] [blame] | 144 | **NOTE:** Whether commits that newly add non-resolvable code owners and |
| 145 | non-resolvable imports are rejected on commit received and on submit is |
| 146 | controlled by the |
| 147 | [rejectNonResolvableCodeOwners](config.html#pluginCodeOwnersRejectNonResolvableCodeOwners) |
| 148 | and [rejectNonResolvableImports](config.html#pluginCodeOwnersRejectNonResolvableImports) |
| 149 | config settings. |
| 150 | |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 151 | The 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 we’ve 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 Kempin | bdb3282 | 2020-12-11 14:05:24 +0100 | [diff] [blame] | 166 | ### <a id="codeOwnersConfigFileChecks">Validation checks for code-owners.config files |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 167 | |
| 168 | For 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 Kempin | 748b63a | 2020-09-24 09:13:50 +0200 | [diff] [blame] | 185 | * the [codeOwners.mergeCommitStrategy](config.html#codeOwnersMergeCommitStrategy) |
| 186 | configuration is valid |
Edwin Kempin | e184988 | 2020-11-26 13:19:13 +0100 | [diff] [blame] | 187 | * the [codeOwners.fallbackCodeOwners](config.html#codeOwnersFallbackCodeOwners) |
| 188 | configuration is valid |
Edwin Kempin | aa2c255 | 2020-12-14 09:29:29 +0100 | [diff] [blame] | 189 | * the [codeOwners.maxPathsInChangeMessages](config.html#codeOwnersMaxPathsInChangeMessages) |
| 190 | configuration is valid |
Edwin Kempin | 6b2a18c | 2020-09-22 17:04:56 +0200 | [diff] [blame] | 191 | |
| 192 | --- |
| 193 | |
| 194 | Back to [@PLUGIN@ documentation index](index.html) |
| 195 | |
| 196 | Part of [Gerrit Code Review](../../../Documentation/index.html) |