diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-11 15:10:57 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-11 15:10:57 +0000 |
commit | 4f54ec92edd344449ee005fd4dd727fa2e3e3ffd (patch) | |
tree | e8e8fe275493e6af3c572c0b93525c77a4623400 /doc | |
parent | 4d68d8b937211e5cdcf58443ddf693f0f1d13794 (diff) | |
download | gitlab-ce-4f54ec92edd344449ee005fd4dd727fa2e3e3ffd.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'doc')
-rw-r--r-- | doc/administration/geo/replication/datatypes.md | 2 | ||||
-rw-r--r-- | doc/administration/lfs/index.md | 4 | ||||
-rw-r--r-- | doc/administration/postgresql/replication_and_failover.md | 57 | ||||
-rw-r--r-- | doc/administration/troubleshooting/debug.md | 2 | ||||
-rw-r--r-- | doc/api/graphql/reference/index.md | 95 | ||||
-rw-r--r-- | doc/ci/examples/deployment/index.md | 14 | ||||
-rw-r--r-- | doc/ci/yaml/index.md | 30 | ||||
-rw-r--r-- | doc/development/documentation/styleguide/word_list.md | 2 | ||||
-rw-r--r-- | doc/development/testing_guide/end_to_end/best_practices.md | 10 | ||||
-rw-r--r-- | doc/user/project/merge_requests/changes.md | 12 | ||||
-rw-r--r-- | doc/user/project/merge_requests/img/merge_request_diff.png | bin | 26650 -> 0 bytes | |||
-rw-r--r-- | doc/user/project/merge_requests/img/merge_request_diff_v14_2.png | bin | 0 -> 26430 bytes |
12 files changed, 189 insertions, 39 deletions
diff --git a/doc/administration/geo/replication/datatypes.md b/doc/administration/geo/replication/datatypes.md index dd1c7730791..62b366e9a4a 100644 --- a/doc/administration/geo/replication/datatypes.md +++ b/doc/administration/geo/replication/datatypes.md @@ -200,7 +200,7 @@ successfully, you must replicate their data using some other means. |[Package Registry for generic packages](../../../user/packages/generic_packages/index.md) | **Yes** (13.5) | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default. | |[Versioned Terraform State](../../terraform_state.md) | **Yes** (13.5) | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.12) | Via Object Storage provider if supported. Native Geo support (Beta). | Replication is behind the feature flag `geo_terraform_state_version_replication`, enabled by default. Verification was behind the feature flag `geo_terraform_state_version_verification`, which was removed in 14.0| |[External merge request diffs](../../merge_request_diffs.md) | **Yes** (13.5) | No | Via Object Storage provider if supported. Native Geo support (Beta). | Replication is behind the feature flag `geo_merge_request_diff_replication`, enabled by default. Verification is under development, behind the feature flag `geo_merge_request_diff_verification`, introduced in 14.0.| -|[Versioned snippets](../../../user/snippets.md#versioned-snippets) | [**Yes** (13.7)](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [**Yes**](https://gitlab.com/groups/gitlab-org/-/epics/2810) | No | Verification was implemented behind the feature flag `geo_snippet_repository_verification` in 13.11, and the feature flag was removed in 14.2. | +|[Versioned snippets](../../../user/snippets.md#versioned-snippets) | [**Yes** (13.7)](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [**Yes** (14.2)](https://gitlab.com/groups/gitlab-org/-/epics/2810) | No | Verification was implemented behind the feature flag `geo_snippet_repository_verification` in 13.11, and the feature flag was removed in 14.2. | |[Server-side Git hooks](../../server_hooks.md) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1867) | No | No | | |[Elasticsearch integration](../../../integration/elasticsearch.md) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/1186) | No | No | | |[GitLab Pages](../../pages/index.md) | [No](https://gitlab.com/groups/gitlab-org/-/epics/589) | No | Via Object Storage provider if supported. **No** native Geo support (Beta). | | diff --git a/doc/administration/lfs/index.md b/doc/administration/lfs/index.md index edf0e324a5c..682352d8f59 100644 --- a/doc/administration/lfs/index.md +++ b/doc/administration/lfs/index.md @@ -323,7 +323,7 @@ See more information in [!19581](https://gitlab.com/gitlab-org/gitlab-foss/-/mer ### LFS commands fail on TLS v1.3 server -If you configure GitLab to [disable TLS v1.2](https://docs.gitlab.com/omnibus/settings/nginx.md) +If you configure GitLab to [disable TLS v1.2](https://docs.gitlab.com/omnibus/settings/nginx.html) and only enable TLS v1.3 connections, LFS operations require a [Git LFS client](https://git-lfs.github.com) version 2.11.0 or later. If you use a Git LFS client earlier than version 2.11.0, GitLab displays an error: @@ -334,7 +334,7 @@ error: failed to fetch some objects from 'https://username:[MASKED]@gitlab.examp ``` When using GitLab CI over a TLS v1.3 configured GitLab server, you must -[upgrade to GitLab Runner](https://docs.gitlab.com/runner/install/index.md) 13.2.0 +[upgrade to GitLab Runner](https://docs.gitlab.com/runner/install/index.html) 13.2.0 or later to receive an updated Git LFS client version via the included [GitLab Runner Helper image](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#helper-image). diff --git a/doc/administration/postgresql/replication_and_failover.md b/doc/administration/postgresql/replication_and_failover.md index d37d61048e2..b6f028e1326 100644 --- a/doc/administration/postgresql/replication_and_failover.md +++ b/doc/administration/postgresql/replication_and_failover.md @@ -303,6 +303,63 @@ If you enable Monitoring, it must be enabled on **all** database servers. 1. Run `sudo gitlab-ctl reconfigure` to compile the configuration. +#### Enable TLS support for the Patroni API + +By default, Patroni's [REST API](https://patroni.readthedocs.io/en/latest/rest_api.html#rest-api) is served over HTTP. +You have the option to enable TLS and use HTTPS over the same [port](https://docs.gitlab.com/omnibus/package-information/defaults.html#patroni). + +To enable TLS, you need PEM-formatted certificate and private key files. Both files must be readable by the PostgreSQL user (`gitlab-psql` by default, or the one set by `postgresql['username']`): + +```ruby +patroni['tls_certificate_file'] = '/path/to/server/certificate.pem' +patroni['tls_key_file'] = '/path/to/server/key.pem' +``` + +If the server's private key is encrypted, specify the password to decrypt it: + +```ruby +patroni['tls_key_password'] = 'private-key-password' # This is the plain-text password. +``` + +If you are using a self-signed certificate or an internal CA, you need to either disable the TLS verification or pass the certificate of the +internal CA, otherwise you may run into an unexpected error when using the `gitlab-ctl patroni ....` commands. Omnibus ensures that Patroni API +clients honor this configuration. + +TLS certificate verification is enabled by default. To disable it: + +```ruby +patroni['tls_verify'] = false +``` + +Alternatively, you can pass a PEM-formatted certificate of the internal CA. Again, the file must be readable by the PostgreSQL user: + +```ruby +patroni['tls_ca_file'] = '/path/to/ca.pem' +``` + +When TLS is enabled, mutual authentication of the API server and client is possible for all endpoints, the extent of which depends on +the `patroni['tls_client_mode']` attribute: + +- `none` (default): the API will not check for any client certificates. +- `optional`: client certificates are required for all [unsafe](https://patroni.readthedocs.io/en/latest/security.html#protecting-the-rest-api) API calls. +- `required`: client certificates are required for all API calls. + +The client certificates are verified against the CA certificate that is specified with the `patroni['tls_ca_file']` attribute. Therefore, +this attribute is required for mutual TLS authentication. You also need to specify PEM-formatted client certificate and private key files. +Both files must be readable by the PostgreSQL user: + +```ruby +patroni['tls_client_mode'] = 'required' +patroni['tls_ca_file'] = '/path/to/ca.pem' + +patroni['tls_client_certificate_file'] = '/path/to/client/certificate.pem' +patroni['tls_client_key_file'] = '/path/to/client/key.pem' +``` + +You can use different certificates and keys for both API server and client on different Patroni nodes as long as they can be verified. +However, the CA certificate (`patroni['tls_ca_file']`), TLS certificate verification (`patroni['tls_verify']`), and client TLS +authentication mode (`patroni['tls_client_mode']`), must each have the same value on all nodes. + ### Configuring the PgBouncer node 1. Make sure you collect [`CONSUL_SERVER_NODES`](#consul-information), [`CONSUL_PASSWORD_HASH`](#consul-information), and [`PGBOUNCER_PASSWORD_HASH`](#pgbouncer-information) before executing the next step. diff --git a/doc/administration/troubleshooting/debug.md b/doc/administration/troubleshooting/debug.md index 9ec6bd1a9cb..aea891b8a77 100644 --- a/doc/administration/troubleshooting/debug.md +++ b/doc/administration/troubleshooting/debug.md @@ -285,5 +285,5 @@ The output in `/tmp/puma.txt` may help diagnose the root cause. ## More information -- [Debugging Stuck Ruby Processes](https://newrelic.com/blog/engineering/debugging-stuck-ruby-processes-what-to-do-before-you-kill-9/) +- [Debugging Stuck Ruby Processes](https://newrelic.com/blog/best-practices/debugging-stuck-ruby-processes-what-to-do-before-you-kill-9) - [Cheat sheet of using GDB and Ruby processes](gdb-stuck-ruby.txt) diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 562c119042c..64b85b60ed4 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -6237,6 +6237,29 @@ The connection type for [`Package`](#package). | <a id="packageconnectionnodes"></a>`nodes` | [`[Package]`](#package) | A list of nodes. | | <a id="packageconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. | +#### `PackageDependencyLinkConnection` + +The connection type for [`PackageDependencyLink`](#packagedependencylink). + +##### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| <a id="packagedependencylinkconnectionedges"></a>`edges` | [`[PackageDependencyLinkEdge]`](#packagedependencylinkedge) | A list of edges. | +| <a id="packagedependencylinkconnectionnodes"></a>`nodes` | [`[PackageDependencyLink]`](#packagedependencylink) | A list of nodes. | +| <a id="packagedependencylinkconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. | + +#### `PackageDependencyLinkEdge` + +The edge type for [`PackageDependencyLink`](#packagedependencylink). + +##### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| <a id="packagedependencylinkedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. | +| <a id="packagedependencylinkedgenode"></a>`node` | [`PackageDependencyLink`](#packagedependencylink) | The item at the end of the edge. | + #### `PackageEdge` The edge type for [`Package`](#package). @@ -11330,6 +11353,17 @@ Represents the network policy. | <a id="notepermissionsrepositionnote"></a>`repositionNote` | [`Boolean!`](#boolean) | Indicates the user can perform `reposition_note` on this resource. | | <a id="notepermissionsresolvenote"></a>`resolveNote` | [`Boolean!`](#boolean) | Indicates the user can perform `resolve_note` on this resource. | +### `NugetDependencyLinkMetadata` + +Nuget dependency link metadata. + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| <a id="nugetdependencylinkmetadataid"></a>`id` | [`PackagesNugetDependencyLinkMetadatumID!`](#packagesnugetdependencylinkmetadatumid) | ID of the metadatum. | +| <a id="nugetdependencylinkmetadatatargetframework"></a>`targetFramework` | [`String!`](#string) | Target framework of the depdency link package. | + ### `NugetMetadata` Nuget metadata. @@ -11401,6 +11435,31 @@ Represents a composer JSON file. | <a id="packagecomposerjsontypetype"></a>`type` | [`String`](#string) | The type set in the Composer JSON file. | | <a id="packagecomposerjsontypeversion"></a>`version` | [`String`](#string) | The version set in the Composer JSON file. | +### `PackageDependency` + +Represents a package dependency. + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| <a id="packagedependencyid"></a>`id` | [`PackagesDependencyID!`](#packagesdependencyid) | ID of the dependency. | +| <a id="packagedependencyname"></a>`name` | [`String!`](#string) | Name of the dependency. | +| <a id="packagedependencyversionpattern"></a>`versionPattern` | [`String!`](#string) | Version pattern of the dependency. | + +### `PackageDependencyLink` + +Represents a package dependency link. + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| <a id="packagedependencylinkdependency"></a>`dependency` | [`PackageDependency`](#packagedependency) | Dependency. | +| <a id="packagedependencylinkdependencytype"></a>`dependencyType` | [`PackageDependencyType!`](#packagedependencytype) | Dependency type. | +| <a id="packagedependencylinkid"></a>`id` | [`PackagesDependencyLinkID!`](#packagesdependencylinkid) | ID of the dependency link. | +| <a id="packagedependencylinkmetadata"></a>`metadata` | [`DependencyLinkMetadata`](#dependencylinkmetadata) | Dependency link metadata. | + ### `PackageDetailsType` Represents a package details in the Package Registry. Note that this type is in beta and susceptible to changes. @@ -11410,6 +11469,7 @@ Represents a package details in the Package Registry. Note that this type is in | Name | Type | Description | | ---- | ---- | ----------- | | <a id="packagedetailstypecreatedat"></a>`createdAt` | [`Time!`](#time) | Date of creation. | +| <a id="packagedetailstypedependencylinks"></a>`dependencyLinks` | [`PackageDependencyLinkConnection`](#packagedependencylinkconnection) | Dependency link. (see [Connections](#connections)) | | <a id="packagedetailstypeid"></a>`id` | [`PackagesPackageID!`](#packagespackageid) | ID of the package. | | <a id="packagedetailstypemetadata"></a>`metadata` | [`PackageMetadata`](#packagemetadata) | Package metadata. | | <a id="packagedetailstypename"></a>`name` | [`String!`](#string) | Name of the package. | @@ -15330,6 +15390,15 @@ Rotation length unit of an on-call rotation. | <a id="oncallrotationunitenumhours"></a>`HOURS` | Hours. | | <a id="oncallrotationunitenumweeks"></a>`WEEKS` | Weeks. | +### `PackageDependencyType` + +| Value | Description | +| ----- | ----------- | +| <a id="packagedependencytypebundle_dependencies"></a>`BUNDLE_DEPENDENCIES` | bundleDependencies dependency type. | +| <a id="packagedependencytypedependencies"></a>`DEPENDENCIES` | dependencies dependency type. | +| <a id="packagedependencytypedev_dependencies"></a>`DEV_DEPENDENCIES` | devDependencies dependency type. | +| <a id="packagedependencytypepeer_dependencies"></a>`PEER_DEPENDENCIES` | peerDependencies dependency type. | + ### `PackageGroupSort` Values for sorting group packages. @@ -16204,12 +16273,30 @@ A `PackagesConanMetadatumID` is a global ID. It is encoded as a string. An example `PackagesConanMetadatumID` is: `"gid://gitlab/Packages::Conan::Metadatum/1"`. +### `PackagesDependencyID` + +A `PackagesDependencyID` is a global ID. It is encoded as a string. + +An example `PackagesDependencyID` is: `"gid://gitlab/Packages::Dependency/1"`. + +### `PackagesDependencyLinkID` + +A `PackagesDependencyLinkID` is a global ID. It is encoded as a string. + +An example `PackagesDependencyLinkID` is: `"gid://gitlab/Packages::DependencyLink/1"`. + ### `PackagesMavenMetadatumID` A `PackagesMavenMetadatumID` is a global ID. It is encoded as a string. An example `PackagesMavenMetadatumID` is: `"gid://gitlab/Packages::Maven::Metadatum/1"`. +### `PackagesNugetDependencyLinkMetadatumID` + +A `PackagesNugetDependencyLinkMetadatumID` is a global ID. It is encoded as a string. + +An example `PackagesNugetDependencyLinkMetadatumID` is: `"gid://gitlab/Packages::Nuget::DependencyLinkMetadatum/1"`. + ### `PackagesNugetMetadatumID` A `PackagesNugetMetadatumID` is a global ID. It is encoded as a string. @@ -16339,6 +16426,14 @@ abstract types. ### Unions +#### `DependencyLinkMetadata` + +Represents metadata associated with a dependency link. + +One of: + +- [`NugetDependencyLinkMetadata`](#nugetdependencylinkmetadata) + #### `Issuable` Represents an issuable. diff --git a/doc/ci/examples/deployment/index.md b/doc/ci/examples/deployment/index.md index 05ba704eb1a..14fb77dc49f 100644 --- a/doc/ci/examples/deployment/index.md +++ b/doc/ci/examples/deployment/index.md @@ -115,11 +115,15 @@ We also use two secure variables: ## Storing API keys -To add secure variables, navigate to your project's -**Settings > CI/CD > Variables**. The variables defined -in the project settings are sent along with the build script to the runner. +To store API keys as secure variables: + +1. On the top bar, select **Menu > Projects** and find your project. +1. On the left sidebar, select **Settings > CI/CD**. +1. Expand **Variables**. + +The variables defined in the project settings are sent along with the build script to the runner. The secure variables are stored out of the repository. Never store secrets in -your project's `.gitlab-ci.yml`. It is also important that the secret's value +your project's `.gitlab-ci.yml` file. It is also important that the secret's value is hidden in the job log. You access added variable by prefixing it's name with `$` (on non-Windows runners) @@ -128,4 +132,4 @@ or `%` (for Windows Batch runners): - `$VARIABLE`: Use for non-Windows runners - `%VARIABLE%`: Use for Windows Batch runners -Read more about the [CI/CD variables](../../variables/index.md). +Read more about [CI/CD variables](../../variables/index.md). diff --git a/doc/ci/yaml/index.md b/doc/ci/yaml/index.md index 99b9d2359d0..901fdc38234 100644 --- a/doc/ci/yaml/index.md +++ b/doc/ci/yaml/index.md @@ -1471,6 +1471,7 @@ in the project. > - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/47063) in GitLab 12.2. > - In GitLab 12.3, maximum number of jobs in `needs` array raised from five to 50. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30631) in GitLab 12.8, `needs: []` lets jobs start immediately. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30632) in GitLab 14.2, you can refer to jobs in the same stage as the job you are configuring. Use `needs:` to execute jobs out-of-order. Relationships between jobs that use `needs` can be visualized as a [directed acyclic graph](../directed_acyclic_graph/index.md). @@ -1531,15 +1532,10 @@ production: #### Requirements and limitations - In [GitLab 14.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/30632) you - can refer to jobs in the same stage as the job you are configuring. This feature is: - - - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default. - - Disabled on GitLab.com. - - Not recommended for production use. - - For GitLab self-managed instances, GitLab administrators can choose to - [enable it](#enable-or-disable-needs-for-jobs-in-the-same-stage). - + can refer to jobs in the same stage as the job you are configuring. This feature is + enabled on GitLab.com and ready for production use. On self-managed [GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/30632) + this feature is available by default. To hide the feature, ask an administrator to + [disable the `ci_same_stage_job_needs` flag](../../administration/feature_flags.md). - In GitLab 14.0 and older, you can only refer to jobs in earlier stages. - In GitLab 13.9 and older, if `needs:` refers to a job that might not be added to a pipeline because of `only`, `except`, or `rules`, the pipeline might fail to create. @@ -1557,22 +1553,6 @@ production: - Stages must be explicitly defined for all jobs that have the keyword `needs:` or are referred to by one. -##### Enable or disable `needs` for jobs in the same stage **(FREE SELF)** - -`needs` for jobs in the same stage is under development but ready for production use. -It is deployed behind a feature flag that is **enabled by default**. -[GitLab administrators with access to the GitLab Rails -console](../../administration/feature_flags.md) -can opt to disable it. - -To enable it: - -`Feature.enable(:ci_same_stage_job_needs)` - -To disable it: - -`Feature.disable(:ci_same_stage_job_needs)` - ##### Changing the `needs:` job limit **(FREE SELF)** The maximum number of jobs that can be defined in `needs:` defaults to 50. diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md index 8ff3b2cd29d..72c3d605388 100644 --- a/doc/development/documentation/styleguide/word_list.md +++ b/doc/development/documentation/styleguide/word_list.md @@ -122,7 +122,7 @@ Title case. ## GitLab -Do not make possessive (GitLab's). This guidance follows [GitLab Brand Guidelines](https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/brand-guidelines/#trademark). +Do not make possessive (GitLab's). This guidance follows [GitLab Trademark Guidelines](https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/trademark-guidelines/). ## GitLab.com diff --git a/doc/development/testing_guide/end_to_end/best_practices.md b/doc/development/testing_guide/end_to_end/best_practices.md index 15520d8a6b1..74c02d19d0a 100644 --- a/doc/development/testing_guide/end_to_end/best_practices.md +++ b/doc/development/testing_guide/end_to_end/best_practices.md @@ -338,6 +338,16 @@ Page::Project::Pipeline::Show.perform do |pipeline| end ``` +### Use `eventually_` matchers for expectations that require waiting + +When something requires waiting to be matched, use `eventually_` matchers with clear wait duration definition. + +`Eventually` matchers use the following naming pattern: `eventually_${rspec_matcher_name}`. They are defined in [eventually_matcher.rb](https://gitlab.com/gitlab-org/gitlab/-/blob/master/qa/spec/support/matchers/eventually_matcher.rb). + +```ruby +expect { async_value }.to eventually_eq(value).within(max_duration: 120, max_attempts: 60, reload_page: page) +``` + ### Create negatable matchers to speed `expect` checks However, sometimes we want to check that something is _not_ as we _don't_ want it to be. In other diff --git a/doc/user/project/merge_requests/changes.md b/doc/user/project/merge_requests/changes.md index 9a0f5fa4226..c59d5973e21 100644 --- a/doc/user/project/merge_requests/changes.md +++ b/doc/user/project/merge_requests/changes.md @@ -85,11 +85,15 @@ entire content by selecting **Show file contents**. ## Ignore whitespace changes in Merge Request diff view -If you select the **Hide whitespace changes** button, you can see the diff -without whitespace changes (if there are any). This is also working when on a -specific commit page. +Whitespace changes can make it more difficult to see the substantive changes in +a merge request. You can choose to hide or show whitespace changes: -![MR diff](img/merge_request_diff.png) +1. Go to your merge request, and select the **Changes** tab. +1. Above the list of changed files, select **(settings)** **Preferences** to + display the preferences menu. +1. Select or deselect **Show whitespace changes**: + + ![MR diff](img/merge_request_diff_v14_2.png) ## Mark files as viewed diff --git a/doc/user/project/merge_requests/img/merge_request_diff.png b/doc/user/project/merge_requests/img/merge_request_diff.png Binary files differdeleted file mode 100644 index 9c5488cb207..00000000000 --- a/doc/user/project/merge_requests/img/merge_request_diff.png +++ /dev/null diff --git a/doc/user/project/merge_requests/img/merge_request_diff_v14_2.png b/doc/user/project/merge_requests/img/merge_request_diff_v14_2.png Binary files differnew file mode 100644 index 00000000000..de534f17bf1 --- /dev/null +++ b/doc/user/project/merge_requests/img/merge_request_diff_v14_2.png |