Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-12-04 03:09:55 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-12-04 03:09:55 +0300
commit73fd5a897364c6f91f86a0dd6d4b566c2574ca6e (patch)
tree0f77959883c969bf93ac6c8804e10d3dbeddc59a /doc
parente701659ba316541833e50d68f14720d17be58f8c (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'doc')
-rw-r--r--doc/administration/consul.md2
-rw-r--r--doc/administration/database_load_balancing.md2
-rw-r--r--doc/administration/gitaly/praefect.md17
-rw-r--r--doc/api/graphql/reference/gitlab_schema.graphql124
-rw-r--r--doc/api/graphql/reference/gitlab_schema.json124
-rw-r--r--doc/development/adding_service_component.md2
-rw-r--r--doc/development/agent/index.md2
-rw-r--r--doc/development/changelog.md4
-rw-r--r--doc/development/documentation/restful_api_styleguide.md2
-rw-r--r--doc/development/elasticsearch.md2
-rw-r--r--doc/development/experiment_guide/index.md11
-rw-r--r--doc/development/fe_guide/graphql.md2
-rw-r--r--doc/development/feature_flags/controls.md2
-rw-r--r--doc/development/i18n/translation.md2
-rw-r--r--doc/development/img/each_batch_users_table_bad_index_v13_7.pngbin23428 -> 7386 bytes
-rw-r--r--doc/development/img/each_batch_users_table_filter_v13_7.pngbin22107 -> 6940 bytes
-rw-r--r--doc/development/img/each_batch_users_table_filtered_index_v13_7.pngbin18135 -> 5986 bytes
-rw-r--r--doc/development/img/each_batch_users_table_good_index_v13_7.pngbin20156 -> 7046 bytes
-rw-r--r--doc/development/img/each_batch_users_table_iteration_1_v13_7.pngbin17850 -> 5942 bytes
-rw-r--r--doc/development/img/each_batch_users_table_iteration_2_v13_7.pngbin19727 -> 6539 bytes
-rw-r--r--doc/development/img/each_batch_users_table_iteration_3_v13_7.pngbin18319 -> 6665 bytes
-rw-r--r--doc/development/img/each_batch_users_table_iteration_4_v13_7.pngbin20868 -> 6620 bytes
-rw-r--r--doc/development/img/each_batch_users_table_iteration_5_v13_7.pngbin18462 -> 6897 bytes
-rw-r--r--doc/development/img/each_batch_users_table_v13_7.pngbin17762 -> 6361 bytes
-rw-r--r--doc/development/integrations/img/copy_cookies.pngbin127658 -> 44311 bytes
-rw-r--r--doc/development/integrations/img/copy_curl.pngbin212238 -> 60175 bytes
-rw-r--r--doc/development/new_fe_guide/development/accessibility.md2
-rw-r--r--doc/development/product_analytics/usage_ping.md6
-rw-r--r--doc/development/testing_guide/frontend_testing.md35
-rw-r--r--doc/development/ux_guide/users.md4
-rw-r--r--doc/gitlab-basics/start-using-git.md2
-rw-r--r--doc/integration/jenkins.md5
-rw-r--r--doc/integration/jira_development_panel.md8
-rw-r--r--doc/integration/kerberos.md4
-rw-r--r--doc/subscriptions/index.md2
-rw-r--r--doc/topics/web_application_firewall/quick_start_guide.md2
-rw-r--r--doc/university/README.md2
-rw-r--r--doc/user/analytics/code_review_analytics.md2
-rw-r--r--doc/user/analytics/merge_request_analytics.md2
-rw-r--r--doc/user/application_security/api_fuzzing/index.md2
-rw-r--r--doc/user/application_security/cve_id_request.md2
-rw-r--r--doc/user/compliance/license_compliance/index.md6
-rw-r--r--doc/user/group/epics/manage_epics.md2
-rw-r--r--doc/user/markdown.md2
-rw-r--r--doc/user/packages/composer_repository/index.md5
-rw-r--r--doc/user/packages/container_registry/index.md4
-rw-r--r--doc/user/packages/npm_registry/index.md6
-rw-r--r--doc/user/project/import/clearcase.md2
-rw-r--r--doc/user/project/import/github.md4
-rw-r--r--doc/user/project/integrations/github.md2
-rw-r--r--doc/user/project/integrations/img/microsoft_teams_select_incoming_webhook.pngbin30819 -> 11129 bytes
-rw-r--r--doc/user/project/integrations/jira_integrations.md2
-rw-r--r--doc/user/project/integrations/webex_teams.md2
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/index.md2
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md2
-rw-r--r--doc/user/project/repository/repository_mirroring.md4
56 files changed, 208 insertions, 215 deletions
diff --git a/doc/administration/consul.md b/doc/administration/consul.md
index 677586cb07e..5bddadcabed 100644
--- a/doc/administration/consul.md
+++ b/doc/administration/consul.md
@@ -133,7 +133,7 @@ you will need to follow the Consul [outage recovery](#outage-recovery) process.
To be safe, it's recommended that you only restart Consul in one node at a time to
ensure the cluster remains intact. For larger clusters, it is possible to restart
multiple nodes at a time. See the
-[Consul consensus document](https://www.consul.io/docs/internals/consensus.html#deployment-table)
+[Consul consensus document](https://www.consul.io/docs/architecture/consensus#deployment-table)
for how many failures it can tolerate. This will be the number of simultaneous
restarts it can sustain.
diff --git a/doc/administration/database_load_balancing.md b/doc/administration/database_load_balancing.md
index cc563ac1ac0..a4e274c0a86 100644
--- a/doc/administration/database_load_balancing.md
+++ b/doc/administration/database_load_balancing.md
@@ -167,7 +167,7 @@ When the list of hosts is updated, it might take a while for the old connections
to be terminated. The `disconnect_timeout` setting can be used to enforce an
upper limit on the time it will take to terminate all old database connections.
-Some nameservers (like [Consul](https://www.consul.io/docs/agent/dns.html#udp-based-dns-queries)) can return a truncated list of hosts when
+Some nameservers (like [Consul](https://www.consul.io/docs/discovery/dns#udp-based-dns-queries)) can return a truncated list of hosts when
queried over UDP. To overcome this issue, you can use TCP for querying by setting
`use_tcp` to `true`.
diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md
index 618efa10cf1..0fc9794e688 100644
--- a/doc/administration/gitaly/praefect.md
+++ b/doc/administration/gitaly/praefect.md
@@ -498,6 +498,7 @@ To configure Praefect with TLS:
**For Omnibus GitLab**
1. Create certificates for Praefect servers.
+
1. On the Praefect servers, create the `/etc/gitlab/ssl` directory and copy your key
and certificate there:
@@ -516,7 +517,8 @@ To configure Praefect with TLS:
praefect['key_path'] = "/etc/gitlab/ssl/key.pem"
```
-1. Save the file and [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
+1. Save the file and [reconfigure](../restart_gitlab.md#omnibus-gitlab-reconfigure).
+
1. On the Praefect clients (including each Gitaly server), copy the certificates,
or their certificate authority, into `/etc/gitlab/trusted-certs`:
@@ -529,8 +531,10 @@ To configure Praefect with TLS:
```ruby
git_data_dirs({
- 'default' => { 'gitaly_address' => 'tls://praefect1.internal:3305' },
- 'storage1' => { 'gitaly_address' => 'tls://praefect2.internal:3305' },
+ "default" => {
+ "gitaly_address" => 'tls://LOAD_BALANCER_SERVER_ADDRESS:2305',
+ "gitaly_token" => 'PRAEFECT_EXTERNAL_TOKEN'
+ }
})
```
@@ -565,10 +569,7 @@ To configure Praefect with TLS:
repositories:
storages:
default:
- gitaly_address: tls://praefect1.internal:3305
- path: /some/local/path
- storage1:
- gitaly_address: tls://praefect2.internal:3305
+ gitaly_address: tls://LOAD_BALANCER_SERVER_ADDRESS:3305
path: /some/local/path
```
@@ -834,6 +835,8 @@ Particular attention should be shown to:
balancer.
- `PRAEFECT_EXTERNAL_TOKEN` with the real secret
+ If you are using TLS, the `gitaly_address` should begin with `tls://`.
+
```ruby
git_data_dirs({
"default" => {
diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql
index 88e787c0577..f7a1cff7afd 100644
--- a/doc/api/graphql/reference/gitlab_schema.graphql
+++ b/doc/api/graphql/reference/gitlab_schema.graphql
@@ -30,7 +30,7 @@ Autogenerated input type of AddAwardEmoji
"""
input AddAwardEmojiInput {
"""
- The global id of the awardable resource
+ The global ID of the awardable resource
"""
awardableId: AwardableID!
@@ -837,7 +837,7 @@ input AlertSetAssigneesInput {
clientMutationId: String
"""
- The iid of the alert to mutate
+ The IID of the alert to mutate
"""
iid: String!
@@ -892,7 +892,7 @@ input AlertTodoCreateInput {
clientMutationId: String
"""
- The iid of the alert to mutate
+ The IID of the alert to mutate
"""
iid: String!
@@ -992,7 +992,7 @@ Autogenerated input type of AwardEmojiAdd
"""
input AwardEmojiAddInput {
"""
- The global id of the awardable resource
+ The global ID of the awardable resource
"""
awardableId: AwardableID!
@@ -1032,7 +1032,7 @@ Autogenerated input type of AwardEmojiRemove
"""
input AwardEmojiRemoveInput {
"""
- The global id of the awardable resource
+ The global ID of the awardable resource
"""
awardableId: AwardableID!
@@ -1072,7 +1072,7 @@ Autogenerated input type of AwardEmojiToggle
"""
input AwardEmojiToggleInput {
"""
- The global id of the awardable resource
+ The global ID of the awardable resource
"""
awardableId: AwardableID!
@@ -1435,7 +1435,7 @@ type BoardEpic implements CurrentUserTodos & Noteable {
iid: ID
"""
- Filter epics by iid for autocomplete
+ Filter epics by IID for autocomplete
"""
iidStartsWith: String
@@ -2632,7 +2632,7 @@ input ClusterAgentDeleteInput {
clientMutationId: String
"""
- Global id of the cluster agent that will be deleted
+ Global ID of the cluster agent that will be deleted
"""
id: ClustersAgentID!
}
@@ -3691,7 +3691,7 @@ input CreateAlertIssueInput {
clientMutationId: String
"""
- The iid of the alert to mutate
+ The IID of the alert to mutate
"""
iid: String!
@@ -3741,7 +3741,7 @@ input CreateAnnotationInput {
clientMutationId: String
"""
- The global id of the cluster to add an annotation to
+ The global ID of the cluster to add an annotation to
"""
clusterId: ClustersClusterID
@@ -3761,7 +3761,7 @@ input CreateAnnotationInput {
endingAt: Time
"""
- The global id of the environment to add an annotation to
+ The global ID of the environment to add an annotation to
"""
environmentId: EnvironmentID
@@ -4046,7 +4046,7 @@ input CreateDiffNoteInput {
confidential: Boolean
"""
- The global id of the resource to add a note to
+ The global ID of the resource to add a note to
"""
noteableId: NoteableID!
@@ -4176,7 +4176,7 @@ input CreateImageDiffNoteInput {
confidential: Boolean
"""
- The global id of the resource to add a note to
+ The global ID of the resource to add a note to
"""
noteableId: NoteableID!
@@ -4401,12 +4401,12 @@ input CreateNoteInput {
confidential: Boolean
"""
- The global id of the discussion this note is in reply to
+ The global ID of the discussion this note is in reply to
"""
discussionId: DiscussionID
"""
- The global id of the resource to add a note to
+ The global ID of the resource to add a note to
"""
noteableId: NoteableID!
}
@@ -6035,7 +6035,7 @@ input DesignManagementDeleteInput {
filenames: [String!]!
"""
- The iid of the issue to modify designs for
+ The IID of the issue to modify designs for
"""
iid: ID!
@@ -6135,7 +6135,7 @@ input DesignManagementUploadInput {
files: [Upload!]!
"""
- The iid of the issue to modify designs for
+ The IID of the issue to modify designs for
"""
iid: ID!
@@ -6445,7 +6445,7 @@ input DestroyNoteInput {
clientMutationId: String
"""
- The global id of the note to destroy
+ The global ID of the note to destroy
"""
id: NoteID!
}
@@ -6480,7 +6480,7 @@ input DestroySnippetInput {
clientMutationId: String
"""
- The global id of the snippet to destroy
+ The global ID of the snippet to destroy
"""
id: SnippetID!
}
@@ -6999,7 +6999,7 @@ input DiscussionToggleResolveInput {
clientMutationId: String
"""
- The global id of the discussion
+ The global ID of the discussion
"""
id: DiscussionID!
@@ -7270,7 +7270,7 @@ type Epic implements CurrentUserTodos & Noteable {
iid: ID
"""
- Filter epics by iid for autocomplete
+ Filter epics by IID for autocomplete
"""
iidStartsWith: String
@@ -7683,12 +7683,12 @@ input EpicAddIssueInput {
groupPath: ID!
"""
- The iid of the epic to mutate
+ The IID of the epic to mutate
"""
iid: ID!
"""
- The iid of the issue to be added
+ The IID of the issue to be added
"""
issueIid: String!
@@ -8338,7 +8338,7 @@ input EpicSetSubscriptionInput {
groupPath: ID!
"""
- The iid of the epic to mutate
+ The IID of the epic to mutate
"""
iid: ID!
@@ -8422,12 +8422,12 @@ A node of an epic tree.
"""
input EpicTreeNodeFieldsInputType {
"""
- The id of the epic_issue or issue that the actual epic or issue is switched with
+ The ID of the epic_issue or issue that the actual epic or issue is switched with
"""
adjacentReferenceId: EpicTreeSortingID
"""
- The id of the epic_issue or epic that is being moved
+ The ID of the epic_issue or epic that is being moved
"""
id: EpicTreeSortingID!
@@ -8447,7 +8447,7 @@ Autogenerated input type of EpicTreeReorder
"""
input EpicTreeReorderInput {
"""
- The id of the base epic of the tree
+ The ID of the base epic of the tree
"""
baseEpicId: EpicID!
@@ -8965,7 +8965,7 @@ type Group {
iid: ID
"""
- Filter epics by iid for autocomplete
+ Filter epics by IID for autocomplete
"""
iidStartsWith: String
@@ -9053,7 +9053,7 @@ type Group {
iid: ID
"""
- Filter epics by iid for autocomplete
+ Filter epics by IID for autocomplete
"""
iidStartsWith: String
@@ -10176,7 +10176,7 @@ input HttpIntegrationDestroyInput {
clientMutationId: String
"""
- The id of the integration to remove
+ The ID of the integration to remove
"""
id: AlertManagementHttpIntegrationID!
}
@@ -10211,7 +10211,7 @@ input HttpIntegrationResetTokenInput {
clientMutationId: String
"""
- The id of the integration to mutate
+ The ID of the integration to mutate
"""
id: AlertManagementHttpIntegrationID!
}
@@ -10251,7 +10251,7 @@ input HttpIntegrationUpdateInput {
clientMutationId: String
"""
- The id of the integration to mutate
+ The ID of the integration to mutate
"""
id: AlertManagementHttpIntegrationID!
@@ -12186,7 +12186,7 @@ input JiraUsersMappingInputType {
gitlabId: Int
"""
- Jira account id of the user
+ Jira account ID of the user
"""
jiraAccountId: String!
}
@@ -12379,7 +12379,7 @@ input MarkAsSpamSnippetInput {
clientMutationId: String
"""
- The global id of the snippet to update
+ The global ID of the snippet to update
"""
id: SnippetID!
}
@@ -13323,7 +13323,7 @@ input MergeRequestSetAssigneesInput {
clientMutationId: String
"""
- The iid of the merge request to mutate
+ The IID of the merge request to mutate
"""
iid: String!
@@ -13368,7 +13368,7 @@ input MergeRequestSetLabelsInput {
clientMutationId: String
"""
- The iid of the merge request to mutate
+ The IID of the merge request to mutate
"""
iid: String!
@@ -13418,7 +13418,7 @@ input MergeRequestSetLockedInput {
clientMutationId: String
"""
- The iid of the merge request to mutate
+ The IID of the merge request to mutate
"""
iid: String!
@@ -13463,7 +13463,7 @@ input MergeRequestSetMilestoneInput {
clientMutationId: String
"""
- The iid of the merge request to mutate
+ The IID of the merge request to mutate
"""
iid: String!
@@ -13508,7 +13508,7 @@ input MergeRequestSetSubscriptionInput {
clientMutationId: String
"""
- The iid of the merge request to mutate
+ The IID of the merge request to mutate
"""
iid: String!
@@ -13553,7 +13553,7 @@ input MergeRequestSetWipInput {
clientMutationId: String
"""
- The iid of the merge request to mutate
+ The IID of the merge request to mutate
"""
iid: String!
@@ -13699,7 +13699,7 @@ input MergeRequestUpdateInput {
description: String
"""
- The iid of the merge request to mutate
+ The IID of the merge request to mutate
"""
iid: String!
@@ -14446,7 +14446,7 @@ input NamespaceIncreaseStorageTemporarilyInput {
clientMutationId: String
"""
- The global id of the namespace to mutate
+ The global ID of the namespace to mutate
"""
id: NamespaceID!
}
@@ -15326,7 +15326,7 @@ input PipelineCancelInput {
clientMutationId: String
"""
- The id of the pipeline to mutate
+ The ID of the pipeline to mutate
"""
id: CiPipelineID!
}
@@ -15392,7 +15392,7 @@ input PipelineDestroyInput {
clientMutationId: String
"""
- The id of the pipeline to mutate
+ The ID of the pipeline to mutate
"""
id: CiPipelineID!
}
@@ -15454,7 +15454,7 @@ input PipelineRetryInput {
clientMutationId: String
"""
- The id of the pipeline to mutate
+ The ID of the pipeline to mutate
"""
id: CiPipelineID!
}
@@ -17779,7 +17779,7 @@ input PrometheusIntegrationResetTokenInput {
clientMutationId: String
"""
- The id of the integration to mutate
+ The ID of the integration to mutate
"""
id: PrometheusServiceID!
}
@@ -17824,7 +17824,7 @@ input PrometheusIntegrationUpdateInput {
clientMutationId: String
"""
- The id of the integration to mutate
+ The ID of the integration to mutate
"""
id: PrometheusServiceID!
}
@@ -19160,7 +19160,7 @@ Autogenerated input type of RemoveAwardEmoji
"""
input RemoveAwardEmojiInput {
"""
- The global id of the awardable resource
+ The global ID of the awardable resource
"""
awardableId: AwardableID!
@@ -19235,7 +19235,7 @@ input RepositionImageDiffNoteInput {
clientMutationId: String
"""
- The global id of the DiffNote to update
+ The global ID of the DiffNote to update
"""
id: DiffNoteID!
@@ -22205,7 +22205,7 @@ input TodoMarkDoneInput {
clientMutationId: String
"""
- The global id of the todo to mark as done
+ The global ID of the todo to mark as done
"""
id: TodoID!
}
@@ -22240,7 +22240,7 @@ input TodoRestoreInput {
clientMutationId: String
"""
- The global id of the todo to restore
+ The global ID of the todo to restore
"""
id: TodoID!
}
@@ -22255,7 +22255,7 @@ input TodoRestoreManyInput {
clientMutationId: String
"""
- The global ids of the todos to restore (a maximum of 50 is supported at once)
+ The global IDs of the todos to restore (a maximum of 50 is supported at once)
"""
ids: [TodoID!]!
}
@@ -22280,7 +22280,7 @@ type TodoRestoreManyPayload {
todos: [Todo!]!
"""
- The ids of the updated todo items. Deprecated in 13.2: Use todos
+ The IDs of the updated todo items. Deprecated in 13.2: Use todos
"""
updatedIds: [TodoID!]! @deprecated(reason: "Use todos. Deprecated in 13.2")
}
@@ -22387,7 +22387,7 @@ Autogenerated input type of ToggleAwardEmoji
"""
input ToggleAwardEmojiInput {
"""
- The global id of the awardable resource
+ The global ID of the awardable resource
"""
awardableId: AwardableID!
@@ -22609,7 +22609,7 @@ input UpdateAlertStatusInput {
clientMutationId: String
"""
- The iid of the alert to mutate
+ The IID of the alert to mutate
"""
iid: String!
@@ -22704,7 +22704,7 @@ Autogenerated input type of UpdateBoard
"""
input UpdateBoardInput {
"""
- The id of user to be assigned to the board
+ The ID of user to be assigned to the board
"""
assigneeId: UserID
@@ -22739,7 +22739,7 @@ input UpdateBoardInput {
labels: [String!]
"""
- The id of milestone to be assigned to the board
+ The ID of milestone to be assigned to the board
"""
milestoneId: MilestoneID
@@ -22991,7 +22991,7 @@ input UpdateEpicInput {
groupPath: ID!
"""
- The iid of the epic to mutate
+ The IID of the epic to mutate
"""
iid: ID!
@@ -23056,7 +23056,7 @@ input UpdateImageDiffNoteInput {
clientMutationId: String
"""
- The global id of the note to update
+ The global ID of the note to update
"""
id: NoteID!
@@ -23266,7 +23266,7 @@ input UpdateNoteInput {
confidential: Boolean
"""
- The global id of the note to update
+ The global ID of the note to update
"""
id: NoteID!
}
@@ -23306,7 +23306,7 @@ input UpdateRequirementInput {
description: String
"""
- The iid of the requirement to update
+ The IID of the requirement to update
"""
iid: String!
@@ -23371,7 +23371,7 @@ input UpdateSnippetInput {
description: String
"""
- The global id of the snippet to update
+ The global ID of the snippet to update
"""
id: SnippetID!
diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json
index 228c7d1b37c..2a10f750dfb 100644
--- a/doc/api/graphql/reference/gitlab_schema.json
+++ b/doc/api/graphql/reference/gitlab_schema.json
@@ -105,7 +105,7 @@
"inputFields": [
{
"name": "awardableId",
- "description": "The global id of the awardable resource",
+ "description": "The global ID of the awardable resource",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -2103,7 +2103,7 @@
},
{
"name": "iid",
- "description": "The iid of the alert to mutate",
+ "description": "The IID of the alert to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -2279,7 +2279,7 @@
},
{
"name": "iid",
- "description": "The iid of the alert to mutate",
+ "description": "The IID of the alert to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -2563,7 +2563,7 @@
"inputFields": [
{
"name": "awardableId",
- "description": "The global id of the awardable resource",
+ "description": "The global ID of the awardable resource",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -2679,7 +2679,7 @@
"inputFields": [
{
"name": "awardableId",
- "description": "The global id of the awardable resource",
+ "description": "The global ID of the awardable resource",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -2795,7 +2795,7 @@
"inputFields": [
{
"name": "awardableId",
- "description": "The global id of the awardable resource",
+ "description": "The global ID of the awardable resource",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -3869,7 +3869,7 @@
},
{
"name": "iidStartsWith",
- "description": "Filter epics by iid for autocomplete",
+ "description": "Filter epics by IID for autocomplete",
"type": {
"kind": "SCALAR",
"name": "String",
@@ -7113,7 +7113,7 @@
"inputFields": [
{
"name": "id",
- "description": "Global id of the cluster agent that will be deleted",
+ "description": "Global ID of the cluster agent that will be deleted",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -10073,7 +10073,7 @@
},
{
"name": "iid",
- "description": "The iid of the alert to mutate",
+ "description": "The IID of the alert to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -10203,7 +10203,7 @@
"inputFields": [
{
"name": "environmentId",
- "description": "The global id of the environment to add an annotation to",
+ "description": "The global ID of the environment to add an annotation to",
"type": {
"kind": "SCALAR",
"name": "EnvironmentID",
@@ -10213,7 +10213,7 @@
},
{
"name": "clusterId",
- "description": "The global id of the cluster to add an annotation to",
+ "description": "The global ID of the cluster to add an annotation to",
"type": {
"kind": "SCALAR",
"name": "ClustersClusterID",
@@ -11025,7 +11025,7 @@
"inputFields": [
{
"name": "noteableId",
- "description": "The global id of the resource to add a note to",
+ "description": "The global ID of the resource to add a note to",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -11373,7 +11373,7 @@
"inputFields": [
{
"name": "noteableId",
- "description": "The global id of the resource to add a note to",
+ "description": "The global ID of the resource to add a note to",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -11951,7 +11951,7 @@
"inputFields": [
{
"name": "noteableId",
- "description": "The global id of the resource to add a note to",
+ "description": "The global ID of the resource to add a note to",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -11989,7 +11989,7 @@
},
{
"name": "discussionId",
- "description": "The global id of the discussion this note is in reply to",
+ "description": "The global ID of the discussion this note is in reply to",
"type": {
"kind": "SCALAR",
"name": "DiscussionID",
@@ -16611,7 +16611,7 @@
},
{
"name": "iid",
- "description": "The iid of the issue to modify designs for",
+ "description": "The IID of the issue to modify designs for",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -16891,7 +16891,7 @@
},
{
"name": "iid",
- "description": "The iid of the issue to modify designs for",
+ "description": "The IID of the issue to modify designs for",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -17766,7 +17766,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the note to destroy",
+ "description": "The global ID of the note to destroy",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -17868,7 +17868,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the snippet to destroy",
+ "description": "The global ID of the snippet to destroy",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -19477,7 +19477,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the discussion",
+ "description": "The global ID of the discussion",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -20366,7 +20366,7 @@
},
{
"name": "iidStartsWith",
- "description": "Filter epics by iid for autocomplete",
+ "description": "Filter epics by IID for autocomplete",
"type": {
"kind": "SCALAR",
"name": "String",
@@ -21375,7 +21375,7 @@
"inputFields": [
{
"name": "iid",
- "description": "The iid of the epic to mutate",
+ "description": "The IID of the epic to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -21417,7 +21417,7 @@
},
{
"name": "issueIid",
- "description": "The iid of the issue to be added",
+ "description": "The IID of the issue to be added",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -23282,7 +23282,7 @@
"inputFields": [
{
"name": "iid",
- "description": "The iid of the epic to mutate",
+ "description": "The IID of the epic to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -23499,7 +23499,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the epic_issue or epic that is being moved",
+ "description": "The ID of the epic_issue or epic that is being moved",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -23513,7 +23513,7 @@
},
{
"name": "adjacentReferenceId",
- "description": "The id of the epic_issue or issue that the actual epic or issue is switched with",
+ "description": "The ID of the epic_issue or issue that the actual epic or issue is switched with",
"type": {
"kind": "SCALAR",
"name": "EpicTreeSortingID",
@@ -23554,7 +23554,7 @@
"inputFields": [
{
"name": "baseEpicId",
- "description": "The id of the base epic of the tree",
+ "description": "The ID of the base epic of the tree",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -24959,7 +24959,7 @@
},
{
"name": "iidStartsWith",
- "description": "Filter epics by iid for autocomplete",
+ "description": "Filter epics by IID for autocomplete",
"type": {
"kind": "SCALAR",
"name": "String",
@@ -25118,7 +25118,7 @@
},
{
"name": "iidStartsWith",
- "description": "Filter epics by iid for autocomplete",
+ "description": "Filter epics by IID for autocomplete",
"type": {
"kind": "SCALAR",
"name": "String",
@@ -27858,7 +27858,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the integration to remove",
+ "description": "The ID of the integration to remove",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -27960,7 +27960,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the integration to mutate",
+ "description": "The ID of the integration to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -28062,7 +28062,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the integration to mutate",
+ "description": "The ID of the integration to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -33493,7 +33493,7 @@
"inputFields": [
{
"name": "jiraAccountId",
- "description": "Jira account id of the user",
+ "description": "Jira account ID of the user",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -34135,7 +34135,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the snippet to update",
+ "description": "The global ID of the snippet to update",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -36810,7 +36810,7 @@
},
{
"name": "iid",
- "description": "The iid of the merge request to mutate",
+ "description": "The IID of the merge request to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -36958,7 +36958,7 @@
},
{
"name": "iid",
- "description": "The iid of the merge request to mutate",
+ "description": "The IID of the merge request to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -37106,7 +37106,7 @@
},
{
"name": "iid",
- "description": "The iid of the merge request to mutate",
+ "description": "The IID of the merge request to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -37236,7 +37236,7 @@
},
{
"name": "iid",
- "description": "The iid of the merge request to mutate",
+ "description": "The IID of the merge request to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -37362,7 +37362,7 @@
},
{
"name": "iid",
- "description": "The iid of the merge request to mutate",
+ "description": "The IID of the merge request to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -37492,7 +37492,7 @@
},
{
"name": "iid",
- "description": "The iid of the merge request to mutate",
+ "description": "The IID of the merge request to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -37770,7 +37770,7 @@
},
{
"name": "iid",
- "description": "The iid of the merge request to mutate",
+ "description": "The IID of the merge request to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -42934,7 +42934,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the namespace to mutate",
+ "description": "The global ID of the namespace to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -45453,7 +45453,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the pipeline to mutate",
+ "description": "The ID of the pipeline to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -45685,7 +45685,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the pipeline to mutate",
+ "description": "The ID of the pipeline to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -45885,7 +45885,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the pipeline to mutate",
+ "description": "The ID of the pipeline to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -51943,7 +51943,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the integration to mutate",
+ "description": "The ID of the integration to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -52045,7 +52045,7 @@
"inputFields": [
{
"name": "id",
- "description": "The id of the integration to mutate",
+ "description": "The ID of the integration to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -55492,7 +55492,7 @@
"inputFields": [
{
"name": "awardableId",
- "description": "The global id of the awardable resource",
+ "description": "The global ID of the awardable resource",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -55696,7 +55696,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the DiffNote to update",
+ "description": "The global ID of the DiffNote to update",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -64791,7 +64791,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the todo to mark as done",
+ "description": "The global ID of the todo to mark as done",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -64897,7 +64897,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the todo to restore",
+ "description": "The global ID of the todo to restore",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -64932,7 +64932,7 @@
"inputFields": [
{
"name": "ids",
- "description": "The global ids of the todos to restore (a maximum of 50 is supported at once)",
+ "description": "The global IDs of the todos to restore (a maximum of 50 is supported at once)",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -65040,7 +65040,7 @@
},
{
"name": "updatedIds",
- "description": "The ids of the updated todo items. Deprecated in 13.2: Use todos",
+ "description": "The IDs of the updated todo items. Deprecated in 13.2: Use todos",
"args": [
],
@@ -65357,7 +65357,7 @@
"inputFields": [
{
"name": "awardableId",
- "description": "The global id of the awardable resource",
+ "description": "The global ID of the awardable resource",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -66001,7 +66001,7 @@
},
{
"name": "iid",
- "description": "The iid of the alert to mutate",
+ "description": "The IID of the alert to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -66319,7 +66319,7 @@
},
{
"name": "assigneeId",
- "description": "The id of user to be assigned to the board",
+ "description": "The ID of user to be assigned to the board",
"type": {
"kind": "SCALAR",
"name": "UserID",
@@ -66329,7 +66329,7 @@
},
{
"name": "milestoneId",
- "description": "The id of milestone to be assigned to the board",
+ "description": "The ID of milestone to be assigned to the board",
"type": {
"kind": "SCALAR",
"name": "MilestoneID",
@@ -66942,7 +66942,7 @@
"inputFields": [
{
"name": "iid",
- "description": "The iid of the epic to mutate",
+ "description": "The IID of the epic to mutate",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -67174,7 +67174,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the note to update",
+ "description": "The global ID of the note to update",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -67704,7 +67704,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the note to update",
+ "description": "The global ID of the note to update",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -67870,7 +67870,7 @@
},
{
"name": "iid",
- "description": "The iid of the requirement to update",
+ "description": "The IID of the requirement to update",
"type": {
"kind": "NON_NULL",
"name": null,
@@ -67982,7 +67982,7 @@
"inputFields": [
{
"name": "id",
- "description": "The global id of the snippet to update",
+ "description": "The global ID of the snippet to update",
"type": {
"kind": "NON_NULL",
"name": null,
diff --git a/doc/development/adding_service_component.md b/doc/development/adding_service_component.md
index 0a07f67e7ba..a028675dbe2 100644
--- a/doc/development/adding_service_component.md
+++ b/doc/development/adding_service_component.md
@@ -31,7 +31,7 @@ The following outline re-uses the [maturity metric](https://about.gitlab.com/dir
The initial step for integrating a new component with GitLab starts with creating a [Feature proposal in the issue tracker](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Feature%20proposal).
-Identify the [product category](https://about.gitlab.com/handbook/product/categories/) the component falls under and assign the Engineering Manager and Product Manager responsible for that category.
+Identify the [product category](https://about.gitlab.com/handbook/product/product-categories/) the component falls under and assign the Engineering Manager and Product Manager responsible for that category.
The general steps for getting any GitLab feature from proposal to release can be found in the [Product development flow](https://about.gitlab.com/handbook/product-development-flow/).
diff --git a/doc/development/agent/index.md b/doc/development/agent/index.md
index dd09a779318..95661c8ddbd 100644
--- a/doc/development/agent/index.md
+++ b/doc/development/agent/index.md
@@ -33,7 +33,7 @@ The agent can help you perform tasks like these:
## Architecture of the Kubernetes Agent
The GitLab Kubernetes Agent and the GitLab Kubernetes Agent Server use
-[bidirectional streaming](https://grpc.io/docs/guides/concepts/#bidirectional-streaming-rpc)
+[bidirectional streaming](https://grpc.io/docs/what-is-grpc/core-concepts/#bidirectional-streaming-rpc)
to allow the connection acceptor (the gRPC server, GitLab Kubernetes Agent Server) to
act as a client. The connection acceptor sends requests as gRPC replies. The client-server
relationship is inverted because the connection must be initiated from inside the
diff --git a/doc/development/changelog.md b/doc/development/changelog.md
index 98c2f19f71f..894ae5a1893 100644
--- a/doc/development/changelog.md
+++ b/doc/development/changelog.md
@@ -47,7 +47,7 @@ the `author` field. GitLab team members **should not**.
- Any user-facing change **must** have a changelog entry. This includes both visual changes (regardless of how minor), and changes to the rendered DOM which impact how a screen reader may announce the content.
- Any client-facing change to our REST and GraphQL APIs **must** have a changelog entry.
- Performance improvements **should** have a changelog entry.
-- Changes that need to be documented in the Product Analytics [Event Dictionary](https://about.gitlab.com/handbook/product/product-analytics-guide#event-dictionary)
+- Changes that need to be documented in the Product Analytics [Event Dictionary](https://about.gitlab.com/handbook/product/product-analytics-guide/#event-dictionary)
also require a changelog entry.
- _Any_ contribution from a community member, no matter how small, **may** have
a changelog entry regardless of these guidelines if the contributor wants one.
@@ -55,7 +55,7 @@ the `author` field. GitLab team members **should not**.
- Any docs-only changes **should not** have a changelog entry.
- Any change behind a disabled feature flag **should not** have a changelog entry.
- Any change behind an enabled feature flag **should** have a changelog entry.
-- Any change that adds new usage data metrics and changes that needs to be documented in Product Analytics [Event Dictionary](https://about.gitlab.com/handbook/product/product-analytics-guide#event-dictionary) **should** have a changelog entry.
+- Any change that adds new usage data metrics and changes that needs to be documented in Product Analytics [Event Dictionary](https://about.gitlab.com/handbook/product/product-analytics-guide/#event-dictionary) **should** have a changelog entry.
- A change that adds snowplow events **should** have a changelog entry -
- A change that [removes a feature flag](feature_flags/development.md) **should** have a changelog entry -
only if the feature flag did not default to true already.
diff --git a/doc/development/documentation/restful_api_styleguide.md b/doc/development/documentation/restful_api_styleguide.md
index 13c6140114f..4bcd0bfcb31 100644
--- a/doc/development/documentation/restful_api_styleguide.md
+++ b/doc/development/documentation/restful_api_styleguide.md
@@ -107,7 +107,7 @@ Rendered example:
## cURL Examples
-The following sections include a set of [cURL](https://curl.haxx.se) examples
+The following sections include a set of [cURL](https://curl.se/) examples
you can use in the API documentation.
CAUTION: **Caution:**
diff --git a/doc/development/elasticsearch.md b/doc/development/elasticsearch.md
index c6499e59990..1b83cbef35c 100644
--- a/doc/development/elasticsearch.md
+++ b/doc/development/elasticsearch.md
@@ -15,7 +15,7 @@ the [Elasticsearch integration documentation](../integration/elasticsearch.md#en
In June 2019, Mario de la Ossa hosted a Deep Dive (GitLab team members only: `https://gitlab.com/gitlab-org/create-stage/issues/1`) on GitLab's [Elasticsearch integration](../integration/elasticsearch.md) to share his domain specific knowledge with anyone who may work in this part of the code base in the future. You can find the [recording on YouTube](https://www.youtube.com/watch?v=vrvl-tN2EaA), and the slides on [Google Slides](https://docs.google.com/presentation/d/1H-pCzI_LNrgrL5pJAIQgvLX8Ji0-jIKOg1QeJQzChug/edit) and in [PDF](https://gitlab.com/gitlab-org/create-stage/uploads/c5aa32b6b07476fa8b597004899ec538/Elasticsearch_Deep_Dive.pdf). Everything covered in this deep dive was accurate as of GitLab 12.0, and while specific details may have changed since then, it should still serve as a good introduction.
-In August 2020, a second Deep Dive was hosted, focusing on [GitLab's specific architecture for multi-indices support](#zero-downtime-reindexing-with-multiple-indices). The [recording on YouTube](https://www.youtube.com/watch?v=0WdPR9oB2fg) and the [slides](https://lulalala.gitlab.io/gitlab-elasticsearch-deepdive) are available. Everything covered in this deep dive was accurate as of GitLab 13.3.
+In August 2020, a second Deep Dive was hosted, focusing on [GitLab's specific architecture for multi-indices support](#zero-downtime-reindexing-with-multiple-indices). The [recording on YouTube](https://www.youtube.com/watch?v=0WdPR9oB2fg) and the [slides](https://lulalala.gitlab.io/gitlab-elasticsearch-deepdive/) are available. Everything covered in this deep dive was accurate as of GitLab 13.3.
## Supported Versions
diff --git a/doc/development/experiment_guide/index.md b/doc/development/experiment_guide/index.md
index bee6b4015f6..9e3b1d6f7be 100644
--- a/doc/development/experiment_guide/index.md
+++ b/doc/development/experiment_guide/index.md
@@ -279,6 +279,17 @@ Subsequent calls to this method for the same experiment and the same user have n
Note that this data is completely separate from the [events tracking data](#implement-the-tracking-events). They are not linked together in any way.
+#### Add context
+
+You can add arbitrary context data in a hash which gets stored as part of the experiment user record.
+This data can then be used by data analytics dashboards.
+
+```ruby
+before_action do
+ record_experiment_user(:signup_flow, foo: 42)
+end
+```
+
### Record experiment conversion event
Along with the tracking of backend and frontend events and the [recording of experiment participants](#record-experiment-user), we can also record when a user performs the desired conversion event action. For example:
diff --git a/doc/development/fe_guide/graphql.md b/doc/development/fe_guide/graphql.md
index 744795d4149..d4b4f9efaa6 100644
--- a/doc/development/fe_guide/graphql.md
+++ b/doc/development/fe_guide/graphql.md
@@ -411,7 +411,7 @@ handleClick() {
### Working with pagination
-GitLab's GraphQL API uses [Relay-style cursor pagination](https://www.apollographql.com/docs/react/data/pagination/#cursor-based)
+GitLab's GraphQL API uses [Relay-style cursor pagination](https://www.apollographql.com/docs/react/pagination/overview/#cursor-based)
for connection types. This means a "cursor" is used to keep track of where in the data
set the next items should be fetched from. [GraphQL Ruby Connection Concepts](https://graphql-ruby.org/pagination/connection_concepts.html)
is a good overview and introduction to connections.
diff --git a/doc/development/feature_flags/controls.md b/doc/development/feature_flags/controls.md
index f24a981dc09..22777e653f5 100644
--- a/doc/development/feature_flags/controls.md
+++ b/doc/development/feature_flags/controls.md
@@ -50,7 +50,7 @@ change feature flags or you do not [have access](#access).
### Enabling a feature for preproduction testing
-As a first step in a feature rollout, you should enable the feature on <https://staging.gitlab.com>
+As a first step in a feature rollout, you should enable the feature on <https://about.staging.gitlab.com>
and <https://dev.gitlab.org>.
These two environments have different scopes.
diff --git a/doc/development/i18n/translation.md b/doc/development/i18n/translation.md
index 87a958ba08c..11220e7f276 100644
--- a/doc/development/i18n/translation.md
+++ b/doc/development/i18n/translation.md
@@ -100,7 +100,7 @@ To propose additions to the glossary please
### Inclusive language in French
<!-- vale gitlab.Spelling = NO -->
-In French, the "écriture inclusive" is now over (see on [Legifrance](https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000036068906&categorieLien=id)).
+In French, the "écriture inclusive" is now over (see on [Legifrance](https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000036068906/)).
So, to include both genders, write “Utilisateurs et utilisatrices” instead of “Utilisateur·rice·s”.
When space is missing, the male gender should be used alone.
<!-- vale gitlab.Spelling = YES -->
diff --git a/doc/development/img/each_batch_users_table_bad_index_v13_7.png b/doc/development/img/each_batch_users_table_bad_index_v13_7.png
index 3f31034b614..dad3f37566a 100644
--- a/doc/development/img/each_batch_users_table_bad_index_v13_7.png
+++ b/doc/development/img/each_batch_users_table_bad_index_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_filter_v13_7.png b/doc/development/img/each_batch_users_table_filter_v13_7.png
index 2250b818884..79fa1cdaf55 100644
--- a/doc/development/img/each_batch_users_table_filter_v13_7.png
+++ b/doc/development/img/each_batch_users_table_filter_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_filtered_index_v13_7.png b/doc/development/img/each_batch_users_table_filtered_index_v13_7.png
index d13ee299f78..4fbe186ef28 100644
--- a/doc/development/img/each_batch_users_table_filtered_index_v13_7.png
+++ b/doc/development/img/each_batch_users_table_filtered_index_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_good_index_v13_7.png b/doc/development/img/each_batch_users_table_good_index_v13_7.png
index fc21d3ff5aa..cae01d5bee8 100644
--- a/doc/development/img/each_batch_users_table_good_index_v13_7.png
+++ b/doc/development/img/each_batch_users_table_good_index_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_iteration_1_v13_7.png b/doc/development/img/each_batch_users_table_iteration_1_v13_7.png
index 742f6aa0522..3dac195e8db 100644
--- a/doc/development/img/each_batch_users_table_iteration_1_v13_7.png
+++ b/doc/development/img/each_batch_users_table_iteration_1_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_iteration_2_v13_7.png b/doc/development/img/each_batch_users_table_iteration_2_v13_7.png
index 0540fd21c9c..c0cc82f14c6 100644
--- a/doc/development/img/each_batch_users_table_iteration_2_v13_7.png
+++ b/doc/development/img/each_batch_users_table_iteration_2_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_iteration_3_v13_7.png b/doc/development/img/each_batch_users_table_iteration_3_v13_7.png
index 425912acf8e..c032924d3d7 100644
--- a/doc/development/img/each_batch_users_table_iteration_3_v13_7.png
+++ b/doc/development/img/each_batch_users_table_iteration_3_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_iteration_4_v13_7.png b/doc/development/img/each_batch_users_table_iteration_4_v13_7.png
index 8306b25edd8..9ebd931d194 100644
--- a/doc/development/img/each_batch_users_table_iteration_4_v13_7.png
+++ b/doc/development/img/each_batch_users_table_iteration_4_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_iteration_5_v13_7.png b/doc/development/img/each_batch_users_table_iteration_5_v13_7.png
index 1f5aaa9e7f3..3a5baeadaaf 100644
--- a/doc/development/img/each_batch_users_table_iteration_5_v13_7.png
+++ b/doc/development/img/each_batch_users_table_iteration_5_v13_7.png
Binary files differ
diff --git a/doc/development/img/each_batch_users_table_v13_7.png b/doc/development/img/each_batch_users_table_v13_7.png
index c24b9cf8065..2e8b3fdff80 100644
--- a/doc/development/img/each_batch_users_table_v13_7.png
+++ b/doc/development/img/each_batch_users_table_v13_7.png
Binary files differ
diff --git a/doc/development/integrations/img/copy_cookies.png b/doc/development/integrations/img/copy_cookies.png
index f50aaf47cdd..21575987173 100644
--- a/doc/development/integrations/img/copy_cookies.png
+++ b/doc/development/integrations/img/copy_cookies.png
Binary files differ
diff --git a/doc/development/integrations/img/copy_curl.png b/doc/development/integrations/img/copy_curl.png
index d2ea5a3cec7..9fa871efbd5 100644
--- a/doc/development/integrations/img/copy_curl.png
+++ b/doc/development/integrations/img/copy_curl.png
Binary files differ
diff --git a/doc/development/new_fe_guide/development/accessibility.md b/doc/development/new_fe_guide/development/accessibility.md
index 3a7c46b7615..81f3773dd5c 100644
--- a/doc/development/new_fe_guide/development/accessibility.md
+++ b/doc/development/new_fe_guide/development/accessibility.md
@@ -42,7 +42,7 @@ In forms we should use the `for` attribute in the label statement:
## Testing
-1. On MacOS you can use [VoiceOver](https://www.apple.com/accessibility/mac/vision/) by pressing `cmd+F5`.
+1. On MacOS you can use [VoiceOver](http://www.apple.com/accessibility/vision/) by pressing `cmd+F5`.
1. On Windows you can use [Narrator](https://www.microsoft.com/en-us/accessibility/windows) by pressing Windows logo key + Control + Enter.
## Online resources
diff --git a/doc/development/product_analytics/usage_ping.md b/doc/development/product_analytics/usage_ping.md
index a66e92a6116..c7e8155a754 100644
--- a/doc/development/product_analytics/usage_ping.md
+++ b/doc/development/product_analytics/usage_ping.md
@@ -488,9 +488,9 @@ We have the following recommendations for [Adding new events](#adding-new-events
Events are tracked behind [feature flags](../feature_flags/index.md) due to concerns for Redis performance and scalability.
-For a full list of events and coresponding feature flags see, [known_events](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data_counters/known_events/) files.
+For a full list of events and corresponding feature flags see, [known_events](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data_counters/known_events/) files.
-To enable or disable tracking for specific event within <https://gitlab.com> or <https://staging.gitlab.com>, run commands such as the following to
+To enable or disable tracking for specific event within <https://gitlab.com> or <https://about.staging.gitlab.com>, run commands such as the following to
[enable or disable the corresponding feature](../feature_flags/index.md).
```shell
@@ -666,7 +666,7 @@ We also use `#database-lab` and [explain.depesz.com](https://explain.depesz.com/
### 5. Add the metric definition
-When adding, changing, or updating metrics, please update the [Event Dictionary's **Usage Ping** table](https://about.gitlab.com/handbook/product/product-analytics-guide#event-dictionary).
+When adding, changing, or updating metrics, please update the [Event Dictionary's **Usage Ping** table](https://about.gitlab.com/handbook/product/product-analytics-guide/#event-dictionary).
### 6. Add new metric to Versions Application
diff --git a/doc/development/testing_guide/frontend_testing.md b/doc/development/testing_guide/frontend_testing.md
index 9931e15ad44..b098b8418b4 100644
--- a/doc/development/testing_guide/frontend_testing.md
+++ b/doc/development/testing_guide/frontend_testing.md
@@ -104,37 +104,6 @@ describe('Component', () => {
Remember that the performance of each test depends on the environment.
-### Timout error due to async components
-
-If your component is fetching some other components asynchroneously based on some conditions, it might happen so that your Jest suite for this component will become flaky timing out from time to time.
-
-```javascript
-// ide.vue
-export default {
- components: {
- 'error-message': () => import('./error_message.vue'),
- 'gl-button': () => import('@gitlab/ui/src/components/base/button/button.vue'),
- ...
-};
-```
-
-To address this issue, you can "help" Jest by stubbing the async components so that Jest would not need to fetch those asynchroneously at the run-time.
-
-```javascript
-// ide_spec.js
-import { GlButton } from '@gitlab/ui';
-import ErrorMessage from '~/ide/components/error_message.vue';
-...
-return shallowMount(ide, {
- ...
- stubs: {
- ErrorMessage,
- GlButton,
- ...
- },
-})
-```
-
## What and how to test
Before jumping into more gritty details about Jest-specific workflows like mocks and spies, we should briefly cover what to test with Jest.
@@ -223,8 +192,8 @@ Following you'll find some general common practices you will find as part of our
When it comes to querying DOM elements in your tests, it is best to uniquely and semantically target
the element.
-Preferentially, this is done by targeting what the user actually sees using [DOM Testing Library](https://testing-library.com/docs/dom-testing-library/intro).
-When selecting by text it is best to use [`getByRole` or `findByRole`](https://testing-library.com/docs/dom-testing-library/api-queries#byrole)
+Preferentially, this is done by targeting what the user actually sees using [DOM Testing Library](https://testing-library.com/docs/dom-testing-library/intro/).
+When selecting by text it is best to use [`getByRole` or `findByRole`](https://testing-library.com/docs/dom-testing-library/api-queries/#byrole)
as these enforce accessibility best practices as well. The examples below demonstrate the order of preference.
When writing Vue component unit tests, it can be wise to query children by component, so that the unit test can focus on comprehensive value coverage
diff --git a/doc/development/ux_guide/users.md b/doc/development/ux_guide/users.md
index 6d586ce807b..a01aa4bcf35 100644
--- a/doc/development/ux_guide/users.md
+++ b/doc/development/ux_guide/users.md
@@ -1,8 +1,8 @@
---
-redirect_to: 'https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/'
+redirect_to: 'https://about.gitlab.com/handbook/marketing/strategic-marketing/roles-personas/'
---
-This document was moved to [another location](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/).
+This document was moved to [another location](https://about.gitlab.com/handbook/marketing/strategic-marketing/roles-personas/).
<!-- This redirect file can be deleted after February 1, 2021. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/gitlab-basics/start-using-git.md b/doc/gitlab-basics/start-using-git.md
index 071ecf75596..c1655c7609b 100644
--- a/doc/gitlab-basics/start-using-git.md
+++ b/doc/gitlab-basics/start-using-git.md
@@ -49,7 +49,7 @@ prompt, terminal, and command line) of your preference. Here are some suggestion
- For macOS users:
- Built-in: [Terminal](https://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line). Press <kbd>⌘ command</kbd> + <kbd>space</kbd> and type "terminal" to find it.
- - [iTerm2](https://www.iterm2.com/), which you can integrate with [zsh](https://git-scm.com/book/id/v2/Appendix-A%3A-Git-in-Other-Environments-Git-in-Zsh) and [oh my zsh](https://ohmyz.sh/) for color highlighting, among other handy features for Git users.
+ - [iTerm2](https://iterm2.com/), which you can integrate with [zsh](https://git-scm.com/book/id/v2/Appendix-A%3A-Git-in-Other-Environments-Git-in-Zsh) and [oh my zsh](https://ohmyz.sh/) for color highlighting, among other handy features for Git users.
- For Windows users:
- Built-in: **cmd**. Click the search icon on the bottom navbar on Windows and type "cmd" to find it.
- [PowerShell](https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/install/installing-windows-powershell?view=powershell-7): a Windows "powered up" shell, from which you can execute a greater number of commands.
diff --git a/doc/integration/jenkins.md b/doc/integration/jenkins.md
index 0a383f1e3b1..52e51c83535 100644
--- a/doc/integration/jenkins.md
+++ b/doc/integration/jenkins.md
@@ -27,7 +27,7 @@ For a real use case, read the blog post [Continuous integration: From Jenkins to
Moving from a traditional CI plug-in to a single application for the entire software development
life cycle can decrease hours spent on maintaining toolchains by 10% or more. For more details, see
-the ['GitLab vs. Jenkins' comparison page](https://about.gitlab.com/devops-tools/jenkins-vs-gitlab.html).
+the ['GitLab vs. Jenkins' comparison page](https://about.gitlab.com/devops-tools/jenkins-vs-gitlab/).
NOTE: **Note:**
This documentation focuses only on how to **configure** a Jenkins *integration* with
@@ -160,6 +160,9 @@ Configure the GitLab integration with Jenkins.
### Option 2: Webhook
+If you are unable to provide GitLab with your Jenkins server login, you can use this option
+to integrate GitLab and Jenkins.
+
1. In the configuration of your Jenkins job, in the GitLab configuration section, click **Advanced**.
1. Click the **Generate** button under the **Secret Token** field.
1. Copy the resulting token, and save the job configuration.
diff --git a/doc/integration/jira_development_panel.md b/doc/integration/jira_development_panel.md
index 5185504dd5c..860d3977b9a 100644
--- a/doc/integration/jira_development_panel.md
+++ b/doc/integration/jira_development_panel.md
@@ -232,7 +232,7 @@ Potential resolutions:
- If you're using GitLab Core or GitLab Starter, be sure you're using
GitLab 13.4 or later.
-[Contact GitLab Support](https://about.gitlab.com/support) if none of these reasons apply.
+[Contact GitLab Support](https://about.gitlab.com/support/) if none of these reasons apply.
#### Fixing synchronization issues
@@ -245,11 +245,11 @@ resynchronize the information. To do so:
1. For each project, there's a sync button displayed next to the **last activity** date.
To perform a *soft resync*, click the button, or complete a *full sync* by shift clicking
the button. For more information, see
- [Atlassian's documentation](https://confluence.atlassian.com/adminjiracloud/synchronize-an-account-972332890.html).
+ [Atlassian's documentation](https://support.atlassian.com/jira-cloud-administration/docs/synchronize-jira-cloud-to-bitbucket/).
### GitLab for Jira app
-You can integrate GitLab.com and Jira Cloud using the [GitLab for Jira](https://marketplace.atlassian.com/apps/1221011/gitlab-for-jira) app in the Atlassian Marketplace.
+You can integrate GitLab.com and Jira Cloud using the [GitLab for Jira](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud) app in the Atlassian Marketplace.
This method is recommended when using GitLab.com and Jira Cloud because data is synchronized in realtime, while the DVCS connector updates data only once per hour. If you are not using both of these environments, use the [Jira DVCS Connector](#jira-dvcs-configuration) method.
@@ -257,7 +257,7 @@ This method is recommended when using GitLab.com and Jira Cloud because data is
For a walkthrough of the integration with GitLab for Jira, watch [Configure GitLab Jira Integration using Marketplace App](https://youtu.be/SwR-g1s1zTo) on YouTube.
1. Go to **Jira Settings > Apps > Find new apps**, then search for GitLab.
-1. Click **GitLab for Jira**, then click **Get it now**. Or go the [App in the marketplace directly](https://marketplace.atlassian.com/apps/1221011/gitlab-for-jira)
+1. Click **GitLab for Jira**, then click **Get it now**. Or go the [App in the marketplace directly](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud)
![Install GitLab App on Jira](img/jira_dev_panel_setup_com_1.png)
1. After installing, click **Get started** to go to the configurations page. This page is always available under **Jira Settings > Apps > Manage apps**.
diff --git a/doc/integration/kerberos.md b/doc/integration/kerberos.md
index d5013492aa0..83d94d56966 100644
--- a/doc/integration/kerberos.md
+++ b/doc/integration/kerberos.md
@@ -13,13 +13,13 @@ GitLab can integrate with [Kerberos](https://web.mit.edu/kerberos/) as an authen
[Kerberos](https://web.mit.edu/kerberos/) is a secure method for authenticating a request for a service in a
computer network. Kerberos was developed in the Athena Project at the
-[Massachusetts Institute of Technology (MIT)](http://web.mit.edu/). The name is taken from Greek
+[Massachusetts Institute of Technology (MIT)](https://web.mit.edu/). The name is taken from Greek
mythology; Kerberos was a three-headed dog who guarded the gates of Hades.
## Use-cases
- GitLab can be configured to allow your users to sign with their Kerberos credentials.
-- You can use Kerberos to [prevent](http://web.mit.edu/sipb/doc/working/guide/guide/node20.html) anyone from intercepting or eavesdropping on the transmitted password.
+- You can use Kerberos to [prevent](https://web.mit.edu/sipb/doc/working/guide/guide/node20.html) anyone from intercepting or eavesdropping on the transmitted password.
## Configuration
diff --git a/doc/subscriptions/index.md b/doc/subscriptions/index.md
index a6116296641..ab6cf3c429f 100644
--- a/doc/subscriptions/index.md
+++ b/doc/subscriptions/index.md
@@ -173,7 +173,7 @@ Find more information how to apply and renew at
## GitLab for Open Source subscriptions
-All [GitLab for Open Source](https://about.gitlab.com/solutions/open-source/program/)
+All [GitLab for Open Source](https://about.gitlab.com/solutions/open-source/join/)
requests, including subscription renewals, must be made by using the application process.
If you have any questions, send an email to `opensource@gitlab.com` for assistance.
diff --git a/doc/topics/web_application_firewall/quick_start_guide.md b/doc/topics/web_application_firewall/quick_start_guide.md
index 58e178e6698..78cc31281fe 100644
--- a/doc/topics/web_application_firewall/quick_start_guide.md
+++ b/doc/topics/web_application_firewall/quick_start_guide.md
@@ -168,7 +168,7 @@ application will be monitored by the WAF automatically.
Now we can make sure that Ingress is running properly with ModSecurity and send
a request to ensure our application is responding correctly. You must connect to
-your cluster either using [Cloud Shell](https://cloud.google.com/shell/) or the [Google Cloud SDK](https://cloud.google.com/sdk/install).
+your cluster either using [Cloud Shell](https://cloud.google.com/shell/) or the [Google Cloud SDK](https://cloud.google.com/sdk/docs/install).
1. After connecting to your cluster, check if the Ingress-NGINX controller is running and ModSecurity is enabled.
diff --git a/doc/university/README.md b/doc/university/README.md
index 6e613ed4295..8ab878e5daa 100644
--- a/doc/university/README.md
+++ b/doc/university/README.md
@@ -143,7 +143,7 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
### 3.1. DevOps
-1. [XebiaLabs: DevOps Terminology](https://xebialabs.com/glossary/)
+1. [XebiaLabs: DevOps Terminology](https://digital.ai/glossary)
1. [XebiaLabs: Periodic Table of DevOps Tools](https://digital.ai/periodic-table-of-devops-tools)
1. [Puppet Labs: State of DevOps 2016 - Book](https://puppet.com/resources/report/2016-state-devops-report/)
diff --git a/doc/user/analytics/code_review_analytics.md b/doc/user/analytics/code_review_analytics.md
index 43bf25705f4..b4dfa0596d4 100644
--- a/doc/user/analytics/code_review_analytics.md
+++ b/doc/user/analytics/code_review_analytics.md
@@ -37,7 +37,7 @@ The table is sorted by:
## Use cases
-This feature is designed for [development team leaders](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
+This feature is designed for [development team leaders](https://about.gitlab.com/handbook/marketing/strategic-marketing/roles-personas/#delaney-development-team-lead)
and others who want to understand broad code review dynamics, and identify patterns to explain them.
You can use Code Review Analytics to:
diff --git a/doc/user/analytics/merge_request_analytics.md b/doc/user/analytics/merge_request_analytics.md
index 5f67ee1f698..c0fe19f1f16 100644
--- a/doc/user/analytics/merge_request_analytics.md
+++ b/doc/user/analytics/merge_request_analytics.md
@@ -23,7 +23,7 @@ To access Merge Request Analytics, from your project's menu, go to **Analytics >
## Use cases
-This feature is designed for [development team leaders](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
+This feature is designed for [development team leaders](https://about.gitlab.com/handbook/marketing/strategic-marketing/roles-personas/#delaney-development-team-lead)
and others who want to understand broad patterns in code review and productivity.
You can use Merge Request Analytics to expose when your team is most and least productive, and
diff --git a/doc/user/application_security/api_fuzzing/index.md b/doc/user/application_security/api_fuzzing/index.md
index e1ff594369e..3789a8c1e19 100644
--- a/doc/user/application_security/api_fuzzing/index.md
+++ b/doc/user/application_security/api_fuzzing/index.md
@@ -155,7 +155,7 @@ You can use various tools to generate HAR files:
- [Fiddler](https://www.telerik.com/fiddler): Web debugging proxy
- [Insomnia Core](https://insomnia.rest/): API client
-- [Chrome](https://www.google.com/chrome): Browser
+- [Chrome](https://www.google.com/chrome/): Browser
- [Firefox](https://www.mozilla.org/en-US/firefox/): Browser
DANGER: **Warning:**
diff --git a/doc/user/application_security/cve_id_request.md b/doc/user/application_security/cve_id_request.md
index 278235464b5..8c7c6cb028f 100644
--- a/doc/user/application_security/cve_id_request.md
+++ b/doc/user/application_security/cve_id_request.md
@@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41203) in GitLab 13.4, only for public projects on GitLab.com.
-As part of [GitLab's role as a CVE Numbering Authority](https://about.gitlab.com/security/cve)
+As part of [GitLab's role as a CVE Numbering Authority](https://about.gitlab.com/security/cve/)
([CNA](https://cve.mitre.org/cve/cna.html)), you may request
[CVE](https://cve.mitre.org/index.html) identifiers from GitLab to track
vulnerabilities found within your project.
diff --git a/doc/user/compliance/license_compliance/index.md b/doc/user/compliance/license_compliance/index.md
index fb7f757fe23..e2655c74e6c 100644
--- a/doc/user/compliance/license_compliance/index.md
+++ b/doc/user/compliance/license_compliance/index.md
@@ -274,13 +274,13 @@ to specify its location.
### Configuring NPM projects
-You can configure NPM projects by using an [`.npmrc`](https://docs.npmjs.com/configuring-npm/npmrc.html)
+You can configure NPM projects by using an [`.npmrc`](https://docs.npmjs.com/configuring-npm/npmrc.html/)
file.
#### Using private NPM registries
If you have a private NPM registry you can use the
-[`registry`](https://docs.npmjs.com/using-npm/config#registry)
+[`registry`](https://docs.npmjs.com/using-npm/config/#registry)
setting to specify its location.
For example:
@@ -294,7 +294,7 @@ registry = https://npm.example.com
You can supply a custom root certificate to complete TLS verification by using the
`ADDITIONAL_CA_CERT_BUNDLE` [environment variable](#available-variables).
-To disable TLS verification you can provide the [`strict-ssl`](https://docs.npmjs.com/using-npm/config#strict-ssl)
+To disable TLS verification you can provide the [`strict-ssl`](https://docs.npmjs.com/using-npm/config/#strict-ssl)
setting.
For example:
diff --git a/doc/user/group/epics/manage_epics.md b/doc/user/group/epics/manage_epics.md
index 6d7b4d9c1b5..d623e663e5b 100644
--- a/doc/user/group/epics/manage_epics.md
+++ b/doc/user/group/epics/manage_epics.md
@@ -263,7 +263,7 @@ You can create a spreadsheet template to manage a pattern of consistently repeat
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
For an introduction to epic templates, see [GitLab Epics and Epic Template Tip](https://www.youtube.com/watch?v=D74xKFNw8vg).
-For more on epic templates, see [Epic Templates - Repeatable sets of issues](https://about.gitlab.com/handbook/marketing/product-marketing/getting-started/104/).
+For more on epic templates, see [Epic Templates - Repeatable sets of issues](https://about.gitlab.com/handbook/marketing/strategic-marketing/getting-started/104/).
## Manage multi-level child epics **(ULTIMATE)**
diff --git a/doc/user/markdown.md b/doc/user/markdown.md
index e0513efc873..debff5fcf98 100644
--- a/doc/user/markdown.md
+++ b/doc/user/markdown.md
@@ -22,7 +22,7 @@ We encourage you to view this document as [rendered by GitLab itself](https://gi
GitLab uses "GitLab Flavored Markdown" (GFM). It extends the [CommonMark specification](https://spec.commonmark.org/current/)
(which is based on standard Markdown) in several ways to add additional useful functionality.
-It was inspired by [GitHub Flavored Markdown](https://docs.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax).
+It was inspired by [GitHub Flavored Markdown](https://docs.github.com/en/free-pro-team@latest/github/writing-on-github/basic-writing-and-formatting-syntax).
You can use GFM in the following areas:
diff --git a/doc/user/packages/composer_repository/index.md b/doc/user/packages/composer_repository/index.md
index ef48e4f7b03..60d1752617e 100644
--- a/doc/user/packages/composer_repository/index.md
+++ b/doc/user/packages/composer_repository/index.md
@@ -70,7 +70,10 @@ so that anyone who can access the project can use the package as a dependency.
Prerequisites:
-- A package in a GitLab repository.
+- A package in a GitLab repository. Composer packages should be versioned based on
+ the [Composer specification](https://getcomposer.org/doc/04-schema.md#version).
+ If the version is not valid, for example, it has three dots (`1.0.0.0`), an
+ error (`Validation failed: Version is invalid`) occurs when you publish.
- A valid `composer.json` file.
- The Packages feature is enabled in a GitLab repository.
- The project ID, which is on the project's home page.
diff --git a/doc/user/packages/container_registry/index.md b/doc/user/packages/container_registry/index.md
index 949f9cbca94..7661c0d668b 100644
--- a/doc/user/packages/container_registry/index.md
+++ b/doc/user/packages/container_registry/index.md
@@ -489,6 +489,8 @@ Cleanup policies can be run on all projects, with these exceptions:
The cleanup policy collects all tags in the Container Registry and excludes tags
until only the tags to be deleted remain.
+The cleanup policy searches for images based on the tag name. Support for the full path [has not yet been implemented](https://gitlab.com/gitlab-org/gitlab/-/issues/281071), but would allow you to clean up dynamically-named tags.
+
The cleanup policy:
1. Collects all tags for a given repository in a list.
@@ -536,6 +538,8 @@ If you edit the policy and click **Save** again, the interval is reset.
Cleanup policies use regex patterns to determine which tags should be preserved or removed, both in the UI and the API.
+Regex patterns are automatically surrounded with `\A` and `\Z` anchors. Do not include any `\A`, `\Z`, `^` or `$` token in the regex patterns as they are not necessary.
+
Here are examples of regex patterns you may want to use:
- Match all tags:
diff --git a/doc/user/packages/npm_registry/index.md b/doc/user/packages/npm_registry/index.md
index 74e74ae67f9..33b67eb1bd7 100644
--- a/doc/user/packages/npm_registry/index.md
+++ b/doc/user/packages/npm_registry/index.md
@@ -12,7 +12,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
Publish NPM packages in your project's Package Registry. Then install the
packages whenever you need to use them as a dependency.
-Only [scoped](https://docs.npmjs.com/misc/scope) packages are supported.
+Only [scoped](https://docs.npmjs.com/misc/scope/) packages are supported.
## Build an NPM package
@@ -25,7 +25,7 @@ the [next section](#authenticate-to-the-package-registry).
### Install NPM
Install Node.js and NPM in your local development environment by following
-the instructions at [npmjs.com](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
+the instructions at [npmjs.com](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/).
When installation is complete, verify you can use NPM in your terminal by
running:
@@ -360,7 +360,7 @@ In GitLab 12.6 and later, packages published to the Package Registry expose the
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9425) in GitLab Premium 12.8.
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/221259) to GitLab Core in 13.3.
-You can add [distribution tags](https://docs.npmjs.com/cli/dist-tag) to newly-published packages.
+You can add [distribution tags](https://docs.npmjs.com/cli/dist-tag/) to newly-published packages.
Tags are optional and can be assigned to only one package at a time.
When you publish a package without a tag, the `latest` tag is added by default.
diff --git a/doc/user/project/import/clearcase.md b/doc/user/project/import/clearcase.md
index 6a49adac1b2..7e07ca6f865 100644
--- a/doc/user/project/import/clearcase.md
+++ b/doc/user/project/import/clearcase.md
@@ -7,7 +7,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Migrating from ClearCase
-[ClearCase](https://www.ibm.com/us-en/marketplace/rational-clearcase) is a set of
+[ClearCase](https://www.ibm.com/products/rational-clearcase) is a set of
tools developed by IBM which also include a centralized version control system
similar to Git.
diff --git a/doc/user/project/import/github.md b/doc/user/project/import/github.md
index b9a3127d15b..769f104b226 100644
--- a/doc/user/project/import/github.md
+++ b/doc/user/project/import/github.md
@@ -60,7 +60,7 @@ must meet one of the following conditions prior to the import:
- Have previously logged in to a GitLab account using the GitHub icon.
- Have a GitHub account with a
- [primary email address](https://docs.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)
+ [primary email address](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)
that matches their GitLab account's email address.
If a user referenced in the project is not found in GitLab's database, the project creator (typically the user
@@ -89,7 +89,7 @@ Before you begin, ensure that any GitHub users who you want to map to GitLab use
- A GitLab account that has logged in using the GitHub icon
\- or -
-- A GitLab account with an email address that matches the [public email address](https://docs.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address) of the GitHub user
+- A GitLab account with an email address that matches the [public email address](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address) of the GitHub user
User-matching attempts occur in that order, and if a user is not identified either way, the activity is associated with
the user account that is performing the import.
diff --git a/doc/user/project/integrations/github.md b/doc/user/project/integrations/github.md
index 1c0309cab87..5ef36ff4074 100644
--- a/doc/user/project/integrations/github.md
+++ b/doc/user/project/integrations/github.md
@@ -20,7 +20,7 @@ and is automatically configured on [GitHub import](../../../integration/github.m
### Complete these steps on GitHub
-This integration requires a [GitHub API token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)
+This integration requires a [GitHub API token](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token)
with `repo:status` access granted:
1. Go to your "Personal access tokens" page at <https://github.com/settings/tokens>
diff --git a/doc/user/project/integrations/img/microsoft_teams_select_incoming_webhook.png b/doc/user/project/integrations/img/microsoft_teams_select_incoming_webhook.png
index 5fab8c77540..216e65a8b30 100644
--- a/doc/user/project/integrations/img/microsoft_teams_select_incoming_webhook.png
+++ b/doc/user/project/integrations/img/microsoft_teams_select_incoming_webhook.png
Binary files differ
diff --git a/doc/user/project/integrations/jira_integrations.md b/doc/user/project/integrations/jira_integrations.md
index 358ad5fb33b..8cf8b86bafb 100644
--- a/doc/user/project/integrations/jira_integrations.md
+++ b/doc/user/project/integrations/jira_integrations.md
@@ -19,7 +19,7 @@ The following Jira integrations allow different types of cross-referencing betwe
- [**Jira integration**](jira.md) - This is built in to GitLab. In a given GitLab project, it can be configured to connect to any Jira instance, self-managed or Cloud.
- [**Jira development panel integration**](../../../integration/jira_development_panel.md) - This connects all GitLab projects under a specified group or personal namespace.
- - If you're using Jira Cloud and GitLab.com, install the [GitLab for Jira](https://marketplace.atlassian.com/apps/1221011/gitlab-for-jira) app in the Atlassian Marketplace and see its [documentation](../../../integration/jira_development_panel.md#gitlab-for-jira-app).
+ - If you're using Jira Cloud and GitLab.com, install the [GitLab for Jira](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud) app in the Atlassian Marketplace and see its [documentation](../../../integration/jira_development_panel.md#gitlab-for-jira-app).
- For all other environments, use the [Jira DVCS Connector configuration instructions](../../../integration/jira_development_panel.md#configuration).
### Feature comparison
diff --git a/doc/user/project/integrations/webex_teams.md b/doc/user/project/integrations/webex_teams.md
index 30d8d270a16..8a3383fd0e7 100644
--- a/doc/user/project/integrations/webex_teams.md
+++ b/doc/user/project/integrations/webex_teams.md
@@ -10,7 +10,7 @@ You can configure GitLab to send notifications to a Webex Teams space.
## Create a webhook for the space
-1. Go to the [Incoming Webhooks app page](https://apphub.webex.com/teams/applications/incoming-webhooks-cisco-systems-38054).
+1. Go to the [Incoming Webhooks app page](https://apphub.webex.com/messaging/applications/incoming-webhooks-cisco-systems-38054).
1. Click **Connect** and log in to Webex Teams, if required.
1. Enter a name for the webhook and select the space to receive the notifications.
1. Click **ADD**.
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
index bc1a1dfcb99..97f5e5b2438 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
@@ -167,7 +167,7 @@ from the GitLab project.
> - Domain verification is **required for GitLab.com users**;
for GitLab self-managed instances, your GitLab administrator has the option
to [disabled custom domain verification](../../../../administration/pages/index.md#custom-domain-verification).
-> - [DNS propagation may take some time (up to 24h)](https://www.inmotionhosting.com/support/domain-names/dns-nameserver-changes/domain-names-dns-changes/),
+> - [DNS propagation may take some time (up to 24h)](https://www.inmotionhosting.com/support/domain-names/dns-nameserver-changes/complete-guide-to-dns-records/),
although it's usually a matter of minutes to complete. Until it does, verification
will fail and attempts to visit your domain will respond with a 404.
> - Once your domain has been verified, leave the verification record
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
index 9d8088d2f43..669c3afe787 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
@@ -56,7 +56,7 @@ reiterating the importance of HTTPS.
## Issuing Certificates
-GitLab Pages accepts certificates provided in the [PEM](https://knowledge.digicert.com/quovadis) format, issued by
+GitLab Pages accepts certificates provided in the [PEM](https://knowledge.digicert.com/quovadis.html) format, issued by
[Certificate Authorities](https://en.wikipedia.org/wiki/Certificate_authority) or as
[self-signed certificates](https://en.wikipedia.org/wiki/Self-signed_certificate). Note that [self-signed certificates are typically not used](https://www.mcafee.com/blogs/other-blogs/mcafee-labs/self-signed-certificates-secure-so-why-ban/)
for public websites for security reasons and to ensure that browsers trust your site's certificate.
diff --git a/doc/user/project/repository/repository_mirroring.md b/doc/user/project/repository/repository_mirroring.md
index 36eb111c7aa..8fbe227c18a 100644
--- a/doc/user/project/repository/repository_mirroring.md
+++ b/doc/user/project/repository/repository_mirroring.md
@@ -124,7 +124,7 @@ After the mirror is created, this option can currently only be modified via the
To set up a mirror from GitLab to GitHub, you need to follow these steps:
-1. Create a [GitHub personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) with the `public_repo` box checked.
+1. Create a [GitHub personal access token](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token) with the `public_repo` box checked.
1. Fill in the **Git repository URL** field using this format: `https://<your_github_username>@github.com/<your_github_group>/<your_github_project>.git`.
1. Fill in **Password** field with your GitHub personal access token.
1. Click the **Mirror repository** button.
@@ -320,7 +320,7 @@ fingerprints in the open for you to check:
- [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/regions.html#regions-fingerprints)
- [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/configure-ssh-and-two-step-verification/)
-- [GitHub](https://docs.github.com/en/github/authenticating-to-github/githubs-ssh-key-fingerprints)
+- [GitHub](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/githubs-ssh-key-fingerprints)
- [GitLab.com](../../gitlab_com/index.md#ssh-host-keys-fingerprints)
- [Launchpad](https://help.launchpad.net/SSHFingerprints)
- [Savannah](http://savannah.gnu.org/maintenance/SshAccess/)