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
diff options
context:
space:
mode:
-rw-r--r--.gitlab/issue_templates/Snowplow event tracking.md2
-rw-r--r--app/controllers/projects/merge_requests_controller.rb2
-rw-r--r--app/helpers/users_helper.rb28
-rw-r--r--app/models/award_emoji.rb2
-rw-r--r--app/validators/json_schemas/build_metadata_secrets.json3
-rw-r--r--app/views/admin/users/_head.html.haml9
-rw-r--r--app/views/admin/users/show.html.haml11
-rw-r--r--doc/administration/auth/atlassian.md2
-rw-r--r--doc/administration/nfs.md2
-rw-r--r--doc/administration/restart_gitlab.md2
-rw-r--r--doc/administration/troubleshooting/debug.md2
-rw-r--r--doc/administration/troubleshooting/elasticsearch.md6
-rw-r--r--doc/administration/troubleshooting/tracing_correlation_id.md2
-rw-r--r--doc/administration/whats-new.md2
-rw-r--r--doc/api/feature_flags.md2
-rw-r--r--doc/api/packages/pypi.md2
-rw-r--r--doc/ci/ci_cd_for_external_repos/github_integration.md2
-rw-r--r--doc/ci/examples/authenticating-with-hashicorp-vault/index.md70
-rw-r--r--doc/ci/introduction/index.md2
-rw-r--r--doc/ci/pipelines/multi_project_pipelines.md15
-rw-r--r--doc/ci/runners/configure_runners.md2
-rw-r--r--doc/ci/secrets/index.md13
-rw-r--r--doc/ci/unit_test_reports.md2
-rw-r--r--doc/ci/yaml/index.md29
-rw-r--r--doc/development/api_graphql_styleguide.md2
-rw-r--r--doc/development/contributing/issue_workflow.md2
-rw-r--r--doc/development/contributing/style_guides.md4
-rw-r--r--doc/development/documentation/site_architecture/index.md4
-rw-r--r--doc/development/documentation/structure.md13
-rw-r--r--doc/development/fe_guide/accessibility.md2
-rw-r--r--doc/development/fe_guide/content_editor.md4
-rw-r--r--doc/development/fe_guide/performance.md4
-rw-r--r--doc/development/fe_guide/storybook.md2
-rw-r--r--doc/development/fe_guide/style/scss.md2
-rw-r--r--doc/development/go_guide/index.md2
-rw-r--r--doc/development/snowplow/index.md12
-rw-r--r--doc/development/testing_guide/frontend_testing.md6
-rw-r--r--doc/development/usage_ping/index.md6
-rw-r--r--doc/index.md2
-rw-r--r--doc/install/azure/index.md2
-rw-r--r--doc/install/google_cloud_platform/index.md2
-rw-r--r--doc/install/openshift_and_gitlab/index.md2
-rw-r--r--doc/install/postgresql_extensions.md9
-rw-r--r--doc/integration/github.md2
-rw-r--r--doc/operations/feature_flags.md12
-rw-r--r--doc/ssh/index.md2
-rw-r--r--doc/subscriptions/index.md2
-rw-r--r--doc/topics/autodevops/requirements.md2
-rw-r--r--doc/topics/git/index.md2
-rw-r--r--doc/user/clusters/agent/index.md10
-rw-r--r--doc/user/clusters/applications.md4
-rw-r--r--doc/user/clusters/integrations.md2
-rw-r--r--doc/user/compliance/license_compliance/index.md4
-rw-r--r--doc/user/index.md2
-rw-r--r--doc/user/markdown.md2
-rw-r--r--doc/user/packages/go_proxy/index.md2
-rw-r--r--doc/user/packages/npm_registry/index.md5
-rw-r--r--doc/user/packages/nuget_repository/index.md2
-rw-r--r--doc/user/permissions.md2
-rw-r--r--doc/user/project/clusters/index.md2
-rw-r--r--doc/user/project/import/github.md2
-rw-r--r--doc/user/project/integrations/github.md2
-rw-r--r--doc/user/project/integrations/hangouts_chat.md2
-rw-r--r--doc/user/project/integrations/webex_teams.md2
-rw-r--r--doc/user/project/issue_board.md6
-rw-r--r--doc/user/project/repository/repository_mirroring.md6
-rw-r--r--doc/user/project/working_with_projects.md2
-rw-r--r--doc/user/snippets.md4
-rw-r--r--locale/gitlab.pot17
-rw-r--r--qa/qa/page/admin/overview/users/show.rb11
-rw-r--r--spec/helpers/users_helper_spec.rb32
71 files changed, 307 insertions, 134 deletions
diff --git a/.gitlab/issue_templates/Snowplow event tracking.md b/.gitlab/issue_templates/Snowplow event tracking.md
index 4a906b61378..ee8755d3292 100644
--- a/.gitlab/issue_templates/Snowplow event tracking.md
+++ b/.gitlab/issue_templates/Snowplow event tracking.md
@@ -4,7 +4,7 @@
* Snowplow is currently not used for self-hosted instances of GitLab - Self-hosted still rely on usage ping for product analytics - Snowplow is used for GitLab SaaS
* You do not need to create an issue to track generic front-end events, such as All page views, sessions, link clicks, some button clicks, etc.
* What you should capture are specific events with defined business logic. For example, when a user creates an incident by escalating an existing alert, or when a user creates and pushes up a new Node package to the NPM registry.
-* For more details read https://about.gitlab.com/handbook/business-ops/data-team/programs/data-for-product-managers/
+* For more details read https://about.gitlab.com/handbook/business-technology/data-team/programs/data-for-product-managers/
-->
<!--
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 3cf0fee2536..a18ba5f30bc 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -220,7 +220,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
end
def codequality_mr_diff_reports
- reports_response(@merge_request.find_codequality_mr_diff_reports)
+ reports_response(@merge_request.find_codequality_mr_diff_reports, head_pipeline)
end
def codequality_reports
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 7154d498d77..2af932f8e8c 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -231,6 +231,34 @@ module UsersHelper
}
end
+ def confirm_user_data(user)
+ message = if user.unconfirmed_email.present?
+ _('This user has an unconfirmed email address (%{email}). You may force a confirmation.') % { email: user.unconfirmed_email }
+ else
+ _('This user has an unconfirmed email address. You may force a confirmation.')
+ end
+
+ modal_attributes = Gitlab::Json.dump({
+ title: s_('AdminUsers|Confirm user %{username}?') % { username: sanitize_name(user.name) },
+ messageHtml: message,
+ actionPrimary: {
+ text: s_('AdminUsers|Confirm user'),
+ attributes: [{ variant: 'info', 'data-qa-selector': 'confirm_user_confirm_button' }]
+ },
+ actionSecondary: {
+ text: _('Cancel'),
+ attributes: [{ variant: 'default' }]
+ }
+ })
+
+ {
+ path: confirm_admin_user_path(user),
+ method: 'put',
+ modal_attributes: modal_attributes,
+ qa_selector: 'confirm_user_button'
+ }
+ end
+
def user_deactivation_effects
header = tag.p s_('AdminUsers|Deactivating a user has the following effects:')
diff --git a/app/models/award_emoji.rb b/app/models/award_emoji.rb
index 5ba6100f169..41687febcf2 100644
--- a/app/models/award_emoji.rb
+++ b/app/models/award_emoji.rb
@@ -64,3 +64,5 @@ class AwardEmoji < ApplicationRecord
awardable.try(:expire_etag_cache)
end
end
+
+AwardEmoji.prepend_mod_with('AwardEmoji')
diff --git a/app/validators/json_schemas/build_metadata_secrets.json b/app/validators/json_schemas/build_metadata_secrets.json
index 799e7ab1642..3c8035d0dcf 100644
--- a/app/validators/json_schemas/build_metadata_secrets.json
+++ b/app/validators/json_schemas/build_metadata_secrets.json
@@ -23,7 +23,8 @@
}
},
"additionalProperties": false
- }
+ },
+ "^file$": { "type": "boolean" }
},
"additionalProperties": false
}
diff --git a/app/views/admin/users/_head.html.haml b/app/views/admin/users/_head.html.haml
index be04e87f8b9..9ef2d7b2f22 100644
--- a/app/views/admin/users/_head.html.haml
+++ b/app/views/admin/users/_head.html.haml
@@ -22,11 +22,16 @@
= render_if_exists 'admin/users/gma_user_badge'
.float-right
- - if impersonation_enabled? && @user != current_user && @user.can?(:log_in)
- = link_to _('Impersonate'), impersonate_admin_user_path(@user), method: :post, class: "btn btn-info gl-button btn-grouped", data: { qa_selector: 'impersonate_user_link' }
= link_to edit_admin_user_path(@user), class: "btn btn-default gl-button btn-grouped" do
= sprite_icon('pencil-square', css_class: 'gl-icon gl-button-icon')
= _('Edit')
+ - if @user != current_user
+ - if impersonation_enabled? && @user.can?(:log_in)
+ = link_to _('Impersonate'), impersonate_admin_user_path(@user), method: :post, class: "btn btn-default gl-button btn-grouped", data: { qa_selector: 'impersonate_user_link' }
+ - if can_force_email_confirmation?(@user)
+ %button.btn.gl-button.btn-info.btn-grouped.js-confirm-modal-button{ data: confirm_user_data(@user) }
+ = _('Confirm user')
+
%hr
%ul.nav-links.nav.nav-tabs
= nav_link(path: 'users#show') do
diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml
index 08c1e089f21..5477ece7439 100644
--- a/app/views/admin/users/show.html.haml
+++ b/app/views/admin/users/show.html.haml
@@ -141,17 +141,6 @@
.col-md-6
- unless @user == current_user
- - if can_force_email_confirmation?(@user)
- .gl-card.border-info.gl-mb-5
- .gl-card-header.bg-info.text-white
- = _('Confirm user')
- .gl-card-body
- - if @user.unconfirmed_email.present?
- - email = " (#{@user.unconfirmed_email})"
- %p= _('This user has an unconfirmed email address %{email}. You may force a confirmation.') % { email: email }
- %br
- = link_to _('Confirm user'), confirm_admin_user_path(@user), method: :put, class: "btn gl-button btn-info", data: { confirm: _('Are you sure?'), qa_selector: 'confirm_user_button' }
-
= render 'admin/users/user_detail_note'
- unless @user.internal?
diff --git a/doc/administration/auth/atlassian.md b/doc/administration/auth/atlassian.md
index 365236748b9..b3892f8f5d9 100644
--- a/doc/administration/auth/atlassian.md
+++ b/doc/administration/auth/atlassian.md
@@ -11,7 +11,7 @@ To enable the Atlassian OmniAuth provider for passwordless authentication you mu
## Atlassian application registration
-1. Go to <https://developer.atlassian.com/apps/> and sign-in with the Atlassian
+1. Go to <https://developer.atlassian.com/console/myapps/> and sign-in with the Atlassian
account that will administer the application.
1. Click **Create a new app**.
diff --git a/doc/administration/nfs.md b/doc/administration/nfs.md
index 5030c924b60..cbbfdf54ad5 100644
--- a/doc/administration/nfs.md
+++ b/doc/administration/nfs.md
@@ -102,7 +102,7 @@ and GIDs (which is off by default in some cases) for simplified permission
management between systems:
- [NetApp instructions](https://library.netapp.com/ecmdocs/ECMP1401220/html/GUID-24367A9F-E17B-4725-ADC1-02D86F56F78E.html)
-- For non-NetApp devices, disable NFSv4 `idmapping` by performing opposite of [enable NFSv4 idmapper](https://wiki.archlinux.org/index.php/NFS#Enabling_NFSv4_idmapping)
+- For non-NetApp devices, disable NFSv4 `idmapping` by performing opposite of [enable NFSv4 idmapper](https://wiki.archlinux.org/title/NFS#Enabling_NFSv4_idmapping)
### Disable NFS server delegation
diff --git a/doc/administration/restart_gitlab.md b/doc/administration/restart_gitlab.md
index 5f7f08f4ecf..b8f09b00773 100644
--- a/doc/administration/restart_gitlab.md
+++ b/doc/administration/restart_gitlab.md
@@ -85,7 +85,7 @@ sudo gitlab-ctl reconfigure
Reconfiguring GitLab should occur in the event that something in its
configuration (`/etc/gitlab/gitlab.rb`) has changed.
-When you run this command, [Chef](https://www.chef.io/products/chef-infra/), the underlying configuration management
+When you run this command, [Chef](https://www.chef.io/products/chef-infra), the underlying configuration management
application that powers Omnibus GitLab, makes sure that all things like directories,
permissions, and services are in place and in the same shape that they were
initially shipped.
diff --git a/doc/administration/troubleshooting/debug.md b/doc/administration/troubleshooting/debug.md
index 04c83370b60..e7f679ca1b2 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://blog.newrelic.com/engineering/debugging-stuck-ruby-processes-what-to-do-before-you-kill-9/)
+- [Debugging Stuck Ruby Processes](https://newrelic.com/blog/engineering/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/administration/troubleshooting/elasticsearch.md b/doc/administration/troubleshooting/elasticsearch.md
index dc49a912298..79295856da8 100644
--- a/doc/administration/troubleshooting/elasticsearch.md
+++ b/doc/administration/troubleshooting/elasticsearch.md
@@ -53,7 +53,7 @@ graph TD;
B5 --> |No| B7
B7 --> B8
B{Is GitLab using<br>Elasticsearch for<br>searching?}
- B1[Select **Menu >** **{admin}** **Admin > Integrations**<br>to ensure the settings are correct]
+ B1[From the Admin Area, select<br>Integrations from the left<br>sidebar to ensure the settings<br>are correct.]
B2[Perform a search via<br>the rails console]
B3[If all settings are correct<br>and it still doesn't show Elasticsearch<br>doing the searches, escalate<br>to GitLab support.]
B4[Perform<br>the same search via the<br>Elasticsearch API]
@@ -196,7 +196,9 @@ Troubleshooting search result issues is rather straight forward on Elasticsearch
The first step is to confirm GitLab is using Elasticsearch for the search function.
To do this:
-1. Confirm the integration is enabled by selecting **Menu >** **{admin}** **Admin** > Settings > General**.
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Settings > General**, and then confirm the
+ integration is enabled.
1. Confirm searches use Elasticsearch by accessing the rails console
(`sudo gitlab-rails console`) and running the following commands:
diff --git a/doc/administration/troubleshooting/tracing_correlation_id.md b/doc/administration/troubleshooting/tracing_correlation_id.md
index 7b9ce5c6d7b..1bb10e72290 100644
--- a/doc/administration/troubleshooting/tracing_correlation_id.md
+++ b/doc/administration/troubleshooting/tracing_correlation_id.md
@@ -27,7 +27,7 @@ activity with the site that you're visiting. See the links below for network mon
documentation for some popular browsers.
- [Network Monitor - Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor)
-- [Inspect Network Activity In Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/network/)
+- [Inspect Network Activity In Chrome DevTools](https://developer.chrome.com/docs/devtools/network)
- [Safari Web Development Tools](https://developer.apple.com/safari/tools/)
- [Microsoft Edge Network panel](https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/network/)
diff --git a/doc/administration/whats-new.md b/doc/administration/whats-new.md
index ae19e0f0341..d669d05e9f0 100644
--- a/doc/administration/whats-new.md
+++ b/doc/administration/whats-new.md
@@ -13,7 +13,7 @@ GitLab versions in the **What's new** feature. To access it:
1. Select **What's new** from the menu.
The **What's new** describes new features available in multiple
-[GitLab tiers](https://about.gitlab.com/pricing). While all users can see the
+[GitLab tiers](https://about.gitlab.com/pricing/). While all users can see the
feature list, the feature list is tailored to your subscription type:
- Features only available to self-managed installations are not shown on GitLab.com.
diff --git a/doc/api/feature_flags.md b/doc/api/feature_flags.md
index c5abaaa8ab2..b40a3994dbf 100644
--- a/doc/api/feature_flags.md
+++ b/doc/api/feature_flags.md
@@ -148,7 +148,7 @@ POST /projects/:id/feature_flags
| `description` | string | no | The description of the feature flag. |
| `active` | boolean | no | The active state of the flag. Defaults to true. [Supported](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38350) in GitLab 13.3 and later. |
| `strategies` | JSON | no | The feature flag [strategies](../operations/feature_flags.md#feature-flag-strategies). |
-| `strategies:name` | JSON | no | The strategy name. Can be `default`, `gradualRolloutUserId`, `userWithId`, or `gitlabUserList`. In [GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/36380) and later, can be [`flexibleRollout`](https://docs.getunleash.io/docs/activation_strategy#flexiblerollout). |
+| `strategies:name` | JSON | no | The strategy name. Can be `default`, `gradualRolloutUserId`, `userWithId`, or `gitlabUserList`. In [GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/36380) and later, can be [`flexibleRollout`](https://docs.getunleash.io/activation_strategy/#flexiblerollout). |
| `strategies:parameters` | JSON | no | The strategy parameters. |
| `strategies:scopes` | JSON | no | The scopes for the strategy. |
| `strategies:scopes:environment_scope` | string | no | The environment spec for the scope. |
diff --git a/doc/api/packages/pypi.md b/doc/api/packages/pypi.md
index 77ba028c447..dd301e9fab8 100644
--- a/doc/api/packages/pypi.md
+++ b/doc/api/packages/pypi.md
@@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
This is the API documentation for [PyPI Packages](../../user/packages/pypi_repository/index.md).
WARNING:
-This API is used by the [PyPI package manager client](https://pypi.apache.org/)
+This API is used by the [PyPI package manager client](https://pypi.org/)
and is generally not meant for manual consumption.
For instructions on how to upload and install PyPI packages from the GitLab
diff --git a/doc/ci/ci_cd_for_external_repos/github_integration.md b/doc/ci/ci_cd_for_external_repos/github_integration.md
index c6fa049dc6e..5b70fb1d801 100644
--- a/doc/ci/ci_cd_for_external_repos/github_integration.md
+++ b/doc/ci/ci_cd_for_external_repos/github_integration.md
@@ -22,7 +22,7 @@ cannot be used to authenticate with GitHub as an external CI/CD repository.
## Connect with Personal Access Token
Personal access tokens can only be used to connect GitHub.com
-repositories to GitLab, and the GitHub user must have the [owner role](https://docs.github.com/en/github/getting-started-with-github/access-permissions-on-github).
+repositories to GitLab, and the GitHub user must have the [owner role](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github).
To perform a one-off authorization with GitHub to grant GitLab access your
repositories:
diff --git a/doc/ci/examples/authenticating-with-hashicorp-vault/index.md b/doc/ci/examples/authenticating-with-hashicorp-vault/index.md
index 1bd4d09bcf5..65fe9fb44d4 100644
--- a/doc/ci/examples/authenticating-with-hashicorp-vault/index.md
+++ b/doc/ci/examples/authenticating-with-hashicorp-vault/index.md
@@ -32,31 +32,57 @@ You must replace the `vault.example.com` URL below with the URL of your Vault se
Each job has JSON Web Token (JWT) provided as CI/CD variable named `CI_JOB_JWT`. This JWT can be used to authenticate with Vault using the [JWT Auth](https://www.vaultproject.io/docs/auth/jwt#jwt-authentication) method.
-The JWT's payload looks like this:
+The following fields are included in the JWT:
+
+| Field | When | Description |
+| ----------------------- | ------ | ----------- |
+| `jti` | Always | Unique identifier for this token |
+| `iss` | Always | Issuer, the domain of your GitLab instance |
+| `iat` | Always | Issued at |
+| `nbf` | Always | Not valid before |
+| `exp` | Always | Expires at |
+| `sub` | Always | Subject (job ID) |
+| `namespace_id` | Always | Use this to scope to group or user level namespace by ID |
+| `namespace_path` | Always | Use this to scope to group or user level namespace by path |
+| `project_id` | Always | Use this to scope to project by ID |
+| `project_path` | Always | Use this to scope to project by path |
+| `user_id` | Always | ID of the user executing the job |
+| `user_login` | Always | Username of the user executing the job |
+| `user_email` | Always | Email of the user executing the job |
+| `pipeline_id` | Always | ID of this pipeline |
+| `pipeline_source` | Always | [Pipeline source](../../jobs/job_control.md#common-if-clauses-for-rules) |
+| `job_id` | Always | ID of this job |
+| `ref` | Always | Git ref for this job |
+| `ref_type` | Always | Git ref type, either `branch` or `tag` |
+| `ref_protected` | Always | `true` if this Git ref is protected, `false` otherwise |
+| `environment` | Job is creating a deployment | Environment this job deploys to ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/294440) in GitLab 13.9) |
+| `environment_protected` | Job is creating a deployment |`true` if deployed environment is protected, `false` otherwise ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/294440) in GitLab 13.9) |
+
+Example JWT payload:
```json
{
- "jti": "c82eeb0c-5c6f-4a33-abf5-4c474b92b558", # Unique identifier for this token
- "iss": "gitlab.example.com", # Issuer, the domain of your GitLab instance
- "iat": 1585710286, # Issued at
- "nbf": 1585798372, # Not valid before
- "exp": 1585713886, # Expire at
- "sub": "job_1212", # Subject (job id)
- "namespace_id": "1", # Use this to scope to group or user level namespace by id
- "namespace_path": "mygroup", # Use this to scope to group or user level namespace by path
- "project_id": "22", #
- "project_path": "mygroup/myproject", #
- "user_id": "42", # Id of the user executing the job
- "user_login": "myuser", # GitLab @username
- "user_email": "myuser@example.com", # Email of the user executing the job
- "pipeline_id": "1212", #
- "pipeline_source": "web", # Pipeline source, see: https://docs.gitlab.com/ee/ci/yaml/#common-if-clauses-for-rules
- "job_id": "1212", #
- "ref": "auto-deploy-2020-04-01", # Git ref for this job
- "ref_type": "branch", # Git ref type, branch or tag
- "ref_protected": "true", # true if this git ref is protected, false otherwise
- "environment": "production", # Environment this job deploys to, if present (GitLab 13.9 and later)
- "environment_protected": "true" # true if deployed environment is protected, false otherwise (GitLab 13.9 and later)
+ "jti": "c82eeb0c-5c6f-4a33-abf5-4c474b92b558",
+ "iss": "gitlab.example.com",
+ "iat": 1585710286,
+ "nbf": 1585798372,
+ "exp": 1585713886,
+ "sub": "job_1212",
+ "namespace_id": "1",
+ "namespace_path": "mygroup",
+ "project_id": "22",
+ "project_path": "mygroup/myproject",
+ "user_id": "42",
+ "user_login": "myuser",
+ "user_email": "myuser@example.com",
+ "pipeline_id": "1212",
+ "pipeline_source": "web",
+ "job_id": "1212",
+ "ref": "auto-deploy-2020-04-01",
+ "ref_type": "branch",
+ "ref_protected": "true",
+ "environment": "production",
+ "environment_protected": "true"
}
```
diff --git a/doc/ci/introduction/index.md b/doc/ci/introduction/index.md
index 780c5cd7762..add47c95051 100644
--- a/doc/ci/introduction/index.md
+++ b/doc/ci/introduction/index.md
@@ -26,7 +26,7 @@ Watch our ["Mastering continuous software development"](https://about.gitlab.com
webcast to learn about continuous methods and how built-in GitLab CI/CD can help you simplify and scale software development.
> - <i class="fa fa-youtube-play youtube" aria-hidden="true"></i>&nbsp;Learn how to [configure CI/CD](https://www.youtube.com/embed/opdLqwz6tcE).
-> - [Make the case for CI/CD in your organization](https://about.gitlab.com/compare/github-actions-alternative/).
+> - [Make the case for CI/CD in your organization](https://about.gitlab.com/devops-tools/github-vs-gitlab/).
> - <i class="fa fa-youtube-play youtube" aria-hidden="true"></i>&nbsp;Learn how [Verizon reduced rebuilds](https://about.gitlab.com/blog/2019/02/14/verizon-customer-story/)
> from 30 days to under 8 hours with GitLab.
diff --git a/doc/ci/pipelines/multi_project_pipelines.md b/doc/ci/pipelines/multi_project_pipelines.md
index 52939e75d4c..e3fe0fd20f5 100644
--- a/doc/ci/pipelines/multi_project_pipelines.md
+++ b/doc/ci/pipelines/multi_project_pipelines.md
@@ -154,6 +154,21 @@ trigger-downstream:
trigger: my/project
```
+You can stop global variables from reaching the downstream pipeline by using the [`inherit` keyword](../yaml/index.md#inherit).
+In this example, the `MY_GLOBAL_VAR` variable is not available in the triggered pipeline:
+
+```yaml
+variables:
+ MY_GLOBAL_VAR: value
+
+trigger-downstream:
+ inherit:
+ variables: false
+ variables:
+ MY_LOCAL_VAR: value
+ trigger: my/project
+```
+
You might want to pass some information about the upstream pipeline using, for
example, predefined variables. In order to do that, you can use interpolation
to pass any variable. For example:
diff --git a/doc/ci/runners/configure_runners.md b/doc/ci/runners/configure_runners.md
index 7f616a85c6a..26703ed5420 100644
--- a/doc/ci/runners/configure_runners.md
+++ b/doc/ci/runners/configure_runners.md
@@ -10,7 +10,7 @@ type: reference
If you have installed your own runners, you can configure and secure them in GitLab.
If you need to configure runners on the machine where you installed GitLab Runner, see
-[the GitLab Runner documentation](https://docs.gitlab.com/runner/configuration).
+[the GitLab Runner documentation](https://docs.gitlab.com/runner/configuration/).
## Manually clear the runner cache
diff --git a/doc/ci/secrets/index.md b/doc/ci/secrets/index.md
index 6145a953571..7fbc3448d4e 100644
--- a/doc/ci/secrets/index.md
+++ b/doc/ci/secrets/index.md
@@ -8,6 +8,7 @@ type: concepts, howto
# Using external secrets in CI
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/218746) in GitLab 13.4 and GitLab Runner 13.4.
+> - `file` setting [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/250695) in GitLab 14.1 and GitLab Runner 14.1.
Secrets represent sensitive information your CI job needs to complete work. This
sensitive information can be items like API tokens, database credentials, or private keys.
@@ -116,6 +117,18 @@ After GitLab fetches the secret from Vault, the value is saved in a temporary fi
The path to this file is stored in a CI/CD variable named `DATABASE_PASSWORD`,
similar to [variables of type `file`](../variables/index.md#cicd-variable-types).
+To overwrite the default behavior, set the `file` option explicitly:
+
+```yaml
+secrets:
+ DATABASE_PASSWORD:
+ vault: production/db/password@ops
+ file: false
+```
+
+In this example, the secret value is put directly in the `DATABASE_PASSWORD` variable
+instead of pointing to a file that holds it.
+
For more information about the supported syntax, read the
[`.gitlab-ci.yml` reference](../yaml/index.md#secretsvault).
diff --git a/doc/ci/unit_test_reports.md b/doc/ci/unit_test_reports.md
index 731e658c739..4a8286b3081 100644
--- a/doc/ci/unit_test_reports.md
+++ b/doc/ci/unit_test_reports.md
@@ -40,7 +40,7 @@ Consider the following workflow:
## How it works
-First, GitLab Runner uploads all [JUnit report format XML files](https://www.ibm.com/support/knowledgecenter/en/SSQ2R2_14.1.0/com.ibm.rsar.analysis.codereview.cobol.doc/topics/cac_useresults_junit.html)
+First, GitLab Runner uploads all [JUnit report format XML files](https://www.ibm.com/docs/en/adfz/developer-for-zos/14.1.0?topic=formats-junit-xml-format)
as [artifacts](yaml/index.md#artifactsreportsjunit) to GitLab. Then, when you visit a merge request, GitLab starts
comparing the head and base branch's JUnit report format XML files, where:
diff --git a/doc/ci/yaml/index.md b/doc/ci/yaml/index.md
index f5f7d427cd9..0ce11d4853c 100644
--- a/doc/ci/yaml/index.md
+++ b/doc/ci/yaml/index.md
@@ -3113,7 +3113,7 @@ There are a couple of exceptions to the [original dotenv rules](https://github.c
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/20390) in GitLab 11.2.
> - Requires GitLab Runner 11.2 and above.
-The `junit` report collects [JUnit report format XML files](https://www.ibm.com/support/knowledgecenter/en/SSQ2R2_14.1.0/com.ibm.rsar.analysis.codereview.cobol.doc/topics/cac_useresults_junit.html)
+The `junit` report collects [JUnit report format XML files](https://www.ibm.com/docs/en/adfz/developer-for-zos/14.1.0?topic=formats-junit-xml-format)
as artifacts. Although JUnit was originally developed in Java, there are many
third party ports for other
languages like JavaScript, Python, Ruby, and so on.
@@ -4230,7 +4230,7 @@ variables.
#### `secrets:vault` **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/28321) in GitLab 13.4.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/28321) in GitLab 13.4 and GitLab Runner 13.4.
Use `vault` to specify secrets provided by [Hashicorp's Vault](https://www.vaultproject.io/).
@@ -4269,6 +4269,31 @@ job:
field: password
```
+#### `secrets:file` **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/250695) in GitLab 14.1 and GitLab Runner 14.1.
+
+By default, the secret is passed to the job context as a variable of type
+[`file`](../variables/index.md#cicd-variable-types). The value of the
+secret is stored in a file and the variable `DATABASE_PASSWORD` contains a path to the file.
+
+However, some software does not work with file variables and might require the secret value to be stored
+directly in the environment variable. For that case, define a `file` setting:
+
+```yaml
+job:
+ secrets:
+ DATABASE_PASSWORD:
+ vault: production/db/password@ops
+ file: false
+```
+
+When you set `file: false`, no files are created for that variable. It contains the secret
+itself instead.
+
+The `file` is a setting of the secret, so it belongs directly under the variable
+name level and not in the `vault` section.
+
### `pages`
Use `pages` to upload static content to GitLab. The content
diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md
index ed00149e7a1..75ab8359d0e 100644
--- a/doc/development/api_graphql_styleguide.md
+++ b/doc/development/api_graphql_styleguide.md
@@ -207,7 +207,7 @@ Further reading:
- [GraphQL Best Practices Guide](https://graphql.org/learn/best-practices/#nullability).
- GraphQL documentation on [Object types and fields](https://graphql.org/learn/schema/#object-types-and-fields).
- [GraphQL Best Practices Guide](https://graphql.org/learn/best-practices/#nullability)
-- [Using nullability in GraphQL](https://www.apollographql.com/blog/using-nullability-in-graphql-2254f84c4ed7)
+- [Using nullability in GraphQL](https://www.apollographql.com/blog/graphql/basics/using-nullability-in-graphql/)
### Exposing Global IDs
diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md
index 840434ebbc3..8eb2e7022e7 100644
--- a/doc/development/contributing/issue_workflow.md
+++ b/doc/development/contributing/issue_workflow.md
@@ -149,7 +149,7 @@ and `~"group::knowledge"` is picked up by someone in the Access group of the Pla
the issue should be relabeled as `~"group::access"` while keeping the original
`~"devops::create"` unchanged.
-We also use stage and group labels to help measure our [merge request rates](https://about.gitlab.com/handbook/engineering/merge-request-rate/).
+We also use stage and group labels to help measure our [merge request rates](https://about.gitlab.com/handbook/engineering/metrics/#merge-request-rate).
Please read [Stage and Group labels](https://about.gitlab.com/handbook/engineering/metrics/#stage-and-group-labels) for more information on how the labels are used in this context.
### Category labels
diff --git a/doc/development/contributing/style_guides.md b/doc/development/contributing/style_guides.md
index 8b54d3566ae..5a54e3afbea 100644
--- a/doc/development/contributing/style_guides.md
+++ b/doc/development/contributing/style_guides.md
@@ -152,8 +152,12 @@ reduces the aforementioned [bike-shedding](https://en.wiktionary.org/wiki/bikesh
To that end, we encourage creation of new RuboCop rules in the codebase.
+We currently maintain Cops across several Ruby code bases, and not all of them are
+specific to the GitLab application.
When creating a new cop that could be applied to multiple applications, we encourage you
to add it to our [GitLab Styles](https://gitlab.com/gitlab-org/gitlab-styles) gem.
+If the Cop targets rules that only apply to the main GitLab application,
+it should be added to [GitLab](https://gitlab.com/gitlab-org/gitlab) instead.
### Resolving RuboCop exceptions
diff --git a/doc/development/documentation/site_architecture/index.md b/doc/development/documentation/site_architecture/index.md
index d410d77a1a0..a1e08a9c19b 100644
--- a/doc/development/documentation/site_architecture/index.md
+++ b/doc/development/documentation/site_architecture/index.md
@@ -8,7 +8,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
The [`gitlab-docs`](https://gitlab.com/gitlab-org/gitlab-docs) project hosts
the repository which is used to generate the GitLab documentation website and
-is deployed to <https://docs.gitlab.com>. It uses the [Nanoc](https://nanoc.ws/)
+is deployed to <https://docs.gitlab.com>. It uses the [Nanoc](https://nanoc.app/)
static site generator.
## Architecture
@@ -146,7 +146,7 @@ Read more about the [deployment process](deployment_process.md).
The easiest way to achieve something similar to
[Jekyll's data files](https://jekyllrb.com/docs/datafiles/) in Nanoc is by
-using the [`@items`](https://nanoc.ws/doc/reference/variables/#items-and-layouts)
+using the [`@items`](https://nanoc.app/doc/reference/variables/#items-and-layouts)
variable.
The data file must be placed inside the `content/` directory and then it can
diff --git a/doc/development/documentation/structure.md b/doc/development/documentation/structure.md
index 4fe3458b909..ba550184892 100644
--- a/doc/development/documentation/structure.md
+++ b/doc/development/documentation/structure.md
@@ -170,17 +170,22 @@ It does not cover core conceptual information.
Tutorials should be in this format:
```markdown
-# Title (starts with "Tutorial:" followed by an active verb, like "Tutorial: create a website")
+# Title (starts with "Tutorial:" followed by an active verb, like "Tutorial: Create a website")
A paragraph that explains what the tutorial does, and the expected outcome.
+To create a website:
+
+- [Step 1: Do the first task](#do-the-first-task)
+- [Step 2: Do the second task](#do-the-second-task)
+
Prerequisites (optional):
- Thing 1
- Thing 2
- Thing 3
-## Step 1: do the first task
+## Do the first task
To do step 1:
@@ -188,7 +193,9 @@ To do step 1:
2. Another step.
3. Another step.
-## Step 2: do the second task
+## Do the second task
+
+Before you begin, make sure you have [done the first task](#do-the-first-task).
To do step 2:
diff --git a/doc/development/fe_guide/accessibility.md b/doc/development/fe_guide/accessibility.md
index 15818941b24..0cd7cf58b58 100644
--- a/doc/development/fe_guide/accessibility.md
+++ b/doc/development/fe_guide/accessibility.md
@@ -510,7 +510,7 @@ Proper research and testing should be done to ensure compliance with [WCAG](http
### Viewing the browser accessibility tree
- [Firefox DevTools guide](https://developer.mozilla.org/en-US/docs/Tools/Accessibility_inspector#accessing_the_accessibility_inspector)
-- [Chrome DevTools guide](https://developers.google.com/web/tools/chrome-devtools/accessibility/reference#pane)
+- [Chrome DevTools guide](https://developer.chrome.com/docs/devtools/accessibility/reference#pane)
### Browser extensions
diff --git a/doc/development/fe_guide/content_editor.md b/doc/development/fe_guide/content_editor.md
index cc3d8166c5e..6cf4076bf83 100644
--- a/doc/development/fe_guide/content_editor.md
+++ b/doc/development/fe_guide/content_editor.md
@@ -54,7 +54,7 @@ the status of the ongoing development for CommonMark and GitLab Flavored Markdow
To include the Content Editor in your feature, import the `createContentEditor` factory
function and the `ContentEditor` Vue component. `createContentEditor` sets up an instance
-of [tiptap's Editor class](https://www.tiptap.dev/api/editor) with all the necessary
+of [tiptap's Editor class](https://www.tiptap.dev/api/editor/) with all the necessary
extensions to support editing GitLab Flavored Markdown content. It also creates
a Markdown serializer that allows exporting tiptap's document format to Markdown.
@@ -90,7 +90,7 @@ export default {
try {
await this.contentEditor.setSerializedContent(this.content);
} catch (e) {
- createFlash({
+ createFlash({
message: __('There was an error loading content in the editor'), error: e
});
}
diff --git a/doc/development/fe_guide/performance.md b/doc/development/fe_guide/performance.md
index c6784f3bb5f..e7f347554d7 100644
--- a/doc/development/fe_guide/performance.md
+++ b/doc/development/fe_guide/performance.md
@@ -255,7 +255,7 @@ We support two types of prefetching for the chunks:
- The [`prefetch` link type](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/prefetch)
is used to prefetch a chunk for the future navigation
-- The [`preload` link type](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/preloadh)
+- The [`preload` link type](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/preload)
is used to prefetch a chunk that is crucial for the current navigation but is not
discovered until later in the rendering process
@@ -454,5 +454,5 @@ General tips:
- [WebPage Test](https://www.webpagetest.org) for testing site loading time and size.
- [Google PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) grades web pages and provides feedback to improve the page.
-- [Profiling with Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/)
+- [Profiling with Chrome DevTools](https://developer.chrome.com/docs/devtools/)
- [Browser Diet](https://browserdiet.com/) is a community-built guide that catalogues practical tips for improving web page performance.
diff --git a/doc/development/fe_guide/storybook.md b/doc/development/fe_guide/storybook.md
index eefca906837..1bdd1f83740 100644
--- a/doc/development/fe_guide/storybook.md
+++ b/doc/development/fe_guide/storybook.md
@@ -42,7 +42,7 @@ To add a story:
│ ├─ todo_button.stories.js
```
-1. Write the story as per the [official Storybook instructions](https://storybook.js.org/docs/vue/writing-stories/introduction)
+1. Write the story as per the [official Storybook instructions](https://storybook.js.org/docs/vue/writing-stories/introduction/)
Notes:
- Specify the `title` field of the story as the component's file path from the `javascripts/` directory,
diff --git a/doc/development/fe_guide/style/scss.md b/doc/development/fe_guide/style/scss.md
index c0817626360..e05ef7c9f5d 100644
--- a/doc/development/fe_guide/style/scss.md
+++ b/doc/development/fe_guide/style/scss.md
@@ -139,7 +139,7 @@ To check if any warnings are produced by your changes, run `yarn lint:stylelint`
catch any warnings.
If the Rake task is throwing warnings you don't understand, SCSS Lint's
-documentation includes [a full list of their rules](https://stylelint.io/user-guide/rules/list).
+documentation includes [a full list of their rules](https://stylelint.io/user-guide/rules/list/).
### Fixing issues
diff --git a/doc/development/go_guide/index.md b/doc/development/go_guide/index.md
index dab25711a59..72435e8f503 100644
--- a/doc/development/go_guide/index.md
+++ b/doc/development/go_guide/index.md
@@ -436,7 +436,7 @@ and the version being used for [CNG](https://gitlab.com/gitlab-org/build/cng/blo
### Updating Go version
-We should always use a [supported version](https://golang.org/doc/devel/release.html#policy)
+We should always use a [supported version](https://golang.org/doc/devel/release#policy)
of Go, i.e., one of the three most recent minor releases, and should always use
the most recent patch-level for that version, as it may contain security fixes.
diff --git a/doc/development/snowplow/index.md b/doc/development/snowplow/index.md
index e0bb0db2e6f..41f8e54cbd8 100644
--- a/doc/development/snowplow/index.md
+++ b/doc/development/snowplow/index.md
@@ -16,9 +16,9 @@ For more information about Product Intelligence, see:
More useful links:
- [Product Intelligence Direction](https://about.gitlab.com/direction/product-intelligence/)
-- [Data Analysis Process](https://about.gitlab.com/handbook/business-ops/data-team/#data-analysis-process/)
-- [Data for Product Managers](https://about.gitlab.com/handbook/business-ops/data-team/programs/data-for-product-managers/)
-- [Data Infrastructure](https://about.gitlab.com/handbook/business-ops/data-team/platform/infrastructure/)
+- [Data Analysis Process](https://about.gitlab.com/handbook/business-technology/data-team/#data-analysis-process/)
+- [Data for Product Managers](https://about.gitlab.com/handbook/business-technology/data-team/programs/data-for-product-managers/)
+- [Data Infrastructure](https://about.gitlab.com/handbook/business-technology/data-team/platform/infrastructure/)
## What is Snowplow
@@ -158,7 +158,7 @@ Snowplow JS adds many [web-specific parameters](https://docs.snowplowanalytics.c
## Implementing Snowplow JS (Frontend) tracking
-GitLab provides `Tracking`, an interface that wraps the [Snowplow JavaScript Tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers) for tracking custom events. The simplest way to use it is to add `data-` attributes to clickable elements and dropdowns. There is also a Vue mixin (exposing a `track` method), and the static method `Tracking.event`. Each of these requires at minimum a `category` and an `action`. You can provide additional [Structured event taxonomy](#structured-event-taxonomy) properties along with an `extra` object that accepts key-value pairs.
+GitLab provides `Tracking`, an interface that wraps the [Snowplow JavaScript Tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/) for tracking custom events. The simplest way to use it is to add `data-` attributes to clickable elements and dropdowns. There is also a Vue mixin (exposing a `track` method), and the static method `Tracking.event`. Each of these requires at minimum a `category` and an `action`. You can provide additional [Structured event taxonomy](#structured-event-taxonomy) properties along with an `extra` object that accepts key-value pairs.
| field | type | default value | description |
|:-----------|:-------|:---------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -442,7 +442,7 @@ describe('MyFormTracking', () => {
## Implementing Snowplow Ruby (Backend) tracking
-GitLab provides `Gitlab::Tracking`, an interface that wraps the [Snowplow Ruby Tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/ruby-tracker) for tracking custom events.
+GitLab provides `Gitlab::Tracking`, an interface that wraps the [Snowplow Ruby Tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/ruby-tracker/) for tracking custom events.
Custom event tracking and instrumentation can be added by directly calling the `GitLab::Tracking.event` class method, which accepts the following arguments:
@@ -481,7 +481,7 @@ https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#test-sn
### Performance
-We use the [AsyncEmitter](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/ruby-tracker/emitters/#the-asyncemitter-class) when tracking events, which allows for instrumentation calls to be run in a background thread. This is still an active area of development.
+We use the [AsyncEmitter](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/ruby-tracker//emitters/#the-asyncemitter-class) when tracking events, which allows for instrumentation calls to be run in a background thread. This is still an active area of development.
## Developing and testing Snowplow
diff --git a/doc/development/testing_guide/frontend_testing.md b/doc/development/testing_guide/frontend_testing.md
index 6759d11d936..d8f3a18577f 100644
--- a/doc/development/testing_guide/frontend_testing.md
+++ b/doc/development/testing_guide/frontend_testing.md
@@ -221,8 +221,8 @@ When it comes to querying DOM elements in your tests, it is best to uniquely and
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 the [`byRole`](https://testing-library.com/docs/queries/byrole) query
-as it helps enforce accessibility best practices. `findByRole` and the other [DOM Testing Library queries](https://testing-library.com/docs/queries/about) are available when using [`shallowMountExtended` or `mountExtended`](#shallowmountextended-and-mountextended).
+When selecting by text it is best to use the [`byRole`](https://testing-library.com/docs/queries/byrole/) query
+as it helps enforce accessibility best practices. `findByRole` and the other [DOM Testing Library queries](https://testing-library.com/docs/queries/about/) are available when using [`shallowMountExtended` or `mountExtended`](#shallowmountextended-and-mountextended).
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
rather than dealing with the complexity of a child component's behavior.
@@ -1147,7 +1147,7 @@ Both functions run `callback` on the next tick after the requests finish (using
### `shallowMountExtended` and `mountExtended`
The `shallowMountExtended` and `mountExtended` utilities provide you with the ability to perform
-any of the available [DOM Testing Library queries](https://testing-library.com/docs/queries/about)
+any of the available [DOM Testing Library queries](https://testing-library.com/docs/queries/about/)
by prefixing them with `find` or `findAll`.
```javascript
diff --git a/doc/development/usage_ping/index.md b/doc/development/usage_ping/index.md
index eae22b10a97..89c0434e170 100644
--- a/doc/development/usage_ping/index.md
+++ b/doc/development/usage_ping/index.md
@@ -18,9 +18,9 @@ For more information about Product Intelligence, see:
More links:
- [Product Intelligence Direction](https://about.gitlab.com/direction/product-intelligence/)
-- [Data Analysis Process](https://about.gitlab.com/handbook/business-ops/data-team/#data-analysis-process/)
-- [Data for Product Managers](https://about.gitlab.com/handbook/business-ops/data-team/programs/data-for-product-managers/)
-- [Data Infrastructure](https://about.gitlab.com/handbook/business-ops/data-team/platform/infrastructure/)
+- [Data Analysis Process](https://about.gitlab.com/handbook/business-technology/data-team/#data-analysis-process/)
+- [Data for Product Managers](https://about.gitlab.com/handbook/business-technology/data-team/programs/data-for-product-managers/)
+- [Data Infrastructure](https://about.gitlab.com/handbook/business-technology/data-team/platform/infrastructure/)
## What is Usage Ping?
diff --git a/doc/index.md b/doc/index.md
index ed95b40130b..cb8b0e67f7d 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -67,7 +67,7 @@ We have the following documentation to rapidly uplift your GitLab knowledge:
| Topic | Description |
|:--------------------------------------------------------------------------------------------------|:------------|
| [GitLab basics guides](gitlab-basics/index.md) | Start working on the command line and with GitLab. |
-| [GitLab workflow overview](https://about.gitlab.com/topics/version-control/what-is-gitlab-workflow/) | Enhance your workflow with the best of GitLab Workflow. |
+| [What is GitLab Flow?](https://about.gitlab.com/topics/version-control/what-is-gitlab-flow/) | Enhance your workflow with the best of GitLab Flow. |
| [Get started with GitLab CI/CD](ci/quick_start/index.md) | Quickly implement GitLab CI/CD. |
| [Auto DevOps](topics/autodevops/index.md) | Learn more about Auto DevOps in GitLab. |
| [GitLab Markdown](user/markdown.md) | Advanced formatting system (GitLab Flavored Markdown). |
diff --git a/doc/install/azure/index.md b/doc/install/azure/index.md
index 1d31337fc39..9d9d06b2206 100644
--- a/doc/install/azure/index.md
+++ b/doc/install/azure/index.md
@@ -226,7 +226,7 @@ The credentials are:
- Username: `root`
- Password: the password is automatically created, and there are [two ways to
- find it](https://docs.bitnami.com/azure/faq/get-started/find-credentials).
+ find it](https://docs.bitnami.com/azure/faq/get-started/find-credentials/).
After signing in, be sure to immediately [change the password](../../user/profile/index.md#change-your-password).
diff --git a/doc/install/google_cloud_platform/index.md b/doc/install/google_cloud_platform/index.md
index 958f3e18c62..bda98ead1f5 100644
--- a/doc/install/google_cloud_platform/index.md
+++ b/doc/install/google_cloud_platform/index.md
@@ -12,7 +12,7 @@ This guide will help you install GitLab on a [Google Cloud Platform (GCP)](https
NOTE:
Google provides a whitepaper for [deploying production-ready GitLab on
-Google Kubernetes Engine](https://cloud.google.com/solutions/deploying-production-ready-gitlab-on-gke),
+Google Kubernetes Engine](https://cloud.google.com/architecture/deploying-production-ready-gitlab-on-gke),
including all steps and external resource configuration. These are an alternative to using a GCP VM, and use
the [Cloud native GitLab Helm chart](https://docs.gitlab.com/charts/).
diff --git a/doc/install/openshift_and_gitlab/index.md b/doc/install/openshift_and_gitlab/index.md
index 31c3ca60b84..b13293eccfc 100644
--- a/doc/install/openshift_and_gitlab/index.md
+++ b/doc/install/openshift_and_gitlab/index.md
@@ -23,8 +23,6 @@ In this tutorial, we will see how to deploy GitLab in OpenShift using the GitLab
official Docker image while getting familiar with the web interface and CLI
tools that help us achieve our goal.
-For a video demonstration on installing GitLab on OpenShift, check the article [In 13 minutes from Kubernetes to a complete application development tool](https://about.gitlab.com/blog/2016/11/14/idea-to-production/).
-
## Prerequisites
WARNING:
diff --git a/doc/install/postgresql_extensions.md b/doc/install/postgresql_extensions.md
index 80bbb0671b9..99c85f4f808 100644
--- a/doc/install/postgresql_extensions.md
+++ b/doc/install/postgresql_extensions.md
@@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
This guide documents how to manage PostgreSQL extensions for installations with an external
PostgreSQL database.
-The following extensions must be loaded into the GitLab database:
+You must load the following extensions into the main GitLab database (defaults to `gitlabhq_production`):
| Extension | Minimum GitLab version |
|--------------|------------------------|
@@ -17,6 +17,13 @@ The following extensions must be loaded into the GitLab database:
| `btree_gist` | 13.1 |
| `plpgsql` | 11.7 |
+If you are using [GitLab Geo](https://about.gitlab.com/solutions/geo/), you must load the following
+extensions into all secondary tracking databases (defaults to `gitlabhq_geo_production`):
+
+| Extension | Minimum GitLab version |
+|--------------|------------------------|
+| `plpgsql` | 9.0 |
+
In order to install extensions, PostgreSQL requires the user to have superuser privileges.
Typically, the GitLab database user is not a superuser. Therefore, regular database migrations
cannot be used in installing extensions and instead, extensions have to be installed manually
diff --git a/doc/integration/github.md b/doc/integration/github.md
index 4d8adfe42f1..7459691831c 100644
--- a/doc/integration/github.md
+++ b/doc/integration/github.md
@@ -22,7 +22,7 @@ your website could enable the covert redirect attack.
## Enabling GitHub OAuth
-To enable the GitHub OmniAuth provider, you need an OAuth 2 Client ID and Client Secret from GitHub. To get these credentials, sign into GitHub and follow their procedure for [Creating an OAuth App](https://docs.github.com/en/developers/apps/creating-an-oauth-app).
+To enable the GitHub OmniAuth provider, you need an OAuth 2 Client ID and Client Secret from GitHub. To get these credentials, sign into GitHub and follow their procedure for [Creating an OAuth App](https://docs.github.com/en/developers/apps/building-oauth-apps/creating-an-oauth-app).
When you create an OAuth 2 app in GitHub, you need the following information:
diff --git a/doc/operations/feature_flags.md b/doc/operations/feature_flags.md
index 326d026f23f..a8686e2f4b7 100644
--- a/doc/operations/feature_flags.md
+++ b/doc/operations/feature_flags.md
@@ -80,7 +80,7 @@ You can apply a feature flag strategy across multiple environments, without defi
the strategy multiple times.
GitLab Feature Flags use [Unleash](https://docs.getunleash.io/) as the feature flag
-engine. In Unleash, there are [strategies](https://docs.getunleash.io/docs/activation_strategy)
+engine. In Unleash, there are [strategies](https://docs.getunleash.io/activation_strategy/)
for granular feature flag controls. GitLab Feature Flags can have multiple strategies,
and the supported strategies are:
@@ -95,7 +95,7 @@ and clicking **{pencil}** (edit).
### All users
-Enables the feature for all users. It uses the [`default`](https://docs.getunleash.io/docs/activation_strategy#default)
+Enables the feature for all users. It uses the [`default`](https://docs.getunleash.io/activation_strategy/#default)
Unleash activation strategy.
### Percent Rollout
@@ -104,7 +104,7 @@ Unleash activation strategy.
Enables the feature for a percentage of page views, with configurable consistency
of behavior. This consistency is also known as stickiness. It uses the
-[`flexibleRollout`](https://docs.getunleash.io/docs/activation_strategy#flexiblerollout)
+[`flexibleRollout`](https://docs.getunleash.io/activation_strategy/#flexiblerollout)
Unleash activation strategy.
You can configure the consistency to be based on:
@@ -133,7 +133,7 @@ Selecting **Random** provides inconsistent application behavior for individual u
### Percent of Users
Enables the feature for a percentage of authenticated users. It uses the Unleash activation strategy
-[`gradualRolloutUserId`](https://docs.getunleash.io/docs/activation_strategy#gradualrolloutuserid).
+[`gradualRolloutUserId`](https://docs.getunleash.io/activation_strategy/#gradualrolloutuserid).
For example, set a value of 15% to enable the feature for 15% of authenticated users.
@@ -155,7 +155,7 @@ ID for the feature to be enabled. See the [Ruby example](#ruby-application-examp
> - [Updated](https://gitlab.com/gitlab-org/gitlab/-/issues/34363) to be defined per environment in GitLab 12.6.
Enables the feature for a list of target users. It is implemented
-using the Unleash [`userWithId`](https://docs.getunleash.io/docs/activation_strategy#userwithid)
+using the Unleash [`userWithId`](https://docs.getunleash.io/activation_strategy/#userwithid)
activation strategy.
Enter user IDs as a comma-separated list of values (for example,
@@ -171,7 +171,7 @@ target users. See the [Ruby example](#ruby-application-example) below.
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/35930) in GitLab 13.1.
Enables the feature for lists of users created [in the Feature Flags UI](#create-a-user-list), or with the [Feature Flag User List API](../api/feature_flag_user_lists.md).
-Similar to [User IDs](#user-ids), it uses the Unleash [`userWithId`](https://docs.getunleash.io/docs/activation_strategy#userwithid)
+Similar to [User IDs](#user-ids), it uses the Unleash [`userWithId`](https://docs.getunleash.io/activation_strategy/#userwithid)
activation strategy.
It's not possible to *disable* a feature for members of a user list, but you can achieve the same
diff --git a/doc/ssh/index.md b/doc/ssh/index.md
index 358323e4ef5..fd95a483344 100644
--- a/doc/ssh/index.md
+++ b/doc/ssh/index.md
@@ -101,7 +101,7 @@ If you do not have an existing SSH key pair, generate a new one.
You can also dedicate the SSH key pair to a [specific host](#configure-ssh-to-point-to-a-different-directory).
-1. Specify a [passphrase](https://www.ssh.com/ssh/passphrase/):
+1. Specify a [passphrase](https://www.ssh.com/ssh/passphrase):
```plaintext
Enter passphrase (empty for no passphrase):
diff --git a/doc/subscriptions/index.md b/doc/subscriptions/index.md
index deb1e05f87b..b6aa2d09770 100644
--- a/doc/subscriptions/index.md
+++ b/doc/subscriptions/index.md
@@ -184,7 +184,7 @@ For qualifying open source projects, the [GitLab for Open Source](https://about.
the top GitLab tier, plus 50,000 CI minutes per month.
You can find more information about the [program requirements](https://about.gitlab.com/solutions/open-source/join/#requirements),
-[renewals](https://about.gitlab.com/solutions/open-source/join/$renewals),
+[renewals](https://about.gitlab.com/solutions/open-source/join/#renewals),
and benefits on the [GitLab for Open Source application page](https://about.gitlab.com/solutions/open-source/join/).
If you have any questions, send an email to `opensource@gitlab.com` for assistance.
diff --git a/doc/topics/autodevops/requirements.md b/doc/topics/autodevops/requirements.md
index 1b3ca07f665..9c330aede17 100644
--- a/doc/topics/autodevops/requirements.md
+++ b/doc/topics/autodevops/requirements.md
@@ -62,7 +62,7 @@ To make full use of Auto DevOps with Kubernetes, you need:
The runners don't need to be installed in the Kubernetes cluster, but the
Kubernetes executor is easy to use and automatically autoscales.
You can configure Docker-based runners to autoscale as well, using
- [Docker Machine](https://docs.gitlab.com/runner/install/autoscaling.html).
+ [Docker Machine](https://docs.gitlab.com/runner/executors/docker_machine.html).
Runners should be registered as [shared runners](../../ci/runners/runners_scope.md#shared-runners)
for the entire GitLab instance, or [specific runners](../../ci/runners/runners_scope.md#specific-runners)
diff --git a/doc/topics/git/index.md b/doc/topics/git/index.md
index 21775044301..c1e766a7c48 100644
--- a/doc/topics/git/index.md
+++ b/doc/topics/git/index.md
@@ -14,7 +14,7 @@ large projects with speed and efficiency.
[GitLab](https://about.gitlab.com) is a Git-based fully integrated platform for
software development. Besides Git's functionalities, GitLab has a lot of
powerful [features](https://about.gitlab.com/features/) to enhance your
-[workflow](https://about.gitlab.com/topics/version-control/what-is-gitlab-workflow/).
+[workflow](https://about.gitlab.com/topics/version-control/what-is-gitlab-flow/).
We've gathered some resources to help you to get the best from Git with GitLab.
diff --git a/doc/user/clusters/agent/index.md b/doc/user/clusters/agent/index.md
index 03fc1f6cb98..e7cc9b2e680 100644
--- a/doc/user/clusters/agent/index.md
+++ b/doc/user/clusters/agent/index.md
@@ -496,9 +496,17 @@ This error is shown if there are some connectivity issues between the address
specified as `kas-address`, and your Agent pod. To fix it, make sure that you
specified the `kas-address` correctly.
+```json
+{"level":"error","time":"2021-06-25T21:15:45.335Z","msg":"Reverse tunnel","mod_name":"reverse_tunnel","error":"Connect(): rpc error: code = Unavailable desc = connection error: desc= \"transport: Error while dialing failed to WebSocket dial: expected handshake response status code 101 but got 301\""}
+```
+
+This error occurs if the `kas-address` doesn't include a trailing slash. To fix it, make sure that the
+`wss` or `ws` URL ends with a training slash, such as `wss://GitLab.host.tld:443/-/kubernetes-agent/`
+or `ws://GitLab.host.tld:80/-/kubernetes-agent/`.
+
### Agent logs - ValidationError(Deployment.metadata)
-```plaintext
+```json
{"level":"info","time":"2020-10-30T08:56:54.329Z","msg":"Synced","project_id":"root/kas-manifest001","resource_key":"apps/Deployment/kas-test001/nginx-deployment","sync_result":"error validating data: [ValidationError(Deployment.metadata): unknown field \"replicas\" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta, ValidationError(Deployment.metadata): unknown field \"selector\" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta, ValidationError(Deployment.metadata): unknown field \"template\" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta]"}
```
diff --git a/doc/user/clusters/applications.md b/doc/user/clusters/applications.md
index e23a08f076d..5d247f04d3b 100644
--- a/doc/user/clusters/applications.md
+++ b/doc/user/clusters/applications.md
@@ -440,8 +440,8 @@ cilium:
The `clusterType` variable enables the recommended Helm variables for a corresponding cluster type.
You can check the recommended variables for each cluster type in the official documentation:
-- [Google GKE](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-gke/#deploy-cilium)
-- [AWS EKS](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-eks/#deploy-cilium)
+- [Google GKE](https://docs.cilium.io/en/v1.8/gettingstarted/k8s-install-gke/#deploy-cilium)
+- [AWS EKS](https://docs.cilium.io/en/v1.8/gettingstarted/k8s-install-eks/#deploy-cilium)
Do not use `clusterType` for sandbox environments like [Minikube](https://minikube.sigs.k8s.io/docs/).
diff --git a/doc/user/clusters/integrations.md b/doc/user/clusters/integrations.md
index 6c87efaf5a3..dc8e75edf68 100644
--- a/doc/user/clusters/integrations.md
+++ b/doc/user/clusters/integrations.md
@@ -88,7 +88,7 @@ To enable the Prometheus integration for your cluster:
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61077) in GitLab 13.12.
You can integrate your cluster with [Elastic
-Stack](https://www.elastic.co/elastic-stack) to index and [query your pod
+Stack](https://www.elastic.co/elastic-stack/) to index and [query your pod
logs](../project/clusters/kubernetes_pod_logs.md).
### Elastic Stack Prerequisites
diff --git a/doc/user/compliance/license_compliance/index.md b/doc/user/compliance/license_compliance/index.md
index 8f978dfd0c7..ba7cd333f42 100644
--- a/doc/user/compliance/license_compliance/index.md
+++ b/doc/user/compliance/license_compliance/index.md
@@ -74,7 +74,7 @@ The reported licenses might be incomplete or inaccurate.
|------------|---------------------------------------------------------------------------------------------------------------|
| JavaScript | [Yarn](https://yarnpkg.com/) |
| Go | `go get`, `gvt`, `glide`, `dep`, `trash`, `govendor` |
-| Erlang | [Rebar](https://www.rebar3.org/) |
+| Erlang | [Rebar](https://rebar3.org/) |
| Objective-C, Swift | [Carthage](https://github.com/Carthage/Carthage), [CocoaPods](https://cocoapods.org/) v0.39 and below |
| Elixir | [Mix](https://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html) |
| C++/C | [Conan](https://conan.io/) |
@@ -857,4 +857,4 @@ root@6abb70e9f193:~#
```
NOTE:
-Selecting a custom version of [Mono](https://www.mono-project.com/) or [.NET Core](https://dotnet.microsoft.com/download/dotnet-core) is currently not supported.
+Selecting a custom version of [Mono](https://www.mono-project.com/) or [.NET Core](https://dotnet.microsoft.com/download/dotnet) is currently not supported.
diff --git a/doc/user/index.md b/doc/user/index.md
index ccc4ea05f15..8fc91ec95ea 100644
--- a/doc/user/index.md
+++ b/doc/user/index.md
@@ -31,7 +31,7 @@ For more information, see [All GitLab Features](https://about.gitlab.com/feature
To get familiar with the concepts needed to develop code on GitLab, read the following articles:
- [Demo: Mastering Code Review With GitLab](https://about.gitlab.com/blog/2017/03/17/demo-mastering-code-review-with-gitlab/).
-- [GitLab Workflow: An Overview](https://about.gitlab.com/topics/version-control/what-is-gitlab-workflow/#gitlab-workflow-a-use-case-scenario).
+- [What is GitLab Flow?](https://about.gitlab.com/topics/version-control/what-is-gitlab-flow/).
- [Tutorial: It's all connected in GitLab](https://about.gitlab.com/blog/2016/03/08/gitlab-tutorial-its-all-connected/): an overview on code collaboration with GitLab.
- [Trends in Version Control Land: Microservices](https://about.gitlab.com/blog/2016/08/16/trends-in-version-control-land-microservices/).
- [Trends in Version Control Land: Innersourcing](https://about.gitlab.com/topics/version-control/what-is-innersource/).
diff --git a/doc/user/markdown.md b/doc/user/markdown.md
index 809eaf1b8fd..2966c35e771 100644
--- a/doc/user/markdown.md
+++ b/doc/user/markdown.md
@@ -31,7 +31,7 @@ and the [main GitLab website](https://about.gitlab.com) use [Kramdown](https://k
You should not view this page in the documentation, but instead [view these styles as they appear on GitLab](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/user/markdown.md).
GitLab Flavored Markdown extends the [CommonMark specification](https://spec.commonmark.org/current/).
-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/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax).
## Where you can use GitLab Flavored Markdown
diff --git a/doc/user/packages/go_proxy/index.md b/doc/user/packages/go_proxy/index.md
index 36348fcde18..0c04c4a23d0 100644
--- a/doc/user/packages/go_proxy/index.md
+++ b/doc/user/packages/go_proxy/index.md
@@ -142,7 +142,7 @@ the following documentation:
- [Dependency Management in Go](../../../development/go_guide/dependencies.md)
- [Go Modules Reference](https://golang.org/ref/mod)
- [Documentation (`golang.org`)](https://golang.org/doc/)
-- [Learn (`learn.go.dev`)](https://learn.go.dev/)
+- [Learn (`go.dev/learn`)](https://go.dev/learn/)
### Set environment variables
diff --git a/doc/user/packages/npm_registry/index.md b/doc/user/packages/npm_registry/index.md
index 3ce5f9cea02..abac38af065 100644
--- a/doc/user/packages/npm_registry/index.md
+++ b/doc/user/packages/npm_registry/index.md
@@ -90,7 +90,7 @@ To use the GitLab endpoint for npm packages, choose an option:
- **Project-level**: Use when you have few npm packages and they are not in
the same GitLab group. The [package naming convention](#package-naming-convention) is not enforced at this level.
- Instead, you should use a [scope](https://docs.npmjs.com/cli/v6/using-npm/scope) for your package.
+ Instead, you should use a [scope](https://docs.npmjs.com/cli/v6/using-npm/scope/) for your package.
When you use a scope, the registry URL is [updated](#authenticate-to-the-package-registry) only for that scope.
- **Instance-level**: Use when you have many npm packages in different
GitLab groups or in their own namespace. Be sure to comply with the [package naming convention](#package-naming-convention).
@@ -311,8 +311,7 @@ step-by-step guide and demo project for a complete example.
## Configure the GitLab npm registry with Yarn 2
-You can get started with Yarn 2 by following the documentation at
-[https://yarnpkg.com/getting-started/install](https://yarnpkg.com/getting-started/install).
+You can get started with Yarn 2 by following the [Yarn documentation](https://yarnpkg.com/getting-started/install/).
To publish and install with the project-level npm endpoint, set the following configuration in
`.yarnrc.yml`:
diff --git a/doc/user/packages/nuget_repository/index.md b/doc/user/packages/nuget_repository/index.md
index 61b70a8620a..6c76d5e4067 100644
--- a/doc/user/packages/nuget_repository/index.md
+++ b/doc/user/packages/nuget_repository/index.md
@@ -29,7 +29,7 @@ The required minimum versions are:
- [NuGet CLI 5.1 or later](https://www.nuget.org/downloads). If you have
[Visual Studio](https://visualstudio.microsoft.com/vs/), the NuGet CLI is
probably already installed.
-- Alternatively, you can use [.NET SDK 3.0 or later](https://dotnet.microsoft.com/download/dotnet-core/3.0),
+- Alternatively, you can use [.NET SDK 3.0 or later](https://dotnet.microsoft.com/download/dotnet/3.0),
which installs the NuGet CLI.
- NuGet protocol version 3 or later.
diff --git a/doc/user/permissions.md b/doc/user/permissions.md
index 68ed1720e19..36bd12c3b49 100644
--- a/doc/user/permissions.md
+++ b/doc/user/permissions.md
@@ -204,7 +204,7 @@ The following table lists project permissions available for each role:
1. Applies only to comments on [Design Management](project/issues/design_management.md) designs.
1. Users can only view events based on their individual actions.
1. Project access tokens are supported for self-managed instances on Free and above. They are also
- supported on GitLab SaaS Premium and above (excluding [trial licenses](https://about.gitlab.com/free-trial)).
+ supported on GitLab SaaS Premium and above (excluding [trial licenses](https://about.gitlab.com/free-trial/)).
## Project features permissions
diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md
index cff824836cb..a0efea267f0 100644
--- a/doc/user/project/clusters/index.md
+++ b/doc/user/project/clusters/index.md
@@ -43,7 +43,7 @@ provide a three-month deprecation period before we remove support of a specific
version. The range of supported versions is based on the evaluation of:
- The versions supported by major managed Kubernetes providers.
-- The versions [supported by the Kubernetes community](https://kubernetes.io/docs/setup/release/version-skew-policy/#supported-versions).
+- The versions [supported by the Kubernetes community](https://kubernetes.io/releases/version-skew-policy/#supported-versions).
GitLab supports the following Kubernetes versions, and you can upgrade your
Kubernetes version to any supported version at any time:
diff --git a/doc/user/project/import/github.md b/doc/user/project/import/github.md
index 99b3e1acdcf..5e14e1ab541 100644
--- a/doc/user/project/import/github.md
+++ b/doc/user/project/import/github.md
@@ -60,7 +60,7 @@ For this association to succeed, each GitHub author and assignee in the reposito
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 [public-facing email address](https://docs.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)
+- Have a GitHub account with a [public-facing email address](https://docs.github.com/en/github/setting-up-and-managing-your-github-user-account/managing-email-preferences/setting-your-commit-email-address)
that matches their GitLab account's email address.
NOTE:
diff --git a/doc/user/project/integrations/github.md b/doc/user/project/integrations/github.md
index 4f5640d9fff..019ca9da9f1 100644
--- a/doc/user/project/integrations/github.md
+++ b/doc/user/project/integrations/github.md
@@ -18,7 +18,7 @@ and is automatically configured on [GitHub import](../../../integration/github.m
## Configuration
-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/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token)
with `repo:status` access granted.
Complete these steps on GitHub:
diff --git a/doc/user/project/integrations/hangouts_chat.md b/doc/user/project/integrations/hangouts_chat.md
index 0668e5dd88f..d5dc02d5455 100644
--- a/doc/user/project/integrations/hangouts_chat.md
+++ b/doc/user/project/integrations/hangouts_chat.md
@@ -36,7 +36,7 @@ Select a room and create a webhook:
1. Select **Save**.
1. Copy the webhook URL.
-For further details, see [the Google Chat documentation for configuring webhooks](https://developers.google.com/hangouts/chat/how-tos/webhooks).
+For further details, see [the Google Chat documentation for configuring webhooks](https://developers.google.com/chat/how-tos/webhooks).
## In GitLab
diff --git a/doc/user/project/integrations/webex_teams.md b/doc/user/project/integrations/webex_teams.md
index 05515c58161..2851fe0b299 100644
--- a/doc/user/project/integrations/webex_teams.md
+++ b/doc/user/project/integrations/webex_teams.md
@@ -13,7 +13,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/messaging/applications/incoming-webhooks-cisco-systems-38054).
+1. Go to the [Incoming Webhooks app page](https://apphub.webex.com/applications/incoming-webhooks-cisco-systems-38054).
1. Select **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. Select **ADD**.
diff --git a/doc/user/project/issue_board.md b/doc/user/project/issue_board.md
index 8f71d469e34..f4e4b6cf010 100644
--- a/doc/user/project/issue_board.md
+++ b/doc/user/project/issue_board.md
@@ -97,8 +97,8 @@ For examples of using issue boards along with [epics](../group/epics/index.md),
### Use cases for a single issue board
-With the GitLab Workflow you can discuss proposals in issues, label
-them, and organize and prioritize them with issue boards.
+With the [GitLab Flow](https://about.gitlab.com/topics/version-control/what-is-gitlab-flow/) you can
+discuss proposals in issues, label them, and organize and prioritize them with issue boards.
For example, let's consider this simplified development workflow:
@@ -154,7 +154,7 @@ for them.
NOTE:
For a broader use case, please see the blog post
-[GitLab Workflow, an Overview](https://about.gitlab.com/topics/version-control/what-is-gitlab-workflow/#gitlab-workflow-a-use-case-scenario).
+[What is GitLab Flow?](https://about.gitlab.com/topics/version-control/what-is-gitlab-flow/).
For a real use case example, you can read why
[Codepen decided to adopt issue boards](https://about.gitlab.com/blog/2017/01/27/codepen-welcome-to-gitlab/#project-management-everything-in-one-place)
to improve their workflow with multiple boards.
diff --git a/doc/user/project/repository/repository_mirroring.md b/doc/user/project/repository/repository_mirroring.md
index a251f9751e4..d4f563085a4 100644
--- a/doc/user/project/repository/repository_mirroring.md
+++ b/doc/user/project/repository/repository_mirroring.md
@@ -112,7 +112,7 @@ After the mirror is created, this option can only be modified via the [API](../.
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/github/authenticating-to-github/keeping-your-account-and-data-secure/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. Select **Mirror repository**.
@@ -224,7 +224,7 @@ to browse its content and its activity using the GitLab interface, you can confi
mirror pulling:
1. If you [configured two-factor authentication (2FA)](https://docs.github.com/en/github/authenticating-to-github/securing-your-account-with-two-factor-authentication-2fa)
- for GitHub, create a [personal access token for GitHub](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)
+ for GitHub, create a [personal access token for GitHub](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token)
with the `read_repository` scope. If 2FA is enabled, this personal access
token serves as your GitHub password.
1. In your project, go to **Settings > Repository**, and then expand the
@@ -369,7 +369,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/github/authenticating-to-github/keeping-your-account-and-data-secure/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/)
diff --git a/doc/user/project/working_with_projects.md b/doc/user/project/working_with_projects.md
index a0b20f5c86d..7f1682829da 100644
--- a/doc/user/project/working_with_projects.md
+++ b/doc/user/project/working_with_projects.md
@@ -84,7 +84,7 @@ Built-in templates are project templates that are:
- Developed and maintained in the [`project-templates`](https://gitlab.com/gitlab-org/project-templates)
and [`pages`](https://gitlab.com/pages) groups.
- Released with GitLab.
-- Anyone can contribute a built-in template by following [these steps](https://about.gitlab.com/community/contribute/project-templates).
+- Anyone can contribute a built-in template by following [these steps](https://about.gitlab.com/community/contribute/project-templates/).
To use a built-in template on the **New project** page:
diff --git a/doc/user/snippets.md b/doc/user/snippets.md
index 4b3f9e78c7b..9fb6152168e 100644
--- a/doc/user/snippets.md
+++ b/doc/user/snippets.md
@@ -128,9 +128,9 @@ A single snippet can support up to 10 files, which helps keep related files toge
If you need more than 10 files for your snippet, we recommend you create a
[wiki](project/wiki/index.md) instead. Wikis are available for projects at all
subscription levels, and [groups](project/wiki/index.md#group-wikis) for
-[GitLab Premium](https://about.gitlab.com/pricing).
+[GitLab Premium](https://about.gitlab.com/pricing/).
-Snippets with multiple files display a file count in the [snippet list](http://snippets.gitlab.com/):
+Snippets with multiple files display a file count in the [snippet list](https://gitlab.com/dashboard/snippets):
![Example of snippet](img/snippet_tooltip_v13_10.png)
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 4ed6f7c057a..afb63e39dc2 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -2569,6 +2569,12 @@ msgstr ""
msgid "AdminUsers|Cohorts"
msgstr ""
+msgid "AdminUsers|Confirm user"
+msgstr ""
+
+msgid "AdminUsers|Confirm user %{username}?"
+msgstr ""
+
msgid "AdminUsers|Could not load user group counts. Please refresh the page to try again."
msgstr ""
@@ -3852,6 +3858,9 @@ msgstr ""
msgid "An unexpected error occurred while communicating with the Web Terminal."
msgstr ""
+msgid "An unexpected error occurred while loading the code quality diff."
+msgstr ""
+
msgid "An unexpected error occurred while starting the Web Terminal."
msgstr ""
@@ -30297,9 +30306,6 @@ msgstr ""
msgid "Something went wrong on our end"
msgstr ""
-msgid "Something went wrong on our end while loading the code quality diff."
-msgstr ""
-
msgid "Something went wrong on our end."
msgstr ""
@@ -33543,7 +33549,10 @@ msgstr ""
msgid "This user does not have a pending request"
msgstr ""
-msgid "This user has an unconfirmed email address %{email}. You may force a confirmation."
+msgid "This user has an unconfirmed email address (%{email}). You may force a confirmation."
+msgstr ""
+
+msgid "This user has an unconfirmed email address. You may force a confirmation."
msgstr ""
msgid "This user has been temporarily locked due to excessive number of failed logins. You may manually unlock the account."
diff --git a/qa/qa/page/admin/overview/users/show.rb b/qa/qa/page/admin/overview/users/show.rb
index f455bd31d14..64c31b0b534 100644
--- a/qa/qa/page/admin/overview/users/show.rb
+++ b/qa/qa/page/admin/overview/users/show.rb
@@ -11,7 +11,6 @@ module QA
end
view 'app/views/admin/users/show.html.haml' do
- element :confirm_user_button
element :user_id_content
end
@@ -19,6 +18,11 @@ module QA
element :approve_user_button
end
+ view 'app/helpers/users_helper.rb' do
+ element :confirm_user_button
+ element :confirm_user_confirm_button
+ end
+
def click_impersonate_user
click_element(:impersonate_user_link)
end
@@ -28,9 +32,8 @@ module QA
end
def confirm_user
- accept_confirm do
- click_element :confirm_user_button
- end
+ click_element :confirm_user_button
+ click_element :confirm_user_confirm_button
end
def approve_user
diff --git a/spec/helpers/users_helper_spec.rb b/spec/helpers/users_helper_spec.rb
index 862fd58df04..7fc811c1ac6 100644
--- a/spec/helpers/users_helper_spec.rb
+++ b/spec/helpers/users_helper_spec.rb
@@ -364,4 +364,36 @@ RSpec.describe UsersHelper do
expect(data[:paths]).to match_schema('entities/admin_users_data_attributes_paths')
end
end
+
+ describe '#confirm_user_data' do
+ confirm_admin_user_path = '/admin/users/root/confirm'
+
+ before do
+ allow(helper).to receive(:confirm_admin_user_path).with(user).and_return(confirm_admin_user_path)
+ end
+
+ subject(:confirm_user_data) { helper.confirm_user_data(user) }
+
+ it 'sets `path` key correctly' do
+ expect(confirm_user_data[:path]).to eq(confirm_admin_user_path)
+ end
+
+ it 'sets `modal_attributes` key to valid json' do
+ expect(confirm_user_data[:modal_attributes]).to be_valid_json
+ end
+
+ context 'when `user.unconfirmed_email` is set' do
+ let(:user) { create(:user, unconfirmed_email: 'foo@bar.com') }
+
+ it 'sets `modal_attributes.messageHtml` correctly' do
+ expect(Gitlab::Json.parse(confirm_user_data[:modal_attributes])['messageHtml']).to eq('This user has an unconfirmed email address (foo@bar.com). You may force a confirmation.')
+ end
+ end
+
+ context 'when `user.unconfirmed_email` is not set' do
+ it 'sets `modal_attributes.messageHtml` correctly' do
+ expect(Gitlab::Json.parse(confirm_user_data[:modal_attributes])['messageHtml']).to eq('This user has an unconfirmed email address. You may force a confirmation.')
+ end
+ end
+ end
end