From cf6fc400bd154ac65b3532a7501f248f258a084d Mon Sep 17 00:00:00 2001
From: Aakriti Gupta <agupta@gitlab.com>
Date: Mon, 2 Mar 2020 16:02:20 +0000
Subject: [PATCH] Review updates for HA doc cleanup

Better titles and some grammar updates
---
 Gemfile                                       |   3 +-
 Gemfile.lock                                  |   4 +-
 .../diffs/components/diff_table_cell.vue      |   1 +
 .../javascripts/notes/stores/getters.js       |   2 +
 .../components/notes/system_note.vue          |   4 +-
 app/assets/stylesheets/pages/diff.scss        |   4 -
 app/models/concerns/cache_markdown_field.rb   |  18 +-
 app/models/group.rb                           |  14 +-
 app/models/project.rb                         |   8 +
 ...ource_event_tools.rb => resource_event.rb} |  25 +-
 app/models/resource_label_event.rb            |  18 +-
 app/models/resource_milestone_event.rb        |  12 +-
 app/models/resource_weight_event.rb           |  19 +-
 app/models/snippet.rb                         |   4 +
 app/models/user_bot_type_enums.rb             |   2 +-
 bin/mail_room                                 |   2 +-
 changelogs/unreleased/201771.yml              |   5 +
 changelogs/unreleased/202639.yml              |   5 +
 ...ve-error-messages-in-migration-helpers.yml |   5 +
 ...aching-of-non-markdown-snippet-content.yml |   5 +
 ...er-spec-test-for-error-tracking-web-ui.yml |   5 +
 ...4086-es-bulk-incremental-index-updates.yml |   5 +
 .../unreleased/fix-dependency-proxy-link.yml  |   5 +
 .../georgekoltsov-fix-epic-issues.yml         |   5 +
 changelogs/unreleased/kassio-fix-dev-seed.yml |   5 +
 .../mk-hide-secondary-only-setting.yml        |   5 +
 .../unreleased/sh-cache-ci-variables.yml      |   5 +
 .../sh-disable-line-in-marginalia.yml         |   5 +
 config/gitlab.yml.example                     |   5 +
 config/initializers/0_marginalia.rb           |   8 +-
 config/initializers/1_settings.rb             |   3 +
 config/routes.rb                              |   5 +-
 doc/administration/auth/oidc.md               |   4 +
 doc/administration/auth/okta.md               |  33 +-
 doc/administration/gitaly/index.md            |  36 +-
 .../high_availability/README.md               | 278 +++----------
 .../high_availability/database.md             |  23 +-
 .../high_availability/gitaly.md               |   9 +-
 .../high_availability/object_storage.md       |  28 ++
 doc/administration/high_availability/redis.md |  24 +-
 .../img/AzureAD-basic_SAML.png                | Bin 137104 -> 96021 bytes
 doc/api/README.md                             |  10 +-
 doc/api/pipeline_triggers.md                  |  20 +-
 doc/api/releases/links.md                     |  10 +-
 doc/api/scim.md                               |   2 +-
 doc/api/search.md                             |   2 +-
 doc/api/services.md                           |   2 +-
 doc/api/settings.md                           |   4 +-
 doc/api/sidekiq_metrics.md                    |   8 +-
 doc/api/statistics.md                         |   2 +-
 doc/api/suggestions.md                        |   2 +-
 doc/api/system_hooks.md                       |   8 +-
 doc/api/tags.md                               |  12 +-
 doc/api/templates/dockerfiles.md              |   4 +-
 doc/api/templates/licenses.md                 |   4 +-
 doc/api/todos.md                              |   6 +-
 doc/api/users.md                              | 118 +++---
 doc/api/version.md                            |   2 +-
 doc/api/visual_review_discussions.md          |   2 +-
 doc/api/vulnerability_findings.md             |   2 +-
 doc/api/wikis.md                              |  12 +-
 doc/ci/caching/index.md                       |  13 +-
 doc/ci/variables/README.md                    |   9 +-
 doc/ci/yaml/README.md                         |   5 +-
 doc/development/README.md                     |  16 +-
 doc/development/architecture.md               |   4 +-
 doc/development/code_review.md                |   6 +-
 doc/development/contributing/design.md        |   8 +-
 doc/development/database_review.md            |  12 +-
 doc/development/documentation/index.md        |   2 +-
 .../documentation/site_architecture/index.md  |   4 +-
 doc/development/documentation/styleguide.md   |  25 +-
 doc/development/documentation/workflow.md     |  12 +-
 doc/development/elasticsearch.md              |   6 +-
 doc/development/event_tracking/index.md       |   2 +-
 .../fe_guide/development_process.md           |   2 +-
 doc/development/fe_guide/graphql.md           |   2 +-
 doc/development/fe_guide/vuex.md              |   2 +-
 doc/development/feature_flags/process.md      |   9 +-
 .../new_fe_guide/development/accessibility.md |   2 +-
 doc/development/new_fe_guide/index.md         |   2 +-
 doc/development/packages.md                   |   4 +-
 doc/development/performance.md                |   8 +-
 doc/development/redis.md                      |   2 +-
 doc/development/sidekiq_style_guide.md        |   6 +-
 .../end_to_end/quick_start_guide.md           |  15 +-
 .../testing_guide/testing_levels.md           |   4 +-
 doc/integration/elasticsearch.md              |   2 +-
 doc/integration/omniauth.md                   |   2 +-
 doc/integration/saml.md                       |   6 +-
 doc/user/markdown.md                          |  76 ++--
 doc/user/packages/conan_repository/index.md   |   2 +-
 doc/user/packages/npm_registry/index.md       |   4 +-
 doc/user/packages/nuget_repository/index.md   |   2 +-
 .../account/two_factor_authentication.md      |  15 +
 .../project/clusters/add_remove_clusters.md   |   2 +-
 doc/user/project/deploy_tokens/index.md       |  22 +-
 doc/user/project/description_templates.md     |   2 +-
 doc/user/project/import/github.md             |  11 +-
 doc/user/project/import/index.md              |   2 +-
 doc/user/project/index.md                     |   2 +-
 .../integrations/gitlab_slack_application.md  |   2 +-
 doc/user/project/integrations/hipchat.md      |   2 +-
 doc/user/project/integrations/irker.md        |   2 +-
 doc/user/project/integrations/jira.md         |   6 +-
 .../prometheus_library/kubernetes.md          |   8 +-
 .../project/new_ci_build_permissions_model.md |  10 +-
 doc/user/search/index.md                      |   2 +-
 .../cycle_analytics/components/base.vue       |   5 +
 .../analytics/cycle_analytics/index.js        |   4 +-
 .../components/geo_node_form_capacities.vue   |  17 +-
 .../groups/analytics/cycle_analytics/index.js |   3 +
 .../analytics/analytics_controller.rb         |   4 +-
 .../analytics/cycle_analytics_controller.rb   |  33 ++
 .../contribution_analytics_controller.rb      |  25 +-
 ee/app/helpers/ee/analytics_navbar_helper.rb  |  17 +-
 ee/app/helpers/ee/dashboard_helper.rb         |   4 +-
 ee/app/helpers/ee/groups_helper.rb            |   4 +
 .../elastic/application_versioned_search.rb   |  14 +
 .../concerns/elastic/projects_search.rb       |   8 +
 ee/app/models/ee/user_bot_type_enums.rb       |   2 +-
 ee/app/policies/ee/group_policy.rb            |   2 +-
 .../elastic/process_bookkeeping_service.rb    | 109 ++++++
 ee/app/views/admin/geo/nodes/_form.html.haml  |  12 +-
 .../analytics/cycle_analytics/show.html.haml  |   6 +
 .../groups/dependency_proxies/show.html.haml  |   2 +-
 .../layouts/nav/sidebar/_analytics.html.haml  |   2 +-
 ee/app/workers/all_queues.yml                 |   7 +
 .../workers/elastic_index_bulk_cron_worker.rb |  21 +
 ...4086-es-bulk-incremental-index-updates.yml |   5 +
 .../security-ag-contribution-analytics.yml    |   5 +
 ee/config/routes/group.rb                     |   1 +
 .../development/20_vulnerabilities.rb         |   2 +-
 ee/lib/gitlab/elastic/bulk_indexer.rb         | 148 +++++++
 ee/lib/gitlab/elastic/document_reference.rb   |  95 +++++
 .../analytics/analytics_controller_spec.rb    |  17 +-
 .../cycle_analytics_controller_spec.rb        |  39 ++
 .../contribution_analytics_controller_spec.rb | 247 +++++++-----
 .../analytics/analytics_workspace_spec.rb     |   8 -
 .../search/elastic/project_search_spec.rb     |  18 +-
 .../cycle_analytics/components/base_spec.js   |  19 +
 .../assignees_list_item_spec.js               |  74 ++--
 .../list_container_spec.js                    |  64 ++-
 .../board_list_selector/list_content_spec.js  |  50 +--
 .../board_list_selector/list_filter_spec.js   |  75 ++--
 .../components/issue_card_weight_spec.js      |  64 ++-
 .../geo_node_form_capacities_spec.js          |  24 +-
 .../components/issue_token_spec.js            |   2 +-
 .../components/related_issues_block_spec.js   |   2 +-
 .../components/related_issues_list_spec.js    |  16 +-
 .../components/related_issues_root_spec.js    | 341 ++++++++++++++++
 ee/spec/helpers/ee/dashboard_helper_spec.rb   |   4 +
 ee/spec/helpers/ee/groups_helper_spec.rb      |  28 +-
 .../components/related_issues_root_spec.js    | 367 ------------------
 .../project/tree_restorer_spec.rb             |   8 +-
 .../import_export/project/tree_saver_spec.rb  |  17 +-
 .../lib/gitlab/elastic/bulk_indexer_spec.rb   | 162 ++++++++
 .../gitlab/elastic/document_reference_spec.rb | 170 ++++++++
 ee/spec/models/concerns/elastic/note_spec.rb  |  12 +
 ee/spec/policies/group_policy_spec.rb         |  29 +-
 .../elastic/index_record_service_spec.rb      |  22 +-
 .../process_bookkeeping_service_spec.rb       | 140 +++++++
 ee/spec/support/elastic.rb                    |   2 +
 .../support/helpers/elasticsearch_helpers.rb  |   8 +
 .../nav/sidebar/_analytics.html.haml_spec.rb  |   1 +
 .../nav/sidebar/_group.html.haml_spec.rb      |  41 +-
 .../elastic_index_bulk_cron_worker_spec.rb    |  18 +
 lib/gitlab/database/migration_helpers.rb      |  19 +-
 .../import_export/project/import_export.yml   |   6 +-
 lib/gitlab/sidekiq_middleware.rb              |  36 +-
 spec/features/groups/navbar_spec.rb           |  15 +
 .../gitlab/import_export/group/project.json   |  64 +--
 .../blob_edit/blob_bundle_spec.js             |   3 +-
 .../issue_card_inner_scoped_label_spec.js     |  37 +-
 .../boards/components/issue_due_date_spec.js  |  50 +--
 .../diffs/components/diff_table_cell_spec.js  |   4 +
 spec/frontend/notes/stores/getters_spec.js    |   7 +
 .../issue/related_issuable_mock_data.js       | 121 ++++++
 .../content_viewer/content_viewer_spec.js     |  86 ++--
 .../issue/related_issuable_mock_data.js       | 117 +-----
 .../gitlab/database/migration_helpers_spec.rb |  92 +++--
 spec/lib/gitlab/import_export/all_models.yml  |   3 +
 .../import_export/safe_model_attributes.yml   |   3 +
 spec/lib/marginalia_spec.rb                   |   3 -
 .../concerns/cache_markdown_field_spec.rb     |  20 +
 spec/models/group_spec.rb                     |  10 +
 spec/models/project_spec.rb                   |  13 +
 spec/models/resource_label_event_spec.rb      |   4 +
 spec/models/resource_weight_event_spec.rb     |   5 +-
 spec/models/snippet_spec.rb                   |  22 ++
 .../operations/update_service_spec.rb         |  43 +-
 .../features/error_tracking_shared_context.rb |   2 +-
 .../policies/group_policy_shared_context.rb   |   1 +
 .../features/error_tracking_shared_example.rb |  22 +-
 .../shared_examples/resource_events.rb        |  13 +
 .../active_record/query_recorder_spec.rb      |   7 +-
 196 files changed, 3012 insertions(+), 1714 deletions(-)
 rename app/models/{concerns/resource_event_tools.rb => resource_event.rb} (56%)
 create mode 100644 changelogs/unreleased/201771.yml
 create mode 100644 changelogs/unreleased/202639.yml
 create mode 100644 changelogs/unreleased/207126-more-descriptive-error-messages-in-migration-helpers.yml
 create mode 100644 changelogs/unreleased/207976-stop-markdown-caching-of-non-markdown-snippet-content.yml
 create mode 100644 changelogs/unreleased/208548-better-spec-test-for-error-tracking-web-ui.yml
 create mode 100644 changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml
 create mode 100644 changelogs/unreleased/fix-dependency-proxy-link.yml
 create mode 100644 changelogs/unreleased/georgekoltsov-fix-epic-issues.yml
 create mode 100644 changelogs/unreleased/kassio-fix-dev-seed.yml
 create mode 100644 changelogs/unreleased/mk-hide-secondary-only-setting.yml
 create mode 100644 changelogs/unreleased/sh-cache-ci-variables.yml
 create mode 100644 changelogs/unreleased/sh-disable-line-in-marginalia.yml
 create mode 100644 doc/administration/high_availability/object_storage.md
 create mode 100644 ee/app/assets/javascripts/pages/groups/analytics/cycle_analytics/index.js
 create mode 100644 ee/app/controllers/groups/analytics/cycle_analytics_controller.rb
 create mode 100644 ee/app/services/elastic/process_bookkeeping_service.rb
 create mode 100644 ee/app/views/groups/analytics/cycle_analytics/show.html.haml
 create mode 100644 ee/app/workers/elastic_index_bulk_cron_worker.rb
 create mode 100644 ee/changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml
 create mode 100644 ee/changelogs/unreleased/security-ag-contribution-analytics.yml
 create mode 100644 ee/lib/gitlab/elastic/bulk_indexer.rb
 create mode 100644 ee/lib/gitlab/elastic/document_reference.rb
 create mode 100644 ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb
 rename ee/spec/{javascripts => frontend}/issuable/related_issues/components/issue_token_spec.js (98%)
 rename ee/spec/{javascripts => frontend}/issuable/related_issues/components/related_issues_block_spec.js (98%)
 rename ee/spec/{javascripts => frontend}/issuable/related_issues/components/related_issues_list_spec.js (93%)
 create mode 100644 ee/spec/frontend/issuable/related_issues/components/related_issues_root_spec.js
 delete mode 100644 ee/spec/javascripts/issuable/related_issues/components/related_issues_root_spec.js
 create mode 100644 ee/spec/lib/gitlab/elastic/bulk_indexer_spec.rb
 create mode 100644 ee/spec/lib/gitlab/elastic/document_reference_spec.rb
 create mode 100644 ee/spec/services/elastic/process_bookkeeping_service_spec.rb
 create mode 100644 ee/spec/workers/elastic_index_bulk_cron_worker_spec.rb
 rename spec/{javascripts => frontend}/blob_edit/blob_bundle_spec.js (93%)
 create mode 100644 spec/frontend/vue_shared/components/issue/related_issuable_mock_data.js

diff --git a/Gemfile b/Gemfile
index 6737bc3012b93..40aca12aea8ca 100644
--- a/Gemfile
+++ b/Gemfile
@@ -419,7 +419,8 @@ end
 
 gem 'octokit', '~> 4.15'
 
-gem 'mail_room', '~> 0.10.0'
+# https://gitlab.com/gitlab-org/gitlab/issues/207207
+gem 'gitlab-mail_room', '~> 0.0.2', require: 'mail_room'
 
 gem 'email_reply_trimmer', '~> 0.1'
 gem 'html2text'
diff --git a/Gemfile.lock b/Gemfile.lock
index f4a0ae4ebefd5..38de70b41ef60 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -388,6 +388,7 @@ GEM
       opentracing (~> 0.4)
       redis (> 3.0.0, < 5.0.0)
     gitlab-license (1.0.0)
+    gitlab-mail_room (0.0.2)
     gitlab-markup (1.7.0)
     gitlab-net-dns (0.9.1)
     gitlab-puma (4.3.1.gitlab.2)
@@ -616,7 +617,6 @@ GEM
     lumberjack (1.0.13)
     mail (2.7.1)
       mini_mime (>= 0.1.1)
-    mail_room (0.10.0)
     marcel (0.3.3)
       mimemagic (~> 0.3.2)
     marginalia (1.8.0)
@@ -1235,6 +1235,7 @@ DEPENDENCIES
   gitlab-chronic (~> 0.10.5)
   gitlab-labkit (= 0.10.0)
   gitlab-license (~> 1.0)
+  gitlab-mail_room (~> 0.0.2)
   gitlab-markup (~> 1.7.0)
   gitlab-net-dns (~> 0.9.1)
   gitlab-puma (~> 4.3.1.gitlab.2)
@@ -1284,7 +1285,6 @@ DEPENDENCIES
   loofah (~> 2.2)
   lru_redux
   mail (= 2.7.1)
-  mail_room (~> 0.10.0)
   marginalia (~> 1.8.0)
   memory_profiler (~> 0.9)
   method_source (~> 0.8)
diff --git a/app/assets/javascripts/diffs/components/diff_table_cell.vue b/app/assets/javascripts/diffs/components/diff_table_cell.vue
index 9544fbe9fc574..e0fb1226674d1 100644
--- a/app/assets/javascripts/diffs/components/diff_table_cell.vue
+++ b/app/assets/javascripts/diffs/components/diff_table_cell.vue
@@ -166,6 +166,7 @@ export default {
         :href="lineHref"
         @click="setHighlightedRow(lineCode)"
       >
+        {{ lineNumber }}
       </a>
       <diff-gutter-avatars
         v-if="shouldShowAvatarsOnGutter"
diff --git a/app/assets/javascripts/notes/stores/getters.js b/app/assets/javascripts/notes/stores/getters.js
index 4f8ff8240b24b..3a1e795cff404 100644
--- a/app/assets/javascripts/notes/stores/getters.js
+++ b/app/assets/javascripts/notes/stores/getters.js
@@ -28,6 +28,8 @@ export const getUserData = state => state.userData || {};
 
 export const getUserDataByProp = state => prop => state.userData && state.userData[prop];
 
+export const descriptionVersion = state => state.descriptionVersion;
+
 export const notesById = state =>
   state.discussions.reduce((acc, note) => {
     note.notes.every(n => Object.assign(acc, { [n.id]: n }));
diff --git a/app/assets/javascripts/vue_shared/components/notes/system_note.vue b/app/assets/javascripts/vue_shared/components/notes/system_note.vue
index 0c4d75fb0ad4c..908f7196abf5f 100644
--- a/app/assets/javascripts/vue_shared/components/notes/system_note.vue
+++ b/app/assets/javascripts/vue_shared/components/notes/system_note.vue
@@ -54,8 +54,8 @@ export default {
     };
   },
   computed: {
-    ...mapGetters(['targetNoteHash']),
-    ...mapState(['descriptionVersion', 'isLoadingDescriptionVersion']),
+    ...mapGetters(['targetNoteHash', 'descriptionVersion']),
+    ...mapState(['isLoadingDescriptionVersion']),
     noteAnchorId() {
       return `note_${this.note.id}`;
     },
diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss
index 24c6fec064a8b..e83450f2dbc17 100644
--- a/app/assets/stylesheets/pages/diff.scss
+++ b/app/assets/stylesheets/pages/diff.scss
@@ -485,10 +485,6 @@ table.code {
           }
         }
       }
-
-      &:not(.js-unfold-bottom) a::before {
-        content: attr(data-linenumber);
-      }
     }
 
     &.line_content {
diff --git a/app/models/concerns/cache_markdown_field.rb b/app/models/concerns/cache_markdown_field.rb
index 9713e79f525b6..cc13f279c4d68 100644
--- a/app/models/concerns/cache_markdown_field.rb
+++ b/app/models/concerns/cache_markdown_field.rb
@@ -20,6 +20,10 @@ def skip_project_check?
     false
   end
 
+  def can_cache_field?(field)
+    true
+  end
+
   # Returns the default Banzai render context for the cached markdown field.
   def banzai_render_context(field)
     raise ArgumentError.new("Unknown field: #{field.inspect}") unless
@@ -38,17 +42,23 @@ def banzai_render_context(field)
     context
   end
 
-  # Update every column in a row if any one is invalidated, as we only store
-  # one version per row
-  def refresh_markdown_cache
+  def rendered_field_content(markdown_field)
+    return unless can_cache_field?(markdown_field)
+
     options = { skip_project_check: skip_project_check? }
+    Banzai::Renderer.cacheless_render_field(self, markdown_field, options)
+  end
 
+  # Update every applicable column in a row if any one is invalidated, as we only store
+  # one version per row
+  def refresh_markdown_cache
     updates = cached_markdown_fields.markdown_fields.map do |markdown_field|
       [
         cached_markdown_fields.html_field(markdown_field),
-        Banzai::Renderer.cacheless_render_field(self, markdown_field, options)
+        rendered_field_content(markdown_field)
       ]
     end.to_h
+
     updates['cached_markdown_version'] = latest_cached_markdown_version
 
     updates.each { |field, data| write_markdown_field(field, data) }
diff --git a/app/models/group.rb b/app/models/group.rb
index a5337f19b38ad..d6a4af5af15ad 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -406,11 +406,15 @@ def mattermost_team_params
   end
 
   def ci_variables_for(ref, project)
-    list_of_ids = [self] + ancestors
-    variables = Ci::GroupVariable.where(group: list_of_ids)
-    variables = variables.unprotected unless project.protected_for?(ref)
-    variables = variables.group_by(&:group_id)
-    list_of_ids.reverse.flat_map { |group| variables[group.id] }.compact
+    cache_key = "ci_variables_for:group:#{self&.id}:project:#{project&.id}:ref:#{ref}"
+
+    ::Gitlab::SafeRequestStore.fetch(cache_key) do
+      list_of_ids = [self] + ancestors
+      variables = Ci::GroupVariable.where(group: list_of_ids)
+      variables = variables.unprotected unless project.protected_for?(ref)
+      variables = variables.group_by(&:group_id)
+      list_of_ids.reverse.flat_map { |group| variables[group.id] }.compact
+    end
   end
 
   def group_member(user)
diff --git a/app/models/project.rb b/app/models/project.rb
index 5ec43de21feeb..f72e777c00419 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1963,6 +1963,14 @@ def default_environment
   end
 
   def ci_variables_for(ref:, environment: nil)
+    cache_key = "ci_variables_for:project:#{self&.id}:ref:#{ref}:environment:#{environment}"
+
+    ::Gitlab::SafeRequestStore.fetch(cache_key) do
+      uncached_ci_variables_for(ref: ref, environment: environment)
+    end
+  end
+
+  def uncached_ci_variables_for(ref:, environment: nil)
     result = if protected_for?(ref)
                variables
              else
diff --git a/app/models/concerns/resource_event_tools.rb b/app/models/resource_event.rb
similarity index 56%
rename from app/models/concerns/resource_event_tools.rb
rename to app/models/resource_event.rb
index 7226b9573e12d..9b3a211ad4312 100644
--- a/app/models/concerns/resource_event_tools.rb
+++ b/app/models/resource_event.rb
@@ -1,16 +1,27 @@
 # frozen_string_literal: true
 
-module ResourceEventTools
-  extend ActiveSupport::Concern
+class ResourceEvent < ApplicationRecord
+  include Gitlab::Utils::StrongMemoize
+  include Importable
 
-  included do
-    belongs_to :user
+  self.abstract_class = true
 
-    validates :user, presence: { unless: :importing? }, on: :create
+  validates :user, presence: { unless: :importing? }, on: :create
 
-    validate :exactly_one_issuable
+  belongs_to :user
 
-    scope :created_after, ->(time) { where('created_at > ?', time) }
+  scope :created_after, ->(time) { where('created_at > ?', time) }
+
+  def discussion_id
+    strong_memoize(:discussion_id) do
+      Digest::SHA1.hexdigest(discussion_id_key.join("-"))
+    end
+  end
+
+  private
+
+  def discussion_id_key
+    [self.class.name, created_at, user_id]
   end
 
   def exactly_one_issuable
diff --git a/app/models/resource_label_event.rb b/app/models/resource_label_event.rb
index 59907f1b9628f..970d4e1e56261 100644
--- a/app/models/resource_label_event.rb
+++ b/app/models/resource_label_event.rb
@@ -1,10 +1,7 @@
 # frozen_string_literal: true
 
-class ResourceLabelEvent < ApplicationRecord
-  include Importable
-  include Gitlab::Utils::StrongMemoize
+class ResourceLabelEvent < ResourceEvent
   include CacheMarkdownField
-  include ResourceEventTools
 
   cache_markdown_field :reference
 
@@ -13,8 +10,11 @@ class ResourceLabelEvent < ApplicationRecord
   belongs_to :label
 
   scope :inc_relations, -> { includes(:label, :user) }
+  scope :by_issue, ->(issue) { where(issue_id: issue.id) }
+  scope :by_merge_request, ->(merge_request) { where(merge_request_id: merge_request.id) }
 
   validates :label, presence: { unless: :importing? }, on: :create
+  validate :exactly_one_issuable
 
   after_save :expire_etag_cache
   after_destroy :expire_etag_cache
@@ -41,12 +41,6 @@ def issuable
     issue || merge_request
   end
 
-  def discussion_id(resource = nil)
-    strong_memoize(:discussion_id) do
-      Digest::SHA1.hexdigest(discussion_id_key.join("-"))
-    end
-  end
-
   def project
     issuable.project
   end
@@ -109,10 +103,6 @@ def local_label?
   def resource_parent
     issuable.project || issuable.group
   end
-
-  def discussion_id_key
-    [self.class.name, created_at, user_id]
-  end
 end
 
 ResourceLabelEvent.prepend_if_ee('EE::ResourceLabelEvent')
diff --git a/app/models/resource_milestone_event.rb b/app/models/resource_milestone_event.rb
index ba43a1ee3637a..d362ebc307adf 100644
--- a/app/models/resource_milestone_event.rb
+++ b/app/models/resource_milestone_event.rb
@@ -1,10 +1,6 @@
 # frozen_string_literal: true
 
-class ResourceMilestoneEvent < ApplicationRecord
-  include Gitlab::Utils::StrongMemoize
-  include Importable
-  include ResourceEventTools
-
+class ResourceMilestoneEvent < ResourceEvent
   belongs_to :issue
   belongs_to :merge_request
   belongs_to :milestone
@@ -12,6 +8,8 @@ class ResourceMilestoneEvent < ApplicationRecord
   scope :by_issue, ->(issue) { where(issue_id: issue.id) }
   scope :by_merge_request, ->(merge_request) { where(merge_request_id: merge_request.id) }
 
+  validate :exactly_one_issuable
+
   enum action: {
          add: 1,
          remove: 2
@@ -23,8 +21,4 @@ class ResourceMilestoneEvent < ApplicationRecord
   def self.issuable_attrs
     %i(issue merge_request).freeze
   end
-
-  def resource
-    issue || merge_request
-  end
 end
diff --git a/app/models/resource_weight_event.rb b/app/models/resource_weight_event.rb
index ab288798aedc5..e0cc0c87a830b 100644
--- a/app/models/resource_weight_event.rb
+++ b/app/models/resource_weight_event.rb
@@ -1,26 +1,9 @@
 # frozen_string_literal: true
 
-class ResourceWeightEvent < ApplicationRecord
-  include Gitlab::Utils::StrongMemoize
-
-  validates :user, presence: true
+class ResourceWeightEvent < ResourceEvent
   validates :issue, presence: true
 
-  belongs_to :user
   belongs_to :issue
 
   scope :by_issue, ->(issue) { where(issue_id: issue.id) }
-  scope :created_after, ->(time) { where('created_at > ?', time) }
-
-  def discussion_id(resource = nil)
-    strong_memoize(:discussion_id) do
-      Digest::SHA1.hexdigest(discussion_id_key.join("-"))
-    end
-  end
-
-  private
-
-  def discussion_id_key
-    [self.class.name, created_at, user_id]
-  end
 end
diff --git a/app/models/snippet.rb b/app/models/snippet.rb
index 8bba79bd944cb..233834dbaf97d 100644
--- a/app/models/snippet.rb
+++ b/app/models/snippet.rb
@@ -301,6 +301,10 @@ def track_snippet_repository
     repository.update!(shard_name: repository_storage, disk_path: disk_path)
   end
 
+  def can_cache_field?(field)
+    field != :content || MarkupHelper.gitlab_markdown?(file_name)
+  end
+
   class << self
     # Searches for snippets with a matching title or file name.
     #
diff --git a/app/models/user_bot_type_enums.rb b/app/models/user_bot_type_enums.rb
index b6b08ce650b05..e4b1751b07247 100644
--- a/app/models/user_bot_type_enums.rb
+++ b/app/models/user_bot_type_enums.rb
@@ -2,7 +2,7 @@
 
 module UserBotTypeEnums
   def self.bots
-    # When adding a new key, please ensure you are not conflicting with EE-only keys in app/models/user_bot_types_enums.rb
+    # When adding a new key, please ensure you are not conflicting with EE-only keys in app/models/user_bot_type_enums.rb
     {
       alert_bot: 2
     }
diff --git a/bin/mail_room b/bin/mail_room
index 74a84f5b2b477..2539e3d388e3d 100755
--- a/bin/mail_room
+++ b/bin/mail_room
@@ -19,7 +19,7 @@ get_mail_room_pid()
 
 start()
 {
-  bin/daemon_with_pidfile $mail_room_pidfile bundle exec mail_room -q -c $mail_room_config >> $mail_room_logfile 2>&1
+  bin/daemon_with_pidfile $mail_room_pidfile bundle exec mail_room --log-exit-as json -q -c $mail_room_config >> $mail_room_logfile 2>&1
 }
 
 stop()
diff --git a/changelogs/unreleased/201771.yml b/changelogs/unreleased/201771.yml
new file mode 100644
index 0000000000000..8677b3d853c3f
--- /dev/null
+++ b/changelogs/unreleased/201771.yml
@@ -0,0 +1,5 @@
+---
+title: Replace content_viewer_spec setTimeouts with semantic actions / events
+merge_request:
+author: Oregand
+type: other
diff --git a/changelogs/unreleased/202639.yml b/changelogs/unreleased/202639.yml
new file mode 100644
index 0000000000000..6fa70055e96be
--- /dev/null
+++ b/changelogs/unreleased/202639.yml
@@ -0,0 +1,5 @@
+---
+title: Replace line diff number css selector with actual HTML inside MRs
+merge_request:
+author: Oregand
+type: other
diff --git a/changelogs/unreleased/207126-more-descriptive-error-messages-in-migration-helpers.yml b/changelogs/unreleased/207126-more-descriptive-error-messages-in-migration-helpers.yml
new file mode 100644
index 0000000000000..36ed216a50576
--- /dev/null
+++ b/changelogs/unreleased/207126-more-descriptive-error-messages-in-migration-helpers.yml
@@ -0,0 +1,5 @@
+---
+title: Improve error messages of failed migrations
+merge_request: 25457
+author:
+type: changed
diff --git a/changelogs/unreleased/207976-stop-markdown-caching-of-non-markdown-snippet-content.yml b/changelogs/unreleased/207976-stop-markdown-caching-of-non-markdown-snippet-content.yml
new file mode 100644
index 0000000000000..dd249140092db
--- /dev/null
+++ b/changelogs/unreleased/207976-stop-markdown-caching-of-non-markdown-snippet-content.yml
@@ -0,0 +1,5 @@
+---
+title: Fix Snippet content incorrectly caching
+merge_request: 25985
+author:
+type: fixed
diff --git a/changelogs/unreleased/208548-better-spec-test-for-error-tracking-web-ui.yml b/changelogs/unreleased/208548-better-spec-test-for-error-tracking-web-ui.yml
new file mode 100644
index 0000000000000..6b6d479e8157e
--- /dev/null
+++ b/changelogs/unreleased/208548-better-spec-test-for-error-tracking-web-ui.yml
@@ -0,0 +1,5 @@
+---
+title: Fix fixtures for Error Tracking Web UI
+merge_request: 26233
+author: Takuya Noguchi
+type: other
diff --git a/changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml b/changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml
new file mode 100644
index 0000000000000..67cceb21af0c1
--- /dev/null
+++ b/changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml
@@ -0,0 +1,5 @@
+---
+title: 'Add a bulk processor for elasticsearch incremental updates'
+merge_request: 24298
+author:
+type: added
diff --git a/changelogs/unreleased/fix-dependency-proxy-link.yml b/changelogs/unreleased/fix-dependency-proxy-link.yml
new file mode 100644
index 0000000000000..547d0334d1e29
--- /dev/null
+++ b/changelogs/unreleased/fix-dependency-proxy-link.yml
@@ -0,0 +1,5 @@
+---
+title: Add link to dependency proxy docs on the dependency proxy page
+merge_request: 26092
+author:
+type: changed
diff --git a/changelogs/unreleased/georgekoltsov-fix-epic-issues.yml b/changelogs/unreleased/georgekoltsov-fix-epic-issues.yml
new file mode 100644
index 0000000000000..7a856dc6e2851
--- /dev/null
+++ b/changelogs/unreleased/georgekoltsov-fix-epic-issues.yml
@@ -0,0 +1,5 @@
+---
+title: Fix issues missing on epic's page after project import
+merge_request: 26099
+author:
+type: fixed
diff --git a/changelogs/unreleased/kassio-fix-dev-seed.yml b/changelogs/unreleased/kassio-fix-dev-seed.yml
new file mode 100644
index 0000000000000..e55193184ddf6
--- /dev/null
+++ b/changelogs/unreleased/kassio-fix-dev-seed.yml
@@ -0,0 +1,5 @@
+---
+title: Fix dev vulnerabilities seeder
+merge_request: 26169
+author:
+type: fixed
diff --git a/changelogs/unreleased/mk-hide-secondary-only-setting.yml b/changelogs/unreleased/mk-hide-secondary-only-setting.yml
new file mode 100644
index 0000000000000..49107c23b1646
--- /dev/null
+++ b/changelogs/unreleased/mk-hide-secondary-only-setting.yml
@@ -0,0 +1,5 @@
+---
+title: 'Geo: Show secondary-only setting on only on secondaries'
+merge_request: 26029
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-cache-ci-variables.yml b/changelogs/unreleased/sh-cache-ci-variables.yml
new file mode 100644
index 0000000000000..8534af3780876
--- /dev/null
+++ b/changelogs/unreleased/sh-cache-ci-variables.yml
@@ -0,0 +1,5 @@
+---
+title: Memoize loading of CI variables
+merge_request: 26147
+author:
+type: performance
diff --git a/changelogs/unreleased/sh-disable-line-in-marginalia.yml b/changelogs/unreleased/sh-disable-line-in-marginalia.yml
new file mode 100644
index 0000000000000..51be4db1965c8
--- /dev/null
+++ b/changelogs/unreleased/sh-disable-line-in-marginalia.yml
@@ -0,0 +1,5 @@
+---
+title: Disable Marginalia line backtrace in production
+merge_request: 26199
+author:
+type: performance
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index 20c75a6e255f0..330e5109ed416 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -454,6 +454,11 @@ production: &base
     pseudonymizer_worker:
       cron: "0 * * * *"
 
+    # Elasticsearch bulk updater for incremental updates.
+    # NOTE: This will only take effect if elasticsearch is enabled.
+    elastic_index_bulk_cron_worker:
+      cron: "*/1 * * * *"
+
   registry:
     # enabled: true
     # host: registry.example.com
diff --git a/config/initializers/0_marginalia.rb b/config/initializers/0_marginalia.rb
index f88a90854e3d1..a697f67dbf22e 100644
--- a/config/initializers/0_marginalia.rb
+++ b/config/initializers/0_marginalia.rb
@@ -9,7 +9,13 @@
 # Refer: https://github.com/basecamp/marginalia/blob/v1.8.0/lib/marginalia/railtie.rb#L67
 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(Gitlab::Marginalia::ActiveRecordInstrumentation)
 
-Marginalia::Comment.components = [:application, :controller, :action, :correlation_id, :jid, :job_class, :line]
+Marginalia::Comment.components = [:application, :controller, :action, :correlation_id, :jid, :job_class]
+
+# As mentioned in https://github.com/basecamp/marginalia/pull/93/files,
+# adding :line has some overhead because a regexp on the backtrace has
+# to be run on every SQL query. Only enable this in development because
+# we've seen it slow things down.
+Marginalia::Comment.components << :line if Rails.env.development?
 
 Gitlab::Marginalia.set_application_name
 
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 156cf78dfc42f..684ccb73603e1 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -537,6 +537,9 @@
   Settings.cron_jobs['update_max_seats_used_for_gitlab_com_subscriptions_worker'] ||= Settingslogic.new({})
   Settings.cron_jobs['update_max_seats_used_for_gitlab_com_subscriptions_worker']['cron'] ||= '0 12 * * *'
   Settings.cron_jobs['update_max_seats_used_for_gitlab_com_subscriptions_worker']['job_class'] = 'UpdateMaxSeatsUsedForGitlabComSubscriptionsWorker'
+  Settings.cron_jobs['elastic_index_bulk_cron_worker'] ||= Settingslogic.new({})
+  Settings.cron_jobs['elastic_index_bulk_cron_worker']['cron'] ||= '*/1 * * * *'
+  Settings.cron_jobs['elastic_index_bulk_cron_worker']['job_class'] ||= 'ElasticIndexBulkCronWorker'
 end
 
 #
diff --git a/config/routes.rb b/config/routes.rb
index 16b15e5300a7c..cf39ca3384d25 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -121,10 +121,7 @@
       draw :country
       draw :country_state
       draw :subscription
-
-      constraints(-> (*) { Gitlab::Analytics.any_features_enabled? }) do
-        draw :analytics
-      end
+      draw :analytics
     end
 
     if ENV['GITLAB_CHAOS_SECRET'] || Rails.env.development? || Rails.env.test?
diff --git a/doc/administration/auth/oidc.md b/doc/administration/auth/oidc.md
index 6f59cffc3ccae..0160db1b3886c 100644
--- a/doc/administration/auth/oidc.md
+++ b/doc/administration/auth/oidc.md
@@ -42,6 +42,7 @@ The OpenID Connect will provide you with a client details and secret for you to
          'discovery' => true,
          'client_auth_method' => 'query',
          'uid_field' => '<uid_field>',
+         'send_scope_to_token_endpoint' => 'false',
          'client_options' => {
            'identifier' => '<your_oidc_client_id>',
            'secret' => '<your_oidc_client_secret>',
@@ -65,6 +66,7 @@ The OpenID Connect will provide you with a client details and secret for you to
            discovery: true,
            client_auth_method: 'query',
            uid_field: '<uid_field>',
+           send_scope_to_token_endpoint: false,
            client_options: {
              identifier: '<your_oidc_client_id>',
              secret: '<your_oidc_client_secret>',
@@ -92,6 +94,8 @@ The OpenID Connect will provide you with a client details and secret for you to
      - If not specified, defaults to `basic`.
    - `<uid_field>` (optional) is the field name from the `user_info` details that will be used as `uid` value. For example, `preferred_username`.
      If this value is not provided or the field with the configured value is missing from the `user_info` details, the `uid` will use the `sub` field.
+   - `send_scope_to_token_endpoint` is `true` by default. In other words, the `scope` parameter is normally included in requests to the token endpoint.
+     However, if your OpenID Connect provider does not accept the `scope` parameter in such requests, set this to `false`.
    - `client_options` are the OpenID Connect client-specific options. Specifically:
      - `identifier` is the client identifier as configured in the OpenID Connect service provider.
      - `secret` is the client secret as configured in the OpenID Connect service provider.
diff --git a/doc/administration/auth/okta.md b/doc/administration/auth/okta.md
index 7b5effe3d778a..c83645ffe740a 100644
--- a/doc/administration/auth/okta.md
+++ b/doc/administration/auth/okta.md
@@ -42,21 +42,6 @@ Now that the Okta app is configured, it's time to enable it in GitLab.
 
 ## Configure GitLab
 
-1. On your GitLab server, open the configuration file:
-
-   **For Omnibus GitLab installations**
-
-   ```shell
-   sudo editor /etc/gitlab/gitlab.rb
-   ```
-
-   **For installations from source**
-
-   ```shell
-   cd /home/git/gitlab
-   sudo -u git -H editor config/gitlab.yml
-   ```
-
 1. See [Initial OmniAuth Configuration](../../integration/omniauth.md#initial-omniauth-configuration)
    for initial settings.
 
@@ -66,13 +51,19 @@ Now that the Okta app is configured, it's time to enable it in GitLab.
 
    **For Omnibus GitLab installations**
 
+   Edit `/etc/gitlab/gitlab.rb`:
+
    ```ruby
    gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
    gitlab_rails['omniauth_block_auto_created_users'] = false
    ```
 
+   ---
+
    **For installations from source**
 
+   Edit `config/gitlab.yml`:
+
    ```yaml
    allow_single_sign_on: ["saml"]
    block_auto_created_users: false
@@ -83,15 +74,21 @@ Now that the Okta app is configured, it's time to enable it in GitLab.
 
    **For Omnibus GitLab installations**
 
+   Edit `/etc/gitlab/gitlab.rb`:
+
    ```ruby
    gitlab_rails['omniauth_auto_link_saml_user'] = true
    ```
 
+   ---
+
    **For installations from source**
 
-   ```yaml
-   auto_link_saml_user: true
-   ```
+   Edit `config/gitlab.yml`:
+
+    ```yaml
+    auto_link_saml_user: true
+    ```
 
 1. Add the provider configuration.
 
diff --git a/doc/administration/gitaly/index.md b/doc/administration/gitaly/index.md
index 390e0ae05af25..92a4427177546 100644
--- a/doc/administration/gitaly/index.md
+++ b/doc/administration/gitaly/index.md
@@ -6,9 +6,9 @@ components can read or write Git data. GitLab components that access Git
 repositories (GitLab Rails, GitLab Shell, GitLab Workhorse, etc.) act as clients
 to Gitaly. End users do not have direct access to Gitaly.
 
-In the rest of this page, Gitaly server is referred to the standalone node that
-only runs Gitaly, and Gitaly client to the GitLab Rails node that runs all other
-processes except Gitaly.
+On this page, *Gitaly server* refers to a standalone node that only runs Gitaly
+and *Gitaly client* is a GitLab Rails app node that runs all other processes
+except Gitaly.
 
 ## Architecture
 
@@ -20,7 +20,7 @@ Here's a high-level architecture overview of how Gitaly is used.
 
 The Gitaly service itself is configured via a [TOML configuration file](reference.md).
 
-In case you want to change some of its settings:
+If you want to change any of its settings:
 
 **For Omnibus GitLab**
 
@@ -54,10 +54,6 @@ scenario, the [new repository indexer](../../integration/elasticsearch.md#elasti
 needs to be enabled in your GitLab configuration. [Since GitLab v12.3](https://gitlab.com/gitlab-org/gitlab/issues/6481),
 the new indexer becomes the default and no configuration is required.
 
-NOTE: **Note:** While Gitaly can be used as a replacement for NFS, it's not recommended
-to use EFS as it may impact GitLab's performance. Review the [relevant documentation](../high_availability/nfs.md#avoid-using-awss-elastic-file-system-efs)
-for more details.
-
 ### Network architecture
 
 The following list depicts what the network architecture of Gitaly is:
@@ -568,30 +564,6 @@ server with the following settings.
 
 1. Save the file and [restart GitLab](../restart_gitlab.md#installations-from-source).
 
-## Eliminating NFS altogether
-
-If you are planning to use Gitaly without NFS for your storage needs
-and want to eliminate NFS from your environment altogether, there are
-a few things that you need to do:
-
-1. Make sure the [`git` user home directory](https://docs.gitlab.com/omnibus/settings/configuration.html#moving-the-home-directory-for-a-user) is on local disk.
-1. Configure [database lookup of SSH keys](../operations/fast_ssh_key_lookup.md)
-   to eliminate the need for a shared `authorized_keys` file.
-1. Configure [object storage for job artifacts](../job_artifacts.md#using-object-storage)
-   including [incremental logging](../job_logs.md#new-incremental-logging-architecture).
-1. Configure [object storage for LFS objects](../lfs/lfs_administration.md#storing-lfs-objects-in-remote-object-storage).
-1. Configure [object storage for uploads](../uploads.md#using-object-storage-core-only).
-1. Configure [object storage for merge request diffs](../merge_request_diffs.md#using-object-storage).
-1. Configure [object storage for packages](../packages/index.md#using-object-storage) (optional feature).
-1. Configure [object storage for dependency proxy](../packages/dependency_proxy.md#using-object-storage) (optional feature).
-1. Configure [object storage for Mattermost](https://docs.mattermost.com/administration/config-settings.html#file-storage) (optional feature).
-
-NOTE: **Note:**
-One current feature of GitLab that still requires a shared directory (NFS) is
-[GitLab Pages](../../user/project/pages/index.md).
-There is [work in progress](https://gitlab.com/gitlab-org/gitlab-pages/issues/196)
-to eliminate the need for NFS to support GitLab Pages.
-
 ## Limiting RPC concurrency
 
 It can happen that CI clone traffic puts a large strain on your Gitaly
diff --git a/doc/administration/high_availability/README.md b/doc/administration/high_availability/README.md
index 2c2fc075dbe7b..ea7ffb7aa51bc 100644
--- a/doc/administration/high_availability/README.md
+++ b/doc/administration/high_availability/README.md
@@ -4,210 +4,56 @@ type: reference, concepts
 
 # Scaling and High Availability
 
-GitLab supports a number of options for scaling your self-managed instance and configuring high availability (HA).
-The solution you choose will be based on the level of scalability and
-availability you require. The easiest solutions are scalable, but not necessarily
-highly available.
-
-GitLab provides a service that is essential to most organizations: it
-enables people to collaborate on code in a timely fashion. Any downtime should
-therefore be short and planned. Due to the distributed nature
-of Git, developers can continue to commit code locally even when GitLab is not
-available. However, some GitLab features such as the issue tracker and
-continuous integration are not available when GitLab is down.
-If you require all GitLab functionality to be highly available,
-consider the options outlined below.
-
-**Keep in mind that all highly-available solutions come with a trade-off between
-cost/complexity and uptime**. The more uptime you want, the more complex the
-solution. And the more complex the solution, the more work is involved in
-setting up and maintaining it. High availability is not free and every HA
-solution should balance the costs against the benefits.
-
-There are many options when choosing a highly-available GitLab architecture. We
-recommend engaging with GitLab Support to choose the best architecture for your
-use case. This page contains recommendations based on
-experience with GitLab.com and internal scale testing.
+GitLab supports a number of options for larger self-managed instances to
+ensure that they are scalable and highly available. While these needs can be tackled
+individually, they typically go hand in hand: a performant scalable environment
+will have availability by default, as its components are separated and pooled.
+
+On this page, we present recommendations for setups based on the number
+of users you expect. For larger setups we give several recommended
+architectures based on experience with GitLab.com and internal scale
+testing that aim to achieve the right balance between both scalability
+and availability.
 
 For detailed insight into how GitLab scales and configures GitLab.com, you can
 watch [this 1 hour Q&A](https://www.youtube.com/watch?v=uCU8jdYzpac)
-with [John Northrup](https://gitlab.com/northrup), and live questions coming in from some of our customers.
-
-## GitLab Components
-
-The following components need to be considered for a scaled or highly-available
-environment. In many cases, components can be combined on the same nodes to reduce
-complexity.
-
-- GitLab application nodes (Unicorn / Puma, Workhorse) - Web-requests (UI, API, Git over HTTP)
-- Sidekiq - Asynchronous/Background jobs
-- PostgreSQL - Database
-  - Consul - Database service discovery and health checks/failover
-  - PgBouncer - Database pool manager
-- Redis - Key/Value store (User sessions, cache, queue for Sidekiq)
-  - Sentinel - Redis health check/failover manager
-- Gitaly - Provides high-level storage and RPC access to Git repositories
-- S3 Object Storage service[^4] and / or NFS storage servers[^5] for entities such as Uploads, Artifacts, LFS Objects, etc...
-- Load Balancer[^6] - Main entry point and handles load balancing for the GitLab application nodes.
-- Monitor - Prometheus and Grafana monitoring with auto discovery.
-
-## Scalable Architecture Examples
-
-When an organization reaches a certain threshold it will be necessary to scale
-the GitLab instance. Still, true high availability may not be necessary. There
-are options for scaling GitLab instances relatively easily without incurring the
-infrastructure and maintenance costs of full high availability.
-
-### Basic Scaling
-
-This is the simplest form of scaling and will work for the majority of
-cases. Backend components such as PostgreSQL, Redis, and storage are offloaded
-to their own nodes while the remaining GitLab components all run on 2 or more
-application nodes.
-
-This form of scaling also works well in a cloud environment when it is more
-cost effective to deploy several small nodes rather than a single
-larger one.
-
-- 1 PostgreSQL node
-- 1 Redis node
-- 1 Gitaly node
-- 1 or more Object Storage services[^4] and / or NFS storage server[^5]
-- 2 or more GitLab application nodes (Unicorn / Puma, Workhorse, Sidekiq)
-- 1 or more Load Balancer nodes[^6]
-- 1 Monitoring node (Prometheus, Grafana)
-
-#### Installation Instructions
-
-Complete the following installation steps in order. A link at the end of each
-section will bring you back to the Scalable Architecture Examples section so
-you can continue with the next step.
-
-1. [Load Balancer(s)](load_balancer.md)[^6]
-1. [Consul](consul.md)
-1. [PostgreSQL](database.md#postgresql-in-a-scaled-environment) with [PgBouncer](pgbouncer.md)
-1. [Redis](redis.md#redis-in-a-scaled-environment)
-1. [Gitaly](gitaly.md) (recommended) and / or [NFS](nfs.md)[^5]
-1. [GitLab application nodes](gitlab.md)
-    - With [Object Storage service enabled](../gitaly/index.md#eliminating-nfs-altogether)[^4]
-1. [Monitoring node (Prometheus and Grafana)](monitoring_node.md)
-
-### Full Scaling
-
-For very large installations, it might be necessary to further split components
-for maximum scalability. In a fully-scaled architecture, the application node
-is split into separate Sidekiq and Unicorn/Workhorse nodes. One indication that
-this architecture is required is if Sidekiq queues begin to periodically increase
-in size, indicating that there is contention or there are not enough resources.
-
-- 1 or more PostgreSQL nodes
-- 1 or more Redis nodes
-- 1 or more Gitaly storage servers
-- 1 or more Object Storage services[^4] and / or NFS storage server[^5]
-- 2 or more Sidekiq nodes
-- 2 or more GitLab application nodes (Unicorn / Puma, Workhorse, Sidekiq)
-- 1 or more Load Balancer nodes[^6]
-- 1 Monitoring node (Prometheus, Grafana)
-
-## High Availability Architecture Examples
-
-When organizations require scaling *and* high availability, the following
-architectures can be utilized. As the introduction section at the top of this
-page mentions, there is a tradeoff between cost/complexity and uptime. Be sure
-this complexity is absolutely required before taking the step into full
-high availability.
-
-For all examples below, we recommend running Consul and Redis Sentinel separately
-from the services they monitor. If Consul is running on PostgreSQL nodes or Sentinel on
-Redis nodes, there is a potential that high resource usage by PostgreSQL or
-Redis could prevent communication between the other Consul and Sentinel nodes.
-This may lead to the other nodes believing a failure has occurred and initiating
-automated failover. Isolating Consul and Redis Sentinel from the services they monitor
-reduces the chances of a false positive that a failure has occurred.
-
-The examples below do not address high availability of NFS for objects. We recommend a
-S3 Object Storage service[^4] is used where possible over NFS but it's still required in
-certain cases[^5]. Where NFS is to be used some enterprises have access to NFS appliances
-that manage availability and this would be best case scenario.
-
-There are many options in between each of these examples. Work with GitLab Support
-to understand the best starting point for your workload and adapt from there.
-
-### Horizontal
-
-This is the simplest form of high availability and scaling. It requires the
-fewest number of individual servers (virtual or physical) but does have some
-trade-offs and limits.
-
-This architecture will work well for many GitLab customers. Larger customers
-may begin to notice certain events cause contention/high load - for example,
-cloning many large repositories with binary files, high API usage, a large
-number of enqueued Sidekiq jobs, and so on. If this happens, you should consider
-moving to a hybrid or fully distributed architecture depending on what is causing
-the contention.
-
-- 3 PostgreSQL nodes
-- 3 Redis nodes
-- 3 Consul / Sentinel nodes
-- 2 or more GitLab application nodes (Unicorn / Puma, Workhorse, Sidekiq)
-- 1 Gitaly storage servers
-- 1 Object Storage service[^4] and / or NFS storage server[^5]
-- 1 or more Load Balancer nodes[^6]
-- 1 Monitoring node (Prometheus, Grafana)
-
-![Horizontal architecture diagram](img/horizontal.png)
-
-### Hybrid
-
-In this architecture, certain components are split on dedicated nodes so high
-resource usage of one component does not interfere with others. In larger
-environments this is a good architecture to consider if you foresee or do have
-contention due to certain workloads.
-
-- 3 PostgreSQL nodes
-- 1 PgBouncer node
-- 3 Redis nodes
-- 3 Consul / Sentinel nodes
-- 2 or more Sidekiq nodes
-- 2 or more GitLab application nodes (Unicorn / Puma, Workhorse, Sidekiq)
-- 1 Gitaly storage servers
-- 1 Object Storage service[^4] and / or NFS storage server[^5]
-- 1 or more Load Balancer nodes[^6]
-- 1 Monitoring node (Prometheus, Grafana)
-
-![Hybrid architecture diagram](img/hybrid.png)
-
-### Fully Distributed
-
-This architecture scales to hundreds of thousands of users and projects and is
-the basis of the GitLab.com architecture. While this scales well it also comes
-with the added complexity of many more nodes to configure, manage, and monitor.
-
-- 3 PostgreSQL nodes
-- 1 or more PgBouncer nodes (with associated internal load balancers)
-- 4 or more Redis nodes (2 separate clusters for persistent and cache data)
-- 3 Consul nodes
-- 3 Sentinel nodes
-- Multiple dedicated Sidekiq nodes (Split into real-time, best effort, ASAP,
-  CI Pipeline and Pull Mirror sets)
-- 2 or more Git nodes (Git over SSH/Git over HTTP)
-- 2 or more API nodes (All requests to `/api`)
-- 2 or more Web nodes (All other web requests)
-- 2 or more Gitaly storage servers
-- 1 or more Object Storage services[^4] and / or NFS storage servers[^5]
-- 1 or more Load Balancer nodes[^6]
-- 1 Monitoring node (Prometheus, Grafana)
-
-![Fully Distributed architecture diagram](img/fully-distributed.png)
-
-## Reference Architecture Recommendations
-
-The Support and Quality teams build, performance test, and validate Reference
-Architectures that support large numbers of users. The specifications below are
-a representation of this work so far and may be adjusted in the future based on
-additional testing and iteration.
-
-The architectures have been tested with specific coded workloads, and the
+with [John Northrup](https://gitlab.com/northrup), and live questions coming
+in from some of our customers.
+
+## Recommended Setups based on number of users
+
+- 1 - 1000 Users: A single-node [Omnibus](https://docs.gitlab.com/omnibus/) setup with frequent backups. Refer to the [requirements page](../../install/requirements.md) for further details of the specs you will require.
+- 2000 - 50000+ Users: A scaled HA environment based on one of our [Reference Architectures](#reference-architectures) below.
+
+## GitLab Components and Configuration Instructions
+
+The GitLab application depends on the following [components](../../development/architecture.md#component-diagram)
+and services. They are included in the reference architectures along with our
+recommendations for their use and configuration. They are presented in the order
+in which you would typically configure them.
+
+| Component                                                                                                                                                         | Description                                                                                                                       | Configuration Instructions                                   |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|
+| [Load Balancer(s)](load_balancer.md)[^6]                                                                                                                          | Handles load balancing for the GitLab nodes where required.                                                                       | [Load balancer HA configuration](load_balancer.md)                               |
+| [Consul](../../development/architecture.md#consul)[^3]                                                                                     | Service discovery and health checks/failover                                                                                      | [Consul HA configuration](consul.md)                                     |
+| [PostgreSQL](../../development/architecture.md#postgresql)                                                                                 | Database                                                                                                                          | [Database HA configuration](database.md) |
+| [PgBouncer](../../development/architecture.md#pgbouncer)                                                                                   | Database Pool Manager                                                                                                             | [PgBouncer HA configuration](pgbouncer.md)                                   |
+| [Redis](../../development/architecture.md#redis)[^3] with Redis Sentinel                                                                   | Key/Value store for shared data with HA watcher service                                                                           | [Redis HA configuration](redis.md)        |
+| [Gitaly](../../development/architecture.md#gitaly)[^2] [^5] [^7]                                                                           | Recommended high-level storage for Git repository data.                                                                           | [Gitaly HA configuration](gitaly.md)                                      |
+| [Sidekiq](../../development/architecture.md#sidekiq)                                                                                       | Asynchronous/Background jobs                                                                                                      |                                                        |
+| [Cloud Object Storage service](object_storage.md)[^4]                                                                                                                | Recommended store for shared data objects such as LFS, Uploads, Artifacts, etc...                                              | [Cloud Object Storage configuration](object_storage.md)                              |
+| [GitLab application nodes](../../development/architecture.md#unicorn)[^1]                                                                  | (Unicorn / Puma, Workhorse) - Web-requests (UI, API, Git over HTTP)                                                               | [GitLab app HA/scaling configuration](gitlab.md)                                      |
+| [NFS](nfs.md)[^5] [^7]                                                                                                                                            | Shared disk storage service. Can be used as an alternative for Gitaly or Object Storage. Required for GitLab Pages.               | [NFS configuration](nfs.md)                                         |
+| [Prometheus](../../development/architecture.md#prometheus) and [Grafana](../../development/architecture.md#grafana) | GitLab environment monitoring                                                                                                     | [Monitoring node for scaling/HA](monitoring_node.md)                             |
+
+In some cases, components can be combined on the same nodes to reduce complexity as well.
+
+## Reference Architectures
+
+In this section we'll detail the Reference Architectures that can support large numbers
+of users. These were built, tested and verified by our Quality and Support teams.
+
+Testing was done with our GitLab Performance Tool at specific coded workloads, and the
 throughputs used for testing were calculated based on sample customer data. We
 test each endpoint type with the following number of requests per second (RPS)
 per 1000 users:
@@ -235,11 +81,11 @@ On different cloud vendors a best effort like for like can be used.
 | GitLab Rails[^1]            | 3     | 8 vCPU, 7.2GB Memory  | n1-highcpu-8 |
 | PostgreSQL                  | 3     | 2 vCPU, 7.5GB Memory  | n1-standard-2 |
 | PgBouncer                   | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
-| Gitaly[^2] [^7]             | X     | 4 vCPU, 15GB Memory   | n1-standard-4 |
+| Gitaly[^2] [^5] [^7]        | X     | 4 vCPU, 15GB Memory   | n1-standard-4 |
 | Redis[^3]                   | 3     | 2 vCPU, 7.5GB Memory  | n1-standard-2 |
 | Consul + Sentinel[^3]       | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
 | Sidekiq                     | 4     | 2 vCPU, 7.5GB Memory  | n1-standard-2 |
-| S3 Object Storage[^4]       | -     | -                     | -             |
+| Cloud Object Storage[^4]       | -     | -                     | -             |
 | NFS Server[^5] [^7]         | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
 | Monitoring node             | 1     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
 | External load balancing node[^6] | 1 | 2 vCPU, 1.8GB Memory | n1-highcpu-2  |
@@ -257,11 +103,11 @@ On different cloud vendors a best effort like for like can be used.
 | GitLab Rails[^1]            | 3     | 16 vCPU, 14.4GB Memory | n1-highcpu-16 |
 | PostgreSQL                  | 3     | 2 vCPU, 7.5GB Memory  | n1-standard-2 |
 | PgBouncer                   | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
-| Gitaly[^2] [^7]             | X     | 8 vCPU, 30GB Memory   | n1-standard-8 |
+| Gitaly[^2] [^5] [^7]        | X     | 8 vCPU, 30GB Memory   | n1-standard-8 |
 | Redis[^3]                   | 3     | 2 vCPU, 7.5GB Memory  | n1-standard-2 |
 | Consul + Sentinel[^3]       | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
 | Sidekiq                     | 4     | 2 vCPU, 7.5GB Memory  | n1-standard-2 |
-| S3 Object Storage[^4]       | -     | -                     | -             |
+| Cloud Object Storage[^4]       | -     | -                     | -             |
 | NFS Server[^5] [^7]         | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
 | Monitoring node             | 1     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
 | External load balancing node[^6] | 1 | 2 vCPU, 1.8GB Memory | n1-highcpu-2  |
@@ -279,14 +125,14 @@ On different cloud vendors a best effort like for like can be used.
 | GitLab Rails[^1]            | 3     | 32 vCPU, 28.8GB Memory | n1-highcpu-32 |
 | PostgreSQL                  | 3     | 4 vCPU, 15GB Memory   | n1-standard-4 |
 | PgBouncer                   | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
-| Gitaly[^2] [^7]             | X     | 16 vCPU, 60GB Memory  | n1-standard-16 |
+| Gitaly[^2] [^5] [^7]        | X     | 16 vCPU, 60GB Memory  | n1-standard-16 |
 | Redis[^3] - Cache           | 3     | 4 vCPU, 15GB Memory   | n1-standard-4 |
 | Redis[^3] - Queues / Shared State | 3 | 4 vCPU, 15GB Memory | n1-standard-4 |
 | Redis Sentinel[^3] - Cache  | 3     | 1 vCPU, 1.7GB Memory  | g1-small      |
 | Redis Sentinel[^3] - Queues / Shared State | 3 | 1 vCPU, 1.7GB Memory | g1-small |
 | Consul                      | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
 | Sidekiq                     | 4     | 4 vCPU, 15GB Memory   | n1-standard-4 |
-| S3 Object Storage[^4]       | -     | -                     | -             |
+| Cloud Object Storage[^4]       | -     | -                     | -             |
 | NFS Server[^5] [^7]         | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
 | Monitoring node             | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
 | External load balancing node[^6] | 1 | 2 vCPU, 1.8GB Memory | n1-highcpu-2  |
@@ -304,14 +150,14 @@ On different cloud vendors a best effort like for like can be used.
 | GitLab Rails[^1]            | 7     | 32 vCPU, 28.8GB Memory | n1-highcpu-32 |
 | PostgreSQL                  | 3     | 8 vCPU, 30GB Memory   | n1-standard-8 |
 | PgBouncer                   | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
-| Gitaly[^2] [^7]             | X     | 32 vCPU, 120GB Memory | n1-standard-32 |
+| Gitaly[^2] [^5] [^7]        | X     | 32 vCPU, 120GB Memory | n1-standard-32 |
 | Redis[^3] - Cache           | 3     | 4 vCPU, 15GB Memory   | n1-standard-4 |
 | Redis[^3] - Queues / Shared State | 3 | 4 vCPU, 15GB Memory | n1-standard-4 |
 | Redis Sentinel[^3] - Cache  | 3     | 1 vCPU, 1.7GB Memory  | g1-small      |
 | Redis Sentinel[^3] - Queues / Shared State | 3 | 1 vCPU, 1.7GB Memory | g1-small |
 | Consul                      | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
 | Sidekiq                     | 4     | 4 vCPU, 15GB Memory   | n1-standard-4 |
-| S3 Object Storage[^4]       | -     | -                     | -             |
+| Cloud Object Storage[^4]       | -     | -                     | -             |
 | NFS Server[^5] [^7]         | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
 | Monitoring node             | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
 | External load balancing node[^6] | 1 | 2 vCPU, 1.8GB Memory | n1-highcpu-2  |
@@ -329,7 +175,7 @@ On different cloud vendors a best effort like for like can be used.
 | GitLab Rails[^1]            | 15    | 32 vCPU, 28.8GB Memory | n1-highcpu-32 |
 | PostgreSQL                  | 3     | 16 vCPU, 60GB Memory  | n1-standard-16 |
 | PgBouncer                   | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
-| Gitaly[^2] [^7]             | X     | 64 vCPU, 240GB Memory | n1-standard-64 |
+| Gitaly[^2] [^5] [^7]        | X     | 64 vCPU, 240GB Memory | n1-standard-64 |
 | Redis[^3] - Cache           | 3     | 4 vCPU, 15GB Memory   | n1-standard-4 |
 | Redis[^3] - Queues / Shared State | 3 | 4 vCPU, 15GB Memory | n1-standard-4 |
 | Redis Sentinel[^3] - Cache  | 3     | 1 vCPU, 1.7GB Memory  | g1-small      |
@@ -337,7 +183,7 @@ On different cloud vendors a best effort like for like can be used.
 | Consul                      | 3     | 2 vCPU, 1.8GB Memory  | n1-highcpu-2  |
 | Sidekiq                     | 4     | 4 vCPU, 15GB Memory   | n1-standard-4 |
 | NFS Server[^5] [^7]         | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
-| S3 Object Storage[^4]       | -     | -                     | -             |
+| Cloud Object Storage[^4]       | -     | -                     | -             |
 | Monitoring node             | 1     | 4 vCPU, 3.6GB Memory  | n1-highcpu-4  |
 | External load balancing node[^6] | 1 | 2 vCPU, 1.8GB Memory | n1-highcpu-2  |
 | Internal load balancing node[^6] | 1 | 8 vCPU, 7.2GB Memory | n1-highcpu-8  |
@@ -361,7 +207,7 @@ On different cloud vendors a best effort like for like can be used.
       and another for the Queues and Shared State classes respectively. We also recommend
       that you run the Redis Sentinel clusters separately as well for each Redis Cluster.
 
-[^4]: For data objects such as LFS, Uploads, Artifacts, etc... We recommend a S3 Object Storage
+[^4]: For data objects such as LFS, Uploads, Artifacts, etc... We recommend a Cloud Object Storage
       where possible over NFS due to better performance and availability. Several types of objects
       are supported for S3 storage - [Job artifacts](../job_artifacts.md#using-object-storage),
       [LFS](../lfs/lfs_administration.md#storing-lfs-objects-in-remote-object-storage),
@@ -370,15 +216,15 @@ On different cloud vendors a best effort like for like can be used.
       [Packages](../packages/index.md#using-object-storage) (Optional Feature),
       [Dependency Proxy](../packages/dependency_proxy.md#using-object-storage) (Optional Feature).
 
-[^5]: NFS storage server is still required for [GitLab Pages](https://gitlab.com/gitlab-org/gitlab-pages/issues/196)
-      and optionally for CI Job Incremental Logging
-      ([can be switched to use Redis instead](../job_logs.md#new-incremental-logging-architecture)).
+[^5]: NFS can be used as an alternative for both repository data (replacing Gitaly) and
+      object storage but this isn't typically recommended for performance reasons. Note however it is required for
+      [GitLab Pages](https://gitlab.com/gitlab-org/gitlab-pages/issues/196).
 
 [^6]: Our architectures have been tested and validated with [HAProxy](https://www.haproxy.org/)
       as the load balancer. However other reputable load balancers with similar feature sets
       should also work instead but be aware these aren't validated.
 
-[^7]: We strongly recommend that the Gitaly and / or NFS nodes are set up with SSD disks over
+[^7]: We strongly recommend that any Gitaly and / or NFS nodes are set up with SSD disks over
       HDD with a throughput of at least 8,000 IOPS for read operations and 2,000 IOPS for write
       as these components have heavy I/O. These IOPS values are recommended only as a starter
       as with time they may be adjusted higher or lower depending on the scale of your
diff --git a/doc/administration/high_availability/database.md b/doc/administration/high_availability/database.md
index daeb0f9baf53b..596df656e2e79 100644
--- a/doc/administration/high_availability/database.md
+++ b/doc/administration/high_availability/database.md
@@ -22,11 +22,9 @@ If you use a cloud-managed service, or provide your own PostgreSQL:
 1. Configure the GitLab application servers with the appropriate details.
    This step is covered in [Configuring GitLab for HA](gitlab.md).
 
-## PostgreSQL in a Scaled Environment
+## PostgreSQL in a Scaled and Highly Available Environment
 
-This section is relevant for [Scaled Architecture](README.md#scalable-architecture-examples)
-environments including [Basic Scaling](README.md#basic-scaling) and
-[Full Scaling](README.md#full-scaling).
+This section is relevant for [Scalable and Highly Available Setups](README.md).
 
 ### Provide your own PostgreSQL instance **(CORE ONLY)**
 
@@ -94,23 +92,6 @@ deploy the bundled PostgreSQL.
 Advanced configuration options are supported and can be added if
 needed.
 
-Continue configuration of other components by going
-[back to Scaled Architectures](README.md#scalable-architecture-examples)
-
-## PostgreSQL with High Availability
-
-This section is relevant for [High Availability Architecture](README.md#high-availability-architecture-examples)
-environments including [Horizontal](README.md#horizontal),
-[Hybrid](README.md#hybrid), and
-[Fully Distributed](README.md#fully-distributed).
-
-### Provide your own PostgreSQL instance **(CORE ONLY)**
-
-If you want to use your own deployed PostgreSQL instance(s),
-see [Provide your own PostgreSQL instance](#provide-your-own-postgresql-instance-core-only)
-for more details. However, you can use the GitLab Omnibus package to easily
-deploy the bundled PostgreSQL.
-
 ### High Availability with GitLab Omnibus **(PREMIUM ONLY)**
 
 > Important notes:
diff --git a/doc/administration/high_availability/gitaly.md b/doc/administration/high_availability/gitaly.md
index 739d1ae35fbd1..bb40747b24cd8 100644
--- a/doc/administration/high_availability/gitaly.md
+++ b/doc/administration/high_availability/gitaly.md
@@ -11,18 +11,15 @@ should consider using Gitaly on a separate node.
 See the [Gitaly HA Epic](https://gitlab.com/groups/gitlab-org/-/epics/289) to
 track plans and progress toward high availability support.
 
-This document is relevant for [Scaled Architecture](README.md#scalable-architecture-examples)
-environments and [High Availability Architecture](README.md#high-availability-architecture-examples).
+This document is relevant for [Scalable and Highly Available Setups](README.md).
 
 ## Running Gitaly on its own server
 
 See [Running Gitaly on its own server](../gitaly/index.md#running-gitaly-on-its-own-server)
 in Gitaly documentation.
 
-Continue configuration of other components by going back to:
-
-- [Scaled Architectures](README.md#scalable-architecture-examples)
-- [High Availability Architectures](README.md#high-availability-architecture-examples)
+Continue configuration of other components by going back to the
+[Scaling and High Availability](README.md#gitlab-components-and-configuration-instructions) page.
 
 ## Enable Monitoring
 
diff --git a/doc/administration/high_availability/object_storage.md b/doc/administration/high_availability/object_storage.md
new file mode 100644
index 0000000000000..6ec34ea2f5dc3
--- /dev/null
+++ b/doc/administration/high_availability/object_storage.md
@@ -0,0 +1,28 @@
+---
+type: reference
+---
+
+# Cloud Object Storage
+
+GitLab supports utilizing a Cloud Object Storage service over [NFS](nfs.md) for holding
+numerous types of data. This is recommended in larger setups as object storage is
+typically much more performant and reliable.
+
+For configuring GitLab to use Object Storage refer to the following guides:
+
+1. Make sure the [`git` user home directory](https://docs.gitlab.com/omnibus/settings/configuration.html#moving-the-home-directory-for-a-user) is on local disk.
+1. Configure [database lookup of SSH keys](../operations/fast_ssh_key_lookup.md)
+   to eliminate the need for a shared `authorized_keys` file.
+1. Configure [object storage for job artifacts](../job_artifacts.md#using-object-storage)
+   including [incremental logging](../job_logs.md#new-incremental-logging-architecture).
+1. Configure [object storage for LFS objects](../lfs/lfs_administration.md#storing-lfs-objects-in-remote-object-storage).
+1. Configure [object storage for uploads](../uploads.md#using-object-storage-core-only).
+1. Configure [object storage for merge request diffs](../merge_request_diffs.md#using-object-storage).
+1. Configure [object storage for packages](../packages/index.md#using-object-storage) (optional feature).
+1. Configure [object storage for dependency proxy](../packages/dependency_proxy.md#using-object-storage) (optional feature).
+
+NOTE: **Note:**
+One current feature of GitLab that still requires a shared directory (NFS) is
+[GitLab Pages](../../user/project/pages/index.md).
+There is [work in progress](https://gitlab.com/gitlab-org/gitlab-pages/issues/196)
+to eliminate the need for NFS to support GitLab Pages.
diff --git a/doc/administration/high_availability/redis.md b/doc/administration/high_availability/redis.md
index 539d492632fda..79082fefdd943 100644
--- a/doc/administration/high_availability/redis.md
+++ b/doc/administration/high_availability/redis.md
@@ -20,11 +20,9 @@ The following are the requirements for providing your own Redis instance:
 Note the Redis node's IP address or hostname, port, and password (if required).
 These will be necessary when configuring the GitLab application servers later.
 
-## Redis in a Scaled Environment
+## Redis in a Scaled and Highly Available Environment
 
-This section is relevant for [Scaled Architecture](README.md#scalable-architecture-examples)
-environments including [Basic Scaling](README.md#basic-scaling) and
-[Full Scaling](README.md#full-scaling).
+This section is relevant for [Scalable and Highly Available Setups](README.md).
 
 ### Provide your own Redis instance **(CORE ONLY)**
 
@@ -85,22 +83,8 @@ Omnibus:
 Advanced configuration options are supported and can be added if
 needed.
 
-Continue configuration of other components by going
-[back to Scaled Architectures](README.md#scalable-architecture-examples)
-
-## Redis with High Availability
-
-This section is relevant for [High Availability Architecture](README.md#high-availability-architecture-examples)
-environments including [Horizontal](README.md#horizontal),
-[Hybrid](README.md#hybrid), and
-[Fully Distributed](README.md#fully-distributed).
-
-### Provide your own Redis instance **(CORE ONLY)**
-
-If you want to use your own deployed Redis instance(s),
-see [Provide your own Redis instance](#provide-your-own-redis-instance-core-only)
-for more details. However, you can use the GitLab Omnibus package to easily
-deploy the bundled Redis.
+Continue configuration of other components by going back to the
+[Scaling and High Availability](README.md#gitlab-components-and-configuration-instructions) page.
 
 ### High Availability with GitLab Omnibus **(PREMIUM ONLY)**
 
diff --git a/doc/administration/troubleshooting/img/AzureAD-basic_SAML.png b/doc/administration/troubleshooting/img/AzureAD-basic_SAML.png
index be420b1a3dee55527e07db357f5fffe51374a436..a553dc182ce266f20e28fc724a8c782bfc72531a 100644
GIT binary patch
literal 96021
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
D>UO@7

literal 137104
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
T+?vr#00000NkvXXu0mjfSc%x!

diff --git a/doc/api/README.md b/doc/api/README.md
index 639d5067dd7d9..7a9d86ee71882 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -355,7 +355,7 @@ curl --head --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example
 
 The response will then be:
 
-```
+```http
 HTTP/1.1 200 OK
 Cache-Control: no-cache
 Content-Length: 1103
@@ -415,7 +415,7 @@ curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
 
 The response header includes a link to the next page. For example:
 
-```
+```http
 HTTP/1.1 200 OK
 ...
 Link: <https://gitlab.example.com/api/v4/projects?pagination=keyset&per_page=50&order_by=id&sort=asc&id_after=42>; rel="next"
@@ -540,7 +540,7 @@ Such errors appear in two cases:
 
 When an attribute is missing, you will get something like:
 
-```
+```http
 HTTP/1.1 400 Bad Request
 Content-Type: application/json
 {
@@ -551,7 +551,7 @@ Content-Type: application/json
 When a validation error occurs, error messages will be different. They will
 hold all details of validation errors:
 
-```
+```http
 HTTP/1.1 400 Bad Request
 Content-Type: application/json
 {
@@ -589,7 +589,7 @@ follows:
 
 When you try to access an API URL that does not exist you will receive 404 Not Found.
 
-```
+```http
 HTTP/1.1 404 Not Found
 Content-Type: application/json
 {
diff --git a/doc/api/pipeline_triggers.md b/doc/api/pipeline_triggers.md
index e207ff8e98a8d..55c6e37c16404 100644
--- a/doc/api/pipeline_triggers.md
+++ b/doc/api/pipeline_triggers.md
@@ -6,7 +6,7 @@ You can read more about [triggering pipelines through the API](../ci/triggers/RE
 
 Get a list of project's build triggers.
 
-```
+```plaintext
 GET /projects/:id/triggers
 ```
 
@@ -14,7 +14,7 @@ GET /projects/:id/triggers
 |-----------|---------|----------|---------------------|
 | `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
 
-```
+```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/triggers"
 ```
 
@@ -36,7 +36,7 @@ curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/a
 
 Get details of project's build trigger.
 
-```
+```plaintext
 GET /projects/:id/triggers/:trigger_id
 ```
 
@@ -45,7 +45,7 @@ GET /projects/:id/triggers/:trigger_id
 | `id`         | integer/string | yes      | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user      |
 | `trigger_id` | integer | yes      | The trigger id           |
 
-```
+```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/triggers/5"
 ```
 
@@ -65,7 +65,7 @@ curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/a
 
 Create a trigger for a project.
 
-```
+```plaintext
 POST /projects/:id/triggers
 ```
 
@@ -74,7 +74,7 @@ POST /projects/:id/triggers
 | `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user      |
 | `description` | string  | yes      | The trigger name         |
 
-```
+```shell
 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form description="my description" "https://gitlab.example.com/api/v4/projects/1/triggers"
 ```
 
@@ -94,7 +94,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form descrip
 
 Update a trigger for a project.
 
-```
+```plaintext
 PUT /projects/:id/triggers/:trigger_id
 ```
 
@@ -104,7 +104,7 @@ PUT /projects/:id/triggers/:trigger_id
 | `trigger_id`  | integer | yes      | The trigger id           |
 | `description` | string  | no       | The trigger name         |
 
-```
+```shell
 curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" --form description="my description" "https://gitlab.example.com/api/v4/projects/1/triggers/10"
 ```
 
@@ -124,7 +124,7 @@ curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" --form descript
 
 Remove a project's build trigger.
 
-```
+```plaintext
 DELETE /projects/:id/triggers/:trigger_id
 ```
 
@@ -133,6 +133,6 @@ DELETE /projects/:id/triggers/:trigger_id
 | `id`           | integer/string | yes      | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user      |
 | `trigger_id`   | integer | yes      | The trigger id           |
 
-```
+```shell
 curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/triggers/5"
 ```
diff --git a/doc/api/releases/links.md b/doc/api/releases/links.md
index 2a9e0ccb664ac..ed428b0fe75ea 100644
--- a/doc/api/releases/links.md
+++ b/doc/api/releases/links.md
@@ -9,7 +9,7 @@ GitLab supports links links to `http`, `https`, and `ftp` assets.
 
 Get assets as links from a Release.
 
-```
+```plaintext
 GET /projects/:id/releases/:tag_name/assets/links
 ```
 
@@ -47,7 +47,7 @@ Example response:
 
 Get an asset as a link from a Release.
 
-```
+```plaintext
 GET /projects/:id/releases/:tag_name/assets/links/:link_id
 ```
 
@@ -78,7 +78,7 @@ Example response:
 
 Create an asset as a link from a Release.
 
-```
+```plaintext
 POST /projects/:id/releases/:tag_name/assets/links
 ```
 
@@ -114,7 +114,7 @@ Example response:
 
 Update an asset as a link from a Release.
 
-```
+```plaintext
 PUT /projects/:id/releases/:tag_name/assets/links/:link_id
 ```
 
@@ -150,7 +150,7 @@ Example response:
 
 Delete an asset as a link from a Release.
 
-```
+```plaintext
 DELETE /projects/:id/releases/:tag_name/assets/links/:link_id
 ```
 
diff --git a/doc/api/scim.md b/doc/api/scim.md
index cdd635d0627ee..eaa56b0d0dd08 100644
--- a/doc/api/scim.md
+++ b/doc/api/scim.md
@@ -122,7 +122,7 @@ Parameters:
 | `userName`   | string      | yes | Username of the user. |
 | `emails`     | JSON string | yes | Work email. |
 | `name`       | JSON string | yes | Name of the user. |
-| `meta`       | string      | no  | Resource type (`User'). |
+| `meta`       | string      | no  | Resource type (`User`). |
 
 Example request:
 
diff --git a/doc/api/search.md b/doc/api/search.md
index 78f68ed20e3a7..640a98117e0be 100644
--- a/doc/api/search.md
+++ b/doc/api/search.md
@@ -751,7 +751,7 @@ Search within the specified project.
 
 If a user is not a member of a project and the project is private, a `GET` request on that project will result to a `404` status code.
 
-```
+```plaintext
 GET /projects/:id/search
 ```
 
diff --git a/doc/api/services.md b/doc/api/services.md
index 0d74915090933..061dd3f4eadcf 100644
--- a/doc/api/services.md
+++ b/doc/api/services.md
@@ -1145,7 +1145,7 @@ Parameters:
 | `merge_requests_events` | boolean | false | Enable notifications for merge request events |
 | `tag_push_events` | boolean | false | Enable notifications for tag push events |
 | `note_events` | boolean | false | Enable notifications for note events |
-| `confidental_note_events` | boolean | false | Enable notifications for confidential note events |
+| `confidential_note_events` | boolean | false | Enable notifications for confidential note events |
 | `pipeline_events` | boolean | false | Enable notifications for pipeline events |
 | `wiki_page_events` | boolean | false | Enable notifications for wiki page events |
 
diff --git a/doc/api/settings.md b/doc/api/settings.md
index 5ec05f3922446..1996f1ce1440c 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -10,7 +10,7 @@ administrator in order to perform this action.
 List the current [application settings](#list-of-settings-that-can-be-accessed-via-api-calls)
 of the GitLab instance.
 
-```
+```plaintext
 GET /application/settings
 ```
 
@@ -90,7 +90,7 @@ the `file_template_project_id`, `deletion_adjourned_period`, or the `geo_node_al
 Use an API call to modify GitLab instance
 [application settings](#list-of-settings-that-can-be-accessed-via-api-calls).
 
-```
+```plaintext
 PUT /application/settings
 ```
 
diff --git a/doc/api/sidekiq_metrics.md b/doc/api/sidekiq_metrics.md
index 76aa04077c77c..5350feff4e37d 100644
--- a/doc/api/sidekiq_metrics.md
+++ b/doc/api/sidekiq_metrics.md
@@ -10,7 +10,7 @@ of Sidekiq, its jobs, queues, and processes.
 List information about all the registered queues, their backlog and their
 latency.
 
-```
+```plaintext
 GET /sidekiq/queue_metrics
 ```
 
@@ -35,7 +35,7 @@ Example response:
 
 List information about all the Sidekiq workers registered to process your queues.
 
-```
+```plaintext
 GET /sidekiq/process_metrics
 ```
 
@@ -77,7 +77,7 @@ Example response:
 
 List information about the jobs that Sidekiq has performed.
 
-```
+```plaintext
 GET /sidekiq/job_stats
 ```
 
@@ -102,7 +102,7 @@ Example response:
 
 List all the currently available information about Sidekiq.
 
-```
+```plaintext
 GET /sidekiq/compound_metrics
 ```
 
diff --git a/doc/api/statistics.md b/doc/api/statistics.md
index c7713ab2dae9b..883a7640cf8a4 100644
--- a/doc/api/statistics.md
+++ b/doc/api/statistics.md
@@ -8,7 +8,7 @@ administrator in order to perform this action.
 NOTE: **Note:**
 These statistics are approximate.
 
-```
+```plaintext
 GET /application/statistics
 ```
 
diff --git a/doc/api/suggestions.md b/doc/api/suggestions.md
index f95ab82848ad2..84bafd3c1ead6 100644
--- a/doc/api/suggestions.md
+++ b/doc/api/suggestions.md
@@ -7,7 +7,7 @@ Every API call to suggestions must be authenticated.
 Applies a suggested patch in a merge request. Users must be
 at least [Developer](../user/permissions.md) to perform such action.
 
-```
+```plaintext
 PUT /suggestions/:id/apply
 ```
 
diff --git a/doc/api/system_hooks.md b/doc/api/system_hooks.md
index 1e34adc532061..cd69a6a6b34c2 100644
--- a/doc/api/system_hooks.md
+++ b/doc/api/system_hooks.md
@@ -11,7 +11,7 @@ Read more about [system hooks](../system_hooks/system_hooks.md).
 
 Get a list of all system hooks.
 
-```
+```plaintext
 GET /hooks
 ```
 
@@ -42,7 +42,7 @@ Example response:
 
 Add a new system hook.
 
-```
+```plaintext
 POST /hooks
 ```
 
@@ -81,7 +81,7 @@ Example response:
 
 ## Test system hook
 
-```
+```plaintext
 GET /hooks/:id
 ```
 
@@ -112,7 +112,7 @@ Example response:
 
 Deletes a system hook.
 
-```
+```plaintext
 DELETE /hooks/:id
 ```
 
diff --git a/doc/api/tags.md b/doc/api/tags.md
index a796b75832801..0a0490e072e2e 100644
--- a/doc/api/tags.md
+++ b/doc/api/tags.md
@@ -6,7 +6,7 @@ Get a list of repository tags from a project, sorted by name in reverse
 alphabetical order. This endpoint can be accessed without authentication if the
 repository is publicly accessible.
 
-```
+```plaintext
 GET /projects/:id/repository/tags
 ```
 
@@ -57,7 +57,7 @@ Parameters:
 Get a specific repository tag determined by its name. This endpoint can be
 accessed without authentication if the repository is publicly accessible.
 
-```
+```plaintext
 GET /projects/:id/repository/tags/:tag_name
 ```
 
@@ -104,7 +104,7 @@ Example Response:
 
 Creates a new tag in the repository that points to the supplied ref.
 
-```
+```plaintext
 POST /projects/:id/repository/tags
 ```
 
@@ -164,7 +164,7 @@ status code `405` with an explaining error message is returned.
 
 Deletes a tag of a repository with given name.
 
-```
+```plaintext
 DELETE /projects/:id/repository/tags/:tag_name
 ```
 
@@ -178,7 +178,7 @@ Parameters:
 Add release notes to the existing Git tag. If there
 already exists a release for the given tag, status code `409` is returned.
 
-```
+```plaintext
 POST /projects/:id/repository/tags/:tag_name/release
 ```
 
@@ -210,7 +210,7 @@ Response:
 
 Updates the release notes of a given release.
 
-```
+```plaintext
 PUT /projects/:id/repository/tags/:tag_name/release
 ```
 
diff --git a/doc/api/templates/dockerfiles.md b/doc/api/templates/dockerfiles.md
index 4453d3692c792..6e693a405b6e5 100644
--- a/doc/api/templates/dockerfiles.md
+++ b/doc/api/templates/dockerfiles.md
@@ -12,7 +12,7 @@ information on Dockerfiles, see the
 
 Get all Dockerfile templates.
 
-```
+```plaintext
 GET /templates/dockerfiles
 ```
 
@@ -99,7 +99,7 @@ Example response:
 
 Get a single Dockerfile template.
 
-```
+```plaintext
 GET /templates/dockerfiles/:key
 ```
 
diff --git a/doc/api/templates/licenses.md b/doc/api/templates/licenses.md
index 0b95e4d806508..f66fb70e10815 100644
--- a/doc/api/templates/licenses.md
+++ b/doc/api/templates/licenses.md
@@ -13,7 +13,7 @@ resources available online.
 
 Get all license templates.
 
-```
+```plaintext
 GET /templates/licenses
 ```
 
@@ -110,7 +110,7 @@ Example response:
 Get a single license template. You can pass parameters to replace the license
 placeholder.
 
-```
+```plaintext
 GET /templates/licenses/:key
 ```
 
diff --git a/doc/api/todos.md b/doc/api/todos.md
index a83b045f9a46c..058009b0e3bfc 100644
--- a/doc/api/todos.md
+++ b/doc/api/todos.md
@@ -7,7 +7,7 @@
 Returns a list of todos. When no filter is applied, it returns all pending todos
 for the current user. Different filters allow the user to precise the request.
 
-```
+```plaintext
 GET /todos
 ```
 
@@ -184,7 +184,7 @@ Example Response:
 Marks a single pending todo given by its ID for the current user as done. The
 todo marked as done is returned in the response.
 
-```
+```plaintext
 POST /todos/:id/mark_as_done
 ```
 
@@ -280,7 +280,7 @@ Example Response:
 
 Marks all pending todos for the current user as done. It returns the HTTP status code `204` with an empty response.
 
-```
+```plaintext
 POST /todos/mark_as_done
 ```
 
diff --git a/doc/api/users.md b/doc/api/users.md
index 7952a703e470b..929ad1248be11 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -10,7 +10,7 @@ This function takes pagination parameters `page` and `per_page` to restrict the
 
 ### For normal users
 
-```
+```plaintext
 GET /users
 ```
 
@@ -39,13 +39,13 @@ You can also search for users by name or primary email using `?search=`. For exa
 
 In addition, you can lookup users by username:
 
-```
+```plaintext
 GET /users?username=:username
 ```
 
 For example:
 
-```
+```plaintext
 GET /users?username=jack_smith
 ```
 
@@ -53,11 +53,11 @@ In addition, you can filter users based on states eg. `blocked`, `active`
 This works only to filter users who are `blocked` or `active`.
 It does not support `active=false` or `blocked=false`.
 
-```
+```plaintext
 GET /users?active=true
 ```
 
-```
+```plaintext
 GET /users?blocked=true
 ```
 
@@ -66,7 +66,7 @@ Username search is case insensitive.
 
 ### For admins
 
-```
+```plaintext
 GET /users
 ```
 
@@ -187,13 +187,13 @@ the `group_saml` provider option:
 
 You can lookup users by external UID and provider:
 
-```
+```plaintext
 GET /users?extern_uid=:extern_uid&provider=:provider
 ```
 
 For example:
 
-```
+```plaintext
 GET /users?extern_uid=1234567&provider=github
 ```
 
@@ -201,19 +201,19 @@ You can search for users who are external with: `/users?external=true`
 
 You can search users by creation date time range with:
 
-```
+```plaintext
 GET /users?created_before=2001-01-02T00:00:00.060Z&created_after=1999-01-02T00:00:00.060
 ```
 
 You can filter by [custom attributes](custom_attributes.md) with:
 
-```
+```plaintext
 GET /users?custom_attributes[key]=value&custom_attributes[other_key]=other_value
 ```
 
 You can include the users' [custom attributes](custom_attributes.md) in the response with:
 
-```
+```plaintext
 GET /users?with_custom_attributes=true
 ```
 
@@ -223,7 +223,7 @@ Get a single user.
 
 ### For user
 
-```
+```plaintext
 GET /users/:id
 ```
 
@@ -253,7 +253,7 @@ Parameters:
 
 ### For admin
 
-```
+```plaintext
 GET /users/:id
 ```
 
@@ -340,7 +340,7 @@ see the `group_saml` option:
 
 You can include the user's [custom attributes](custom_attributes.md) in the response with:
 
-```
+```plaintext
 GET /users/:id?with_custom_attributes=true
 ```
 
@@ -358,7 +358,7 @@ over `password`. In addition, `reset_password` and
 NOTE: **Note:**
 From [GitLab 12.1](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/29888/), `private_profile` will default to `false`.
 
-```
+```plaintext
 POST /users
 ```
 
@@ -399,7 +399,7 @@ Parameters:
 
 Modifies an existing user. Only administrators can change attributes of a user.
 
-```
+```plaintext
 PUT /users/:id
 ```
 
@@ -445,7 +445,7 @@ For example, when renaming the email address to some existing one.
 
 Deletes a user's authentication identity using the provider name associated with that identity. Available only for administrators.
 
-```
+```plaintext
 DELETE /users/:id/identities/:provider
 ```
 
@@ -459,7 +459,7 @@ Parameters:
 Deletes a user. Available only for administrators.
 This returns a `204 No Content` status code if the operation was successfully, `404` if the resource was not found or `409` if the user cannot be soft deleted.
 
-```
+```plaintext
 DELETE /users/:id
 ```
 
@@ -474,7 +474,7 @@ Parameters:
 
 Gets currently authenticated user.
 
-```
+```plaintext
 GET /user
 ```
 
@@ -522,7 +522,7 @@ Parameters:
 
 - `sudo` (optional) - the ID of a user to make the call in their place
 
-```
+```plaintext
 GET /user
 ```
 
@@ -571,7 +571,7 @@ GET /user
 
 Get the status of the currently signed in user.
 
-```
+```plaintext
 GET /user/status
 ```
 
@@ -593,7 +593,7 @@ Example response:
 
 Get the status of a user.
 
-```
+```plaintext
 GET /users/:id_or_username/status
 ```
 
@@ -619,7 +619,7 @@ Example response:
 
 Set the status of the current user.
 
-```
+```plaintext
 PUT /user/status
 ```
 
@@ -652,7 +652,7 @@ Get the counts (same as in top right menu) of the currently signed in user.
 | --------- | ---- | ----------- |
 | `merge_requests`   | number | Merge requests that are active and assigned to current user. |
 
-```
+```plaintext
 GET /user_counts
 ```
 
@@ -676,7 +676,7 @@ Please refer to the [List of user projects](projects.md#list-user-projects).
 
 Get a list of currently authenticated user's SSH keys.
 
-```
+```plaintext
 GET /user/keys
 ```
 
@@ -705,7 +705,7 @@ Parameters:
 
 Get a list of a specified user's SSH keys.
 
-```
+```plaintext
 GET /users/:id_or_username/keys
 ```
 
@@ -717,7 +717,7 @@ GET /users/:id_or_username/keys
 
 Get a single key.
 
-```
+```plaintext
 GET /user/keys/:key_id
 ```
 
@@ -738,7 +738,7 @@ Parameters:
 
 Creates a new key owned by the currently authenticated user.
 
-```
+```plaintext
 POST /user/keys
 ```
 
@@ -776,7 +776,7 @@ error occurs a `400 Bad Request` is returned with a message explaining the error
 
 Create new key owned by specified user. Available only for admin
 
-```
+```plaintext
 POST /users/:id/keys
 ```
 
@@ -791,7 +791,7 @@ Parameters:
 Deletes key owned by currently authenticated user.
 This returns a `204 No Content` status code if the operation was successfully or `404` if the resource was not found.
 
-```
+```plaintext
 DELETE /user/keys/:key_id
 ```
 
@@ -803,7 +803,7 @@ Parameters:
 
 Deletes key owned by a specified user. Available only for admin.
 
-```
+```plaintext
 DELETE /users/:id/keys/:key_id
 ```
 
@@ -816,7 +816,7 @@ Parameters:
 
 Get a list of currently authenticated user's GPG keys.
 
-```
+```plaintext
 GET /user/gpg_keys
 ```
 
@@ -840,7 +840,7 @@ Example response:
 
 Get a specific GPG key of currently authenticated user.
 
-```
+```plaintext
 GET /user/gpg_keys/:key_id
 ```
 
@@ -868,7 +868,7 @@ Example response:
 
 Creates a new GPG key owned by the currently authenticated user.
 
-```
+```plaintext
 POST /user/gpg_keys
 ```
 
@@ -898,7 +898,7 @@ Example response:
 
 Delete a GPG key owned by currently authenticated user.
 
-```
+```plaintext
 DELETE /user/gpg_keys/:key_id
 ```
 
@@ -918,7 +918,7 @@ Returns `204 No Content` on success, or `404 Not found` if the key cannot be fou
 
 Get a list of a specified user's GPG keys. Available only for admins.
 
-```
+```plaintext
 GET /users/:id/gpg_keys
 ```
 
@@ -948,7 +948,7 @@ Example response:
 
 Get a specific GPG key for a given user. Available only for admins.
 
-```
+```plaintext
 GET /users/:id/gpg_keys/:key_id
 ```
 
@@ -977,7 +977,7 @@ Example response:
 
 Create new GPG key owned by the specified user. Available only for admins.
 
-```
+```plaintext
 POST /users/:id/gpg_keys
 ```
 
@@ -1008,7 +1008,7 @@ Example response:
 
 Delete a GPG key owned by a specified user. Available only for admins.
 
-```
+```plaintext
 DELETE /users/:id/gpg_keys/:key_id
 ```
 
@@ -1027,7 +1027,7 @@ curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" https://gitl
 
 Get a list of currently authenticated user's emails.
 
-```
+```plaintext
 GET /user/emails
 ```
 
@@ -1052,7 +1052,7 @@ Parameters:
 
 Get a list of a specified user's emails. Available only for admin
 
-```
+```plaintext
 GET /users/:id/emails
 ```
 
@@ -1064,7 +1064,7 @@ Parameters:
 
 Get a single email.
 
-```
+```plaintext
 GET /user/emails/:email_id
 ```
 
@@ -1083,7 +1083,7 @@ Parameters:
 
 Creates a new email owned by the currently authenticated user.
 
-```
+```plaintext
 POST /user/emails
 ```
 
@@ -1115,7 +1115,7 @@ error occurs a `400 Bad Request` is returned with a message explaining the error
 
 Create new email owned by specified user. Available only for admin
 
-```
+```plaintext
 POST /users/:id/emails
 ```
 
@@ -1130,7 +1130,7 @@ Parameters:
 Deletes email owned by currently authenticated user.
 This returns a `204 No Content` status code if the operation was successfully or `404` if the resource was not found.
 
-```
+```plaintext
 DELETE /user/emails/:email_id
 ```
 
@@ -1142,7 +1142,7 @@ Parameters:
 
 Deletes email owned by a specified user. Available only for admin.
 
-```
+```plaintext
 DELETE /users/:id/emails/:email_id
 ```
 
@@ -1155,7 +1155,7 @@ Parameters:
 
 Blocks the specified user. Available only for admin.
 
-```
+```plaintext
 POST /users/:id/block
 ```
 
@@ -1170,7 +1170,7 @@ Will return `201 OK` on success, `404 User Not Found` is user cannot be found or
 
 Unblocks the specified user. Available only for admin.
 
-```
+```plaintext
 POST /users/:id/unblock
 ```
 
@@ -1187,7 +1187,7 @@ Will return `201 OK` on success, `404 User Not Found` is user cannot be found or
 
 Deactivates the specified user. Available only for admin.
 
-```
+```plaintext
 POST /users/:id/deactivate
 ```
 
@@ -1209,7 +1209,7 @@ Returns:
 
 Activates the specified user. Available only for admin.
 
-```
+```plaintext
 POST /users/:id/activate
 ```
 
@@ -1234,7 +1234,7 @@ Please refer to the [Events API documentation](events.md#get-user-contribution-e
 It retrieves every impersonation token of the user. Use the pagination
 parameters `page` and `per_page` to restrict the list of impersonation tokens.
 
-```
+```plaintext
 GET /users/:user_id/impersonation_tokens
 ```
 
@@ -1245,7 +1245,7 @@ Parameters:
 | `user_id` | integer | yes      | The ID of the user                                         |
 | `state`   | string  | no       | filter tokens based on state (`all`, `active`, `inactive`) |
 
-```
+```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/users/42/impersonation_tokens
 ```
 
@@ -1286,7 +1286,7 @@ Example response:
 
 It shows a user's impersonation token.
 
-```
+```plaintext
 GET /users/:user_id/impersonation_tokens/:impersonation_token_id
 ```
 
@@ -1297,7 +1297,7 @@ Parameters:
 | `user_id`                | integer | yes      | The ID of the user                |
 | `impersonation_token_id` | integer | yes      | The ID of the impersonation token |
 
-```
+```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/users/42/impersonation_tokens/2
 ```
 
@@ -1328,7 +1328,7 @@ You are only able to create impersonation tokens to impersonate the user and per
 both API calls and Git reads and writes. The user will not see these tokens in their profile
 settings page.
 
-```
+```plaintext
 POST /users/:user_id/impersonation_tokens
 ```
 
@@ -1339,7 +1339,7 @@ POST /users/:user_id/impersonation_tokens
 | `expires_at` | date    | no       | The expiration date of the impersonation token in ISO format (`YYYY-MM-DD`)|
 | `scopes`     | array   | yes      | The array of scopes of the impersonation token (`api`, `read_user`) |
 
-```
+```shell
 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --data "name=mytoken" --data "expires_at=2017-04-04" --data "scopes[]=api" https://gitlab.example.com/api/v4/users/42/impersonation_tokens
 ```
 
@@ -1367,11 +1367,11 @@ Example response:
 
 It revokes an impersonation token.
 
-```
+```plaintext
 DELETE /users/:user_id/impersonation_tokens/:impersonation_token_id
 ```
 
-```
+```shell
 curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/users/42/impersonation_tokens/1
 ```
 
@@ -1398,7 +1398,7 @@ The activities that update the timestamp are:
 By default, it shows the activity for all users in the last 6 months, but this can be
 amended by using the `from` parameter.
 
-```
+```plaintext
 GET /user/activities
 ```
 
diff --git a/doc/api/version.md b/doc/api/version.md
index a89b88782987a..6c9ff6ac9e104 100644
--- a/doc/api/version.md
+++ b/doc/api/version.md
@@ -5,7 +5,7 @@
 Retrieve version information for this GitLab instance. Responds `200 OK` for
 authenticated users.
 
-```
+```plaintext
 GET /version
 ```
 
diff --git a/doc/api/visual_review_discussions.md b/doc/api/visual_review_discussions.md
index 3d1c5e5c4c8fd..161f84f461865 100644
--- a/doc/api/visual_review_discussions.md
+++ b/doc/api/visual_review_discussions.md
@@ -10,7 +10,7 @@ feedback from [Visual Reviews](../ci/review_apps/index.md#visual-reviews-starter
 Creates a new thread to a single project merge request. This is similar to creating
 a note but other comments (replies) can be added to it later.
 
-```
+```plaintext
 POST /projects/:id/merge_requests/:merge_request_iid/visual_review_discussions
 ```
 
diff --git a/doc/api/vulnerability_findings.md b/doc/api/vulnerability_findings.md
index 833a46ccce57e..d1d4966f0f08f 100644
--- a/doc/api/vulnerability_findings.md
+++ b/doc/api/vulnerability_findings.md
@@ -34,7 +34,7 @@ Read more on [pagination](README.md#pagination).
 
 List all of a project's vulnerability findings.
 
-```
+```plaintext
 GET /projects/:id/vulnerability_findings
 GET /projects/:id/vulnerability_findings?report_type=sast
 GET /projects/:id/vulnerability_findings?report_type=container_scanning
diff --git a/doc/api/wikis.md b/doc/api/wikis.md
index 6cde2ebb7a7b5..cdaf95fc291a5 100644
--- a/doc/api/wikis.md
+++ b/doc/api/wikis.md
@@ -8,7 +8,7 @@ Available only in APIv4.
 
 Get all wiki pages for a given project.
 
-```
+```plaintext
 GET /projects/:id/wikis
 ```
 
@@ -49,7 +49,7 @@ Example response:
 
 Get a wiki page for a given project.
 
-```
+```plaintext
 GET /projects/:id/wikis/:slug
 ```
 
@@ -77,7 +77,7 @@ Example response:
 
 Creates a new wiki page for the given repository with the given title, slug, and content.
 
-```
+```plaintext
 POST /projects/:id/wikis
 ```
 
@@ -107,7 +107,7 @@ Example response:
 
 Updates an existing wiki page. At least one parameter is required to update the wiki page.
 
-```
+```plaintext
 PUT /projects/:id/wikis/:slug
 ```
 
@@ -138,7 +138,7 @@ Example response:
 
 Deletes a wiki page with a given slug.
 
-```
+```plaintext
 DELETE /projects/:id/wikis/:slug
 ```
 
@@ -160,7 +160,7 @@ On success the HTTP status code is `204` and no JSON response is expected.
 Uploads a file to the attachment folder inside the wiki's repository. The
  attachment folder is the `uploads` folder.
 
-```
+```plaintext
 POST /projects/:id/wikis/attachments
 ```
 
diff --git a/doc/ci/caching/index.md b/doc/ci/caching/index.md
index 0109d87921b39..a60310076a873 100644
--- a/doc/ci/caching/index.md
+++ b/doc/ci/caching/index.md
@@ -206,10 +206,11 @@ templates](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/lib/gitlab/ci/t
 
 ### Caching Node.js dependencies
 
-Assuming your project is using [npm](https://www.npmjs.com/) or
-[Yarn](https://classic.yarnpkg.com/en/) to install the Node.js dependencies, the
-following example defines `cache` globally so that all jobs inherit it.
-Node.js modules are installed in `node_modules/` and are cached per-branch:
+Assuming your project is using [npm](https://www.npmjs.com/) to install the Node.js
+dependencies, the following example defines `cache` globally so that all jobs inherit it.
+By default, npm stores cache data in the home folder `~/.npm` but since
+[you can't cache things outside of the project directory](../yaml/README.md#cachepaths),
+we tell npm to use `./.npm` instead, and it is cached per-branch:
 
 ```yaml
 #
@@ -221,10 +222,10 @@ image: node:latest
 cache:
   key: ${CI_COMMIT_REF_SLUG}
   paths:
-  - node_modules/
+  - .npm/
 
 before_script:
-  - npm install
+  - npm ci --cache .npm --prefer-offline
 
 test_async:
   script:
diff --git a/doc/ci/variables/README.md b/doc/ci/variables/README.md
index 643ccd4589824..c768c833e7cd4 100644
--- a/doc/ci/variables/README.md
+++ b/doc/ci/variables/README.md
@@ -571,9 +571,12 @@ Below you can find supported syntax reference:
    - `$VARIABLE =~ /^content.*/`
    - `$VARIABLE_1 !~ /^content.*/` (introduced in GitLab 11.11)
 
-   It is possible perform pattern matching against a variable and regular
-   expression. Expression like this evaluates to truth if matches are found
-   when using `=~`. It evaluates to truth if matches are not found when `!~` is used.
+   Variable pattern matching with regular expressions uses the
+   [RE2 regular expression syntax](https://github.com/google/re2/wiki/Syntax).
+   Expressions evaluate as `true` if:
+
+   - Matches are found when using `=~`.
+   - Matches are *not* found when using `!~`.
 
    Pattern matching is case-sensitive by default. Use `i` flag modifier, like
    `/pattern/i` to make a pattern case-insensitive.
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 8931ee43a8a45..255ae3f7c1389 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -857,7 +857,10 @@ In this example, if the first rule:
 
 `rules:if` differs slightly from `only:variables` by accepting only a single
 expression string, rather than an array of them. Any set of expressions to be
-evaluated should be conjoined into a single expression using `&&` or `||`. For example:
+evaluated should be conjoined into a single expression using `&&` or `||`, and use
+the [variable matching syntax](../variables/README.md#supported-syntax).
+
+For example:
 
 ```yaml
 job:
diff --git a/doc/development/README.md b/doc/development/README.md
index 6f197ed4099f7..01dff0c20173c 100644
--- a/doc/development/README.md
+++ b/doc/development/README.md
@@ -9,8 +9,20 @@ description: 'Learn how to contribute to GitLab.'
 
 - Set up GitLab's development environment with [GitLab Development Kit (GDK)](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/README.md)
 - [GitLab contributing guide](contributing/index.md)
-  - [Issues workflow](contributing/issue_workflow.md) (issue tracker guidelines, triaging, labels, feature proposals, issue weight, regression issues, technical and UX debt)
-  - [Merge requests workflow](contributing/merge_request_workflow.md) (merge request guidelines, contribution acceptance criteria, definition of done, dependencies)
+  - [Issues workflow](contributing/issue_workflow.md). For information on:
+    - Issue tracker guidelines.
+    - Triaging.
+    - Labels.
+    - Feature proposals.
+    - Issue weight.
+    - Regression issues.
+    - Technical or UX debt.
+  - [Merge requests workflow](contributing/merge_request_workflow.md). For
+    information on:
+    - Merge request guidelines.
+    - Contribution acceptance criteria.
+    - Definition of done.
+    - Dependencies.
   - [Style guides](contributing/style_guides.md)
   - [Implement design & UI elements](contributing/design.md)
 - [GitLab Architecture Overview](architecture.md)
diff --git a/doc/development/architecture.md b/doc/development/architecture.md
index c5ac8c040f879..5a1b53bc2fb41 100644
--- a/doc/development/architecture.md
+++ b/doc/development/architecture.md
@@ -288,7 +288,7 @@ GitLab CI is the open-source continuous integration service included with GitLab
 - Configuration: [Omnibus][grafana-omnibus], [Charts][grafana-charts]
 - Layer: Monitoring
 
-Grafana is an open source, feature rich metrics dashboard and graph editor for Graphite, Elasticsearch, OpenTSDB, Prometheus and InfluxDB.
+Grafana is an open source, feature rich metrics dashboard and graph editor for Graphite, Elasticsearch, OpenTSDB, Prometheus, and InfluxDB.
 
 #### Jaeger
 
@@ -321,7 +321,7 @@ Mattermost is an open source, private cloud, Slack-alternative from <https://mat
 - Configuration: [Omnibus][minio-omnibus], [Charts][minio-charts], [GDK][minio-gdk]
 - Layer: Core Service (Data)
 
-MinIO is an object storage server released under Apache License v2.0. It is compatible with Amazon S3 cloud storage service. It is best suited for storing unstructured data such as photos, videos, log files, backups and container / VM images. Size of an object can range from a few KBs to a maximum of 5TB.
+MinIO is an object storage server released under Apache License v2.0. It is compatible with Amazon S3 cloud storage service. It is best suited for storing unstructured data such as photos, videos, log files, backups, and container / VM images. Size of an object can range from a few KBs to a maximum of 5TB.
 
 #### NGINX
 
diff --git a/doc/development/code_review.md b/doc/development/code_review.md
index d5394e30d6a01..7b00e3cea0deb 100644
--- a/doc/development/code_review.md
+++ b/doc/development/code_review.md
@@ -17,7 +17,7 @@ uncovered edge cases. The reviewer can be from a different team, but it is
 recommended to pick someone who knows the domain well. You can read more about the
 importance of involving reviewer(s) in the section on the responsibility of the author below.
 
-If you need some guidance (e.g. it's your first merge request), feel free to ask
+If you need some guidance (for example, it's your first merge request), feel free to ask
 one of the [Merge request coaches](https://about.gitlab.com/company/team/).
 
 If you need assistance with security scans or comments, feel free to include the
@@ -148,7 +148,7 @@ architecture, code organization, separation of concerns, tests, DRYness,
 consistency, and readability.
 
 Since a maintainer's job only depends on their knowledge of the overall GitLab
-codebase, and not that of any specific domain, they can review, approve and merge
+codebase, and not that of any specific domain, they can review, approve, and merge
 merge requests from any team and in any product area.
 
 In fact, authors are encouraged to get their merge requests merged by maintainers
@@ -334,7 +334,7 @@ reviewee.
   reviewer before doing it, but have the courage to do it when you believe it is
   important.
 - In the interest of [Iteration](https://about.gitlab.com/handbook/values/#iteration),
-  if, as a reviewer, your suggestions are non-blocking changes or personal preference
+  if your review suggestions are non-blocking changes, or personal preference
   (not a documented or agreed requirement), consider approving the merge request
   before passing it back to the author. This allows them to implement your suggestions
   if they agree, or allows them to pass it onto the
diff --git a/doc/development/contributing/design.md b/doc/development/contributing/design.md
index 8426db84aa491..352392931c0e9 100644
--- a/doc/development/contributing/design.md
+++ b/doc/development/contributing/design.md
@@ -9,7 +9,11 @@ To better understand the priority by which UX tackles issues, see the [UX sectio
 
 Once an issue has been worked on and is ready for development, a UXer removes the ~"UX" label and applies the ~"UX ready" label to that issue.
 
-There is a special type label called ~"product discovery". It represents a discovery issue intended for UX, PM, FE, and BE to discuss the problem and potential solutions. The final output for this issue could be a doc of requirements, a design artifact, or even a prototype. The solution will be developed in a subsequent milestone.
+There is a special type label called ~"product discovery" intended for UX,
+PM, FE, and BE. It represents a discovery issue to discuss the problem and
+potential solutions. The final output for this issue could be a doc of
+requirements, a design artifact, or even a prototype. The solution will be
+developed in a subsequent milestone.
 
 ~"product discovery" issues are like any other issue and should contain a milestone label, ~"Deliverable" or ~"Stretch", when scheduled in the current milestone.
 
@@ -17,7 +21,7 @@ The initial issue should be about the problem we are solving. If a separate [pro
 is needed for additional research and design work, it will be created by a PM or UX person.
 Assign the ~UX, ~"product discovery" and ~"Deliverable" labels, add a milestone and
 use a title that makes it clear that the scheduled issue is product discovery
-(e.g. `Product discovery for XYZ`).
+(for example, `Product discovery for XYZ`).
 
 In order to complete a product discovery issue in a release, you must complete the following:
 
diff --git a/doc/development/database_review.md b/doc/development/database_review.md
index 113314884d5d1..77e5060720baa 100644
--- a/doc/development/database_review.md
+++ b/doc/development/database_review.md
@@ -12,7 +12,7 @@ A database review is required for:
   including files in:
   - `db/`
   - `lib/gitlab/background_migration/`
-- Changes to the database tooling, e.g.:
+- Changes to the database tooling. For example:
   - migration or ActiveRecord helpers in `lib/gitlab/database/`
   - load balancing
 - Changes that produce SQL queries that are beyond the obvious. It is
@@ -50,7 +50,7 @@ A database **reviewer**'s role is to:
 Currently we have a [critical shortage of database maintainers](https://gitlab.com/gitlab-org/gitlab/issues/29717). Until we are able to increase the number of database maintainers to support the volume of reviews, we have implemented this temporary solution. If the database **reviewer** cannot find an available database **maintainer** then:
 
 1. Assign the MR for a second review by a **database trainee maintainer** for further review.
-1. Once satisfied with the review process, and if the database **maintainer** is still not available, skip the database maintainer approval step and assign the merge request to a backend maintainer for final review and approval.
+1. Once satisfied with the review process and if the database **maintainer** is still not available, skip the database maintainer approval step and assign the merge request to a backend maintainer for final review and approval.
 
 A database **maintainer**'s role is to:
 
@@ -119,10 +119,10 @@ the following preparations into account.
 - Add foreign keys to any columns pointing to data in other tables, including [an index](migration_style_guide.md#adding-foreign-key-constraints).
 - Add indexes for fields that are used in statements such as `WHERE`, `ORDER BY`, `GROUP BY`, and `JOIN`s.
 
-#### Preparation when removing columns, tables, indexes or other structures
+#### Preparation when removing columns, tables, indexes, or other structures
 
 - Follow the [guidelines on dropping columns](what_requires_downtime.md#dropping-columns).
-- Generally it's best practice, but not a hard rule, to remove indexes and foreign keys in a post-deployment migration.
+- Generally it's best practice (but not a hard rule) to remove indexes and foreign keys in a post-deployment migration.
   - Exceptions include removing indexes and foreign keys for small tables.
 
 ### How to review for database
@@ -156,14 +156,14 @@ the following preparations into account.
 - Check migrations are reversible and implement a `#down` method
 - Check data migrations:
   - Establish a time estimate for execution on GitLab.com.
-  - Depending on timing, data migrations can be placed on regular, post-deploy or background migrations.
+  - Depending on timing, data migrations can be placed on regular, post-deploy, or background migrations.
   - Data migrations should be reversible too or come with a description of how to reverse, when possible.
     This applies to all types of migrations (regular, post-deploy, background).
 - Query performance
   - Check for any obviously complex queries and queries the author specifically
     points out for review (if any)
   - If not present yet, ask the author to provide SQL queries and query plans
-    (e.g. by using [chatops](understanding_explain_plans.md#chatops) or direct
+    (for example, by using [chatops](understanding_explain_plans.md#chatops) or direct
     database access)
   - For given queries, review parameters regarding data distribution
   - [Check query plans](understanding_explain_plans.md) and suggest improvements
diff --git a/doc/development/documentation/index.md b/doc/development/documentation/index.md
index 684951785118f..4fcdd8a1fb0a6 100644
--- a/doc/development/documentation/index.md
+++ b/doc/development/documentation/index.md
@@ -16,7 +16,7 @@ In addition to this page, the following resources can help you craft and contrib
 
 ## Source files and rendered web locations
 
-Documentation for GitLab, GitLab Runner, Omnibus GitLab and Charts is published to <https://docs.gitlab.com>. Documentation for GitLab is also published within the application at `/help` on the domain of the GitLab instance.
+Documentation for GitLab, GitLab Runner, Omnibus GitLab, and Charts is published to <https://docs.gitlab.com>. Documentation for GitLab is also published within the application at `/help` on the domain of the GitLab instance.
 At `/help`, only help for your current edition and version is included. Help for other versions is available at <https://docs.gitlab.com/archives/>.
 
 The source of the documentation exists within the codebase of each GitLab application in the following repository locations:
diff --git a/doc/development/documentation/site_architecture/index.md b/doc/development/documentation/site_architecture/index.md
index 232bca30e0ff7..c91a9882bb0a6 100644
--- a/doc/development/documentation/site_architecture/index.md
+++ b/doc/development/documentation/site_architecture/index.md
@@ -107,7 +107,7 @@ The pipeline in the `gitlab-docs` project:
 
 ### Rebuild the docs site Docker images
 
-Once a week, on Mondays, a scheduled pipeline runs and rebuilds the Docker images
+Once a week on Mondays, a scheduled pipeline runs and rebuilds the Docker images
 used in various pipeline jobs, like `docs-lint`. The Docker image configuration files are
 located at <https://gitlab.com/gitlab-org/gitlab-docs/-/tree/master/dockerfiles>.
 
@@ -230,7 +230,7 @@ for its search function. This is how it works:
 NOTE: **For GitLab employees:**
 The credentials to access the Algolia dashboard are stored in 1Password. If you
 want to receive weekly reports of the search usage, search the Google doc with
-title "Email, Slack, and GitLab Groups and Aliases", search for `docsearch`,
+title `Email, Slack, and GitLab Groups and Aliases`, search for `docsearch`,
 and add a comment with your email to be added to the alias that gets the weekly
 reports.
 
diff --git a/doc/development/documentation/styleguide.md b/doc/development/documentation/styleguide.md
index b456887bd0855..f769560d67f17 100644
--- a/doc/development/documentation/styleguide.md
+++ b/doc/development/documentation/styleguide.md
@@ -17,14 +17,12 @@ that apply to all GitLab content, not just documentation.
 
 ### Why a single source of truth
 
-The documentation is the SSOT for all information related to the implementation, usage, and troubleshooting of GitLab products and features. It evolves continually, in keeping with new products and features, and with improvements for clarity, accuracy, and completeness.
+The documentation of GitLab products and features is the SSOT for all information related to implementation, usage, and troubleshooting. It evolves continually, in keeping with new products and features, and with improvements for clarity, accuracy, and completeness.
 
 This policy prevents information silos, ensuring that it remains easy to find information about GitLab products.
 
 It also informs decisions about the kinds of content we include in our documentation.
 
-The documentation is a continually evolving SSOT for all information related to the implementation, usage, and troubleshooting of GitLab products and features.
-
 ### All information
 
 Include problem-solving actions that may address rare cases or be considered 'risky', so long as proper context is provided in the form of fully detailed warnings and caveats. This kind of content should be included as it could be helpful to others and, when properly explained, its benefits outweigh the risks. If you think you have found an exception to this rule, contact the Technical Writing team.
@@ -34,7 +32,7 @@ For the Troubleshooting sections, people in GitLab Support can merge additions t
 
 ### All media types
 
-Include any media types/sources if the content is relevant to readers. You can freely include or link presentations, diagrams, videos, etc.; no matter who it was originally composed for, if it is helpful to any of our audiences, we can include it.
+Include any media types/sources if the content is relevant to readers. You can freely include or link presentations, diagrams, videos, and so on; no matter who it was originally composed for, if it is helpful to any of our audiences, we can include it.
 
 - If you use an image that has a separate source file (for example, a vector or diagram format), link the image to the source file so that it may be reused or updated by anyone.
 - Do not copy and paste content from other sources unless it is a limited quotation with the source cited. Typically it is better to either rephrase relevant information in your own words or link out to the other source.
@@ -63,13 +61,17 @@ Instead, link to the SSOT and explain why it is important to consume the informa
 
 ### Organize by topic, not by type
 
-Beyond top-level audience-type folders (e.g. `administration`), we organize content by topic, not by type, so that it can be located as easily as possible within the single-source-of-truth (SSOT) section for the subject matter.
+Beyond top-level audience-type folders (for example, `administration`), we organize content by topic, not by type, so that it can be located as easily as possible within the single-source-of-truth (SSOT) section for the subject matter.
+
+For example, do not create groupings of similar media types. For example:
 
-For example, do not create groupings of similar media types (e.g. glossaries, FAQs, or sets of all articles or videos).
+- Glossaries.
+- FAQs.
+- Sets of all articles or videos.
 
 Such grouping of content by type makes
 it difficult to browse for the information you need and difficult to maintain up-to-date content.
-Instead, organize content by its subject (e.g. everything related to CI goes together)
+Instead, organize content by its subject (for example, everything related to CI goes together)
 and cross-link between any related content.
 
 ### Docs-first methodology
@@ -79,7 +81,10 @@ We employ a **docs-first methodology** to help ensure that the docs remain a com
 - If the answer to a question exists in documentation, share the link to the docs instead of rephrasing the information.
 - When you encounter new information not available in GitLab’s documentation (for example, when working on a support case or testing a feature), your first step should be to create a merge request (MR) to add this information to the docs. You can then share the MR in order to communicate this information.
 
-New information that would be useful toward the future usage or troubleshooting of GitLab should not be written directly in a forum or other messaging system, but added to a docs MR and then referenced, as described above. Note that among any other doc changes, you can always add a Troubleshooting section to a doc if none exists, or un-comment and use the placeholder Troubleshooting section included as part of our [doc template](structure.md#template-for-new-docs), if present.
+New information that would be useful toward the future usage or troubleshooting of GitLab should not be written directly in a forum or other messaging system, but added to a docs MR and then referenced, as described above. Note that among any other doc changes, you can either:
+
+- Add a Troubleshooting section to a doc if none exists.
+- Un-comment and use the placeholder Troubleshooting section included as part of our [doc template](structure.md#template-for-new-docs), if present.
 
 The more we reflexively add useful information to the docs, the more (and more successfully) the docs will be used to efficiently accomplish tasks and solve problems.
 
@@ -98,7 +103,7 @@ Ruby gem will support all [GFM markup](../../user/markdown.md) in the future. Th
 all markup that is supported for display in the GitLab application itself. For now,
 use regular Markdown markup, following the rules in the linked style guide.
 
-Note that Kramdown-specific markup (e.g., `{:.class}`) will not render properly on GitLab instances under [`/help`](index.md#gitlab-help).
+Note that Kramdown-specific markup (for example, `{:.class}`) will not render properly on GitLab instances under [`/help`](index.md#gitlab-help).
 
 Hard-coded HTML is valid, although it's discouraged to be used while we have `/help`. HTML is permitted as long as:
 
@@ -1149,7 +1154,7 @@ keyword "only":
 - For GitLab Premium: `**(PREMIUM ONLY)**`.
 - For GitLab Ultimate: `**(ULTIMATE ONLY)**`.
 
-For GitLab.com only tiers (when the feature is not available for self-hosted instances):
+For GitLab.com only tiers (when the feature is not available for self-managed instances):
 
 - For GitLab Free and higher tiers: `**(FREE ONLY)**`.
 - For GitLab Bronze and higher tiers: `**(BRONZE ONLY)**`.
diff --git a/doc/development/documentation/workflow.md b/doc/development/documentation/workflow.md
index 7c97f6628c999..1b8d2ee434a46 100644
--- a/doc/development/documentation/workflow.md
+++ b/doc/development/documentation/workflow.md
@@ -118,7 +118,7 @@ Reviewers help ensure:
 Prior to merging, documentation changes committed by the developer must be reviewed by:
 
 - The code reviewer for the merge request. This is known as a technical review.
-- Optionally, others involved in the work, such as other developers or the Product Manager.
+- Optionally, others involved in the work such as other developers or the Product Manager.
 - The Technical Writer for the DevOps stage group, except in exceptional circumstances where a
   [post-merge review](#post-merge-reviews) can be requested.
 - A maintainer of the project.
@@ -137,11 +137,11 @@ For issues requiring any new or updated documentation, the Product Manager must:
 - Confirm or add the [documentation requirements](#documentation-requirements).
 - Ensure the issue contains:
   - Any new or updated feature name.
-  - Overview, description, and use cases, as required by the
-    [documentation structure and template](structure.md), when applicable.
+  - Overview, description, and use cases when applicable (as required by the
+    [documentation structure and template](structure.md)).
 
-Everyone is encouraged to draft the documentation requirements in the issue, but a Product Manager
-will do the following:
+Everyone is encouraged to draft the documentation requirements in the issue. However, a Product
+Manager will:
 
 - When the issue is assigned a release milestone, review and update the Documentation details.
 - By the kickoff, finalize the documentation details.
@@ -238,7 +238,7 @@ The following details should be included:
 - What concepts and procedures should the documentation guide and enable the user to understand or
   accomplish?
 - To this end, what new page(s) are needed, if any? What pages or subsections need updates?
-  Consider user, admin, and API documentation changes and additions.
+  Consider changes and additions to user, admin, and API documentation.
 - For any guide or instruction set, should it help address a single use case, or be flexible to
   address a certain range of use cases?
 - Do we need to update a previously recommended workflow? Should we link the new feature from
diff --git a/doc/development/elasticsearch.md b/doc/development/elasticsearch.md
index b8d2a873d8b9c..69113fe80308c 100644
--- a/doc/development/elasticsearch.md
+++ b/doc/development/elasticsearch.md
@@ -36,7 +36,11 @@ Additionally, if you need large repos or multiple forks for testing, please cons
 
 The Elasticsearch integration depends on an external indexer. We ship an [indexer written in Go](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer). The user must trigger the initial indexing via a rake task but, after this is done, GitLab itself will trigger reindexing when required via `after_` callbacks on create, update, and destroy that are inherited from [/ee/app/models/concerns/elastic/application_versioned_search.rb](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/app/models/concerns/elastic/application_versioned_search.rb).
 
-All indexing after the initial one is done via `ElasticIndexerWorker` (Sidekiq jobs).
+After initial indexing is complete, updates proceed in one of two ways, depending on the `:elastic_bulk_incremental_updates` feature flag.
+
+If disabled, every create, update, or delete operation on an Elasticsearch-tracked model enqueues a new `ElasticIndexerWorker` Sidekiq job which takes care of updating just that document. This is quite inefficient.
+
+If the feature flag is enabled, create, update, and delete operations for all models except projects (see [#207494](https://gitlab.com/gitlab-org/gitlab/issues/207494)) are tracked in a Redis [`ZSET`](https://redis.io/topics/data-types#sorted-sets) instead. A regular `sidekiq-cron` `ElasticIndexBulkCronWorker` processes this queue, updating many Elasticsearch documents at a time with the [Bulk Request API](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html).
 
 Search queries are generated by the concerns found in [ee/app/models/concerns/elastic](https://gitlab.com/gitlab-org/gitlab/tree/master/ee/app/models/concerns/elastic). These concerns are also in charge of access control, and have been a historic source of security bugs so please pay close attention to them!
 
diff --git a/doc/development/event_tracking/index.md b/doc/development/event_tracking/index.md
index 10e99e845d698..8c00930a7818b 100644
--- a/doc/development/event_tracking/index.md
+++ b/doc/development/event_tracking/index.md
@@ -13,7 +13,7 @@ As developers, we should attempt to add tracking and instrumentation where possi
 - Usage patterns.
 - Other metrics that can potentially be improved on.
 
-To maintain consistency, and not adversely effect performance, we have some basic tracking functionality exposed at both the frontend and backend layers that can be utilized while building new features or updating existing features.
+To maintain consistency and not adversely effect performance, we have some basic tracking functionality exposed at both the frontend and backend layers that can be utilized while building new features or updating existing features.
 
 We also encourage users to enable tracking, and we embrace full transparency with our tracking approach so it can be easily understood and trusted. By enabling tracking, users can:
 
diff --git a/doc/development/fe_guide/development_process.md b/doc/development/fe_guide/development_process.md
index 5b02098f02038..64bc01c181cc3 100644
--- a/doc/development/fe_guide/development_process.md
+++ b/doc/development/fe_guide/development_process.md
@@ -71,7 +71,7 @@ With the purpose of being [respectful of others' time](https://about.gitlab.com/
   - includes tests
   - includes a changelog entry (when necessary)
 - Before assigning to a maintainer, assign to a reviewer.
-- If you assigned a merge request, or pinged someone directly, keep in mind that we work in different timezones and asynchronously, so be patient. Unless the merge request is urgent (like fixing a broken master), please don't DM or reassign the merge request before waiting for a 24-hour window.
+- If you assigned a merge request or pinged someone directly, be patient because we work in different timezones and asynchronously. Unless the merge request is urgent (like fixing a broken master), please don't DM or reassign the merge request before waiting for a 24-hour window.
 - If you have a question regarding your merge request/issue, make it on the merge request/issue. When we DM each other, we no longer have a SSOT and [no one else is able to contribute](https://about.gitlab.com/handbook/values/#public-by-default).
 - When you have a big WIP merge request with many changes, you're advised to get the review started before adding/removing significant code. Make sure it is assigned well before the release cut-off, as the reviewer(s)/maintainer(s) would always prioritize reviewing finished MRs before WIP ones.
 - Make sure to remove the WIP title before the last round of review.
diff --git a/doc/development/fe_guide/graphql.md b/doc/development/fe_guide/graphql.md
index a9821edff0b92..d21c937bfe4eb 100644
--- a/doc/development/fe_guide/graphql.md
+++ b/doc/development/fe_guide/graphql.md
@@ -53,7 +53,7 @@ fragment DesignListItem on Design {
 }
 ```
 
-Fragments can be stored in separate files, imported and used in queries, mutations or other fragments.
+Fragments can be stored in separate files, imported and used in queries, mutations, or other fragments.
 
 ```javascript
 #import "./designList.fragment.graphql"
diff --git a/doc/development/fe_guide/vuex.md b/doc/development/fe_guide/vuex.md
index 0bb9e3b7d5047..cd18091abdfa4 100644
--- a/doc/development/fe_guide/vuex.md
+++ b/doc/development/fe_guide/vuex.md
@@ -6,7 +6,7 @@ _Note:_ All of the below is explained in more detail in the official [Vuex docum
 
 ## Separation of concerns
 
-Vuex is composed of State, Getters, Mutations, Actions and Modules.
+Vuex is composed of State, Getters, Mutations, Actions, and Modules.
 
 When a user clicks on an action, we need to `dispatch` it. This action will `commit` a mutation that will change the state.
 _Note:_ The action itself will not update the state, only a mutation should update the state.
diff --git a/doc/development/feature_flags/process.md b/doc/development/feature_flags/process.md
index 4b44c8dadca68..0cca4117f1f7c 100644
--- a/doc/development/feature_flags/process.md
+++ b/doc/development/feature_flags/process.md
@@ -53,7 +53,7 @@ absolutely no way to use the feature until it is enabled.
 
 ### Including a feature behind feature flag in the final release
 
-In order to build a final release and present the feature for self-hosted
+In order to build a final release and present the feature for self-managed
 users, the feature flag should be at least defaulted to **on**. If the feature
 is deemed stable and there is confidence that removing the feature flag is safe,
 consider removing the feature flag altogether.
@@ -126,8 +126,11 @@ need to revert a release, and because feature flags are disabled by default we
 don't need to revert and pick any Git commits. In fact, all we have to do is
 disable the feature, and in the worst case, perform cleanup. Let's say that
 the cost of this is 2. In this case, our best case cost is 11: 10 to build the
-feature, and 1 to add the feature flag. The worst case cost is now 13: 10 to
-build the feature, 1 to add the feature flag, and 2 to disable and clean up.
+feature, and 1 to add the feature flag. The worst case cost is now 13:
+
+- 10 to build the feature.
+- 1 to add the feature flag.
+- 2 to disable and clean up.
 
 Here we can see that in the best case scenario the work necessary is only a tiny
 bit more compared to not using a feature flag. Meanwhile, the process of
diff --git a/doc/development/new_fe_guide/development/accessibility.md b/doc/development/new_fe_guide/development/accessibility.md
index ae5c4c6a6cc39..7a15e9eb6be53 100644
--- a/doc/development/new_fe_guide/development/accessibility.md
+++ b/doc/development/new_fe_guide/development/accessibility.md
@@ -4,7 +4,7 @@ Using semantic HTML plays a key role when it comes to accessibility.
 
 ## Accessible Rich Internet Applications - ARIA
 
-WAI-ARIA, the Accessible Rich Internet Applications specification, defines a way to make Web content and Web applications more accessible to people with disabilities.
+WAI-ARIA (the Accessible Rich Internet Applications specification) defines a way to make Web content and Web applications more accessible to people with disabilities.
 
 > Note: It is [recommended][using-aria] to use semantic elements as the primary method to achieve accessibility rather than adding aria attributes. Adding aria attributes should be seen as a secondary method for creating accessible elements.
 
diff --git a/doc/development/new_fe_guide/index.md b/doc/development/new_fe_guide/index.md
index 152ddcdae645f..9e9c367807fae 100644
--- a/doc/development/new_fe_guide/index.md
+++ b/doc/development/new_fe_guide/index.md
@@ -1,7 +1,7 @@
 # Frontend Development Guidelines
 
 This guide contains all the information to successfully contribute to GitLab's frontend.
-This is a living document, and we welcome contributions, feedback and suggestions.
+This is a living document, and we welcome contributions, feedback, and suggestions.
 
 ## [Development](development/index.md)
 
diff --git a/doc/development/packages.md b/doc/development/packages.md
index 487d1243c9797..848693d368ac5 100644
--- a/doc/development/packages.md
+++ b/doc/development/packages.md
@@ -75,8 +75,8 @@ that gives a way to identify the project that the package belongs to. This gener
 id or full project path in the package name. See
 [Conan's naming convention](../user/packages/conan_repository/index.md#package-recipe-naming-convention) as an example.
 
-For group and project-level endpoints, naming can be less constrained, and it will be up to the group and project
-members to be certain that there is no conflict between two package names, however the system should prevent
+For group and project-level endpoints, naming can be less constrained and it will be up to the group and project
+members to be certain that there is no conflict between two package names. However, the system should prevent
 a user from reusing an existing name within a given scope.
 
 Otherwise, naming should follow the package manager's naming conventions and include a validation in the `package.md`
diff --git a/doc/development/performance.md b/doc/development/performance.md
index 1b3c4aedf1f60..5697f41c3dc7e 100644
--- a/doc/development/performance.md
+++ b/doc/development/performance.md
@@ -259,10 +259,10 @@ One of the reasons of the increased memory footprint could be Ruby memory fragme
 
 To diagnose it, you can visualize Ruby heap as described in [this post by Aaron Patterson](https://tenderlovemaking.com/2017/09/27/visualizing-your-ruby-heap.html).
 
-To start, you want to dump the heap of the process you're investigating to a JSON file.  
+To start, you want to dump the heap of the process you're investigating to a JSON file.
 
-You need to run the command inside the process you're exploring, you may do that with `rbtrace`.  
-`rbtrace` is already present in GitLab `Gemfile`, you just need to require it.  
+You need to run the command inside the process you're exploring, you may do that with `rbtrace`.
+`rbtrace` is already present in GitLab `Gemfile`, you just need to require it.
 It could be achieved running webserver or Sidekiq with the environment variable set to `ENABLE_RBTRACE=1`.
 
 To get the heap dump:
@@ -281,7 +281,7 @@ Fragmented Ruby heap snapshot could look like this:
 
 ![Ruby heap fragmentation](img/memory_ruby_heap_fragmentation.png)
 
-Memory fragmentation could be reduced by tuning GC parameters as described in [this post by Nate Berkopec](https://www.speedshop.co/2017/12/04/malloc-doubles-ruby-memory.html), which should be considered as a tradeoff, as it may affect overall performance of memory allocation and GC cycles.
+Memory fragmentation could be reduced by tuning GC parameters as described in [this post by Nate Berkopec](https://www.speedshop.co/2017/12/04/malloc-doubles-ruby-memory.html). This should be considered as a tradeoff, as it may affect overall performance of memory allocation and GC cycles.
 
 ## Importance of Changes
 
diff --git a/doc/development/redis.md b/doc/development/redis.md
index a4a87155f5aa6..a8b7b84bb658c 100644
--- a/doc/development/redis.md
+++ b/doc/development/redis.md
@@ -8,7 +8,7 @@ GitLab uses [Redis](https://redis.io) for three distinct purposes:
 
 Every application process is configured to use the same Redis servers, so they
 can be used for inter-process communication in cases where [PostgreSQL](sql.md)
-is less appropriate, for example, transient state or data that is written much
+is less appropriate. For example, transient state or data that is written much
 more often than it is read.
 
 If [Geo](geo.md) is enabled, each Geo node gets its own, independent Redis
diff --git a/doc/development/sidekiq_style_guide.md b/doc/development/sidekiq_style_guide.md
index 4445efa823a51..e15daab0fdb3b 100644
--- a/doc/development/sidekiq_style_guide.md
+++ b/doc/development/sidekiq_style_guide.md
@@ -66,7 +66,7 @@ are not adjusted appropriately.
 
 ## Idempotent Jobs
 
-It's known that a job can fail for multiple reasons, for example, network outages or bugs.
+It's known that a job can fail for multiple reasons. For example, network outages or bugs.
 In order to address this, Sidekiq has a built-in retry mechanism that is
 used by default by most workers within GitLab.
 
@@ -178,7 +178,7 @@ end
 ## Jobs with External Dependencies
 
 Most background jobs in the GitLab application communicate with other GitLab
-services, eg Postgres, Redis, Gitaly and Object Storage. These are considered
+services. For example, Postgres, Redis, Gitaly, and Object Storage. These are considered
 to be "internal" dependencies for a job.
 
 However, some jobs will be dependent on external services in order to complete
@@ -388,7 +388,7 @@ requests. We do this to avoid incorrect metadata when other jobs are
 scheduled from the cron-worker.
 
 Cron-Workers themselves run instance wide, so they aren't scoped to
-users, namespaces, projects or other resources that should be added to
+users, namespaces, projects, or other resources that should be added to
 the context.
 
 However, they often schedule other jobs that _do_ require context.
diff --git a/doc/development/testing_guide/end_to_end/quick_start_guide.md b/doc/development/testing_guide/end_to_end/quick_start_guide.md
index be00129a2bc47..5d5715df37267 100644
--- a/doc/development/testing_guide/end_to_end/quick_start_guide.md
+++ b/doc/development/testing_guide/end_to_end/quick_start_guide.md
@@ -2,7 +2,12 @@
 
 In this tutorial, you will find different examples, and the steps involved, in the creation of end-to-end (_e2e_) tests for GitLab CE and GitLab EE, using GitLab QA.
 
-> When referring to end-to-end tests in this document, this means testing a specific feature end-to-end, such as a user logging in, the creation of a project, the management of labels, breaking down epics into sub-epics and issues, etc.
+When referring to end-to-end tests in this document, this means testing a specific feature end-to-end such as:
+
+- A user logging in.
+- The creation of a project.
+- The management of labels.
+- Breaking down epics into sub-epics and issues.
 
 ## Important information before we start writing tests
 
@@ -209,7 +214,11 @@ First, we remove the duplication of strings by defining the global variables `@i
 
 Then, by creating a reusable `select_label_and_refresh` method, we remove the code duplication of this action, and later we can move this method to a Page Object class that will be created for easier maintenance purposes.
 
-> Notice that the reusable method is created at the bottom of the file. The reason for that is that reading the code should be similar to reading a newspaper, where high-level information is at the top, like the title and summary of the news, while low level, or more specific information, is at the bottom (this helps readability).
+Notice that the reusable method is created at the bottom of the file. This helps readability,
+where reading the code should be similar to reading a newspaper:
+
+- High-level information is at the top, like the title and summary of the news.
+- Low level, or more specific information, is at the bottom.
 
 ### 5. Tests' pre-conditions using resources and Page Objects
 
@@ -353,7 +362,7 @@ You can think of [Resources] as anything that can be created on GitLab CE or EE,
 
 With that in mind, resources can be a project, an epic, an issue, a label, a commit, etc.
 
-As you saw in the tests' pre-conditions and the optimization sections, we're already creating some of these resources, and we are doing that by calling the `fabricate_via_api!` method.
+As you saw in the tests' pre-conditions and the optimization sections, we're already creating some of these resources. We are doing that by calling the `fabricate_via_api!` method.
 
 > We could be using the `fabricate!` method instead, which would use the `fabricate_via_api!` method if it exists, and fallback to GUI fabrication otherwise, but we recommend being explicit to make it clear what the test does. Also, we always recommend fabricating resources via API since this makes tests faster and more reliable.
 
diff --git a/doc/development/testing_guide/testing_levels.md b/doc/development/testing_guide/testing_levels.md
index f7dec82724f55..58f00829b803d 100644
--- a/doc/development/testing_guide/testing_levels.md
+++ b/doc/development/testing_guide/testing_levels.md
@@ -103,7 +103,7 @@ graph RL
   For complex Vuex mutations, you should separate the tests from other parts of the Vuex store to simplify problem-solving.
 
 #### When *not* to use unit tests
-  
+
 - **Non-exported functions or classes**:
   Anything not exported from a module can be considered private or an implementation detail, and doesn't need to be tested.
 - **Constants**:
@@ -200,7 +200,7 @@ graph RL
 - **All server requests**:
   Similar to unit tests, when running component tests, the backend may not be reachable, so all outgoing requests need to be mocked.
 - **Asynchronous background operations**:
-  Similar to unit tests, background operations cannot be stopped or waited on, so they will continue running in the following tests and cause side effects.
+  Similar to unit tests, background operations cannot be stopped or waited on. This means they will continue running in the following tests and cause side effects.
 - **Child components**:
   Every component is tested individually, so child components are mocked.
   See also [`shallowMount()`](https://vue-test-utils.vuejs.org/api/#shallowmount)
diff --git a/doc/integration/elasticsearch.md b/doc/integration/elasticsearch.md
index 9ec56d304e015..c2f4fff0ce360 100644
--- a/doc/integration/elasticsearch.md
+++ b/doc/integration/elasticsearch.md
@@ -260,7 +260,7 @@ If the database size is less than 500 MiB, and the size of all hosted repos is l
 
 CAUTION: **Warning**:
 Performing asynchronous indexing will generate a lot of Sidekiq jobs.
-Make sure to prepare for this task by either [Horizontally Scaling](../administration/high_availability/README.md#basic-scaling)
+Make sure to prepare for this task by having a [Scalable and Highly Available Setup](README.md)
 or creating [extra Sidekiq processes](../administration/operations/extra_sidekiq_processes.md)
 
 1. [Configure your Elasticsearch host and port](#enabling-elasticsearch).
diff --git a/doc/integration/omniauth.md b/doc/integration/omniauth.md
index c75a2a90c2ace..8eef5ff26cf87 100644
--- a/doc/integration/omniauth.md
+++ b/doc/integration/omniauth.md
@@ -51,7 +51,7 @@ that are in common for all providers that we need to consider.
   be created manually or they will not be able to sign in via OmniAuth.
 - `auto_link_ldap_user` can be used if you have [LDAP / ActiveDirectory](ldap.md)
   integration enabled. It defaults to false. When enabled, users automatically
-  created through OmniAuth will be linked to their LDAP entry as well.
+  created through an OmniAuth provider will have their LDAP identity created in GitLab as well.
 - `block_auto_created_users` defaults to `true`. If `true` auto created users will
   be blocked by default and will have to be unblocked by an administrator before
   they are able to sign in.
diff --git a/doc/integration/saml.md b/doc/integration/saml.md
index 31d41433e6be6..001e2883de0f0 100644
--- a/doc/integration/saml.md
+++ b/doc/integration/saml.md
@@ -188,7 +188,7 @@ tell GitLab which groups are external via the `external_groups:` element:
         } }
 ```
 
-## Required groups
+## Required groups **(STARTER ONLY)**
 
 >**Note:**
 This setting is only available on GitLab 10.2 EE and above.
@@ -215,7 +215,7 @@ Example:
         } }
 ```
 
-## Admin Groups
+## Admin Groups **(STARTER ONLY)**
 
 >**Note:**
 This setting is only available on GitLab 8.8 EE and above.
@@ -239,7 +239,7 @@ considered `admin groups`.
         } }
 ```
 
-## Auditor Groups
+## Auditor Groups **(STARTER ONLY)**
 
 >**Note:**
 This setting is only available on GitLab 11.4 EE and above.
diff --git a/doc/user/markdown.md b/doc/user/markdown.md
index 7ad810317f0f9..c8484380127e7 100644
--- a/doc/user/markdown.md
+++ b/doc/user/markdown.md
@@ -131,26 +131,26 @@ Supported formats (named colors are not supported):
 Color written inside backticks will be followed by a color "chip":
 
 ```markdown
-`#F00`  
-`#F00A`  
-`#FF0000`  
-`#FF0000AA`  
-`RGB(0,255,0)`  
-`RGB(0%,100%,0%)`  
-`RGBA(0,255,0,0.3)`  
-`HSL(540,70%,50%)`  
-`HSLA(540,70%,50%,0.3)`  
-```
-
-`#F00`  
-`#F00A`  
-`#FF0000`  
-`#FF0000AA`  
-`RGB(0,255,0)`  
-`RGB(0%,100%,0%)`  
-`RGBA(0,255,0,0.3)`  
-`HSL(540,70%,50%)`  
-`HSLA(540,70%,50%,0.3)`  
+- `#F00`
+- `#F00A`
+- `#FF0000`
+- `#FF0000AA`
+- `RGB(0,255,0)`
+- `RGB(0%,100%,0%)`
+- `RGBA(0,255,0,0.3)`
+- `HSL(540,70%,50%)`
+- `HSLA(540,70%,50%,0.3)`
+```
+
+- `#F00`
+- `#F00A`
+- `#FF0000`
+- `#FF0000AA`
+- `RGB(0,255,0)`
+- `RGB(0%,100%,0%)`
+- `RGBA(0,255,0,0.3)`
+- `HSL(540,70%,50%)`
+- `HSLA(540,70%,50%,0.3)`
 
 ### Diagrams and flowcharts
 
@@ -390,7 +390,7 @@ the [asciidoctor user manual](https://asciidoctor.org/docs/user-manual/#activati
 ### Special GitLab references
 
 GFM recognizes special GitLab related references. For example, you can easily reference
-an issue, a commit, a team member or even the whole team within a project. GFM will turn
+an issue, a commit, a team member, or even the whole team within a project. GFM will turn
 that reference into a link so you can navigate between them easily.
 
 Additionally, GFM recognizes certain cross-project references, and also has a shorthand
@@ -581,7 +581,7 @@ Quote break.
 GFM extends the standard Markdown standard by also supporting multiline blockquotes
 fenced by `>>>`:
 
-```
+```markdown
 >>>
 If you paste a message from somewhere else
 
@@ -630,7 +630,7 @@ def function():
     3-backtick fences.
 ~~~
 
-```
+```plaintext
 ~~~
 Tildes are OK too.
 ~~~
@@ -638,20 +638,20 @@ Tildes are OK too.
 
 The three examples above render as:
 
-```
+```python
 def function():
     #indenting works just fine in the fenced code block
     s = "Python code"
     print s
 ```
 
-```
+```plaintext
 Using 4 spaces
 is like using
 3-backtick fences.
 ```
 
-~~~
+~~~plaintext
 Tildes are OK too.
 ~~~
 
@@ -668,7 +668,7 @@ code when it is inline.
 Blocks of code are fenced by lines with three back-ticks ```` ``` ```` or three tildes `~~~`, and have
 the language identified at the end of the first fence:
 
-~~~
+~~~markdown
 ```javascript
 var s = "JavaScript syntax highlighting";
 alert(s);
@@ -714,7 +714,7 @@ markdown = Redcarpet.new("Hello World!")
 puts markdown.to_html
 ```
 
-```
+```plaintext
 No language indicated, so no syntax highlighting.
 s = "There is no highlighting for this."
 But let's throw in a <b>tag</b>.
@@ -756,7 +756,7 @@ dealing with code and names that often appear with multiple underscores. As a re
 GFM extends the standard Markdown standard by ignoring multiple underlines in words,
 to allow better rendering of Markdown documents discussing code:
 
-```md
+```markdown
 perform_complicated_task
 
 do_this_and_do_that_and_another_thing
@@ -852,7 +852,7 @@ The IDs are generated from the content of the header according to the following
 
 Example:
 
-```
+```markdown
 # This header has spaces in it
 ## This header has a :thumbsup: in it
 # This header has Unicode in it: 한글
@@ -973,7 +973,7 @@ class for the list of allowed HTML tags and attributes. In addition to the defau
   <dd>Is something people use sometimes.</dd>
 
   <dt>Markdown in HTML</dt>
-  <dd>Does *not* work **very** well. HTML <em>tags</em> will <b>always</b> work.</dd>
+  <dd>Does *not* work **very** well. HTML <em>tags</em> will <b>work</b>, in most cases.</dd>
 </dl>
 ```
 
@@ -982,7 +982,7 @@ class for the list of allowed HTML tags and attributes. In addition to the defau
   <dd>Is something people use sometimes.</dd>
 
   <dt>Markdown in HTML</dt>
-  <dd>Does *not* work **very** well. HTML <em>tags</em> will <b>always</b> work.</dd>
+  <dd>Does *not* work **very** well. HTML <em>tags</em> will <b>work</b>, in most cases.</dd>
 </dl>
 
 ---
@@ -993,12 +993,12 @@ are separated into their own lines:
 ```html
 <dl>
   <dt>Markdown in HTML</dt>
-  <dd>Does *not* work **very** well. HTML tags will always work.</dd>
+  <dd>Does *not* work **very** well. HTML tags will work, in most cases.</dd>
 
   <dt>Markdown in HTML</dt>
   <dd>
 
-  Does *not* work **very** well. HTML tags will always work.
+  Does *not* work **very** well. HTML tags will work, in most cases.
 
   </dd>
 </dl>
@@ -1008,12 +1008,12 @@ are separated into their own lines:
 
 <dl>
   <dt>Markdown in HTML</dt>
-  <dd>Does *not* work **very** well. HTML tags will always work.</dd>
+  <dd>Does *not* work **very** well. HTML tags will work, in most cases.</dd>
 
   <dt>Markdown in HTML</dt>
   <dd>
 
-  Does <em>not</em> work <b>very</b> well. HTML tags will always work.
+  Does <em>not</em> work <b>very</b> well. HTML tags will work, in most cases.
 
   </dd>
 </dl>
@@ -1148,7 +1148,7 @@ A new line due to the previous backslash.
 
 There are two ways to create links, inline-style and reference-style:
 
-```md
+```markdown
 - This is an [inline-style link](https://www.google.com)
 - This is a [link to a repository file in the same directory](index.md)
 - This is a [relative link to a readme one directory higher](../README.md)
@@ -1319,7 +1319,7 @@ the paragraph will appear outside the list, instead of properly indented under t
 
 Example:
 
-```
+```markdown
 1. First ordered list item
 
   Paragraph of first item.
diff --git a/doc/user/packages/conan_repository/index.md b/doc/user/packages/conan_repository/index.md
index c21e539f332a2..522d6652e7a73 100644
--- a/doc/user/packages/conan_repository/index.md
+++ b/doc/user/packages/conan_repository/index.md
@@ -39,7 +39,7 @@ conan --version
 
 You should see the Conan version printed in the output:
 
-```
+```plaintext
 Conan version 1.20.5
 ```
 
diff --git a/doc/user/packages/npm_registry/index.md b/doc/user/packages/npm_registry/index.md
index 5a3754685dad8..af848358a4da8 100644
--- a/doc/user/packages/npm_registry/index.md
+++ b/doc/user/packages/npm_registry/index.md
@@ -49,7 +49,7 @@ npm --version
 
 You should see the NPM version printed in the output:
 
-```
+```plaintext
 6.10.3
 ```
 
@@ -67,7 +67,7 @@ yarn --version
 
 You should see the version printed like so:
 
-```
+```plaintext
 1.19.1
 ```
 
diff --git a/doc/user/packages/nuget_repository/index.md b/doc/user/packages/nuget_repository/index.md
index 5d3fdf535d220..dd614c2b38e66 100644
--- a/doc/user/packages/nuget_repository/index.md
+++ b/doc/user/packages/nuget_repository/index.md
@@ -26,7 +26,7 @@ nuget help
 
 You should see something similar to:
 
-```
+```plaintext
 NuGet Version: 5.2.0.6090
 usage: NuGet <command> [args] [options]
 Type 'NuGet help <command>' for help on a specific command.
diff --git a/doc/user/profile/account/two_factor_authentication.md b/doc/user/profile/account/two_factor_authentication.md
index ab701337c2a9a..72ef8de7a3cdd 100644
--- a/doc/user/profile/account/two_factor_authentication.md
+++ b/doc/user/profile/account/two_factor_authentication.md
@@ -160,6 +160,7 @@ have lost your code generation device) you can:
 
 - [Use a saved recovery code](#use-a-saved-recovery-code).
 - [Generate new recovery codes using SSH](#generate-new-recovery-codes-using-ssh).
+- [Regenerate 2FA recovery codes](#regenerate-2fa-recovery-codes).
 - [Ask a GitLab administrator to disable two-factor authentication on your account](#ask-a-gitlab-administrator-to-disable-two-factor-authentication-on-your-account).
 
 ### Use a saved recovery code
@@ -219,6 +220,20 @@ a new set of recovery codes with SSH:
 After signing in, visit your **Profile settings > Account**  immediately to set
 up two-factor authentication with a new device.
 
+### Regenerate 2FA recovery codes
+
+To regenerate 2FA recovery codes, you need access to a desktop browser:
+
+1. Navigate to GitLab.
+1. Sign in to your GitLab account.
+1. Go to your [Profile settings](../index.md#profile-settings).
+1. Select **{account}** **Account > Two-Factor Authentication (2FA)**.
+1. If you've already configured 2FA, click **Manage two-factor authentication**.
+1. In the **Register Two-Factor Authenticator** pane, click **Regenerate recovery codes**.
+
+NOTE: **Note:**
+If you regenerate 2FA recovery codes, save them. You won't be able to use any previously created 2FA codes.
+
 ### Ask a GitLab administrator to disable two-factor authentication on your account
 
 If you cannot use a saved recovery code or generate new recovery codes, ask a
diff --git a/doc/user/project/clusters/add_remove_clusters.md b/doc/user/project/clusters/add_remove_clusters.md
index 6106c86ce3941..3e1e1694f0dc8 100644
--- a/doc/user/project/clusters/add_remove_clusters.md
+++ b/doc/user/project/clusters/add_remove_clusters.md
@@ -5,7 +5,7 @@ GitLab offers integrated cluster creation for the following Kubernetes providers
 - Google Kubernetes Engine (GKE).
 - Amazon Elastic Kubernetes Service (EKS).
 
-In addition, GitLab can integrate with any standard Kubernetes provider, either on-premise or hosted.
+GitLab can also integrate with any standard Kubernetes provider, either on-premise or hosted.
 
 TIP: **Tip:**
 Every new Google Cloud Platform (GCP) account receives [$300 in credit upon sign up](https://console.cloud.google.com/freetrial),
diff --git a/doc/user/project/deploy_tokens/index.md b/doc/user/project/deploy_tokens/index.md
index 728f09ca787c1..4479653417c50 100644
--- a/doc/user/project/deploy_tokens/index.md
+++ b/doc/user/project/deploy_tokens/index.md
@@ -9,11 +9,11 @@ at midnight UTC and that they can be only managed by [maintainers](../../permiss
 
 ## Creating a Deploy Token
 
-You can create as many deploy tokens as you like from the settings of your project:
+You can create as many deploy tokens as you like from the settings of your project. Alternatively, you can also create [group-scoped deploy tokens](#group-deploy-token).
 
 1. Log in to your GitLab account.
-1. Go to the project you want to create Deploy Tokens for.
-1. Go to **Settings** > **Repository**.
+1. Go to the project (or group) you want to create Deploy Tokens for.
+1. Go to **{settings}** **Settings** > **CI / CD**.
 1. Click on "Expand" on **Deploy Tokens** section.
 1. Choose a name, expiry date (optional), and username (optional) for the token.
 1. Choose the [desired scopes](#limiting-scopes-of-a-deploy-token).
@@ -77,6 +77,22 @@ docker login -u <username> -p <deploy_token> registry.example.com
 Just replace `<username>` and `<deploy_token>` with the proper values. Then you can simply
 pull images from your Container Registry.
 
+### Group Deploy Token
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/21765) in GitLab 12.9.
+
+A deploy token created at the group level can be used across all projects that
+belong either to the specific group or to one of its subgroups.
+
+To use a group deploy token:
+
+1. [Create](#creating-a-deploy-token) a deploy token for a group.
+1. Use it the same way you use a project deploy token when
+   [cloning a repository](#git-clone-a-repository).
+
+The scopes applied to a group deploy token (such as `read_repository`) will
+apply consistently when cloning the repository of related projects.
+
 ### GitLab Deploy Token
 
 > [Introduced][ce-18414] in GitLab 10.8.
diff --git a/doc/user/project/description_templates.md b/doc/user/project/description_templates.md
index d59d4eec1743d..84b74692725cc 100644
--- a/doc/user/project/description_templates.md
+++ b/doc/user/project/description_templates.md
@@ -91,7 +91,7 @@ It is possible to use [quick actions](quick_actions.md) within description templ
 
 Here is an example for a Bug report template:
 
-```
+```plaintext
 Summary
 
 (Summarize the bug encountered concisely)
diff --git a/doc/user/project/import/github.md b/doc/user/project/import/github.md
index 175110cd535ac..a475dde59fd87 100644
--- a/doc/user/project/import/github.md
+++ b/doc/user/project/import/github.md
@@ -40,10 +40,13 @@ in which case it defaults to the default project visibility.
 When issues and pull requests are being imported, the importer attempts to find their GitHub authors and
 assignees in the database of the GitLab instance (note that pull requests are called "merge requests" in GitLab).
 
-For this association to succeed, prior to the import, each GitHub author and assignee in the repository must
-have either previously logged in to a GitLab account using the GitHub icon **or** have a GitHub account with
-a [primary email address](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address) that
-matches their GitLab account's email address.
+For this association to succeed, each GitHub author and assignee in the repository
+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://help.github.com/en/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
 that initiated the import process) is set as the author/assignee, but a note on the issue mentioning the original
diff --git a/doc/user/project/import/index.md b/doc/user/project/import/index.md
index 8fd4325b5cd76..ab2f942e911f5 100644
--- a/doc/user/project/import/index.md
+++ b/doc/user/project/import/index.md
@@ -24,7 +24,7 @@ There is also the option of [connecting your external repository to get CI/CD be
 
 ## Migrating from self-hosted GitLab to GitLab.com
 
-If you only need to migrate Git repos, you can [import each project by URL](repo_by_url.md), but issues and merge requests can't be imported.
+If you only need to migrate Git repos, you can [import each project by URL](repo_by_url.md). Issues and merge requests can't be imported.
 
 If you want to retain all metadata like issues and merge requests, you can use
 the [import/export feature](../settings/import_export.md) to export projects from self-hosted GitLab and import those projects into GitLab.com.
diff --git a/doc/user/project/index.md b/doc/user/project/index.md
index 87837d50bbe89..661c1eebf6d06 100644
--- a/doc/user/project/index.md
+++ b/doc/user/project/index.md
@@ -94,7 +94,7 @@ When you create a project in GitLab, you'll have access to a large number of
   your code blocks, overriding GitLab's default choice of language.
 - [Badges](badges.md): badges for the project overview.
 - [Releases](releases/index.md): a way to track deliverables in your project as snapshot in time of
-  the source, build output, and other metadata or artifacts
+  the source, build output, other metadata, and other artifacts
   associated with a released version of your code.
 - [Conan packages](../packages/conan_repository/index.md): your private Conan repository in GitLab. **(PREMIUM)**
 - [Maven packages](../packages/maven_repository/index.md): your private Maven repository in GitLab. **(PREMIUM)**
diff --git a/doc/user/project/integrations/gitlab_slack_application.md b/doc/user/project/integrations/gitlab_slack_application.md
index 72b1318a16ab2..4bc44d1d7d854 100644
--- a/doc/user/project/integrations/gitlab_slack_application.md
+++ b/doc/user/project/integrations/gitlab_slack_application.md
@@ -56,7 +56,7 @@ We are working on making this configurable in the future.
 For example, to show the issue number `1001` under the `gitlab-org/gitlab`
 project, you would do:
 
-```
+```plaintext
 /gitlab gitlab-org/gitlab issue show 1001
 ```
 
diff --git a/doc/user/project/integrations/hipchat.md b/doc/user/project/integrations/hipchat.md
index 85c3eda1208d5..347f7973c84d2 100644
--- a/doc/user/project/integrations/hipchat.md
+++ b/doc/user/project/integrations/hipchat.md
@@ -25,7 +25,7 @@ allow GitLab to send messages only to *one* room.
 1. In the "Send messages to this room by posting this URL" column, you should
    see a URL in the format:
 
-```
+```plaintext
 https://api.hipchat.com/v2/room/<room>/notification?auth_token=<token>
 ```
 
diff --git a/doc/user/project/integrations/irker.md b/doc/user/project/integrations/irker.md
index 47017843233cc..cadf01c382a07 100644
--- a/doc/user/project/integrations/irker.md
+++ b/doc/user/project/integrations/irker.md
@@ -11,7 +11,7 @@ See the project homepage for further info: <https://gitlab.com/esr/irker>
 You will first need an Irker daemon. You can download the Irker code from its
 repository on <https://gitlab.com/esr/irker>:
 
-```
+```shell
 git clone https://gitlab.com/esr/irker.git
 ```
 
diff --git a/doc/user/project/integrations/jira.md b/doc/user/project/integrations/jira.md
index 1af56b79e822c..76b1d1876981c 100644
--- a/doc/user/project/integrations/jira.md
+++ b/doc/user/project/integrations/jira.md
@@ -45,11 +45,11 @@ In order to enable the Jira service in GitLab, you need to first configure the p
 
 #### Jira Server
 
-When connecting to **Jira Server**, which supports basic authentication, a **username and password** are required. Note that connecting to Jira Server via CAS is not possible. [Set up a user in Jira Server](jira_server_configuration.md) first and then proceed to [Configuring GitLab](#configuring-gitlab).
+**Jira Server** supports basic authentication. When connecting, a **username and password** are required. Note that connecting to Jira Server via CAS is not possible. [Set up a user in Jira Server](jira_server_configuration.md) first and then proceed to [Configuring GitLab](#configuring-gitlab).
 
 #### Jira Cloud
 
-When connecting to **Jira Cloud**, which supports authentication via API token, an **email and API token**, are required. [Set up a user in Jira Cloud](jira_cloud_configuration.md) first and then proceed to [Configuring GitLab](#configuring-gitlab).
+**Jira Cloud** supports authentication through an API token. When connecting to **Jira Cloud**, an **email and API token** are required. [Set up a user in Jira Cloud](jira_cloud_configuration.md) first and then proceed to [Configuring GitLab](#configuring-gitlab).
 
 ### Configuring GitLab
 
@@ -119,7 +119,7 @@ link back to GitLab. This means that in comments in merge requests and commits
 referencing an issue, e.g., `PROJECT-7`, will add a comment in Jira issue in the
 format:
 
-```
+```plaintext
 USER mentioned this issue in RESOURCE_NAME of [PROJECT_NAME|LINK_TO_COMMENT]:
 ENTITY_TITLE
 ```
diff --git a/doc/user/project/integrations/prometheus_library/kubernetes.md b/doc/user/project/integrations/prometheus_library/kubernetes.md
index 7433210b5532d..ca1555c793b1d 100644
--- a/doc/user/project/integrations/prometheus_library/kubernetes.md
+++ b/doc/user/project/integrations/prometheus_library/kubernetes.md
@@ -13,13 +13,13 @@ integration services must be enabled.
 
 - Average Memory Usage (MB):
 
-  ```
+  ```prometheus
   avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024
   ```
 
 - Average CPU Utilization (%):
 
-  ```
+  ```prometheus
   avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))
   ```
 
@@ -48,12 +48,12 @@ These metrics expect the [Deployment](https://kubernetes.io/docs/concepts/worklo
 
 - Average Memory Usage (MB)
 
-  ```
+  ```prometheus
   avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024
   ```
 
 - Average CPU Utilization (%)
 
-  ```
+  ```prometheus
   avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))
   ```
diff --git a/doc/user/project/new_ci_build_permissions_model.md b/doc/user/project/new_ci_build_permissions_model.md
index d1bb23396e487..09af6d05690ce 100644
--- a/doc/user/project/new_ci_build_permissions_model.md
+++ b/doc/user/project/new_ci_build_permissions_model.md
@@ -68,7 +68,7 @@ Let's consider the following scenario:
 A unique job token is generated for each job and provides the user read
 access all projects that would be normally accessible to the user creating that
 job. The unique job token does not have any write permissions, but there
-is a [proposal to add support](https://gitlab.com/gitlab-org/gitlab-foss/issues/18106).
+is a [proposal to add support](https://gitlab.com/gitlab-org/gitlab/issues/35067).
 
 We try to make sure that this token doesn't leak by:
 
@@ -101,14 +101,14 @@ allowing pulling and pushing Docker images from within the CI job.
 
 GitLab would create a special checkout URL like:
 
-```
+```plaintext
 https://gitlab-ci-token:<project-runners-token>/gitlab.com/gitlab-org/gitlab-foss.git
 ```
 
 And then the users could also use it in their CI jobs all Docker related
 commands to interact with GitLab Container Registry. For example:
 
-```
+```shell
 docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
 ```
 
@@ -173,14 +173,14 @@ As a user:
 The [Job environment variable][jobenv] `CI_JOB_TOKEN` can be used to
 authenticate any clones of dependent repositories. For example:
 
-```
+```shell
 git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/<user>/<mydependentrepo>.git
 ```
 
 It can also be used for system-wide authentication
 (only do this in a docker container, it will overwrite ~/.netrc):
 
-```
+```shell
 echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
 ```
 
diff --git a/doc/user/search/index.md b/doc/user/search/index.md
index 70ab9af0bccd4..407578fd4df24 100644
--- a/doc/user/search/index.md
+++ b/doc/user/search/index.md
@@ -41,7 +41,7 @@ groups:
    - [Label](../project/labels.md)
    - My-reaction
    - Confidential
-   - Epic ([Introduced](https://gitlab.com/gitlab-org/gitlab/issues/195704) in GitLab 12.8)
+   - Epic ([Introduced](https://gitlab.com/gitlab-org/gitlab/issues/195704) in GitLab 12.9)
    - Search for this text
 1. Select or type the operator to use for filtering the attribute. The following operators are
    available:
diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/components/base.vue b/ee/app/assets/javascripts/analytics/cycle_analytics/components/base.vue
index c565d47e74850..6d04a1e971904 100644
--- a/ee/app/assets/javascripts/analytics/cycle_analytics/components/base.vue
+++ b/ee/app/assets/javascripts/analytics/cycle_analytics/components/base.vue
@@ -42,6 +42,10 @@ export default {
       type: String,
       required: true,
     },
+    hideGroupDropDown: {
+      type: Boolean,
+      required: true,
+    },
   },
   computed: {
     ...mapState([
@@ -206,6 +210,7 @@ export default {
         class="mt-3 py-2 px-3 d-flex bg-gray-light border-top border-bottom flex-column flex-md-row justify-content-between"
       >
         <groups-dropdown-filter
+          v-if="!hideGroupDropDown"
           class="js-groups-dropdown-filter dropdown-select"
           :query-params="$options.groupsQueryParams"
           :default-group="selectedGroup"
diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/index.js b/ee/app/assets/javascripts/analytics/cycle_analytics/index.js
index b5bc9f398577a..6f7e17ffab064 100644
--- a/ee/app/assets/javascripts/analytics/cycle_analytics/index.js
+++ b/ee/app/assets/javascripts/analytics/cycle_analytics/index.js
@@ -2,10 +2,11 @@ import Vue from 'vue';
 import CycleAnalytics from './components/base.vue';
 import createStore from './store';
 import { buildCycleAnalyticsInitialData } from '../shared/utils';
+import { parseBoolean } from '~/lib/utils/common_utils';
 
 export default () => {
   const el = document.querySelector('#js-cycle-analytics-app');
-  const { emptyStateSvgPath, noDataSvgPath, noAccessSvgPath } = el.dataset;
+  const { emptyStateSvgPath, noDataSvgPath, noAccessSvgPath, hideGroupDropDown } = el.dataset;
 
   const initialData = buildCycleAnalyticsInitialData(el.dataset);
   const store = createStore();
@@ -21,6 +22,7 @@ export default () => {
           emptyStateSvgPath,
           noDataSvgPath,
           noAccessSvgPath,
+          hideGroupDropDown: parseBoolean(hideGroupDropDown),
         },
       }),
   });
diff --git a/ee/app/assets/javascripts/geo_node_form/components/geo_node_form_capacities.vue b/ee/app/assets/javascripts/geo_node_form/components/geo_node_form_capacities.vue
index 9423d0da68a94..4e10f75eed006 100644
--- a/ee/app/assets/javascripts/geo_node_form/components/geo_node_form_capacities.vue
+++ b/ee/app/assets/javascripts/geo_node_form/components/geo_node_form_capacities.vue
@@ -35,14 +35,6 @@ export default {
           key: 'filesMaxCapacity',
           conditional: 'secondary',
         },
-        {
-          id: 'node-verification-capacity-field',
-          label: __('Verification capacity'),
-          description: __(
-            'Control the maximum concurrency of verification operations for this Geo node',
-          ),
-          key: 'verificationMaxCapacity',
-        },
         {
           id: 'node-container-repository-capacity-field',
           label: __('Container repositories sync capacity'),
@@ -50,6 +42,15 @@ export default {
             'Control the maximum concurrency of container repository operations for this Geo node',
           ),
           key: 'containerRepositoriesMaxCapacity',
+          conditional: 'secondary',
+        },
+        {
+          id: 'node-verification-capacity-field',
+          label: __('Verification capacity'),
+          description: __(
+            'Control the maximum concurrency of verification operations for this Geo node',
+          ),
+          key: 'verificationMaxCapacity',
         },
         {
           id: 'node-reverification-interval-field',
diff --git a/ee/app/assets/javascripts/pages/groups/analytics/cycle_analytics/index.js b/ee/app/assets/javascripts/pages/groups/analytics/cycle_analytics/index.js
new file mode 100644
index 0000000000000..c3cae64f6c33d
--- /dev/null
+++ b/ee/app/assets/javascripts/pages/groups/analytics/cycle_analytics/index.js
@@ -0,0 +1,3 @@
+import initCycleAnalyticsApp from 'ee/analytics/cycle_analytics/index';
+
+document.addEventListener('DOMContentLoaded', initCycleAnalyticsApp);
diff --git a/ee/app/controllers/analytics/analytics_controller.rb b/ee/app/controllers/analytics/analytics_controller.rb
index f87e3d817976d..885bda8c4c26b 100644
--- a/ee/app/controllers/analytics/analytics_controller.rb
+++ b/ee/app/controllers/analytics/analytics_controller.rb
@@ -4,8 +4,10 @@ class Analytics::AnalyticsController < Analytics::ApplicationController
   def index
     if Feature.disabled?(:group_level_productivity_analytics, default_enabled: true) && Gitlab::Analytics.productivity_analytics_enabled?
       redirect_to analytics_productivity_analytics_path
-    elsif Gitlab::Analytics.cycle_analytics_enabled?
+    elsif Feature.disabled?(:group_level_cycle_analytics) && Gitlab::Analytics.cycle_analytics_enabled?
       redirect_to analytics_cycle_analytics_path
+    elsif can?(current_user, :read_instance_statistics)
+      redirect_to instance_statistics_dev_ops_score_index_path
     else
       render_404
     end
diff --git a/ee/app/controllers/groups/analytics/cycle_analytics_controller.rb b/ee/app/controllers/groups/analytics/cycle_analytics_controller.rb
new file mode 100644
index 0000000000000..df6f48e09ab65
--- /dev/null
+++ b/ee/app/controllers/groups/analytics/cycle_analytics_controller.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class Groups::Analytics::CycleAnalyticsController < Groups::Analytics::ApplicationController
+  include CycleAnalyticsParams
+
+  layout 'group'
+
+  check_feature_flag Gitlab::Analytics::CYCLE_ANALYTICS_FEATURE_FLAG
+  increment_usage_counter Gitlab::UsageDataCounters::CycleAnalyticsCounter, :views, only: :show
+
+  before_action do
+    push_frontend_feature_flag(:customizable_cycle_analytics)
+    push_frontend_feature_flag(:cycle_analytics_scatterplot_enabled, default_enabled: true)
+    push_frontend_feature_flag(:cycle_analytics_scatterplot_median_enabled, default_enabled: true)
+    push_frontend_feature_flag(:tasks_by_type_chart)
+  end
+
+  before_action :load_group, only: :show
+  before_action :load_project, only: :show
+  before_action :build_request_params, only: :show
+
+  def build_request_params
+    @request_params ||= Gitlab::Analytics::CycleAnalytics::RequestParams.new(allowed_params.merge(group: @group), current_user: current_user)
+  end
+
+  def allowed_params
+    params.permit(
+      :created_after,
+      :created_before,
+      project_ids: []
+    )
+  end
+end
diff --git a/ee/app/controllers/groups/contribution_analytics_controller.rb b/ee/app/controllers/groups/contribution_analytics_controller.rb
index 3f7e1f638b6fa..b3d8f9e043e73 100644
--- a/ee/app/controllers/groups/contribution_analytics_controller.rb
+++ b/ee/app/controllers/groups/contribution_analytics_controller.rb
@@ -3,6 +3,7 @@
 class Groups::ContributionAnalyticsController < Groups::ApplicationController
   before_action :group
   before_action :check_contribution_analytics_available!
+  before_action :authorize_read_contribution_analytics!
 
   layout 'group'
 
@@ -27,6 +28,28 @@ def data_collector
   end
 
   def check_contribution_analytics_available!
-    render_404 unless @group.feature_available?(:contribution_analytics) || LicenseHelper.show_promotions?(current_user)
+    return if group_has_access_to_feature?
+
+    show_promotions? ? render_promotion : render_404
+  end
+
+  def authorize_read_contribution_analytics!
+    render_403 unless user_has_access_to_feature?
+  end
+
+  def render_promotion
+    render 'shared/promotions/_promote_contribution_analytics'
+  end
+
+  def show_promotions?
+    LicenseHelper.show_promotions?(current_user)
+  end
+
+  def group_has_access_to_feature?
+    @group.feature_available?(:contribution_analytics)
+  end
+
+  def user_has_access_to_feature?
+    can?(current_user, :read_group_contribution_analytics, @group)
   end
 end
diff --git a/ee/app/helpers/ee/analytics_navbar_helper.rb b/ee/app/helpers/ee/analytics_navbar_helper.rb
index e37385ed0e18f..2b461582bfd92 100644
--- a/ee/app/helpers/ee/analytics_navbar_helper.rb
+++ b/ee/app/helpers/ee/analytics_navbar_helper.rb
@@ -19,7 +19,8 @@ def group_analytics_navbar_links(group, current_user)
         contribution_analytics_navbar_link(group, current_user),
         group_insights_navbar_link(group, current_user),
         issues_analytics_navbar_link(group, current_user),
-        productivity_analytics_navbar_link(group, current_user)
+        productivity_analytics_navbar_link(group, current_user),
+        group_cycle_analytics_navbar_link(group, current_user)
       ].compact
     end
 
@@ -36,6 +37,18 @@ def project_issues_analytics_navbar_link(project, current_user)
       )
     end
 
+    def group_cycle_analytics_navbar_link(group, current_user)
+      return unless ::Feature.enabled?(:analytics_pages_under_group_analytics_sidebar, group, default_enabled: true)
+      return unless ::Feature.enabled?(:group_level_cycle_analytics)
+      return unless group_sidebar_link?(:cycle_analytics)
+
+      navbar_sub_item(
+        title: _('Value Stream Analytics'),
+        path: 'groups/analytics/cycle_analytics#show',
+        link: group_analytics_cycle_analytics_path(group)
+      )
+    end
+
     def productivity_analytics_navbar_link(group, current_user)
       return unless ::Feature.enabled?(:analytics_pages_under_group_analytics_sidebar, group, default_enabled: true)
       return unless ::Feature.enabled?(:group_level_productivity_analytics, default_enabled: true)
@@ -44,7 +57,7 @@ def productivity_analytics_navbar_link(group, current_user)
       navbar_sub_item(
         title: _('Productivity Analytics'),
         path: 'groups/analytics/productivity_analytics#show',
-        link: group_analytics_productivity_analytics_path(@group)
+        link: group_analytics_productivity_analytics_path(group)
       )
     end
 
diff --git a/ee/app/helpers/ee/dashboard_helper.rb b/ee/app/helpers/ee/dashboard_helper.rb
index d865190014172..34ed96707012b 100644
--- a/ee/app/helpers/ee/dashboard_helper.rb
+++ b/ee/app/helpers/ee/dashboard_helper.rb
@@ -32,7 +32,7 @@ def has_start_trial?
     end
 
     def analytics_nav_url
-      if ::Gitlab::Analytics.any_features_enabled?
+      if ::Feature.disabled?(:group_level_cycle_analytics) && ::Gitlab::Analytics.any_features_enabled?
         return analytics_root_path
       end
 
@@ -48,7 +48,7 @@ def analytics_nav_url
     override :get_dashboard_nav_links
     def get_dashboard_nav_links
       super.tap do |links|
-        links << :analytics if ::Gitlab::Analytics.any_features_enabled?
+        links << :analytics if ::Feature.disabled?(:group_level_cycle_analytics) && ::Gitlab::Analytics.any_features_enabled?
 
         if can?(current_user, :read_operations_dashboard)
           links << :environments if ::Feature.enabled?(:environments_dashboard, current_user, default_enabled: true)
diff --git a/ee/app/helpers/ee/groups_helper.rb b/ee/app/helpers/ee/groups_helper.rb
index 061cb1494aae1..b8c8bd9de0343 100644
--- a/ee/app/helpers/ee/groups_helper.rb
+++ b/ee/app/helpers/ee/groups_helper.rb
@@ -98,6 +98,10 @@ def show_discover_group_security?(group)
     def get_group_sidebar_links
       links = super
 
+      if can?(current_user, :read_group_cycle_analytics, @group)
+        links << :cycle_analytics
+      end
+
       if can?(current_user, :read_group_contribution_analytics, @group) || show_promotions?
         links << :contribution_analytics
       end
diff --git a/ee/app/models/concerns/elastic/application_versioned_search.rb b/ee/app/models/concerns/elastic/application_versioned_search.rb
index 06afe217c4ec5..a0c1e5e663d6a 100644
--- a/ee/app/models/concerns/elastic/application_versioned_search.rb
+++ b/ee/app/models/concerns/elastic/application_versioned_search.rb
@@ -45,10 +45,14 @@ class << self
     end
 
     def maintain_elasticsearch_create
+      return if maintain_elasticsearch_incremental_bulk
+
       ElasticIndexerWorker.perform_async(:index, self.class.to_s, self.id, self.es_id)
     end
 
     def maintain_elasticsearch_update
+      return if maintain_elasticsearch_incremental_bulk
+
       ElasticIndexerWorker.perform_async(
         :update,
         self.class.to_s,
@@ -58,11 +62,21 @@ def maintain_elasticsearch_update
     end
 
     def maintain_elasticsearch_destroy
+      return if maintain_elasticsearch_incremental_bulk
+
       ElasticIndexerWorker.perform_async(
         :delete, self.class.to_s, self.id, self.es_id, es_parent: self.es_parent
       )
     end
 
+    def maintain_elasticsearch_incremental_bulk
+      return false unless Feature.enabled?(:elastic_bulk_incremental_updates, self.project)
+
+      ::Elastic::ProcessBookkeepingService.track!(self)
+
+      true
+    end
+
     class_methods do
       def __elasticsearch__
         @__elasticsearch__ ||= ::Elastic::MultiVersionClassProxy.new(self)
diff --git a/ee/app/models/concerns/elastic/projects_search.rb b/ee/app/models/concerns/elastic/projects_search.rb
index 4a8debb39ea1c..4dcedac4ff1b8 100644
--- a/ee/app/models/concerns/elastic/projects_search.rb
+++ b/ee/app/models/concerns/elastic/projects_search.rb
@@ -19,6 +19,14 @@ def use_elasticsearch?
         ::Gitlab::CurrentSettings.elasticsearch_indexes_project?(self)
       end
 
+      def maintain_elasticsearch_incremental_bulk
+        # TODO: ElasticIndexerWorker does extra work for project hooks, so we
+        # can't use the incremental-bulk indexer for projects yet.
+        #
+        # https://gitlab.com/gitlab-org/gitlab/issues/207494
+        false
+      end
+
       def each_indexed_association
         INDEXED_ASSOCIATIONS.each do |association_name|
           association = self.association(association_name)
diff --git a/ee/app/models/ee/user_bot_type_enums.rb b/ee/app/models/ee/user_bot_type_enums.rb
index f86987ff43ded..a9f3ecf9e71ae 100644
--- a/ee/app/models/ee/user_bot_type_enums.rb
+++ b/ee/app/models/ee/user_bot_type_enums.rb
@@ -9,7 +9,7 @@ module UserBotTypeEnums
 
       override :bots
       def bots
-        # When adding a new key, please ensure you are not redefining a key that already exists in app/models/user_bot_types_enums.rb
+        # When adding a new key, please ensure you are not redefining a key that already exists in app/models/user_bot_type_enums.rb
         bots_hash = super.merge(support_bot: 1, visual_review_bot: 3)
         bots_hash[:custom] = 99 if ::Gitlab.com?
         bots_hash
diff --git a/ee/app/policies/ee/group_policy.rb b/ee/app/policies/ee/group_policy.rb
index 8f9b697f21b45..f19de3b79413c 100644
--- a/ee/app/policies/ee/group_policy.rb
+++ b/ee/app/policies/ee/group_policy.rb
@@ -75,7 +75,7 @@ module GroupPolicy
       rule { can?(:read_cluster) & cluster_deployments_available }
         .enable :read_cluster_environments
 
-      rule { can?(:read_group) & contribution_analytics_available }
+      rule { has_access & contribution_analytics_available }
         .enable :read_group_contribution_analytics
 
       rule { reporter & cycle_analytics_available }.policy do
diff --git a/ee/app/services/elastic/process_bookkeeping_service.rb b/ee/app/services/elastic/process_bookkeeping_service.rb
new file mode 100644
index 0000000000000..5c0f0d54c9f10
--- /dev/null
+++ b/ee/app/services/elastic/process_bookkeeping_service.rb
@@ -0,0 +1,109 @@
+# frozen_string_literal: true
+
+module Elastic
+  class ProcessBookkeepingService
+    REDIS_SET_KEY = 'elastic:incremental:updates:0:zset'
+    REDIS_SCORE_KEY = 'elastic:incremental:updates:0:score'
+    LIMIT = 1000
+
+    class << self
+      # Add some records to the processing queue. Items must be serializable to
+      # a Gitlab::Elastic::DocumentReference
+      def track!(*items)
+        return true if items.empty?
+
+        items.map! { |item| ::Gitlab::Elastic::DocumentReference.serialize(item) }
+
+        with_redis do |redis|
+          # Efficiently generate a guaranteed-unique score for each item
+          max = redis.incrby(REDIS_SCORE_KEY, items.size)
+          min = (max - items.size) + 1
+
+          (min..max).zip(items).each_slice(1000) do |group|
+            logger.debug(message: 'track_items', count: group.count, items: group)
+
+            redis.zadd(REDIS_SET_KEY, group)
+          end
+        end
+
+        true
+      end
+
+      def queue_size
+        with_redis { |redis| redis.zcard(REDIS_SET_KEY) }
+      end
+
+      def clear_tracking!
+        with_redis { |redis| redis.del(REDIS_SET_KEY, REDIS_SCORE_KEY) }
+      end
+
+      def logger
+        # build already caches the logger via request store
+        ::Gitlab::Elasticsearch::Logger.build
+      end
+
+      def with_redis(&blk)
+        Gitlab::Redis::SharedState.with(&blk) # rubocop:disable CodeReuse/ActiveRecord
+      end
+    end
+
+    def execute
+      self.class.with_redis { |redis| execute_with_redis(redis) }
+    end
+
+    private
+
+    def execute_with_redis(redis)
+      specs = redis.zrangebyscore(REDIS_SET_KEY, '-inf', '+inf', limit: [0, LIMIT], with_scores: true)
+      return if specs.empty?
+
+      first_score = specs.first.last
+      last_score = specs.last.last
+
+      logger.info(
+        message: 'bulk_indexing_start',
+        records_count: specs.count,
+        first_score: first_score,
+        last_score: last_score
+      )
+
+      specs.each { |spec, _| submit_document(spec) }
+      failures = bulk_indexer.flush
+
+      # Re-enqueue any failures so they are retried
+      self.class.track!(*failures) if failures.present?
+
+      # Remove all the successes
+      redis.zremrangebyscore(REDIS_SET_KEY, first_score, last_score)
+
+      logger.info(
+        message: 'bulk_indexing_end',
+        records_count: specs.count,
+        failures_count: failures.count,
+        first_score: first_score,
+        last_score: last_score
+      )
+    end
+
+    def submit_document(spec)
+      ref = ::Gitlab::Elastic::DocumentReference.deserialize(spec)
+
+      bulk_indexer.process(ref)
+    rescue ::Gitlab::Elastic::DocumentReference::InvalidError => err
+      logger.warn(
+        message: 'submit_document_failed',
+        reference: spec,
+        error_class: err.class.to_s,
+        error_message: err.message
+      )
+    end
+
+    def bulk_indexer
+      @bulk_indexer ||= ::Gitlab::Elastic::BulkIndexer.new(logger: logger)
+    end
+
+    def logger
+      self.class.logger
+    end
+  end
+end
diff --git a/ee/app/views/admin/geo/nodes/_form.html.haml b/ee/app/views/admin/geo/nodes/_form.html.haml
index f19507a4151d1..7e7cfc29ddb3c 100644
--- a/ee/app/views/admin/geo/nodes/_form.html.haml
+++ b/ee/app/views/admin/geo/nodes/_form.html.haml
@@ -52,18 +52,18 @@
     = form.number_field :files_max_capacity, class: 'form-control col-sm-2', min: 0
     .form-text.text-muted= s_('Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node')
 
+.form-row.form-group.js-hide-if-geo-primary{ class: ('hidden' unless geo_node.secondary?) }
+  .col-sm-8
+    = form.label :container_repositories_max_capacity, s_('Geo|Container repositories sync capacity'), class: 'font-weight-bold'
+    = form.number_field :container_repositories_max_capacity, class: 'form-control col-sm-2', min: 0
+    .form-text.text-muted= s_('Geo|Control the maximum concurrency of container repository operations for this Geo node')
+
 .form-row.form-group
   .col-sm-8
     = form.label :verification_max_capacity, s_('Geo|Verification capacity'), class: 'font-weight-bold'
     = form.number_field :verification_max_capacity, class: 'form-control col-sm-2', min: 0
     .form-text.text-muted= s_('Geo|Control the maximum concurrency of verification operations for this Geo node')
 
-.form-row.form-group
-  .col-sm-8
-    = form.label :container_repositories_max_capacity, s_('Geo|Container repositories sync capacity'), class: 'font-weight-bold'
-    = form.number_field :container_repositories_max_capacity, class: 'form-control col-sm-2', min: 0
-    .form-text.text-muted= s_('Geo|Control the maximum concurrency of container repository operations for this Geo node')
-
 .form-row.form-group.js-hide-if-geo-secondary{ class: ('hidden' unless geo_node.primary?) }
   .col-sm-8
     = form.label :minimum_reverification_interval, s_('Geo|Re-verification interval'), class: 'font-weight-bold'
diff --git a/ee/app/views/groups/analytics/cycle_analytics/show.html.haml b/ee/app/views/groups/analytics/cycle_analytics/show.html.haml
new file mode 100644
index 0000000000000..ca24d4437d0a1
--- /dev/null
+++ b/ee/app/views/groups/analytics/cycle_analytics/show.html.haml
@@ -0,0 +1,6 @@
+- page_title _("Value Stream Analytics")
+- data_attributes = @request_params.valid? ? @request_params.to_data_attributes : {}
+
+- data_attributes.merge!({ empty_state_svg_path: image_path("illustrations/analytics/cycle-analytics-empty-chart.svg"), no_data_svg_path: image_path("illustrations/analytics/cycle-analytics-empty-chart.svg"), no_access_svg_path: image_path("illustrations/analytics/no-access.svg"), hide_group_drop_down: 'true' })
+
+#js-cycle-analytics-app{ data: data_attributes }
diff --git a/ee/app/views/groups/dependency_proxies/show.html.haml b/ee/app/views/groups/dependency_proxies/show.html.haml
index d38d9bf7d7b79..22f70b789dbdb 100644
--- a/ee/app/views/groups/dependency_proxies/show.html.haml
+++ b/ee/app/views/groups/dependency_proxies/show.html.haml
@@ -4,7 +4,7 @@
   %h4= _('Dependency proxy')
 
   %p
-    - link_start = '<a href="%{url}">'.html_safe % { url: help_page_path('PLACEHOLDER') }
+    - link_start = '<a href="%{url}">'.html_safe % { url: help_page_path('user/packages/dependency_proxy/index') }
     = _('Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies.').html_safe % { link_start: link_start, link_end: '</a>'.html_safe }
 
 - if @group.public?
diff --git a/ee/app/views/layouts/nav/sidebar/_analytics.html.haml b/ee/app/views/layouts/nav/sidebar/_analytics.html.haml
index 9d797bebf12e3..f9c201a7e194c 100644
--- a/ee/app/views/layouts/nav/sidebar/_analytics.html.haml
+++ b/ee/app/views/layouts/nav/sidebar/_analytics.html.haml
@@ -19,7 +19,7 @@
                 %strong.fly-out-top-item-name
                   = _('Productivity Analytics')
 
-      - if Gitlab::Analytics.cycle_analytics_enabled?
+      - if Feature.disabled?(:group_level_cycle_analytics) && Gitlab::Analytics.cycle_analytics_enabled?
         = nav_link(controller: :cycle_analytics) do
           = link_to analytics_cycle_analytics_path, class: 'qa-sidebar-cycle-analytics' do
             .nav-icon-container
diff --git a/ee/app/workers/all_queues.yml b/ee/app/workers/all_queues.yml
index 7cfb7233d0972..9ef7d4d1f92b7 100644
--- a/ee/app/workers/all_queues.yml
+++ b/ee/app/workers/all_queues.yml
@@ -24,6 +24,13 @@
   :resource_boundary: :unknown
   :weight: 1
   :idempotent: 
+- :name: cronjob:elastic_index_bulk_cron
+  :feature_category: :search
+  :has_external_dependencies: 
+  :latency_sensitive: 
+  :resource_boundary: :unknown
+  :weight: 1
+  :idempotent: true
 - :name: cronjob:geo_container_repository_sync_dispatch
   :feature_category: :geo_replication
   :has_external_dependencies: 
diff --git a/ee/app/workers/elastic_index_bulk_cron_worker.rb b/ee/app/workers/elastic_index_bulk_cron_worker.rb
new file mode 100644
index 0000000000000..1a95218e738f2
--- /dev/null
+++ b/ee/app/workers/elastic_index_bulk_cron_worker.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class ElasticIndexBulkCronWorker
+  include ApplicationWorker
+  include Gitlab::ExclusiveLeaseHelpers
+
+  # There is no onward scheduling and this cron handles work from across the
+  # application, so there's no useful context to add.
+  include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
+
+  feature_category :search
+  idempotent!
+
+  def perform
+    in_lock(self.class.name.underscore, ttl: 10.minutes, retries: 10, sleep_sec: 1) do
+      Elastic::ProcessBookkeepingService.new.execute
+    end
+  rescue Gitlab::ExclusiveLeaseHelpers::FailedToObtainLockError
+    # We're scheduled on a cronjob, so nothing to do here
+  end
+end
diff --git a/ee/changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml b/ee/changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml
new file mode 100644
index 0000000000000..455bd01632a9c
--- /dev/null
+++ b/ee/changelogs/unreleased/34086-es-bulk-incremental-index-updates.yml
@@ -0,0 +1,5 @@
+---
+title: Add a bulk processor for ES incremental updates
+merge_request:
+author:
+type: added
diff --git a/ee/changelogs/unreleased/security-ag-contribution-analytics.yml b/ee/changelogs/unreleased/security-ag-contribution-analytics.yml
new file mode 100644
index 0000000000000..a0b0276a1a3d2
--- /dev/null
+++ b/ee/changelogs/unreleased/security-ag-contribution-analytics.yml
@@ -0,0 +1,5 @@
+---
+title: Don't show Contribution Analytics to users who are not group members
+merge_request:
+author:
+type: security
diff --git a/ee/config/routes/group.rb b/ee/config/routes/group.rb
index ec9d9d07b5dcd..b9f14b839874a 100644
--- a/ee/config/routes/group.rb
+++ b/ee/config/routes/group.rb
@@ -33,6 +33,7 @@
     end
     namespace :analytics do
       resource :productivity_analytics, only: :show, constraints: -> (req) { Feature.enabled?(:group_level_productivity_analytics, default_enabled: true) && Gitlab::Analytics.productivity_analytics_enabled? }
+      resource :cycle_analytics, path: 'value_stream_analytics', only: :show, constraints: -> (req) { Feature.enabled?(:group_level_cycle_analytics) && Gitlab::Analytics.cycle_analytics_enabled? }
     end
 
     resource :ldap, only: [] do
diff --git a/ee/db/fixtures/development/20_vulnerabilities.rb b/ee/db/fixtures/development/20_vulnerabilities.rb
index 675b194e576a8..f4fdde6b3bf71 100644
--- a/ee/db/fixtures/development/20_vulnerabilities.rb
+++ b/ee/db/fixtures/development/20_vulnerabilities.rb
@@ -45,7 +45,7 @@ def create_vulnerability
     when :resolved
       vulnerability.resolved_by = author
     when :dismissed
-      vulnerability.closed_by = author
+      vulnerability.dismissed_by = author
     end
 
     vulnerability.tap(&:save!)
diff --git a/ee/lib/gitlab/elastic/bulk_indexer.rb b/ee/lib/gitlab/elastic/bulk_indexer.rb
new file mode 100644
index 0000000000000..2e3012f7204b7
--- /dev/null
+++ b/ee/lib/gitlab/elastic/bulk_indexer.rb
@@ -0,0 +1,148 @@
+# frozen_string_literal: true
+
+module Gitlab
+  module Elastic
+    # Accumulate records and submit to elasticsearch in bulk, respecting limits
+    # on request size.
+    #
+    # Call +process+ to accumulate records in memory, submitting bulk requests
+    # when the bulk limits are reached.
+    #
+    # Once finished, call +flush+. Any errors accumulated earlier will be
+    # reported by this call.
+    #
+    # BulkIndexer is not safe for concurrent use.
+    class BulkIndexer
+      include ::Elasticsearch::Model::Client::ClassMethods
+
+      attr_reader :logger, :failures
+
+      def initialize(logger:)
+        @body = []
+        @body_size_bytes = 0
+        @failures = []
+        @logger = logger
+        @ref_cache = []
+      end
+
+      # Adds or removes a document in elasticsearch, depending on whether the
+      # database record it refers to can be found
+      def process(ref)
+        ref_cache << ref
+
+        if ref.database_record
+          index(ref)
+        else
+          delete(ref)
+        end
+      end
+
+      def flush
+        maybe_send_bulk(force: true).failures
+      end
+
+      private
+
+      def reset!
+        @body = []
+        @body_size_bytes = 0
+        @ref_cache = []
+      end
+
+      attr_reader :body, :body_size_bytes, :ref_cache
+
+      def index(ref)
+        proxy = ref.database_record.__elasticsearch__
+        op = build_op(ref, proxy)
+
+        submit({ index: op }, proxy.as_indexed_json)
+
+        maybe_send_bulk
+      end
+
+      def delete(ref)
+        proxy = ref.klass.__elasticsearch__
+        op = build_op(ref, proxy)
+
+        submit(delete: op)
+
+        maybe_send_bulk
+      end
+
+      def build_op(ref, proxy)
+        op = {
+          _index: proxy.index_name,
+          _type: proxy.document_type,
+          _id: ref.es_id
+        }
+
+        op[:_routing] = ref.es_parent if ref.es_parent # blank for projects
+
+        op
+      end
+
+      def bulk_limit_bytes
+        Gitlab::CurrentSettings.elasticsearch_max_bulk_size_mb.megabytes
+      end
+
+      def submit(*hashes)
+        hashes.each do |hash|
+          text = hash.to_json
+
+          body.push(text)
+          @body_size_bytes += text.bytesize + 2 # Account for newlines
+        end
+      end
+
+      def maybe_send_bulk(force: false)
+        return self if body.empty?
+        return self if body_size_bytes < bulk_limit_bytes && !force
+
+        failed_refs = try_send_bulk
+
+        logger.info(
+          message: 'bulk_submitted',
+          body_size_bytes: body_size_bytes,
+          bulk_count: ref_cache.count,
+          errors_count: failed_refs.count
+        )
+
+        failures.push(*failed_refs)
+
+        reset!
+
+        self
+      end
+
+      def try_send_bulk
+        process_errors(client.bulk(body: body))
+      rescue => err
+        # If an exception is raised, treat the entire bulk as failed
+        logger.error(message: 'bulk_exception', error_class: err.class.to_s, error_message: err.message)
+
+        ref_cache
+      end
+
+      def process_errors(result)
+        return [] unless result['errors']
+
+        out = []
+
+        # Items in the response have the same order as items in the request.
+        #
+        # Example succces: {"index": {"result": "created", "status": 201}}
+        # Example failure: {"index": {"error": {...}, "status": 400}}
+        result['items'].each_with_index do |item, i|
+          op = item['index'] || item['delete']
+
+          if op.nil? || op['error']
+            logger.warn(message: 'bulk_error', item: item)
+            out << ref_cache[i]
+          end
+        end
+
+        out
+      end
+    end
+  end
+end
diff --git a/ee/lib/gitlab/elastic/document_reference.rb b/ee/lib/gitlab/elastic/document_reference.rb
new file mode 100644
index 0000000000000..7a586f2966388
--- /dev/null
+++ b/ee/lib/gitlab/elastic/document_reference.rb
@@ -0,0 +1,95 @@
+# frozen_string_literal: true
+
+module Gitlab
+  module Elastic
+    # Tracks some essential information needed to tie database and elasticsearch
+    # records together, and to delete ES documents when the database object no
+    # longer exists.
+    #
+    # A custom serialisation format suitable for Redis is included.
+    class DocumentReference
+      include Gitlab::Utils::StrongMemoize
+
+      InvalidError = Class.new(StandardError)
+
+      class << self
+        def build(instance)
+          new(instance.class, instance.id, instance.es_id, instance.es_parent)
+        end
+
+        def serialize(anything)
+          case anything
+          when String
+            anything
+          when Gitlab::Elastic::DocumentReference
+            anything.serialize
+          when ApplicationRecord
+            serialize_record(anything)
+          when Array
+            serialize_array(anything)
+          else
+            raise InvalidError.new("Don't know how to serialize #{anything.class}")
+          end
+        end
+
+        def serialize_record(record)
+          serialize_array([record.class.to_s, record.id, record.es_id, record.es_parent].compact)
+        end
+
+        def serialize_array(array)
+          test_array!(array)
+
+          array.join(' ')
+        end
+
+        def deserialize(string)
+          deserialize_array(string.split(' '))
+        end
+
+        def deserialize_array(array)
+          test_array!(array)
+
+          new(*array)
+        end
+
+        private
+
+        def test_array!(array)
+          raise InvalidError.new("Bad array representation: #{array.inspect}") unless
+            (3..4).cover?(array.size)
+        end
+      end
+
+      attr_reader :klass, :db_id, :es_id
+
+      # This attribute is nil for some records, e.g., projects
+      attr_reader :es_parent
+
+      def initialize(klass_or_name, db_id, es_id, es_parent = nil)
+        @klass = klass_or_name
+        @klass = klass_or_name.constantize if @klass.is_a?(String)
+        @db_id = db_id
+        @es_id = es_id
+        @es_parent = es_parent
+      end
+
+      def ==(other)
+        other.instance_of?(self.class) &&
+          self.serialize == other.serialize
+      end
+
+      def klass_name
+        klass.to_s
+      end
+
+      # TODO: return a promise for batch loading: https://gitlab.com/gitlab-org/gitlab/issues/207280
+      def database_record
+        strong_memoize(:database_record) { klass.find_by_id(db_id) }
+      end
+
+      def serialize
+        self.class.serialize_array([klass_name, db_id, es_id, es_parent].compact)
+      end
+    end
+  end
+end
diff --git a/ee/spec/controllers/analytics/analytics_controller_spec.rb b/ee/spec/controllers/analytics/analytics_controller_spec.rb
index 2dd509a1cde8c..e5c793bb862fa 100644
--- a/ee/spec/controllers/analytics/analytics_controller_spec.rb
+++ b/ee/spec/controllers/analytics/analytics_controller_spec.rb
@@ -9,6 +9,7 @@
 
   before do
     stub_feature_flags(group_level_productivity_analytics: false)
+    stub_feature_flags(group_level_cycle_analytics: false)
 
     sign_in(user)
     disable_all_analytics_feature_flags
@@ -33,10 +34,22 @@
       end
     end
 
-    it 'renders 404 all the analytics feature flags are disabled' do
+    it 'renders devops score page when all the analytics feature flags are disabled' do
       get :index
 
-      expect(response).to have_gitlab_http_status(:not_found)
+      expect(response).to redirect_to(instance_statistics_dev_ops_score_index_path)
+    end
+
+    context 'when instance statistics is private' do
+      before do
+        stub_application_setting(instance_statistics_visibility_private: true)
+      end
+
+      it 'renders 404, not found' do
+        get :index
+
+        expect(response).to have_gitlab_http_status(:not_found)
+      end
     end
   end
 end
diff --git a/ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb b/ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb
new file mode 100644
index 0000000000000..728515533ed1d
--- /dev/null
+++ b/ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Analytics::CycleAnalyticsController do
+  let(:user) { create(:user) }
+
+  before do
+    sign_in(user)
+  end
+
+  describe 'usage counter' do
+    it 'increments usage counter' do
+      expect(Gitlab::UsageDataCounters::CycleAnalyticsCounter).to receive(:count).with(:views)
+
+      get(:show)
+
+      expect(response).to be_successful
+    end
+  end
+
+  describe 'GET show' do
+    it 'renders `show` template' do
+      stub_feature_flags(Gitlab::Analytics::CYCLE_ANALYTICS_FEATURE_FLAG => true)
+
+      get :show
+
+      expect(response).to render_template :show
+    end
+
+    it 'renders `404` when feature flag is disabled' do
+      stub_feature_flags(Gitlab::Analytics::CYCLE_ANALYTICS_FEATURE_FLAG => false)
+
+      get :show
+
+      expect(response).to have_gitlab_http_status(:not_found)
+    end
+  end
+end
diff --git a/ee/spec/controllers/groups/contribution_analytics_controller_spec.rb b/ee/spec/controllers/groups/contribution_analytics_controller_spec.rb
index a4b02fd2ba79b..24e25802aa705 100644
--- a/ee/spec/controllers/groups/contribution_analytics_controller_spec.rb
+++ b/ee/spec/controllers/groups/contribution_analytics_controller_spec.rb
@@ -6,6 +6,7 @@
   let(:user) { create(:user) }
   let(:user2) { create(:user) }
   let(:user3) { create(:user) }
+  let(:guest_user) { create(:user) }
   let(:group) { create(:group) }
   let(:project) { create(:project, :repository, group: group) }
   let(:issue) { create(:issue, project: project) }
@@ -30,128 +31,198 @@ def create_push_event(author, project)
     group.add_owner(user)
     group.add_user(user2, GroupMember::DEVELOPER)
     group.add_user(user3, GroupMember::MAINTAINER)
-    sign_in(user)
-
-    create_event(user, project, issue, Event::CLOSED)
-    create_event(user2, project, issue, Event::CLOSED)
-    create_event(user2, project, merge_request, Event::CREATED)
-    create_event(user3, project, merge_request, Event::CREATED)
-    create_push_event(user, project)
-    create_push_event(user3, project)
   end
 
-  it 'returns 404 when feature is not available and we dont show promotions' do
-    stub_licensed_features(contribution_analytics: false)
+  describe '#authorize_read_contribution_analytics!' do
+    before do
+      group.add_user(guest_user, GroupMember::GUEST)
+      sign_in(guest_user)
+    end
 
-    get :show, params: { group_id: group.path }
+    context 'when user has access to the group' do
+      let(:request) { get :show, params: { group_id: group.path } }
 
-    expect(response).to have_gitlab_http_status(:not_found)
-  end
+      context 'when feature is available to the group' do
+        before do
+          allow(License).to receive(:feature_available?).and_call_original
+          allow(License).to receive(:feature_available?)
+            .with(:contribution_analytics)
+            .and_return(true)
 
-  context 'unlicensed but we show promotions' do
-    before do
-      allow(License).to receive(:current).and_return(nil)
-      allow(LicenseHelper).to receive(:show_promotions?).and_return(true)
-      stub_application_setting(check_namespace_plan: false)
-    end
+          allow(Ability).to receive(:allowed?).and_call_original
+          allow(Ability).to receive(:allowed?)
+            .with(guest_user, :read_group_contribution_analytics, group)
+            .and_return(user_has_access_to_feature)
+        end
 
-    it 'returns page when feature is not available and we show promotions' do
-      stub_licensed_features(contribution_analytics: false)
+        context 'when user has access to the feature' do
+          let(:user_has_access_to_feature) { true }
 
-      get :show, params: { group_id: group.path }
+          it 'renders 200' do
+            request
 
-      expect(response).to have_gitlab_http_status(:ok)
+            expect(response).to have_gitlab_http_status(:ok)
+          end
+        end
+
+        context 'when user does not have access to the feature' do
+          let(:user_has_access_to_feature) { false }
+
+          it 'renders 403' do
+            request
+
+            expect(response).to have_gitlab_http_status(:forbidden)
+          end
+        end
+      end
     end
-  end
 
-  it 'sets instance variables properly', :aggregate_failures do
-    get :show, params: { group_id: group.path }
+    describe '#check_contribution_analytics_available!' do
+      before do
+        group.add_user(guest_user, GroupMember::GUEST)
+        sign_in(guest_user)
+      end
 
-    expect(response).to have_gitlab_http_status(:ok)
+      context 'when feature is not available to the group' do
+        let(:request) { get :show, params: { group_id: group.path } }
 
-    expect(assigns[:data_collector].users).to match_array([user, user2, user3])
-    expect(assigns[:data_collector].total_events_by_author_count.values.sum).to eq(6)
-    stats = assigns[:data_collector].group_member_contributions_table_data
+        before do
+          allow(License).to receive(:feature_available?).and_call_original
+          allow(License).to receive(:feature_available?)
+            .with(:contribution_analytics)
+            .and_return(false)
 
-    # NOTE: The array ordering matters! The view references them all by index
-    expect(stats[:merge_requests_created][:data]).to eq([0, 1, 1])
-    expect(stats[:issues_closed][:data]).to eq([1, 1, 0])
-    expect(stats[:push][:data]).to eq([1, 0, 1])
-  end
+          allow(LicenseHelper).to receive(:show_promotions?)
+            .and_return(show_promotions)
+        end
 
-  it "returns member contributions JSON when format is JSON" do
-    get :show, params: { group_id: group.path }, format: :json
-
-    expect(json_response.length).to eq(3)
-
-    first_user = json_response.at(0)
-    expect(first_user["username"]).to eq(user.username)
-    expect(first_user["user_web_url"]).to eq("/#{user.username}")
-    expect(first_user["fullname"]).to eq(user.name)
-    expect(first_user["push"]).to eq(1)
-    expect(first_user["issues_created"]).to eq(0)
-    expect(first_user["issues_closed"]).to eq(1)
-    expect(first_user["merge_requests_created"]).to eq(0)
-    expect(first_user["merge_requests_merged"]).to eq(0)
-    expect(first_user["total_events"]).to eq(2)
-  end
+        context 'when promotions are on' do
+          let(:show_promotions) { true }
+
+          it 'renders promotions page' do
+            request
 
-  it "includes projects in subgroups" do
-    subgroup = create(:group, parent: group)
-    subproject = create(:project, :repository, group: subgroup)
+            expect(response).to render_template(
+              'shared/promotions/_promote_contribution_analytics')
+          end
+        end
 
-    create_event(user, subproject, issue, Event::CLOSED)
-    create_push_event(user, subproject)
+        context 'when promotions are not on' do
+          let(:show_promotions) { false }
 
-    get :show, params: { group_id: group.path }, format: :json
+          it 'renders 404' do
+            request
 
-    first_user = json_response.first
-    expect(first_user["issues_closed"]).to eq(2)
-    expect(first_user["push"]).to eq(2)
+            expect(response).to have_gitlab_http_status(:not_found)
+          end
+        end
+      end
+    end
   end
 
-  it "excludes projects outside of the group" do
-    empty_group = create(:group)
-    other_project = create(:project, :repository)
+  describe 'with contributions' do
+    before do
+      sign_in(user)
 
-    create_event(user, other_project, issue, Event::CLOSED)
-    create_push_event(user, other_project)
+      create_event(user, project, issue, Event::CLOSED)
+      create_event(user2, project, issue, Event::CLOSED)
+      create_event(user2, project, merge_request, Event::CREATED)
+      create_event(user3, project, merge_request, Event::CREATED)
+      create_push_event(user, project)
+      create_push_event(user3, project)
+    end
 
-    get :show, params: { group_id: empty_group.path }, format: :json
+    it 'sets instance variables properly', :aggregate_failures do
+      get :show, params: { group_id: group.path }
 
-    expect(json_response).to be_empty
-  end
+      expect(response).to have_gitlab_http_status(:ok)
+
+      expect(assigns[:data_collector].users).to match_array([user, user2, user3])
+      expect(assigns[:data_collector].total_events_by_author_count.values.sum).to eq(6)
+      stats = assigns[:data_collector].group_member_contributions_table_data
 
-  it 'does not cause N+1 queries when the format is JSON' do
-    control_count = ActiveRecord::QueryRecorder.new do
+      # NOTE: The array ordering matters! The view references them all by index
+      expect(stats[:merge_requests_created][:data]).to eq([0, 1, 1])
+      expect(stats[:issues_closed][:data]).to eq([1, 1, 0])
+      expect(stats[:push][:data]).to eq([1, 0, 1])
+    end
+
+    it "returns member contributions JSON when format is JSON" do
       get :show, params: { group_id: group.path }, format: :json
+
+      expect(json_response.length).to eq(3)
+
+      first_user = json_response.at(0)
+      expect(first_user["username"]).to eq(user.username)
+      expect(first_user["user_web_url"]).to eq("/#{user.username}")
+      expect(first_user["fullname"]).to eq(user.name)
+      expect(first_user["push"]).to eq(1)
+      expect(first_user["issues_created"]).to eq(0)
+      expect(first_user["issues_closed"]).to eq(1)
+      expect(first_user["merge_requests_created"]).to eq(0)
+      expect(first_user["merge_requests_merged"]).to eq(0)
+      expect(first_user["total_events"]).to eq(2)
     end
 
-    controller.instance_variable_set(:@group, nil)
-    user4 = create(:user)
-    group.add_user(user4, GroupMember::DEVELOPER)
+    it "includes projects in subgroups" do
+      subgroup = create(:group, parent: group)
+      subproject = create(:project, :repository, group: subgroup)
 
-    expect { get :show, params: { group_id: group.path }, format: :json }
-      .not_to exceed_query_limit(control_count)
-  end
+      create_event(user, subproject, issue, Event::CLOSED)
+      create_push_event(user, subproject)
 
-  describe 'with views' do
-    render_views
+      get :show, params: { group_id: group.path }, format: :json
 
-    it 'avoids a N+1 query in #show' do
-      # Warm the cache
-      get :show, params: { group_id: group.path }
+      first_user = json_response.first
+      expect(first_user["issues_closed"]).to eq(2)
+      expect(first_user["push"]).to eq(2)
+    end
 
-      control_queries = ActiveRecord::QueryRecorder.new { get :show, params: { group_id: group.path } }
-      create_push_event(user, project)
+    it "excludes projects outside of the group" do
+      empty_group = create(:group)
+      other_project = create(:project, :repository)
+
+      empty_group.add_reporter(user)
+
+      create_event(user, other_project, issue, Event::CLOSED)
+      create_push_event(user, other_project)
+
+      get :show, params: { group_id: empty_group.path }, format: :json
 
-      expect { get :show, params: { group_id: group.path } }.not_to exceed_query_limit(control_queries)
+      expect(json_response).to be_empty
     end
-  end
 
-  describe 'GET #index' do
-    subject { get :show, params: { group_id: group.to_param } }
+    it 'does not cause N+1 queries when the format is JSON' do
+      control_count = ActiveRecord::QueryRecorder.new do
+        get :show, params: { group_id: group.path }, format: :json
+      end
+
+      controller.instance_variable_set(:@group, nil)
+      user4 = create(:user)
+      group.add_user(user4, GroupMember::DEVELOPER)
+
+      expect { get :show, params: { group_id: group.path }, format: :json }
+        .not_to exceed_query_limit(control_count)
+    end
+
+    describe 'with views' do
+      render_views
+
+      it 'avoids a N+1 query in #show' do
+        # Warm the cache
+        get :show, params: { group_id: group.path }
 
-    it_behaves_like 'disabled when using an external authorization service'
+        control_queries = ActiveRecord::QueryRecorder.new { get :show, params: { group_id: group.path } }
+        create_push_event(user, project)
+
+        expect { get :show, params: { group_id: group.path } }.not_to exceed_query_limit(control_queries)
+      end
+    end
+
+    describe 'GET #index' do
+      subject { get :show, params: { group_id: group.to_param } }
+
+      it_behaves_like 'disabled when using an external authorization service'
+    end
   end
 end
diff --git a/ee/spec/features/analytics/analytics_workspace_spec.rb b/ee/spec/features/analytics/analytics_workspace_spec.rb
index c910ec1b7e8ce..d80615b0da0a8 100644
--- a/ee/spec/features/analytics/analytics_workspace_spec.rb
+++ b/ee/spec/features/analytics/analytics_workspace_spec.rb
@@ -10,14 +10,6 @@
     sign_in(user)
   end
 
-  it 'renders 404 if analytics features are turned off' do
-    disable_all_analytics_feature_flags
-
-    visit analytics_root_path
-
-    expect(page.status_code).to eq(404)
-  end
-
   it 'renders the productivity analytics landing page' do
     stub_licensed_features(Gitlab::Analytics::PRODUCTIVITY_ANALYTICS_FEATURE_FLAG => true)
 
diff --git a/ee/spec/features/search/elastic/project_search_spec.rb b/ee/spec/features/search/elastic/project_search_spec.rb
index 332ef010b2588..c7371b93541a0 100644
--- a/ee/spec/features/search/elastic/project_search_spec.rb
+++ b/ee/spec/features/search/elastic/project_search_spec.rb
@@ -16,8 +16,9 @@
   end
 
   describe 'searching' do
-    it 'finds issues', :sidekiq_might_not_need_inline do
+    it 'finds issues', :sidekiq_inline do
       create(:issue, project: project, title: 'Test searching for an issue')
+      ensure_elasticsearch_index!
 
       submit_search('Test')
       select_search_scope('Issues')
@@ -25,8 +26,9 @@
       expect(page).to have_selector('.results', text: 'Test searching for an issue')
     end
 
-    it 'finds merge requests', :sidekiq_might_not_need_inline do
+    it 'finds merge requests', :sidekiq_inline do
       create(:merge_request, source_project: project, target_project: project, title: 'Test searching for an MR')
+      ensure_elasticsearch_index!
 
       submit_search('Test')
       select_search_scope('Merge requests')
@@ -34,8 +36,9 @@
       expect(page).to have_selector('.results', text: 'Test searching for an MR')
     end
 
-    it 'finds milestones', :sidekiq_might_not_need_inline do
+    it 'finds milestones', :sidekiq_inline do
       create(:milestone, project: project, title: 'Test searching for a milestone')
+      ensure_elasticsearch_index!
 
       submit_search('Test')
       select_search_scope('Milestones')
@@ -43,7 +46,7 @@
       expect(page).to have_selector('.results', text: 'Test searching for a milestone')
     end
 
-    it 'finds wiki pages', :sidekiq_might_not_need_inline do
+    it 'finds wiki pages', :sidekiq_inline do
       project.wiki.create_page('test.md', 'Test searching for a wiki page')
       project.wiki.index_wiki_blobs
 
@@ -53,8 +56,9 @@
       expect(page).to have_selector('.results', text: 'Test searching for a wiki page')
     end
 
-    it 'finds notes', :sidekiq_might_not_need_inline do
+    it 'finds notes', :sidekiq_inline do
       create(:note, project: project, note: 'Test searching for a comment')
+      ensure_elasticsearch_index!
 
       submit_search('Test')
       select_search_scope('Comments')
@@ -62,7 +66,7 @@
       expect(page).to have_selector('.results', text: 'Test searching for a comment')
     end
 
-    it 'finds commits', :sidekiq_might_not_need_inline do
+    it 'finds commits', :sidekiq_inline do
       project.repository.index_commits_and_blobs
 
       submit_search('initial')
@@ -71,7 +75,7 @@
       expect(page).to have_selector('.results', text: 'Initial commit')
     end
 
-    it 'finds blobs', :sidekiq_might_not_need_inline do
+    it 'finds blobs', :sidekiq_inline do
       project.repository.index_commits_and_blobs
 
       submit_search('def')
diff --git a/ee/spec/frontend/analytics/cycle_analytics/components/base_spec.js b/ee/spec/frontend/analytics/cycle_analytics/components/base_spec.js
index 04804a8003df0..2c376b6cc7d7a 100644
--- a/ee/spec/frontend/analytics/cycle_analytics/components/base_spec.js
+++ b/ee/spec/frontend/analytics/cycle_analytics/components/base_spec.js
@@ -22,6 +22,7 @@ import * as mockData from '../mock_data';
 const noDataSvgPath = 'path/to/no/data';
 const noAccessSvgPath = 'path/to/no/access';
 const emptyStateSvgPath = 'path/to/empty/state';
+const hideGroupDropDown = false;
 
 const localVue = createLocalVue();
 localVue.use(Vuex);
@@ -40,6 +41,7 @@ function createComponent({
   scatterplotEnabled = true,
   tasksByTypeChartEnabled = true,
   customizableCycleAnalyticsEnabled = false,
+  props = {},
 } = {}) {
   const func = shallow ? shallowMount : mount;
   const comp = func(Component, {
@@ -50,6 +52,8 @@ function createComponent({
       noDataSvgPath,
       noAccessSvgPath,
       baseStagesEndpoint: mockData.endpoints.baseStagesEndpoint,
+      hideGroupDropDown,
+      ...props,
     },
     provide: {
       glFeatures: {
@@ -165,6 +169,21 @@ describe('Cycle Analytics component', () => {
       it('does not display the duration scatter plot', () => {
         displaysDurationScatterPlot(false);
       });
+
+      describe('hideGroupDropDown = true', () => {
+        beforeEach(() => {
+          mock = new MockAdapter(axios);
+          wrapper = createComponent({
+            props: {
+              hideGroupDropDown: true,
+            },
+          });
+        });
+
+        it('does not render the group dropdown', () => {
+          expect(wrapper.find(GroupsDropdownFilter).exists()).toBe(false);
+        });
+      });
     });
 
     describe('after a filter has been selected', () => {
diff --git a/ee/spec/frontend/boards/components/board_list_selector/assignees_list_item_spec.js b/ee/spec/frontend/boards/components/board_list_selector/assignees_list_item_spec.js
index 043766c931850..84835b078194a 100644
--- a/ee/spec/frontend/boards/components/board_list_selector/assignees_list_item_spec.js
+++ b/ee/spec/frontend/boards/components/board_list_selector/assignees_list_item_spec.js
@@ -1,68 +1,52 @@
-import Vue from 'vue';
-
+import { shallowMount } from '@vue/test-utils';
 import AssigneesListItem from 'ee/boards/components/boards_list_selector/assignees_list_item.vue';
-import mountComponent from 'helpers/vue_mount_component_helper';
-
 import { mockAssigneesList } from 'jest/boards/mock_data';
 
-const createComponent = () => {
-  const Component = Vue.extend(AssigneesListItem);
-
-  return mountComponent(Component, {
-    item: mockAssigneesList[0],
-  });
-};
-
 describe('AssigneesListItem', () => {
-  let vm;
+  const assignee = mockAssigneesList[0];
+  let wrapper;
 
   beforeEach(() => {
-    vm = createComponent();
+    wrapper = shallowMount(AssigneesListItem, {
+      propsData: {
+        item: assignee,
+      },
+    });
   });
 
   afterEach(() => {
-    vm.$destroy();
+    wrapper.destroy();
   });
 
-  describe('computed', () => {
-    describe('avatarAltText', () => {
-      it('returns computed alt text based on assignee.name', () => {
-        expect(vm.avatarAltText).toBe(`${mockAssigneesList[0].name}'s avatar`);
-      });
-    });
+  it('renders component container element with class `filter-dropdown-item`', () => {
+    expect(wrapper.contains('.filter-dropdown-item')).toBe(true);
   });
 
-  describe('methods', () => {
-    describe('handleItemClick', () => {
-      it('emits `onItemSelect` event on component and sends `assignee` as event param', () => {
-        jest.spyOn(vm, '$emit');
-        const assignee = mockAssigneesList[0];
-
-        vm.handleItemClick();
+  it('emits `onItemSelect` event on component click and sends `assignee` as event param', () => {
+    wrapper.find('.filter-dropdown-item').trigger('click');
 
-        expect(vm.$emit).toHaveBeenCalledWith('onItemSelect', assignee);
-      });
-    });
+    expect(wrapper.emitted().onItemSelect[0]).toEqual([assignee]);
   });
 
-  describe('template', () => {
-    it('renders component container element with class `filter-dropdown-item`', () => {
-      expect(vm.$el.classList.contains('filter-dropdown-item')).toBe(true);
+  describe('avatar', () => {
+    it('has alt text', () => {
+      expect(wrapper.find('.avatar').attributes('alt')).toBe(`${assignee.name}'s avatar`);
     });
 
-    it('renders user item button element', () => {
-      const assignee = mockAssigneesList[0];
-      const buttonEl = vm.$el.querySelector('.dropdown-user');
+    it('has src url', () => {
+      expect(wrapper.find('.avatar').attributes('src')).toBe(assignee.avatar_url);
+    });
+  });
 
-      expect(buttonEl).not.toBeNull();
-      expect(
-        buttonEl.querySelector('.avatar-container.s32 img.avatar.s32').getAttribute('src'),
-      ).toBe(assignee.avatar_url);
+  describe('user details', () => {
+    it('shows assignee name', () => {
+      expect(wrapper.find('.dropdown-user-details').text()).toContain(assignee.name);
+    });
 
-      expect(buttonEl.querySelector('.dropdown-user-details').innerText).toContain(assignee.name);
-      expect(
-        buttonEl.querySelector('.dropdown-user-details .dropdown-light-content').innerText,
-      ).toContain(`@${assignee.username}`);
+    it('shows assignee username', () => {
+      expect(wrapper.find('.dropdown-user-details .dropdown-light-content').text()).toContain(
+        `@${assignee.username}`,
+      );
     });
   });
 });
diff --git a/ee/spec/frontend/boards/components/board_list_selector/list_container_spec.js b/ee/spec/frontend/boards/components/board_list_selector/list_container_spec.js
index 471bc005db8fd..3351ddc0a70d8 100644
--- a/ee/spec/frontend/boards/components/board_list_selector/list_container_spec.js
+++ b/ee/spec/frontend/boards/components/board_list_selector/list_container_spec.js
@@ -1,55 +1,51 @@
+import { shallowMount } from '@vue/test-utils';
 import Vue from 'vue';
-
 import ListContainer from 'ee/boards/components/boards_list_selector/list_container.vue';
-import mountComponent from 'helpers/vue_mount_component_helper';
-
+import ListFilter from 'ee/boards/components/boards_list_selector/list_filter.vue';
+import ListContent from 'ee/boards/components/boards_list_selector/list_content.vue';
 import { mockAssigneesList } from 'jest/boards/mock_data';
 
-const createComponent = () => {
-  const Component = Vue.extend(ListContainer);
-
-  return mountComponent(Component, {
-    loading: false,
-    items: mockAssigneesList,
-    listType: 'assignees',
-  });
-};
-
 describe('ListContainer', () => {
-  let vm;
+  let wrapper;
 
   beforeEach(() => {
-    vm = createComponent();
+    wrapper = shallowMount(ListContainer, {
+      propsData: {
+        loading: false,
+        items: mockAssigneesList,
+        listType: 'assignees',
+      },
+    });
   });
 
   afterEach(() => {
-    vm.$destroy();
+    wrapper.destroy();
   });
 
   describe('computed', () => {
     describe('filteredItems', () => {
       it('returns assignees list as it is when `query` is empty', () => {
-        vm.query = '';
+        wrapper.setData({ query: '' });
 
-        expect(vm.filteredItems.length).toBe(mockAssigneesList.length);
+        expect(wrapper.vm.filteredItems.length).toBe(mockAssigneesList.length);
       });
 
       it('returns filtered assignees list as it is when `query` has name', () => {
         const assignee = mockAssigneesList[0];
 
-        vm.query = assignee.name;
+        wrapper.setData({ query: assignee.name });
 
-        expect(vm.filteredItems.length).toBe(1);
-        expect(vm.filteredItems[0].name).toBe(assignee.name);
+        expect(wrapper.vm.filteredItems.length).toBe(1);
+        expect(wrapper.vm.filteredItems[0].name).toBe(assignee.name);
       });
 
       it('returns filtered assignees list as it is when `query` has username', () => {
         const assignee = mockAssigneesList[0];
 
-        vm.query = assignee.username;
+        wrapper.setData({ query: assignee.username });
 
-        expect(vm.filteredItems.length).toBe(1);
-        expect(vm.filteredItems[0].username).toBe(assignee.username);
+        expect(wrapper.vm.filteredItems.length).toBe(1);
+        expect(wrapper.vm.filteredItems[0].username).toBe(assignee.username);
       });
     });
   });
@@ -58,39 +54,39 @@ describe('ListContainer', () => {
     describe('handleSearch', () => {
       it('sets value of param `query` to component prop `query`', () => {
         const query = 'foobar';
-        vm.handleSearch(query);
+        wrapper.vm.handleSearch(query);
 
-        expect(vm.query).toBe(query);
+        expect(wrapper.vm.query).toBe(query);
       });
     });
 
     describe('handleItemClick', () => {
       it('emits `onItemSelect` event on component and sends `assignee` as event param', () => {
-        jest.spyOn(vm, '$emit');
         const assignee = mockAssigneesList[0];
 
-        vm.handleItemClick(assignee);
+        wrapper.vm.handleItemClick(assignee);
 
-        expect(vm.$emit).toHaveBeenCalledWith('onItemSelect', assignee);
+        expect(wrapper.emitted().onItemSelect[0]).toEqual([assignee]);
       });
     });
   });
 
   describe('template', () => {
     it('renders component container element with class `dropdown-assignees-list`', () => {
-      expect(vm.$el.classList.contains('dropdown-assignees-list')).toBe(true);
+      expect(wrapper.classes('dropdown-assignees-list')).toBe(true);
     });
 
     it('renders loading animation when prop `loading` is true', () => {
-      vm.loading = true;
+      wrapper.setProps({ loading: true });
+
       return Vue.nextTick().then(() => {
-        expect(vm.$el.querySelector('.dropdown-loading')).not.toBeNull();
+        expect(wrapper.find('.dropdown-loading').exists()).toBe(true);
       });
     });
 
     it('renders dropdown body elements', () => {
-      expect(vm.$el.querySelector('.dropdown-input')).not.toBeNull();
-      expect(vm.$el.querySelector('.dropdown-content')).not.toBeNull();
+      expect(wrapper.find(ListFilter).exists()).toBe(true);
+      expect(wrapper.find(ListContent).exists()).toBe(true);
     });
   });
 });
diff --git a/ee/spec/frontend/boards/components/board_list_selector/list_content_spec.js b/ee/spec/frontend/boards/components/board_list_selector/list_content_spec.js
index 7b23abb2263b5..2ffe7cfddd450 100644
--- a/ee/spec/frontend/boards/components/board_list_selector/list_content_spec.js
+++ b/ee/spec/frontend/boards/components/board_list_selector/list_content_spec.js
@@ -1,50 +1,36 @@
-import Vue from 'vue';
-
+import { shallowMount } from '@vue/test-utils';
 import ListContent from 'ee/boards/components/boards_list_selector/list_content.vue';
-import mountComponent from 'helpers/vue_mount_component_helper';
-
 import { mockAssigneesList } from 'jest/boards/mock_data';
 
-const createComponent = () => {
-  const Component = Vue.extend(ListContent);
-
-  return mountComponent(Component, {
-    items: mockAssigneesList,
-    listType: 'assignees',
-  });
-};
-
 describe('ListContent', () => {
-  let vm;
+  let wrapper;
 
   beforeEach(() => {
-    vm = createComponent();
+    wrapper = shallowMount(ListContent, {
+      propsData: {
+        items: mockAssigneesList,
+        listType: 'assignees',
+      },
+    });
   });
 
   afterEach(() => {
-    vm.$destroy();
+    wrapper.destroy();
   });
 
-  describe('methods', () => {
-    describe('handleItemClick', () => {
-      it('emits `onItemSelect` event on component and sends `assignee` as event param', () => {
-        jest.spyOn(vm, '$emit');
-        const assignee = mockAssigneesList[0];
+  it('emits `onItemSelect` event on component and sends `assignee` as event param', () => {
+    const assignee = mockAssigneesList[0];
 
-        vm.handleItemClick(assignee);
+    wrapper.vm.handleItemClick(assignee);
 
-        expect(vm.$emit).toHaveBeenCalledWith('onItemSelect', assignee);
-      });
-    });
+    expect(wrapper.emitted().onItemSelect[0]).toEqual([assignee]);
   });
 
-  describe('template', () => {
-    it('renders component container element with class `dropdown-content`', () => {
-      expect(vm.$el.classList.contains('dropdown-content')).toBe(true);
-    });
+  it('renders component container element with class `dropdown-content`', () => {
+    expect(wrapper.classes('dropdown-content')).toBe(true);
+  });
 
-    it('renders UL parent element as child within container', () => {
-      expect(vm.$el.querySelector('ul')).not.toBeNull();
-    });
+  it('renders UL parent element as child within container', () => {
+    expect(wrapper.find('ul').exists()).toBe(true);
   });
 });
diff --git a/ee/spec/frontend/boards/components/board_list_selector/list_filter_spec.js b/ee/spec/frontend/boards/components/board_list_selector/list_filter_spec.js
index 705f63ad1ab05..3a6588aa4d267 100644
--- a/ee/spec/frontend/boards/components/board_list_selector/list_filter_spec.js
+++ b/ee/spec/frontend/boards/components/board_list_selector/list_filter_spec.js
@@ -1,80 +1,81 @@
+import { shallowMount } from '@vue/test-utils';
 import Vue from 'vue';
-
 import ListFilter from 'ee/boards/components/boards_list_selector/list_filter.vue';
-import mountComponent from 'helpers/vue_mount_component_helper';
-
-const createComponent = () => {
-  const Component = Vue.extend(ListFilter);
-
-  return mountComponent(Component);
-};
 
 describe('ListFilter', () => {
-  let vm;
+  let wrapper;
 
   beforeEach(() => {
-    vm = createComponent();
+    wrapper = shallowMount(ListFilter);
   });
 
   afterEach(() => {
-    vm.$destroy();
+    wrapper.destroy();
   });
 
-  describe('methods', () => {
-    describe('handleInputChange', () => {
-      it('emits `onSearchInput` event on component and sends `query` as event param', () => {
-        jest.spyOn(vm, '$emit');
-        const query = 'foobar';
-        vm.query = query;
+  describe('input field', () => {
+    it('emits `onSearchInput` event on keyup and sends input text as event param', () => {
+      const input = wrapper.find('input');
+      input.setValue('foobar');
+      input.trigger('keyup');
+
+      expect(wrapper.emitted().onSearchInput[0]).toEqual(['foobar']);
+    });
+  });
 
-        vm.handleInputChange();
+  describe('clear button', () => {
+    let input;
 
-        expect(vm.$emit).toHaveBeenCalledWith('onSearchInput', query);
-      });
+    beforeEach(() => {
+      // Pre-populate input field with text
+      input = wrapper.find('input');
+      input.setValue('foobar');
+      input.trigger('keyup');
     });
 
-    describe('handleInputClear', () => {
-      it('clears value of prop `query` and calls `handleInputChange` method on component', () => {
-        jest.spyOn(vm, 'handleInputChange');
-        vm.query = 'foobar';
+    it('clears input field and emits `onSearchInput` event with empty value', () => {
+      expect(input.element.value).toBe('foobar');
 
-        vm.handleInputClear();
+      wrapper.find('.dropdown-input-clear').trigger('click');
 
-        expect(vm.query).toBe('');
-        expect(vm.handleInputChange).toHaveBeenCalled();
+      return Vue.nextTick().then(() => {
+        expect(input.element.value).toBe('');
+        expect(wrapper.emitted().onSearchInput[1]).toEqual(['']);
       });
     });
   });
 
   describe('template', () => {
     it('renders component container element with class `dropdown-input`', () => {
-      expect(vm.$el.classList.contains('dropdown-input')).toBe(true);
+      expect(wrapper.classes('dropdown-input')).toBe(true);
     });
 
     it('renders class `has-value` on container element when prop `query` is not empty', () => {
-      vm.query = 'foobar';
+      wrapper.setData({ query: 'foobar' });
+
       return Vue.nextTick().then(() => {
-        expect(vm.$el.classList.contains('has-value')).toBe(true);
+        expect(wrapper.classes('has-value')).toBe(true);
       });
     });
 
     it('removes class `has-value` from container element when prop `query` is empty', () => {
-      vm.query = '';
+      wrapper.setData({ query: '' });
+
       return Vue.nextTick().then(() => {
-        expect(vm.$el.classList.contains('has-value')).toBe(false);
+        expect(wrapper.classes('has-value')).toBe(false);
       });
     });
 
     it('renders search input element', () => {
-      const inputEl = vm.$el.querySelector('input.dropdown-input-field');
+      const inputEl = wrapper.find('input.dropdown-input-field');
 
-      expect(inputEl).not.toBeNull();
-      expect(inputEl.getAttribute('placeholder')).toBe('Search');
+      expect(inputEl.exists()).toBe(true);
+      expect(inputEl.attributes('placeholder')).toBe('Search');
     });
 
     it('renders search input icons', () => {
-      expect(vm.$el.querySelector('i.fa.fa-search.dropdown-input-search')).not.toBeNull();
-      expect(vm.$el.querySelector('i.fa.fa-times.dropdown-input-clear')).not.toBeNull();
+      expect(wrapper.find('i.fa.fa-search.dropdown-input-search').exists()).toBe(true);
+      expect(wrapper.find('i.fa.fa-times.dropdown-input-clear').exists()).toBe(true);
     });
   });
 });
diff --git a/ee/spec/frontend/boards/components/issue_card_weight_spec.js b/ee/spec/frontend/boards/components/issue_card_weight_spec.js
index 6a5e0e9b5c29a..71c5ac0f7543e 100644
--- a/ee/spec/frontend/boards/components/issue_card_weight_spec.js
+++ b/ee/spec/frontend/boards/components/issue_card_weight_spec.js
@@ -1,59 +1,53 @@
-import Vue from 'vue';
+import { shallowMount } from '@vue/test-utils';
 import IssueCardWeight from 'ee/boards/components/issue_card_weight.vue';
-import mountComponent from 'helpers/vue_mount_component_helper';
 
-describe('IssueCardWeight component', () => {
-  let vm;
-  let Component;
-
-  beforeAll(() => {
-    Component = Vue.extend(IssueCardWeight);
+function mountIssueCardWeight(propsData) {
+  return shallowMount(IssueCardWeight, {
+    propsData,
   });
+}
+
+describe('IssueCardWeight', () => {
+  let wrapper;
 
   afterEach(() => {
-    vm.$destroy();
+    wrapper.destroy();
   });
 
-  it('renders weight', () => {
-    vm = mountComponent(Component, {
-      weight: 5,
+  describe('weight text', () => {
+    it('shows 0 when weight is 0', () => {
+      wrapper = mountIssueCardWeight({
+        weight: 0,
+      });
+
+      expect(wrapper.find('.board-card-info-text').text()).toContain(0);
     });
 
-    expect(vm.$el.querySelector('.board-card-info-text').innerText).toContain('5');
+    it('shows 5 when weight is 5', () => {
+      wrapper = mountIssueCardWeight({
+        weight: 5,
+      });
+
+      expect(wrapper.find('.board-card-info-text').text()).toContain('5');
+    });
   });
 
   it('renders a link when no tag is specified', () => {
-    vm = mountComponent(Component, {
+    wrapper = mountIssueCardWeight({
       weight: 2,
     });
 
-    expect(vm.$el.querySelector('a.board-card-info')).toBeDefined();
+    expect(wrapper.find('span.board-card-info').exists()).toBe(false);
+    expect(wrapper.find('a.board-card-info').exists()).toBe(true);
   });
 
   it('renders the tag when it is explicitly specified', () => {
-    vm = mountComponent(Component, {
+    wrapper = mountIssueCardWeight({
       weight: 2,
       tagName: 'span',
     });
 
-    expect(vm.$el.querySelector('span.board-card-info')).toBeDefined();
-    expect(vm.$el.querySelector('a.board-card-info')).toBeNull();
-  });
-
-  describe('with weight=0', () => {
-    beforeEach(() => {
-      vm = mountComponent(Component, {
-        weight: 0,
-      });
-    });
-
-    afterEach(() => {
-      vm.$destroy();
-    });
-
-    it('renders weight', () => {
-      expect(vm.$el.querySelector('.board-card-info-text')).toBeDefined();
-      expect(vm.$el.querySelector('.board-card-info-text').innerText).toContain(0);
-    });
+    expect(wrapper.find('span.board-card-info').exists()).toBe(true);
+    expect(wrapper.find('a.board-card-info').exists()).toBe(false);
   });
 });
diff --git a/ee/spec/frontend/geo_node_form/components/geo_node_form_capacities_spec.js b/ee/spec/frontend/geo_node_form/components/geo_node_form_capacities_spec.js
index 4012f605f3f99..a136c0a2fc178 100644
--- a/ee/spec/frontend/geo_node_form/components/geo_node_form_capacities_spec.js
+++ b/ee/spec/frontend/geo_node_form/components/geo_node_form_capacities_spec.js
@@ -22,17 +22,17 @@ describe('GeoNodeFormCapacities', () => {
   const findGeoNodeFormRepositoryCapacityField = () =>
     wrapper.find('#node-repository-capacity-field');
   const findGeoNodeFormFileCapacityField = () => wrapper.find('#node-file-capacity-field');
-  const findGeoNodeFormVerificationCapacityField = () =>
-    wrapper.find('#node-verification-capacity-field');
   const findGeoNodeFormContainerRepositoryCapacityField = () =>
     wrapper.find('#node-container-repository-capacity-field');
+  const findGeoNodeFormVerificationCapacityField = () =>
+    wrapper.find('#node-verification-capacity-field');
   const findGeoNodeFormReverificationIntervalField = () =>
     wrapper.find('#node-reverification-interval-field');
 
   describe('template', () => {
     describe.each`
       primaryNode | showRepoCapacity | showFileCapacity | showVerificationCapacity | showContainerCapacity | showReverificationInterval
-      ${true}     | ${false}         | ${false}         | ${true}                  | ${true}               | ${true}
+      ${true}     | ${false}         | ${false}         | ${true}                  | ${false}              | ${true}
       ${false}    | ${true}          | ${true}          | ${true}                  | ${true}               | ${false}
     `(
       `conditional fields`,
@@ -40,8 +40,8 @@ describe('GeoNodeFormCapacities', () => {
         primaryNode,
         showRepoCapacity,
         showFileCapacity,
-        showVerificationCapacity,
         showContainerCapacity,
+        showVerificationCapacity,
         showReverificationInterval,
       }) => {
         beforeEach(() => {
@@ -57,14 +57,6 @@ describe('GeoNodeFormCapacities', () => {
           expect(findGeoNodeFormFileCapacityField().exists()).toBe(showFileCapacity);
         });
 
-        it(`it ${
-          showVerificationCapacity ? 'shows' : 'hides'
-        } the Verification Capacity Field`, () => {
-          expect(findGeoNodeFormVerificationCapacityField().exists()).toBe(
-            showVerificationCapacity,
-          );
-        });
-
         it(`it ${
           showContainerCapacity ? 'shows' : 'hides'
         } the Container Repository Capacity Field`, () => {
@@ -73,6 +65,14 @@ describe('GeoNodeFormCapacities', () => {
           );
         });
 
+        it(`it ${
+          showVerificationCapacity ? 'shows' : 'hides'
+        } the Verification Capacity Field`, () => {
+          expect(findGeoNodeFormVerificationCapacityField().exists()).toBe(
+            showVerificationCapacity,
+          );
+        });
+
         it(`it ${
           showReverificationInterval ? 'shows' : 'hides'
         } the Reverification Interval Field`, () => {
diff --git a/ee/spec/javascripts/issuable/related_issues/components/issue_token_spec.js b/ee/spec/frontend/issuable/related_issues/components/issue_token_spec.js
similarity index 98%
rename from ee/spec/javascripts/issuable/related_issues/components/issue_token_spec.js
rename to ee/spec/frontend/issuable/related_issues/components/issue_token_spec.js
index 427d44a5147c7..cd443b6243061 100644
--- a/ee/spec/javascripts/issuable/related_issues/components/issue_token_spec.js
+++ b/ee/spec/frontend/issuable/related_issues/components/issue_token_spec.js
@@ -212,7 +212,7 @@ describe('IssueToken', () => {
     });
 
     it('when getting checked', () => {
-      spyOn(vm, '$emit');
+      jest.spyOn(vm, '$emit').mockImplementation(() => {});
       vm.onRemoveRequest();
 
       expect(vm.$emit).toHaveBeenCalledWith('pendingIssuableRemoveRequest', vm.idKey);
diff --git a/ee/spec/javascripts/issuable/related_issues/components/related_issues_block_spec.js b/ee/spec/frontend/issuable/related_issues/components/related_issues_block_spec.js
similarity index 98%
rename from ee/spec/javascripts/issuable/related_issues/components/related_issues_block_spec.js
rename to ee/spec/frontend/issuable/related_issues/components/related_issues_block_spec.js
index 2efb657bb4e51..e16793012cdcd 100644
--- a/ee/spec/javascripts/issuable/related_issues/components/related_issues_block_spec.js
+++ b/ee/spec/frontend/issuable/related_issues/components/related_issues_block_spec.js
@@ -4,7 +4,7 @@ import {
   issuable1,
   issuable2,
   issuable3,
-} from 'spec/vue_shared/components/issue/related_issuable_mock_data';
+} from 'jest/vue_shared/components/issue/related_issuable_mock_data';
 import {
   linkedIssueTypesMap,
   linkedIssueTypesTextMap,
diff --git a/ee/spec/javascripts/issuable/related_issues/components/related_issues_list_spec.js b/ee/spec/frontend/issuable/related_issues/components/related_issues_list_spec.js
similarity index 93%
rename from ee/spec/javascripts/issuable/related_issues/components/related_issues_list_spec.js
rename to ee/spec/frontend/issuable/related_issues/components/related_issues_list_spec.js
index 9bb5fdcc27559..73c10df4520a0 100644
--- a/ee/spec/javascripts/issuable/related_issues/components/related_issues_list_spec.js
+++ b/ee/spec/frontend/issuable/related_issues/components/related_issues_list_spec.js
@@ -8,7 +8,7 @@ import {
   issuable3,
   issuable4,
   issuable5,
-} from 'spec/vue_shared/components/issue/related_issuable_mock_data';
+} from 'jest/vue_shared/components/issue/related_issuable_mock_data';
 import { PathIdSeparator } from 'ee/related_issues/constants';
 
 describe('RelatedIssuesList', () => {
@@ -180,11 +180,21 @@ describe('RelatedIssuesList', () => {
     });
 
     it('shows weight', () => {
-      expect(wrapper.find(IssueWeight).text()).toBe(issuable1.weight.toString());
+      expect(
+        wrapper
+          .find(IssueWeight)
+          .find('.board-card-info-text')
+          .text(),
+      ).toBe(issuable1.weight.toString());
     });
 
     it('shows due date', () => {
-      expect(wrapper.find(IssueDueDate).text()).toBe('Nov 22, 2010');
+      expect(
+        wrapper
+          .find(IssueDueDate)
+          .find('.board-card-info-text')
+          .text(),
+      ).toBe('Nov 22, 2010');
     });
   });
 });
diff --git a/ee/spec/frontend/issuable/related_issues/components/related_issues_root_spec.js b/ee/spec/frontend/issuable/related_issues/components/related_issues_root_spec.js
new file mode 100644
index 0000000000000..d56e7d81c2ba4
--- /dev/null
+++ b/ee/spec/frontend/issuable/related_issues/components/related_issues_root_spec.js
@@ -0,0 +1,341 @@
+import { mount, shallowMount } from '@vue/test-utils';
+import MockAdapter from 'axios-mock-adapter';
+import waitForPromises from 'helpers/wait_for_promises';
+import RelatedIssuesRoot from 'ee/related_issues/components/related_issues_root.vue';
+import relatedIssuesService from 'ee/related_issues/services/related_issues_service';
+import { linkedIssueTypesMap } from 'ee/related_issues/constants';
+import {
+  defaultProps,
+  issuable1,
+  issuable2,
+} from 'jest/vue_shared/components/issue/related_issuable_mock_data';
+import axios from '~/lib/utils/axios_utils';
+import createFlash from '~/flash';
+
+jest.mock('~/flash');
+
+describe('RelatedIssuesRoot', () => {
+  let wrapper;
+  let mock;
+
+  beforeEach(() => {
+    mock = new MockAdapter(axios);
+    mock.onGet(defaultProps.endpoint).reply(200, []);
+  });
+
+  afterEach(() => {
+    mock.restore();
+    if (wrapper) {
+      wrapper.destroy();
+      wrapper = null;
+    }
+  });
+
+  const createComponent = (mountFn = mount) => {
+    wrapper = mountFn(RelatedIssuesRoot, {
+      propsData: defaultProps,
+    });
+
+    // Wait for fetch request `fetchRelatedIssues` to complete before starting to test
+    return waitForPromises();
+  };
+
+  describe('methods', () => {
+    describe('onRelatedIssueRemoveRequest', () => {
+      beforeEach(() => {
+        jest
+          .spyOn(relatedIssuesService.prototype, 'fetchRelatedIssues')
+          .mockReturnValue(Promise.reject());
+
+        return createComponent().then(() => {
+          wrapper.vm.store.setRelatedIssues([issuable1]);
+        });
+      });
+
+      it('remove related issue and succeeds', () => {
+        mock.onDelete(issuable1.referencePath).reply(200, { issues: [] });
+
+        wrapper.vm.onRelatedIssueRemoveRequest(issuable1.id);
+
+        return axios.waitForAll().then(() => {
+          expect(wrapper.vm.state.relatedIssues).toEqual([]);
+        });
+      });
+
+      it('remove related issue, fails, and restores to related issues', () => {
+        mock.onDelete(issuable1.referencePath).reply(422, {});
+
+        wrapper.vm.onRelatedIssueRemoveRequest(issuable1.id);
+
+        return axios.waitForAll().then(() => {
+          expect(wrapper.vm.state.relatedIssues.length).toEqual(1);
+          expect(wrapper.vm.state.relatedIssues[0].id).toEqual(issuable1.id);
+        });
+      });
+    });
+
+    describe('onToggleAddRelatedIssuesForm', () => {
+      beforeEach(() => createComponent(shallowMount));
+
+      it('toggle related issues form to visible', () => {
+        wrapper.vm.onToggleAddRelatedIssuesForm();
+
+        expect(wrapper.vm.isFormVisible).toEqual(true);
+      });
+
+      it('show add related issues form to hidden', () => {
+        wrapper.vm.isFormVisible = true;
+
+        wrapper.vm.onToggleAddRelatedIssuesForm();
+
+        expect(wrapper.vm.isFormVisible).toEqual(false);
+      });
+    });
+
+    describe('onPendingIssueRemoveRequest', () => {
+      beforeEach(() =>
+        createComponent().then(() => {
+          wrapper.vm.store.setPendingReferences([issuable1.reference]);
+        }),
+      );
+
+      it('remove pending related issue', () => {
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(1);
+
+        wrapper.vm.onPendingIssueRemoveRequest(0);
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(0);
+      });
+    });
+
+    describe('onPendingFormSubmit', () => {
+      beforeEach(() => {
+        jest
+          .spyOn(relatedIssuesService.prototype, 'fetchRelatedIssues')
+          .mockReturnValue(Promise.reject());
+
+        return createComponent().then(() => {
+          jest.spyOn(wrapper.vm, 'processAllReferences');
+          jest.spyOn(wrapper.vm.service, 'addRelatedIssues');
+          createFlash.mockClear();
+        });
+      });
+
+      it('processes references before submitting', () => {
+        const input = '#123';
+        const linkedIssueType = linkedIssueTypesMap.RELATES_TO;
+        const emitObj = {
+          pendingReferences: input,
+          linkedIssueType,
+        };
+
+        wrapper.vm.onPendingFormSubmit(emitObj);
+
+        expect(wrapper.vm.processAllReferences).toHaveBeenCalledWith(input);
+        expect(wrapper.vm.service.addRelatedIssues).toHaveBeenCalledWith([input], linkedIssueType);
+      });
+
+      it('submit zero pending issue as related issue', () => {
+        wrapper.vm.store.setPendingReferences([]);
+        wrapper.vm.onPendingFormSubmit({});
+
+        return waitForPromises().then(() => {
+          expect(wrapper.vm.state.pendingReferences.length).toEqual(0);
+          expect(wrapper.vm.state.relatedIssues.length).toEqual(0);
+        });
+      });
+
+      it('submit pending issue as related issue', () => {
+        mock.onPost(defaultProps.endpoint).reply(200, {
+          issuables: [issuable1],
+          result: {
+            message: 'something was successfully related',
+            status: 'success',
+          },
+        });
+
+        wrapper.vm.store.setPendingReferences([issuable1.reference]);
+        wrapper.vm.onPendingFormSubmit({});
+
+        return waitForPromises().then(() => {
+          expect(wrapper.vm.state.pendingReferences.length).toEqual(0);
+          expect(wrapper.vm.state.relatedIssues.length).toEqual(1);
+          expect(wrapper.vm.state.relatedIssues[0].id).toEqual(issuable1.id);
+        });
+      });
+
+      it('submit multiple pending issues as related issues', () => {
+        mock.onPost(defaultProps.endpoint).reply(200, {
+          issuables: [issuable1, issuable2],
+          result: {
+            message: 'something was successfully related',
+            status: 'success',
+          },
+        });
+
+        wrapper.vm.store.setPendingReferences([issuable1.reference, issuable2.reference]);
+        wrapper.vm.onPendingFormSubmit({});
+
+        return waitForPromises().then(() => {
+          expect(wrapper.vm.state.pendingReferences.length).toEqual(0);
+          expect(wrapper.vm.state.relatedIssues.length).toEqual(2);
+          expect(wrapper.vm.state.relatedIssues[0].id).toEqual(issuable1.id);
+          expect(wrapper.vm.state.relatedIssues[1].id).toEqual(issuable2.id);
+        });
+      });
+
+      it('displays a message from the backend upon error', () => {
+        const input = '#123';
+        const message = 'error';
+
+        mock.onPost(defaultProps.endpoint).reply(409, { message });
+        wrapper.vm.store.setPendingReferences([issuable1.reference, issuable2.reference]);
+
+        expect(createFlash).not.toHaveBeenCalled();
+        wrapper.vm.onPendingFormSubmit(input);
+
+        return waitForPromises().then(() => {
+          expect(createFlash).toHaveBeenCalledWith(message);
+        });
+      });
+    });
+
+    describe('onPendingFormCancel', () => {
+      beforeEach(() =>
+        createComponent().then(() => {
+          wrapper.vm.isFormVisible = true;
+          wrapper.vm.inputValue = 'foo';
+        }),
+      );
+
+      it('when canceling and hiding add issuable form', () => {
+        wrapper.vm.onPendingFormCancel();
+
+        return wrapper.vm.$nextTick().then(() => {
+          expect(wrapper.vm.isFormVisible).toEqual(false);
+          expect(wrapper.vm.inputValue).toEqual('');
+          expect(wrapper.vm.state.pendingReferences.length).toEqual(0);
+        });
+      });
+    });
+
+    describe('fetchRelatedIssues', () => {
+      beforeEach(() => createComponent());
+
+      it('sets isFetching while fetching', () => {
+        wrapper.vm.fetchRelatedIssues();
+
+        expect(wrapper.vm.isFetching).toEqual(true);
+
+        return waitForPromises().then(() => {
+          expect(wrapper.vm.isFetching).toEqual(false);
+        });
+      });
+
+      it('should fetch related issues', () => {
+        mock.onGet(defaultProps.endpoint).reply(200, [issuable1, issuable2]);
+
+        wrapper.vm.fetchRelatedIssues();
+
+        return waitForPromises().then(() => {
+          expect(wrapper.vm.state.relatedIssues.length).toEqual(2);
+          expect(wrapper.vm.state.relatedIssues[0].id).toEqual(issuable1.id);
+          expect(wrapper.vm.state.relatedIssues[1].id).toEqual(issuable2.id);
+        });
+      });
+    });
+
+    describe('onInput', () => {
+      beforeEach(() => createComponent());
+
+      it('fill in issue number reference and adds to pending related issues', () => {
+        const input = '#123 ';
+        wrapper.vm.onInput({
+          untouchedRawReferences: [input.trim()],
+          touchedReference: input,
+        });
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(1);
+        expect(wrapper.vm.state.pendingReferences[0]).toEqual('#123');
+      });
+
+      it('fill in with full reference', () => {
+        const input = 'asdf/qwer#444 ';
+        wrapper.vm.onInput({ untouchedRawReferences: [input.trim()], touchedReference: input });
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(1);
+        expect(wrapper.vm.state.pendingReferences[0]).toEqual('asdf/qwer#444');
+      });
+
+      it('fill in with issue link', () => {
+        const link = 'http://localhost:3000/foo/bar/issues/111';
+        const input = `${link} `;
+        wrapper.vm.onInput({ untouchedRawReferences: [input.trim()], touchedReference: input });
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(1);
+        expect(wrapper.vm.state.pendingReferences[0]).toEqual(link);
+      });
+
+      it('fill in with multiple references', () => {
+        const input = 'asdf/qwer#444 #12 ';
+        wrapper.vm.onInput({
+          untouchedRawReferences: input.trim().split(/\s/),
+          touchedReference: 2,
+        });
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(2);
+        expect(wrapper.vm.state.pendingReferences[0]).toEqual('asdf/qwer#444');
+        expect(wrapper.vm.state.pendingReferences[1]).toEqual('#12');
+      });
+
+      it('fill in with some invalid things', () => {
+        const input = 'something random ';
+        wrapper.vm.onInput({
+          untouchedRawReferences: input.trim().split(/\s/),
+          touchedReference: 2,
+        });
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(2);
+        expect(wrapper.vm.state.pendingReferences[0]).toEqual('something');
+        expect(wrapper.vm.state.pendingReferences[1]).toEqual('random');
+      });
+    });
+
+    describe('onBlur', () => {
+      beforeEach(() =>
+        createComponent().then(() => {
+          jest.spyOn(wrapper.vm, 'processAllReferences').mockImplementation(() => {});
+        }),
+      );
+
+      it('add any references to pending when blurring', () => {
+        const input = '#123';
+
+        wrapper.vm.onBlur(input);
+
+        expect(wrapper.vm.processAllReferences).toHaveBeenCalledWith(input);
+      });
+    });
+
+    describe('processAllReferences', () => {
+      beforeEach(() => createComponent());
+
+      it('add valid reference to pending', () => {
+        const input = '#123';
+        wrapper.vm.processAllReferences(input);
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(1);
+        expect(wrapper.vm.state.pendingReferences[0]).toEqual('#123');
+      });
+
+      it('add any valid references to pending', () => {
+        const input = 'asdf #123';
+        wrapper.vm.processAllReferences(input);
+
+        expect(wrapper.vm.state.pendingReferences.length).toEqual(2);
+        expect(wrapper.vm.state.pendingReferences[0]).toEqual('asdf');
+        expect(wrapper.vm.state.pendingReferences[1]).toEqual('#123');
+      });
+    });
+  });
+});
diff --git a/ee/spec/helpers/ee/dashboard_helper_spec.rb b/ee/spec/helpers/ee/dashboard_helper_spec.rb
index ed5828ac4a264..25c7222fc46d2 100644
--- a/ee/spec/helpers/ee/dashboard_helper_spec.rb
+++ b/ee/spec/helpers/ee/dashboard_helper_spec.rb
@@ -10,6 +10,8 @@
   describe '#dashboard_nav_links' do
     before do
       allow(helper).to receive(:current_user).and_return(user)
+
+      stub_feature_flags(group_level_cycle_analytics: false)
     end
 
     describe 'analytics' do
@@ -237,6 +239,8 @@ def stub_user_permissions_for(feature, enabled)
 
   describe 'analytics_nav_url' do
     before do
+      stub_feature_flags(group_level_cycle_analytics: false)
+
       allow(helper).to receive(:current_user).and_return(user)
     end
 
diff --git a/ee/spec/helpers/ee/groups_helper_spec.rb b/ee/spec/helpers/ee/groups_helper_spec.rb
index e64eaa75fe069..c04bddb14deb2 100644
--- a/ee/spec/helpers/ee/groups_helper_spec.rb
+++ b/ee/spec/helpers/ee/groups_helper_spec.rb
@@ -3,14 +3,15 @@
 require 'spec_helper'
 
 describe GroupsHelper do
-  let(:user) { create(:user, group_view: :security_dashboard) }
+  let(:owner) { create(:user, group_view: :security_dashboard) }
+  let(:current_user) { owner }
   let(:group) { create(:group, :private) }
 
   before do
-    allow(helper).to receive(:current_user) { user }
+    allow(helper).to receive(:current_user) { current_user }
     helper.instance_variable_set(:@group, group)
 
-    group.add_owner(user)
+    group.add_owner(owner)
   end
 
   describe '#group_epics_count' do
@@ -49,6 +50,21 @@
 
       expect(helper.group_sidebar_links).not_to include(:contribution_analytics, :epics)
     end
+
+    context 'when contribution analytics is available' do
+      before do
+        stub_licensed_features(contribution_analytics: true)
+      end
+
+      context 'signed in user is a project member but not a member of the group' do
+        let(:current_user) { create(:user) }
+        let(:private_project) { create(:project, :private, group: group)}
+
+        it 'hides Contribution Analytics' do
+          expect(helper.group_sidebar_links).not_to include(:contribution_analytics)
+        end
+      end
+    end
   end
 
   describe '#permanent_deletion_date' do
@@ -107,10 +123,10 @@
 
     with_them do
       it 'returns the expected value' do
-        allow(helper).to receive(:current_user) { user? ? user : nil }
+        allow(helper).to receive(:current_user) { user? ? owner : nil }
         allow(::Gitlab).to receive(:com?) { gitlab_com? }
-        allow(user).to receive(:ab_feature_enabled?) { ab_feature_enabled? }
-        allow(user).to receive(:created_at) { created_at }
+        allow(owner).to receive(:ab_feature_enabled?) { ab_feature_enabled? }
+        allow(owner).to receive(:created_at) { created_at }
         allow(::Feature).to receive(:enabled?).with(:discover_security) { discover_security_feature_enabled? }
         allow(group).to receive(:feature_available?) { security_dashboard_feature_available? }
         allow(helper).to receive(:can?) { can_admin_group? }
diff --git a/ee/spec/javascripts/issuable/related_issues/components/related_issues_root_spec.js b/ee/spec/javascripts/issuable/related_issues/components/related_issues_root_spec.js
deleted file mode 100644
index 721573a433ef6..0000000000000
--- a/ee/spec/javascripts/issuable/related_issues/components/related_issues_root_spec.js
+++ /dev/null
@@ -1,367 +0,0 @@
-import Vue from 'vue';
-import MockAdapter from 'axios-mock-adapter';
-import relatedIssuesRoot from 'ee/related_issues/components/related_issues_root.vue';
-import relatedIssuesService from 'ee/related_issues/services/related_issues_service';
-import { linkedIssueTypesMap } from 'ee/related_issues/constants';
-import {
-  defaultProps,
-  issuable1,
-  issuable2,
-} from 'spec/vue_shared/components/issue/related_issuable_mock_data';
-import axios from '~/lib/utils/axios_utils';
-
-describe('RelatedIssuesRoot', () => {
-  let RelatedIssuesRoot;
-  let vm;
-  let mock;
-
-  beforeEach(() => {
-    RelatedIssuesRoot = Vue.extend(relatedIssuesRoot);
-    mock = new MockAdapter(axios);
-  });
-
-  afterEach(() => {
-    if (vm) {
-      vm.$destroy();
-    }
-    mock.restore();
-  });
-
-  describe('methods', () => {
-    describe('onRelatedIssueRemoveRequest', () => {
-      beforeEach(done => {
-        spyOn(relatedIssuesService.prototype, 'fetchRelatedIssues').and.returnValue(
-          Promise.reject(),
-        );
-
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-
-        setTimeout(() => {
-          vm.store.setRelatedIssues([issuable1]);
-          done();
-        });
-      });
-
-      it('remove related issue and succeeds', done => {
-        mock.onAny().reply(200, { issues: [] });
-
-        vm.onRelatedIssueRemoveRequest(issuable1.id);
-
-        setTimeout(() => {
-          expect(vm.state.relatedIssues).toEqual([]);
-
-          done();
-        });
-      });
-
-      it('remove related issue, fails, and restores to related issues', done => {
-        mock.onAny().reply(422, {});
-
-        vm.onRelatedIssueRemoveRequest(issuable1.id);
-
-        setTimeout(() => {
-          expect(vm.state.relatedIssues.length).toEqual(1);
-          expect(vm.state.relatedIssues[0].id).toEqual(issuable1.id);
-
-          done();
-        });
-      });
-    });
-
-    describe('onToggleAddRelatedIssuesForm', () => {
-      beforeEach(() => {
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-      });
-
-      it('toggle related issues form to visible', () => {
-        vm.onToggleAddRelatedIssuesForm();
-
-        expect(vm.isFormVisible).toEqual(true);
-      });
-
-      it('show add related issues form to hidden', () => {
-        vm.isFormVisible = true;
-
-        vm.onToggleAddRelatedIssuesForm();
-
-        expect(vm.isFormVisible).toEqual(false);
-      });
-    });
-
-    describe('onPendingIssueRemoveRequest', () => {
-      beforeEach(() => {
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-        vm.store.setPendingReferences([issuable1.reference]);
-      });
-
-      it('remove pending related issue', () => {
-        expect(vm.state.pendingReferences.length).toEqual(1);
-
-        vm.onPendingIssueRemoveRequest(0);
-
-        expect(vm.state.pendingReferences.length).toEqual(0);
-      });
-    });
-
-    describe('onPendingFormSubmit', () => {
-      beforeEach(() => {
-        spyOn(relatedIssuesService.prototype, 'fetchRelatedIssues').and.returnValue(
-          Promise.reject(),
-        );
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-
-        spyOn(vm, 'processAllReferences').and.callThrough();
-        spyOn(vm.service, 'addRelatedIssues').and.callThrough();
-      });
-
-      it('processes references before submitting', () => {
-        const input = '#123';
-        const linkedIssueType = linkedIssueTypesMap.RELATES_TO;
-        const emitObj = {
-          pendingReferences: input,
-          linkedIssueType,
-        };
-
-        vm.onPendingFormSubmit(emitObj);
-
-        expect(vm.processAllReferences).toHaveBeenCalledWith(input);
-        expect(vm.service.addRelatedIssues).toHaveBeenCalledWith([input], linkedIssueType);
-      });
-
-      it('submit zero pending issue as related issue', done => {
-        vm.store.setPendingReferences([]);
-        vm.onPendingFormSubmit({});
-
-        setTimeout(() => {
-          expect(vm.state.pendingReferences.length).toEqual(0);
-          expect(vm.state.relatedIssues.length).toEqual(0);
-
-          done();
-        });
-      });
-
-      it('submit pending issue as related issue', done => {
-        mock.onAny().reply(200, {
-          issuables: [issuable1],
-          result: {
-            message: 'something was successfully related',
-            status: 'success',
-          },
-        });
-
-        vm.store.setPendingReferences([issuable1.reference]);
-        vm.onPendingFormSubmit({});
-
-        setTimeout(() => {
-          expect(vm.state.pendingReferences.length).toEqual(0);
-          expect(vm.state.relatedIssues.length).toEqual(1);
-          expect(vm.state.relatedIssues[0].id).toEqual(issuable1.id);
-
-          done();
-        });
-      });
-
-      it('submit multiple pending issues as related issues', done => {
-        mock.onAny().reply(200, {
-          issuables: [issuable1, issuable2],
-          result: {
-            message: 'something was successfully related',
-            status: 'success',
-          },
-        });
-
-        vm.store.setPendingReferences([issuable1.reference, issuable2.reference]);
-        vm.onPendingFormSubmit({});
-
-        setTimeout(() => {
-          expect(vm.state.pendingReferences.length).toEqual(0);
-          expect(vm.state.relatedIssues.length).toEqual(2);
-          expect(vm.state.relatedIssues[0].id).toEqual(issuable1.id);
-          expect(vm.state.relatedIssues[1].id).toEqual(issuable2.id);
-
-          done();
-        });
-      });
-
-      // https://gitlab.com/gitlab-org/gitlab/issues/38410
-      // eslint-disable-next-line jasmine/no-disabled-tests
-      xit('displays a message from the backend upon error', done => {
-        const input = '#123';
-        const message = 'error';
-
-        mock.onAny().reply(409, { message });
-        document.body.innerHTML += '<div class="flash-container"></div>';
-
-        vm.onPendingFormSubmit(input);
-
-        setTimeout(() => {
-          expect(document.querySelector('.flash-text').innerText.trim()).toContain(message);
-          document.querySelector('.flash-container').remove();
-          done();
-        });
-      });
-    });
-
-    describe('onPendingFormCancel', () => {
-      beforeEach(() => {
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-        vm.isFormVisible = true;
-        vm.inputValue = 'foo';
-      });
-
-      it('when canceling and hiding add issuable form', () => {
-        vm.onPendingFormCancel();
-
-        expect(vm.isFormVisible).toEqual(false);
-        expect(vm.inputValue).toEqual('');
-        expect(vm.state.pendingReferences.length).toEqual(0);
-      });
-    });
-
-    describe('fetchRelatedIssues', () => {
-      beforeEach(done => {
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-
-        mock.onAny().reply(200, [issuable1, issuable2]);
-
-        // wait for internal call to fetchRelatedIssues to resolve
-        setTimeout(done);
-      });
-
-      // https://gitlab.com/gitlab-org/gitlab/issues/207376
-      // eslint-disable-next-line jasmine/no-disabled-tests
-      xit('sets isFetching while fetching', done => {
-        vm.fetchRelatedIssues();
-
-        expect(vm.isFetching).toEqual(true);
-
-        setTimeout(() => {
-          expect(vm.isFetching).toEqual(false);
-
-          done();
-        });
-      });
-
-      // https://gitlab.com/gitlab-org/gitlab/issues/207376
-      // eslint-disable-next-line jasmine/no-disabled-tests
-      xit('should fetch related issues', done => {
-        Vue.nextTick(() => {
-          expect(vm.state.relatedIssues.length).toEqual(2);
-          expect(vm.state.relatedIssues[0].id).toEqual(issuable1.id);
-          expect(vm.state.relatedIssues[1].id).toEqual(issuable2.id);
-
-          done();
-        });
-      });
-    });
-
-    describe('onInput', () => {
-      beforeEach(() => {
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-      });
-
-      it('fill in issue number reference and adds to pending related issues', () => {
-        const input = '#123 ';
-        vm.onInput({
-          untouchedRawReferences: [input.trim()],
-          touchedReference: input,
-        });
-
-        expect(vm.state.pendingReferences.length).toEqual(1);
-        expect(vm.state.pendingReferences[0]).toEqual('#123');
-      });
-
-      it('fill in with full reference', () => {
-        const input = 'asdf/qwer#444 ';
-        vm.onInput({ untouchedRawReferences: [input.trim()], touchedReference: input });
-
-        expect(vm.state.pendingReferences.length).toEqual(1);
-        expect(vm.state.pendingReferences[0]).toEqual('asdf/qwer#444');
-      });
-
-      it('fill in with issue link', () => {
-        const link = 'http://localhost:3000/foo/bar/issues/111';
-        const input = `${link} `;
-        vm.onInput({ untouchedRawReferences: [input.trim()], touchedReference: input });
-
-        expect(vm.state.pendingReferences.length).toEqual(1);
-        expect(vm.state.pendingReferences[0]).toEqual(link);
-      });
-
-      it('fill in with multiple references', () => {
-        const input = 'asdf/qwer#444 #12 ';
-        vm.onInput({ untouchedRawReferences: input.trim().split(/\s/), touchedReference: 2 });
-
-        expect(vm.state.pendingReferences.length).toEqual(2);
-        expect(vm.state.pendingReferences[0]).toEqual('asdf/qwer#444');
-        expect(vm.state.pendingReferences[1]).toEqual('#12');
-      });
-
-      it('fill in with some invalid things', () => {
-        const input = 'something random ';
-        vm.onInput({ untouchedRawReferences: input.trim().split(/\s/), touchedReference: 2 });
-
-        expect(vm.state.pendingReferences.length).toEqual(2);
-        expect(vm.state.pendingReferences[0]).toEqual('something');
-        expect(vm.state.pendingReferences[1]).toEqual('random');
-      });
-    });
-
-    describe('onBlur', () => {
-      beforeEach(() => {
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-
-        spyOn(vm, 'processAllReferences');
-      });
-
-      it('add any references to pending when blurring', () => {
-        const input = '#123';
-
-        vm.onBlur(input);
-
-        expect(vm.processAllReferences).toHaveBeenCalledWith(input);
-      });
-    });
-
-    describe('processAllReferences', () => {
-      beforeEach(() => {
-        vm = new RelatedIssuesRoot({
-          propsData: defaultProps,
-        }).$mount();
-      });
-
-      it('add valid reference to pending', () => {
-        const input = '#123';
-        vm.processAllReferences(input);
-
-        expect(vm.state.pendingReferences.length).toEqual(1);
-        expect(vm.state.pendingReferences[0]).toEqual('#123');
-      });
-
-      it('add any valid references to pending', () => {
-        const input = 'asdf #123';
-        vm.processAllReferences(input);
-
-        expect(vm.state.pendingReferences.length).toEqual(2);
-        expect(vm.state.pendingReferences[0]).toEqual('asdf');
-        expect(vm.state.pendingReferences[1]).toEqual('#123');
-      });
-    });
-  });
-});
diff --git a/ee/spec/lib/ee/gitlab/import_export/project/tree_restorer_spec.rb b/ee/spec/lib/ee/gitlab/import_export/project/tree_restorer_spec.rb
index ed46718b9cabf..79654fb6064a2 100644
--- a/ee/spec/lib/ee/gitlab/import_export/project/tree_restorer_spec.rb
+++ b/ee/spec/lib/ee/gitlab/import_export/project/tree_restorer_spec.rb
@@ -18,6 +18,7 @@
     end
 
     context 'with group' do
+      let(:issue) { project.issues.find_by_title('Issue with Epic') }
       let!(:project) do
         create(:project,
                :builds_disabled,
@@ -35,7 +36,8 @@
 
           expect { restored_project_json }.not_to change { Epic.count }
           expect(project.group.epics.count).to eq(1)
-          expect(project.issues.find_by_title('Issue with Epic').epic).not_to be_nil
+          expect(issue.epic).to eq(epic)
+          expect(issue.epic_issue.relative_position).not_to be_nil
         end
       end
 
@@ -45,7 +47,9 @@
 
           expect { restored_project_json }.to change { Epic.count }.from(0).to(1)
           expect(project.group.epics.count).to eq(1)
-          expect(project.issues.find_by_title('Issue with Epic').epic).not_to be_nil
+
+          expect(issue.epic).not_to be_nil
+          expect(issue.epic_issue.relative_position).not_to be_nil
         end
       end
     end
diff --git a/ee/spec/lib/ee/gitlab/import_export/project/tree_saver_spec.rb b/ee/spec/lib/ee/gitlab/import_export/project/tree_saver_spec.rb
index f8e3ddf77147b..031ad3a206e0e 100644
--- a/ee/spec/lib/ee/gitlab/import_export/project/tree_saver_spec.rb
+++ b/ee/spec/lib/ee/gitlab/import_export/project/tree_saver_spec.rb
@@ -60,12 +60,21 @@
     end
 
     context 'epics' do
-      it 'has issue epic' do
-        expect(saved_project_json['issues'].first['epic']).not_to be_empty
+      it 'has epic_issue' do
+        expect(saved_project_json['issues'].first['epic_issue']).not_to be_empty
+        expect(saved_project_json['issues'].first['epic_issue']['id']).to eql(epic_issue.id)
       end
 
-      it 'has issue epic id' do
-        expect(saved_project_json['issues'].first['epic']['id']).to eql(epic.id)
+      it 'has epic' do
+        expect(saved_project_json['issues'].first['epic_issue']['epic']['title']).to eql(epic.title)
+      end
+
+      it 'does not have epic_id' do
+        expect(saved_project_json['issues'].first['epic_issue']['epic_id']).to be_nil
+      end
+
+      it 'does not have issue_id' do
+        expect(saved_project_json['issues'].first['epic_issue']['issue_id']).to be_nil
       end
     end
   end
diff --git a/ee/spec/lib/gitlab/elastic/bulk_indexer_spec.rb b/ee/spec/lib/gitlab/elastic/bulk_indexer_spec.rb
new file mode 100644
index 0000000000000..0e3c0b7443b90
--- /dev/null
+++ b/ee/spec/lib/gitlab/elastic/bulk_indexer_spec.rb
@@ -0,0 +1,162 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Elastic::BulkIndexer, :elastic do
+  let_it_be(:issue) { create(:issue) }
+  let_it_be(:other_issue) { create(:issue, project: issue.project) }
+
+  let(:project) { issue.project }
+
+  let(:logger) { ::Gitlab::Elasticsearch::Logger.build }
+
+  subject(:indexer) { described_class.new(logger: logger) }
+
+  let(:es_client) { indexer.client }
+
+  let(:issue_as_ref) { ref(issue) }
+  let(:issue_as_json_with_times) { issue.__elasticsearch__.as_indexed_json }
+  let(:issue_as_json) { issue_as_json_with_times.except('created_at', 'updated_at') }
+
+  let(:other_issue_as_ref) { ref(other_issue) }
+
+  describe '#process' do
+    it 'returns self' do
+      expect(indexer.process(issue_as_ref)).to be(indexer)
+    end
+
+    it 'does not send a bulk request per call' do
+      expect(es_client).not_to receive(:bulk)
+
+      indexer.process(issue_as_ref)
+    end
+
+    it 'sends a bulk request if the max bulk request size is reached' do
+      set_bulk_limit(indexer, 1)
+
+      expect(es_client)
+        .to receive(:bulk)
+        .with(body: [kind_of(String), kind_of(String)])
+        .and_return({})
+
+      indexer.process(issue_as_ref)
+
+      expect(indexer.failures).to be_empty
+    end
+  end
+
+  describe '#flush' do
+    it 'completes a bulk' do
+      indexer.process(issue_as_ref)
+
+      expect(es_client)
+        .to receive(:bulk)
+        .with(body: [kind_of(String), kind_of(String)])
+        .and_return({})
+
+      expect(indexer.flush).to be_empty
+    end
+
+    it 'fails documents that elasticsearch refuses to accept' do
+      # Indexes with uppercase characters are invalid
+      expect(other_issue_as_ref.database_record.__elasticsearch__)
+        .to receive(:index_name)
+        .and_return('Invalid')
+
+      indexer.process(issue_as_ref)
+      indexer.process(other_issue_as_ref)
+
+      expect(indexer.flush).to contain_exactly(other_issue_as_ref)
+      expect(indexer.failures).to contain_exactly(other_issue_as_ref)
+
+      refresh_index!
+
+      expect(search_one(Issue)).to have_attributes(issue_as_json)
+    end
+
+    it 'fails all documents on exception' do
+      expect(es_client).to receive(:bulk) { raise 'An exception' }
+
+      indexer.process(issue_as_ref)
+      indexer.process(other_issue_as_ref)
+
+      expect(indexer.flush).to contain_exactly(issue_as_ref, other_issue_as_ref)
+      expect(indexer.failures).to contain_exactly(issue_as_ref, other_issue_as_ref)
+    end
+
+    context 'indexing an issue' do
+      it 'adds the issue to the index' do
+        expect(indexer.process(issue_as_ref).flush).to be_empty
+
+        refresh_index!
+
+        expect(search_one(Issue)).to have_attributes(issue_as_json)
+      end
+
+      it 'reindexes an unchanged issue' do
+        ensure_elasticsearch_index!
+
+        expect(es_client).to receive(:bulk).and_call_original
+        expect(indexer.process(issue_as_ref).flush).to be_empty
+      end
+
+      it 'reindexes a changed issue' do
+        ensure_elasticsearch_index!
+        issue.update!(title: 'new title')
+
+        expect(issue_as_json['title']).to eq('new title')
+        expect(indexer.process(issue_as_ref).flush).to be_empty
+
+        refresh_index!
+
+        expect(search_one(Issue)).to have_attributes(issue_as_json)
+      end
+    end
+
+    context 'deleting an issue' do
+      it 'removes the issue from the index' do
+        ensure_elasticsearch_index!
+
+        expect(issue_as_ref).to receive(:database_record).and_return(nil)
+        expect(indexer.process(issue_as_ref).flush).to be_empty
+
+        refresh_index!
+
+        expect(search(Issue, '*').size).to eq(0)
+      end
+
+      it 'succeeds even if the issue is not present' do
+        expect(issue_as_ref).to receive(:database_record).and_return(nil)
+        expect(indexer.process(issue_as_ref).flush).to be_empty
+
+        refresh_index!
+
+        expect(search(Issue, '*').size).to eq(0)
+      end
+    end
+  end
+
+  def ref(record)
+    Gitlab::Elastic::DocumentReference.build(record)
+  end
+
+  def stub_es_client(indexer, client)
+    allow(indexer).to receive(:client) { client }
+  end
+
+  def set_bulk_limit(indexer, bytes)
+    allow(indexer).to receive(:bulk_limit_bytes) { bytes }
+  end
+
+  def search(klass, text)
+    klass.__elasticsearch__.search(text)
+  end
+
+  def search_one(klass)
+    results = search(klass, '*')
+
+    expect(results.size).to eq(1)
+
+    results.first._source
+  end
+end
diff --git a/ee/spec/lib/gitlab/elastic/document_reference_spec.rb b/ee/spec/lib/gitlab/elastic/document_reference_spec.rb
new file mode 100644
index 0000000000000..cc1b6c3c95e27
--- /dev/null
+++ b/ee/spec/lib/gitlab/elastic/document_reference_spec.rb
@@ -0,0 +1,170 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Elastic::DocumentReference do
+  let_it_be(:issue) { create(:issue) }
+  let(:project) { issue.project }
+
+  let(:issue_as_array) { [Issue, issue.id, issue.es_id, issue.es_parent] }
+  let(:issue_as_ref) { described_class.new(*issue_as_array) }
+  let(:issue_as_str) { issue_as_array.join(' ') }
+
+  let(:project_as_array) { [Project, project.id, project.es_id] }
+  let(:project_as_ref) { described_class.new(*project_as_array) }
+  let(:project_as_str) { project_as_array.join(' ') }
+
+  describe '.build' do
+    it 'builds a document for an issue' do
+      expect(described_class.build(issue)).to eq(issue_as_ref)
+    end
+
+    it 'builds a document for a project' do
+      expect(described_class.build(project)).to eq(project_as_ref)
+    end
+  end
+
+  describe '.serialize' do
+    it 'does nothing to a string' do
+      expect(described_class.serialize('foo')).to eq('foo')
+    end
+
+    it 'serializes a DocumentReference' do
+      expect(described_class.serialize(issue_as_ref)).to eq(issue_as_str)
+    end
+
+    it 'defers to serialize_record for ApplicationRecord instances' do
+      expect(described_class).to receive(:serialize_record).with(issue)
+
+      described_class.serialize(issue)
+    end
+
+    it 'defers to serialize_array for Array instances' do
+      expect(described_class).to receive(:serialize_array).with(issue_as_array)
+
+      described_class.serialize(issue_as_array)
+    end
+
+    it 'fails to serialize an unrecognised value' do
+      expect { described_class.serialize(1) }.to raise_error(described_class::InvalidError)
+    end
+  end
+
+  describe '.serialize_record' do
+    it 'serializes an issue' do
+      expect(described_class.serialize(issue)).to eq(issue_as_str)
+    end
+
+    it 'serializes a project' do
+      expect(described_class.serialize(project)).to eq(project_as_str)
+    end
+  end
+
+  describe '.serialize_array' do
+    it 'serializes a project array' do
+      expect(described_class.serialize(project_as_array)).to eq(project_as_str)
+    end
+
+    it 'serializes an issue array' do
+      expect(described_class.serialize(issue_as_array)).to eq(issue_as_str)
+    end
+
+    it 'fails to serialize a too-small array' do
+      expect { described_class.serialize(project_as_array[0..1]) }.to raise_error(described_class::InvalidError)
+    end
+
+    it 'fails to serialize a too-large array' do
+      expect { described_class.serialize(project_as_array * 2) }.to raise_error(described_class::InvalidError)
+    end
+  end
+
+  describe '.deserialize' do
+    it 'deserializes an issue string' do
+      expect(described_class.deserialize(issue_as_str)).to eq(issue_as_ref)
+    end
+
+    it 'deserializes a project string' do
+      expect(described_class.deserialize(project_as_str)).to eq(project_as_ref)
+    end
+  end
+
+  describe '#initialize' do
+    it 'creates an issue reference' do
+      expect(described_class.new(*issue_as_array)).to eq(issue_as_ref)
+    end
+
+    it 'creates a project reference' do
+      expect(described_class.new(*project_as_array)).to eq(project_as_ref)
+    end
+  end
+
+  describe '#==' do
+    let(:subclass) { Class.new(described_class) }
+
+    it 'is equal to itself' do
+      expect(issue_as_ref).to eq(issue_as_ref)
+    end
+
+    it 'is equal to another ref when all elements match' do
+      expect(issue_as_ref).to eq(described_class.new(*issue_as_array))
+    end
+
+    it 'is not equal unless the other instance class matches' do
+      expect(issue_as_ref).not_to eq(subclass.new(*issue_as_array))
+    end
+
+    it 'is not equal unless db_id matches' do
+      other = described_class.new(Issue, issue.id + 1, issue.es_id, issue.es_parent)
+
+      expect(issue_as_ref).not_to eq(other)
+    end
+
+    it 'is not equal unless es_id matches' do
+      other = described_class.new(Issue, issue.id, 'Other es_id', issue.es_parent)
+
+      expect(issue_as_ref).not_to eq(other)
+    end
+
+    it 'is not equal unless es_parent matches' do
+      other = described_class.new(Issue, issue.id, issue.es_id, 'Other es_parent')
+
+      expect(issue_as_ref).not_to eq(other)
+    end
+  end
+
+  describe '#klass_name' do
+    it { expect(issue_as_ref.klass_name).to eq('Issue') }
+  end
+
+  describe '#database_record' do
+    it 'returns an issue' do
+      expect(issue_as_ref.database_record).to eq(issue)
+    end
+
+    it 'returns a project' do
+      expect(project_as_ref.database_record).to eq(project)
+    end
+
+    it 'returns nil if the record cannot be found' do
+      ref = described_class.new(Issue, issue.id + 1, 'issue_1')
+
+      expect(ref.database_record).to be_nil
+    end
+
+    it 'raises if the class is bad' do
+      ref = described_class.new(Integer, 1, 'integer_1')
+
+      expect { ref.database_record }.to raise_error(NoMethodError)
+    end
+  end
+
+  describe '#serialize' do
+    it 'serializes an issue' do
+      expect(issue_as_ref.serialize).to eq(issue_as_str)
+    end
+
+    it 'serializes a project' do
+      expect(project_as_ref.serialize).to eq(project_as_str)
+    end
+  end
+end
diff --git a/ee/spec/models/concerns/elastic/note_spec.rb b/ee/spec/models/concerns/elastic/note_spec.rb
index 5fe5d324f6a47..1766aa6a159cd 100644
--- a/ee/spec/models/concerns/elastic/note_spec.rb
+++ b/ee/spec/models/concerns/elastic/note_spec.rb
@@ -107,6 +107,8 @@
   end
 
   it "does not create ElasticIndexerWorker job for system messages" do
+    stub_feature_flags(elastic_bulk_incremental_updates: false)
+
     project = create :project, :repository
     # We have to set one minute delay because of https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/15682
     issue = create :issue, project: project, updated_at: 1.minute.ago
@@ -116,6 +118,16 @@
     create :note, :system, project: project, noteable: issue
   end
 
+  it 'does not track system note updates via the bulk updater' do
+    stub_feature_flags(elastic_bulk_incremental_updates: true)
+
+    note = create(:note, :system)
+
+    expect(Elastic::ProcessBookkeepingService).not_to receive(:track!)
+
+    note.update!(note: 'some other text here')
+  end
+
   it 'uses same index for Note subclasses' do
     Note.subclasses.each do |note_class|
       expect(note_class.index_name).to eq(Note.index_name)
diff --git a/ee/spec/policies/group_policy_spec.rb b/ee/spec/policies/group_policy_spec.rb
index 5e4837cde7dac..b7c5f9f179a19 100644
--- a/ee/spec/policies/group_policy_spec.rb
+++ b/ee/spec/policies/group_policy_spec.rb
@@ -48,7 +48,34 @@
       stub_licensed_features(contribution_analytics: true)
     end
 
-    it { is_expected.to be_allowed(:read_group_contribution_analytics) }
+    context 'when signed in user is a member of the group' do
+      it { is_expected.to be_allowed(:read_group_contribution_analytics) }
+    end
+
+    describe 'when user is not a member of the group' do
+      let(:current_user) { non_group_member }
+      let(:private_group) { create(:group, :private) }
+
+      subject { described_class.new(non_group_member, private_group) }
+
+      context 'when user is not invited to any of the group projects' do
+        it do
+          is_expected.not_to be_allowed(:read_group_contribution_analytics)
+        end
+      end
+
+      context 'when user is invited to a group project, but not to the group' do
+        let(:private_project) { create(:project, :private, group: private_group) }
+
+        before do
+          private_project.add_guest(non_group_member)
+        end
+
+        it do
+          is_expected.not_to be_allowed(:read_group_contribution_analytics)
+        end
+      end
+    end
   end
 
   context 'when contribution analytics is not available' do
diff --git a/ee/spec/services/elastic/index_record_service_spec.rb b/ee/spec/services/elastic/index_record_service_spec.rb
index b98ddaba5a645..8bf36b730bfc9 100644
--- a/ee/spec/services/elastic/index_record_service_spec.rb
+++ b/ee/spec/services/elastic/index_record_service_spec.rb
@@ -25,10 +25,10 @@
 
     with_them do
       it 'indexes new records' do
-        object = nil
-        Sidekiq::Testing.disable! do
-          object = create(type)
-        end
+        object = create(type)
+
+        # Prevent records from being added via bulk indexing updates
+        ::Elastic::ProcessBookkeepingService.clear_tracking!
 
         expect do
           expect(subject.execute(object, true)).to eq(true)
@@ -122,10 +122,14 @@
       Sidekiq::Testing.inline! do
         expect(subject.execute(other_project, true)).to eq(true)
       end
+
+      # Prevent records from being added via bulk indexing updates
+      ::Elastic::ProcessBookkeepingService.clear_tracking!
+
       ensure_elasticsearch_index!
 
       # Only the project itself should be in the index
-      expect(Elasticsearch::Model.search('*').total_count).to be 1
+      expect(Elasticsearch::Model.search('*').total_count).to eq(1)
       expect(Project.elastic_search('*').records).to contain_exactly(other_project)
     end
 
@@ -312,13 +316,9 @@ def expect_indexing(issue_ids, response, unstub: false)
   end
 
   it 'skips records for which indexing is disabled' do
-    project = nil
-
-    Sidekiq::Testing.disable! do
-      project = create :project, name: 'project_1'
-    end
+    stub_ee_application_setting(elasticsearch_limit_indexing: true)
 
-    expect(project).to receive(:use_elasticsearch?).and_return(false)
+    project = create(:project, name: 'project_1')
 
     Sidekiq::Testing.inline! do
       expect(subject.execute(project, true)).to eq(true)
diff --git a/ee/spec/services/elastic/process_bookkeeping_service_spec.rb b/ee/spec/services/elastic/process_bookkeeping_service_spec.rb
new file mode 100644
index 0000000000000..a0c070c51a010
--- /dev/null
+++ b/ee/spec/services/elastic/process_bookkeeping_service_spec.rb
@@ -0,0 +1,140 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Elastic::ProcessBookkeepingService, :clean_gitlab_redis_shared_state do
+  around do |example|
+    described_class.with_redis do |redis|
+      @redis = redis
+      example.run
+    end
+  end
+
+  let(:zset) { 'elastic:incremental:updates:0:zset' }
+  let(:redis) { @redis }
+  let(:ref_class) { ::Gitlab::Elastic::DocumentReference }
+
+  let(:fake_refs) { Array.new(10) { |i| ref_class.new(Issue, i, "issue_#{i}", 'project_1') } }
+  let(:issue) { fake_refs.first }
+  let(:issue_spec) { issue.serialize }
+
+  describe '.track' do
+    it 'enqueues a record' do
+      described_class.track!(issue)
+
+      spec, score = redis.zpopmin(zset)
+
+      expect(spec).to eq(issue_spec)
+      expect(score).to eq(1.0)
+    end
+
+    it 'enqueues a set of unique records' do
+      described_class.track!(*fake_refs)
+
+      expect(described_class.queue_size).to eq(fake_refs.size)
+
+      spec1, score1 = redis.zpopmin(zset)
+      _, score2 = redis.zpopmin(zset)
+
+      expect(score1).to be < score2
+      expect(spec1).to eq(issue_spec)
+    end
+
+    it 'enqueues 10 identical records as 1 entry' do
+      described_class.track!(*([issue] * 10))
+
+      expect(described_class.queue_size).to eq(1)
+    end
+
+    it 'deduplicates across multiple inserts' do
+      10.times { described_class.track!(issue) }
+
+      expect(described_class.queue_size).to eq(1)
+    end
+  end
+
+  describe '.queue_size' do
+    it 'reports the queue size' do
+      expect(described_class.queue_size).to eq(0)
+
+      described_class.track!(*fake_refs)
+
+      expect(described_class.queue_size).to eq(fake_refs.size)
+
+      expect { redis.zpopmin(zset) }.to change(described_class, :queue_size).by(-1)
+    end
+  end
+
+  describe '.clear_tracking!' do
+    it 'removes all entries from the queue' do
+      described_class.track!(*fake_refs)
+
+      expect(described_class.queue_size).to eq(fake_refs.size)
+
+      described_class.clear_tracking!
+
+      expect(described_class.queue_size).to eq(0)
+    end
+  end
+
+  describe '#execute' do
+    let(:limit) { 5 }
+
+    before do
+      stub_const('Elastic::ProcessBookkeepingService::LIMIT', limit)
+    end
+
+    it 'submits a batch of documents' do
+      described_class.track!(*fake_refs)
+
+      expect(described_class.queue_size).to eq(fake_refs.size)
+      expect_processing(*fake_refs[0...limit])
+
+      expect { described_class.new.execute }.to change(described_class, :queue_size).by(-limit)
+    end
+
+    it 'retries failed documents' do
+      described_class.track!(*fake_refs)
+      failed = fake_refs[0]
+
+      expect(described_class.queue_size).to eq(10)
+      expect_processing(*fake_refs[0...limit], failures: [failed])
+
+      expect { described_class.new.execute }.to change(described_class, :queue_size).by(-limit + 1)
+
+      serialized, _ = redis.zpopmax(zset)
+      expect(ref_class.deserialize(serialized)).to eq(failed)
+    end
+
+    it 'discards malformed documents' do
+      described_class.track!('Bad')
+
+      expect(described_class.queue_size).to eq(1)
+      expect_next_instance_of(::Gitlab::Elastic::BulkIndexer) do |indexer|
+        expect(indexer).not_to receive(:process)
+      end
+
+      expect { described_class.new.execute }.to change(described_class, :queue_size).by(-1)
+    end
+
+    it 'fails, preserving documents, when processing fails with an exception' do
+      described_class.track!(issue)
+
+      expect(described_class.queue_size).to eq(1)
+      expect_next_instance_of(::Gitlab::Elastic::BulkIndexer) do |indexer|
+        expect(indexer).to receive(:process).with(issue) { raise 'Bad' }
+      end
+
+      expect { described_class.new.execute }.to raise_error('Bad')
+      expect(described_class.queue_size).to eq(1)
+    end
+
+    def expect_processing(*refs, failures: [])
+      expect_next_instance_of(::Gitlab::Elastic::BulkIndexer) do |indexer|
+        refs.each { |ref| expect(indexer).to receive(:process).with(ref) }
+
+        expect(indexer).to receive(:flush) { failures }
+      end
+    end
+  end
+end
diff --git a/ee/spec/support/elastic.rb b/ee/spec/support/elastic.rb
index 188244a259ce4..96586855a40cc 100644
--- a/ee/spec/support/elastic.rb
+++ b/ee/spec/support/elastic.rb
@@ -2,11 +2,13 @@
 
 RSpec.configure do |config|
   config.before(:each, :elastic) do
+    Elastic::ProcessBookkeepingService.clear_tracking!
     Gitlab::Elastic::Helper.create_empty_index
   end
 
   config.after(:each, :elastic) do
     Gitlab::Elastic::Helper.delete_index
+    Elastic::ProcessBookkeepingService.clear_tracking!
   end
 
   config.include ElasticsearchHelpers, :elastic
diff --git a/ee/spec/support/helpers/elasticsearch_helpers.rb b/ee/spec/support/helpers/elasticsearch_helpers.rb
index c8b9a46fd58ad..09ce1981032a7 100644
--- a/ee/spec/support/helpers/elasticsearch_helpers.rb
+++ b/ee/spec/support/helpers/elasticsearch_helpers.rb
@@ -2,6 +2,14 @@
 
 module ElasticsearchHelpers
   def ensure_elasticsearch_index!
+    # Ensure that any enqueued updates are processed
+    Elastic::ProcessBookkeepingService.new.execute
+
+    # Make any documents added to the index visible
+    refresh_index!
+  end
+
+  def refresh_index!
     ::Gitlab::Elastic::Helper.refresh_index
   end
 end
diff --git a/ee/spec/views/layouts/nav/sidebar/_analytics.html.haml_spec.rb b/ee/spec/views/layouts/nav/sidebar/_analytics.html.haml_spec.rb
index 1d630f0600a9b..ab78fde0524cf 100644
--- a/ee/spec/views/layouts/nav/sidebar/_analytics.html.haml_spec.rb
+++ b/ee/spec/views/layouts/nav/sidebar/_analytics.html.haml_spec.rb
@@ -9,6 +9,7 @@
 
   before do
     stub_feature_flags(group_level_productivity_analytics: false)
+    stub_feature_flags(group_level_cycle_analytics: false)
   end
 
   context 'top-level items' do
diff --git a/ee/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb b/ee/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb
index 6017cd2c91014..fb0d67cd8b38c 100644
--- a/ee/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb
+++ b/ee/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb
@@ -11,23 +11,50 @@
   let(:user) { create(:user) }
 
   describe 'contribution analytics tab' do
-    it 'is not visible when there is no valid license and we dont show promotions' do
-      stub_licensed_features(contribution_analytics: false)
+    let!(:current_user) { create(:user) }
 
-      render
+    before do
+      group.add_guest(current_user)
 
-      expect(rendered).not_to have_text 'Contribution Analytics'
+      allow(view).to receive(:current_user).and_return(current_user)
     end
 
-    context 'no license installed' do
-      let!(:cuser) { create(:admin) }
+    context 'contribution analytics feature is available' do
+      before do
+        stub_licensed_features(contribution_analytics: true)
+      end
+
+      it 'is visible' do
+        render
 
+        expect(rendered).to have_text 'Contribution Analytics'
+      end
+    end
+
+    context 'contribution analytics feature is not available' do
+      before do
+        stub_licensed_features(contribution_analytics: false)
+      end
+
+      context 'we do not show promotions' do
+        before do
+          allow(LicenseHelper).to receive(:show_promotions?).and_return(false)
+        end
+
+        it 'is not visible' do
+          render
+
+          expect(rendered).not_to have_text 'Contribution Analytics'
+        end
+      end
+    end
+
+    context 'no license installed' do
       before do
         allow(License).to receive(:current).and_return(nil)
         stub_application_setting(check_namespace_plan: false)
 
         allow(view).to receive(:can?) { |*args| Ability.allowed?(*args) }
-        allow(view).to receive(:current_user).and_return(cuser)
       end
 
       it 'is visible when there is no valid license but we show promotions' do
diff --git a/ee/spec/workers/elastic_index_bulk_cron_worker_spec.rb b/ee/spec/workers/elastic_index_bulk_cron_worker_spec.rb
new file mode 100644
index 0000000000000..833970ab6a4b5
--- /dev/null
+++ b/ee/spec/workers/elastic_index_bulk_cron_worker_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe ElasticIndexBulkCronWorker do
+  include ExclusiveLeaseHelpers
+  describe '.perform' do
+    it 'executes the service under an exclusive lease' do
+      expect_to_obtain_exclusive_lease('elastic_index_bulk_cron_worker')
+
+      expect_next_instance_of(::Elastic::ProcessBookkeepingService) do |service|
+        expect(service).to receive(:execute)
+      end
+
+      described_class.new.perform
+    end
+  end
+end
diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb
index f75e943671b13..82a8450895933 100644
--- a/lib/gitlab/database/migration_helpers.rb
+++ b/lib/gitlab/database/migration_helpers.rb
@@ -215,7 +215,7 @@ def validate_foreign_key(source, column, name: nil)
         fk_name = name || concurrent_foreign_key_name(source, column)
 
         unless foreign_key_exists?(source, name: fk_name)
-          raise "cannot find #{fk_name} on #{source} table"
+          raise missing_schema_object_message(source, "foreign key", fk_name)
         end
 
         disable_statement_timeout do
@@ -931,7 +931,10 @@ def copy_foreign_keys(table, old, new)
       def column_for(table, name)
         name = name.to_s
 
-        columns(table).find { |column| column.name == name }
+        column = columns(table).find { |column| column.name == name }
+        raise(missing_schema_object_message(table, "column", name)) if column.nil?
+
+        column
       end
 
       # This will replace the first occurrence of a string in a column with
@@ -1166,6 +1169,18 @@ def bulk_migrate_async(*args)
 
       private
 
+      def missing_schema_object_message(table, type, name)
+        <<~MESSAGE
+          Could not find #{type} "#{name}" on table "#{table}" which was referenced during the migration.
+          This issue could be caused by the database schema straying from the expected state.
+
+          To resolve this issue, please verify:
+            1. all previous migrations have completed
+            2. the database objects used in this migration match the Rails definition in schema.rb or structure.sql
+
+        MESSAGE
+      end
+
       def tables_match?(target_table, foreign_key_table)
         target_table.blank? || foreign_key_table == target_table
       end
diff --git a/lib/gitlab/import_export/project/import_export.yml b/lib/gitlab/import_export/project/import_export.yml
index fd83a275e0d65..645b0540f6145 100644
--- a/lib/gitlab/import_export/project/import_export.yml
+++ b/lib/gitlab/import_export/project/import_export.yml
@@ -319,6 +319,9 @@ excluded_attributes:
     - :state_id
     - :start_date_sourcing_epic_id
     - :due_date_sourcing_epic_id
+  epic_issue:
+    - :epic_id
+    - :issue_id
 methods:
   notes:
     - :type
@@ -371,7 +374,8 @@ ee:
         - design_versions:
           - actions:
             - :design # Duplicate export of issues.designs in order to link the record to both Issue and Action
-        - :epic
+        - epic_issue:
+          - :epic
       - protected_branches:
         - :unprotect_access_levels
       - protected_environments:
diff --git a/lib/gitlab/sidekiq_middleware.rb b/lib/gitlab/sidekiq_middleware.rb
index c3a52a1986dd1..37165d787c7e3 100644
--- a/lib/gitlab/sidekiq_middleware.rb
+++ b/lib/gitlab/sidekiq_middleware.rb
@@ -9,18 +9,18 @@ module SidekiqMiddleware
     # eg: `config.server_middleware(&Gitlab::SidekiqMiddleware.server_configurator)`
     def self.server_configurator(metrics: true, arguments_logger: true, memory_killer: true, request_store: true)
       lambda do |chain|
-        chain.add Gitlab::SidekiqMiddleware::Monitor
-        chain.add Gitlab::SidekiqMiddleware::ServerMetrics if metrics
-        chain.add Gitlab::SidekiqMiddleware::ArgumentsLogger if arguments_logger
-        chain.add Gitlab::SidekiqMiddleware::MemoryKiller if memory_killer
-        chain.add Gitlab::SidekiqMiddleware::RequestStoreMiddleware if request_store
-        chain.add Gitlab::SidekiqMiddleware::BatchLoader
-        chain.add Labkit::Middleware::Sidekiq::Server
-        chain.add Gitlab::SidekiqMiddleware::InstrumentationLogger
-        chain.add Gitlab::SidekiqMiddleware::AdminMode::Server
-        chain.add Gitlab::SidekiqStatus::ServerMiddleware
-        chain.add Gitlab::SidekiqMiddleware::WorkerContext::Server
-        chain.add Gitlab::SidekiqMiddleware::DuplicateJobs::Server
+        chain.add ::Gitlab::SidekiqMiddleware::Monitor
+        chain.add ::Gitlab::SidekiqMiddleware::ServerMetrics if metrics
+        chain.add ::Gitlab::SidekiqMiddleware::ArgumentsLogger if arguments_logger
+        chain.add ::Gitlab::SidekiqMiddleware::MemoryKiller if memory_killer
+        chain.add ::Gitlab::SidekiqMiddleware::RequestStoreMiddleware if request_store
+        chain.add ::Gitlab::SidekiqMiddleware::BatchLoader
+        chain.add ::Labkit::Middleware::Sidekiq::Server
+        chain.add ::Gitlab::SidekiqMiddleware::InstrumentationLogger
+        chain.add ::Gitlab::SidekiqMiddleware::AdminMode::Server
+        chain.add ::Gitlab::SidekiqStatus::ServerMiddleware
+        chain.add ::Gitlab::SidekiqMiddleware::WorkerContext::Server
+        chain.add ::Gitlab::SidekiqMiddleware::DuplicateJobs::Server
       end
     end
 
@@ -29,12 +29,12 @@ def self.server_configurator(metrics: true, arguments_logger: true, memory_kille
     # eg: `config.client_middleware(&Gitlab::SidekiqMiddleware.client_configurator)`
     def self.client_configurator
       lambda do |chain|
-        chain.add Gitlab::SidekiqStatus::ClientMiddleware
-        chain.add Gitlab::SidekiqMiddleware::ClientMetrics
-        chain.add Gitlab::SidekiqMiddleware::WorkerContext::Client # needs to be before the Labkit middleware
-        chain.add Labkit::Middleware::Sidekiq::Client
-        chain.add Gitlab::SidekiqMiddleware::AdminMode::Client
-        chain.add Gitlab::SidekiqMiddleware::DuplicateJobs::Client
+        chain.add ::Gitlab::SidekiqStatus::ClientMiddleware
+        chain.add ::Gitlab::SidekiqMiddleware::ClientMetrics
+        chain.add ::Gitlab::SidekiqMiddleware::WorkerContext::Client # needs to be before the Labkit middleware
+        chain.add ::Labkit::Middleware::Sidekiq::Client
+        chain.add ::Gitlab::SidekiqMiddleware::AdminMode::Client
+        chain.add ::Gitlab::SidekiqMiddleware::DuplicateJobs::Client
       end
     end
   end
diff --git a/spec/features/groups/navbar_spec.rb b/spec/features/groups/navbar_spec.rb
index 8c16dcec42f16..4d45bcf639daf 100644
--- a/spec/features/groups/navbar_spec.rb
+++ b/spec/features/groups/navbar_spec.rb
@@ -73,5 +73,20 @@
 
       it_behaves_like 'verified navigation bar'
     end
+
+    context 'when value stream analytics is available' do
+      before do
+        stub_licensed_features(cycle_analytics_for_groups: true)
+
+        analytics_nav_item[:nav_sub_items] << _('Value Stream Analytics')
+
+        group.add_maintainer(user)
+        sign_in(user)
+
+        visit group_path(group)
+      end
+
+      it_behaves_like 'verified navigation bar'
+    end
   end
 end
diff --git a/spec/fixtures/lib/gitlab/import_export/group/project.json b/spec/fixtures/lib/gitlab/import_export/group/project.json
index ce4fa1981ff44..e8e1e53a86ad4 100644
--- a/spec/fixtures/lib/gitlab/import_export/group/project.json
+++ b/spec/fixtures/lib/gitlab/import_export/group/project.json
@@ -205,36 +205,40 @@
         "iid": 1,
         "group_id": 100
       },
-      "epic": {
-        "id": 1,
-        "group_id": 5,
-        "author_id": 1,
-        "assignee_id": null,
-        "iid": 1,
-        "updated_by_id": null,
-        "last_edited_by_id": null,
-        "lock_version": 0,
-        "start_date": null,
-        "end_date": null,
-        "last_edited_at": null,
-        "created_at": "2019-12-08T19:37:07.098Z",
-        "updated_at": "2019-12-08T19:43:11.568Z",
-        "title": "An epic",
-        "description": null,
-        "start_date_sourcing_milestone_id": null,
-        "due_date_sourcing_milestone_id": null,
-        "start_date_fixed": null,
-        "due_date_fixed": null,
-        "start_date_is_fixed": null,
-        "due_date_is_fixed": null,
-        "closed_by_id": null,
-        "closed_at": null,
-        "parent_id": null,
-        "relative_position": null,
-        "state_id": "opened",
-        "start_date_sourcing_epic_id": null,
-        "due_date_sourcing_epic_id": null,
-        "milestone_id": null
+      "epic_issue": {
+        "id": 78,
+        "relative_position": 1073740323,
+        "epic": {
+          "id": 1,
+          "group_id": 5,
+          "author_id": 1,
+          "assignee_id": null,
+          "iid": 1,
+          "updated_by_id": null,
+          "last_edited_by_id": null,
+          "lock_version": 0,
+          "start_date": null,
+          "end_date": null,
+          "last_edited_at": null,
+          "created_at": "2019-12-08T19:37:07.098Z",
+          "updated_at": "2019-12-08T19:43:11.568Z",
+          "title": "An epic",
+          "description": null,
+          "start_date_sourcing_milestone_id": null,
+          "due_date_sourcing_milestone_id": null,
+          "start_date_fixed": null,
+          "due_date_fixed": null,
+          "start_date_is_fixed": null,
+          "due_date_is_fixed": null,
+          "closed_by_id": null,
+          "closed_at": null,
+          "parent_id": null,
+          "relative_position": null,
+          "state_id": "opened",
+          "start_date_sourcing_epic_id": null,
+          "due_date_sourcing_epic_id": null,
+          "milestone_id": null
+        }
       }
     }
   ],
diff --git a/spec/javascripts/blob_edit/blob_bundle_spec.js b/spec/frontend/blob_edit/blob_bundle_spec.js
similarity index 93%
rename from spec/javascripts/blob_edit/blob_bundle_spec.js
rename to spec/frontend/blob_edit/blob_bundle_spec.js
index 06c6a60315540..be438781850db 100644
--- a/spec/javascripts/blob_edit/blob_bundle_spec.js
+++ b/spec/frontend/blob_edit/blob_bundle_spec.js
@@ -1,9 +1,10 @@
 import $ from 'jquery';
 import blobBundle from '~/blob_edit/blob_bundle';
 
+jest.mock('~/blob_edit/edit_blob');
+
 describe('BlobBundle', () => {
   beforeEach(() => {
-    spyOnDependency(blobBundle, 'EditBlob').and.stub();
     setFixtures(`
       <div class="js-edit-blob-form" data-blob-filename="blah">
         <button class="js-commit-button"></button>
diff --git a/spec/frontend/boards/components/issue_card_inner_scoped_label_spec.js b/spec/frontend/boards/components/issue_card_inner_scoped_label_spec.js
index 7389cb14ecb36..53e670e76da5b 100644
--- a/spec/frontend/boards/components/issue_card_inner_scoped_label_spec.js
+++ b/spec/frontend/boards/components/issue_card_inner_scoped_label_spec.js
@@ -1,43 +1,40 @@
-import Vue from 'vue';
-import mountComponent from 'helpers/vue_mount_component_helper';
+import { GlLink } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
 import IssueCardInnerScopedLabel from '~/boards/components/issue_card_inner_scoped_label.vue';
 
 describe('IssueCardInnerScopedLabel Component', () => {
-  let vm;
-  const Component = Vue.extend(IssueCardInnerScopedLabel);
-  const props = {
-    label: { title: 'Foo::Bar', description: 'Some Random Description' },
-    labelStyle: { background: 'white', color: 'black' },
-    scopedLabelsDocumentationLink: '/docs-link',
-  };
-  const createComponent = () => mountComponent(Component, { ...props });
+  let wrapper;
 
   beforeEach(() => {
-    vm = createComponent();
+    wrapper = shallowMount(IssueCardInnerScopedLabel, {
+      propsData: {
+        label: { title: 'Foo::Bar', description: 'Some Random Description' },
+        labelStyle: { background: 'white', color: 'black' },
+        scopedLabelsDocumentationLink: '/docs-link',
+      },
+    });
   });
 
   afterEach(() => {
-    vm.$destroy();
+    wrapper.destroy();
   });
 
   it('should render label title', () => {
-    expect(vm.$el.querySelector('.color-label').textContent.trim()).toEqual('Foo::Bar');
+    expect(wrapper.find('.color-label').text()).toBe('Foo::Bar');
   });
 
   it('should render question mark symbol', () => {
-    expect(vm.$el.querySelector('.fa-question-circle')).not.toBeNull();
+    expect(wrapper.find('.fa-question-circle').exists()).toBe(true);
   });
 
   it('should render label style provided', () => {
-    const node = vm.$el.querySelector('.color-label');
+    const label = wrapper.find('.color-label');
 
-    expect(node.style.background).toEqual(props.labelStyle.background);
-    expect(node.style.color).toEqual(props.labelStyle.color);
+    expect(label.attributes('style')).toContain('background: white;');
+    expect(label.attributes('style')).toContain('color: black;');
   });
 
   it('should render the docs link', () => {
-    expect(vm.$el.querySelector('a.scoped-label').href).toContain(
-      props.scopedLabelsDocumentationLink,
-    );
+    expect(wrapper.find(GlLink).attributes('href')).toBe('/docs-link');
   });
 });
diff --git a/spec/frontend/boards/components/issue_due_date_spec.js b/spec/frontend/boards/components/issue_due_date_spec.js
index 8cb1d96385145..880859287e13a 100644
--- a/spec/frontend/boards/components/issue_due_date_spec.js
+++ b/spec/frontend/boards/components/issue_due_date_spec.js
@@ -1,72 +1,78 @@
-import Vue from 'vue';
+import { shallowMount } from '@vue/test-utils';
 import dateFormat from 'dateformat';
 import IssueDueDate from '~/boards/components/issue_due_date.vue';
-import mountComponent from '../../helpers/vue_mount_component_helper';
+
+const createComponent = (dueDate = new Date(), closed = false) =>
+  shallowMount(IssueDueDate, {
+    propsData: {
+      closed,
+      date: dateFormat(dueDate, 'yyyy-mm-dd', true),
+    },
+  });
+
+const findTime = wrapper => wrapper.find('time');
 
 describe('Issue Due Date component', () => {
-  let vm;
+  let wrapper;
   let date;
-  const Component = Vue.extend(IssueDueDate);
-  const createComponent = (dueDate = new Date(), closed = false) =>
-    mountComponent(Component, { closed, date: dateFormat(dueDate, 'yyyy-mm-dd', true) });
 
   beforeEach(() => {
     date = new Date();
-    vm = createComponent();
   });
 
   afterEach(() => {
-    vm.$destroy();
+    wrapper.destroy();
   });
 
   it('should render "Today" if the due date is today', () => {
-    const timeContainer = vm.$el.querySelector('time');
+    wrapper = createComponent();
 
-    expect(timeContainer.textContent.trim()).toEqual('Today');
+    expect(findTime(wrapper).text()).toBe('Today');
   });
 
   it('should render "Yesterday" if the due date is yesterday', () => {
     date.setDate(date.getDate() - 1);
-    vm = createComponent(date);
+    wrapper = createComponent(date);
 
-    expect(vm.$el.querySelector('time').textContent.trim()).toEqual('Yesterday');
+    expect(findTime(wrapper).text()).toBe('Yesterday');
   });
 
   it('should render "Tomorrow" if the due date is one day from now', () => {
     date.setDate(date.getDate() + 1);
-    vm = createComponent(date);
+    wrapper = createComponent(date);
 
-    expect(vm.$el.querySelector('time').textContent.trim()).toEqual('Tomorrow');
+    expect(findTime(wrapper).text()).toBe('Tomorrow');
   });
 
   it('should render day of the week if due date is one week away', () => {
     date.setDate(date.getDate() + 5);
-    vm = createComponent(date);
+    wrapper = createComponent(date);
 
-    expect(vm.$el.querySelector('time').textContent.trim()).toEqual(dateFormat(date, 'dddd'));
+    expect(findTime(wrapper).text()).toBe(dateFormat(date, 'dddd'));
   });
 
   it('should render month and day for other dates', () => {
     date.setDate(date.getDate() + 17);
-    vm = createComponent(date);
+    wrapper = createComponent(date);
     const today = new Date();
     const isDueInCurrentYear = today.getFullYear() === date.getFullYear();
     const format = isDueInCurrentYear ? 'mmm d' : 'mmm d, yyyy';
 
-    expect(vm.$el.querySelector('time').textContent.trim()).toEqual(dateFormat(date, format));
+    expect(findTime(wrapper).text()).toBe(dateFormat(date, format));
   });
 
   it('should contain the correct `.text-danger` css class for overdue issue that is open', () => {
     date.setDate(date.getDate() - 17);
-    vm = createComponent(date);
+    wrapper = createComponent(date);
 
-    expect(vm.$el.querySelector('time').classList.contains('text-danger')).toEqual(true);
+    expect(findTime(wrapper).classes('text-danger')).toBe(true);
   });
 
   it('should not contain the `.text-danger` css class for overdue issue that is closed', () => {
     date.setDate(date.getDate() - 17);
-    vm = createComponent(date, true);
+    const closed = true;
+    wrapper = createComponent(date, closed);
 
-    expect(vm.$el.querySelector('time').classList.contains('text-danger')).toEqual(false);
+    expect(findTime(wrapper).classes('text-danger')).toBe(false);
   });
 });
diff --git a/spec/frontend/diffs/components/diff_table_cell_spec.js b/spec/frontend/diffs/components/diff_table_cell_spec.js
index 1af0746f3bd6e..ad70b5695cc80 100644
--- a/spec/frontend/diffs/components/diff_table_cell_spec.js
+++ b/spec/frontend/diffs/components/diff_table_cell_spec.js
@@ -155,6 +155,10 @@ describe('DiffTableCell', () => {
           });
         });
 
+        it('renders the correct line number', () => {
+          expect(findLineNumber().text()).toEqual(TEST_LINE_NUMBER.toString());
+        });
+
         it('on click, dispatches setHighlightedRow', () => {
           expect(store.dispatch).not.toHaveBeenCalled();
 
diff --git a/spec/frontend/notes/stores/getters_spec.js b/spec/frontend/notes/stores/getters_spec.js
index 83417bd70efa3..1ade94641288f 100644
--- a/spec/frontend/notes/stores/getters_spec.js
+++ b/spec/frontend/notes/stores/getters_spec.js
@@ -35,6 +35,7 @@ describe('Getters Notes Store', () => {
       notesData: notesDataMock,
       userData: userDataMock,
       noteableData: noteableDataMock,
+      descriptionVersion: 'descriptionVersion',
     };
   });
 
@@ -385,4 +386,10 @@ describe('Getters Notes Store', () => {
       expect(getters.getDiscussion(state)('1')).toEqual({ id: '1' });
     });
   });
+
+  describe('descriptionVersion', () => {
+    it('should return `descriptionVersion`', () => {
+      expect(getters.descriptionVersion(state)).toEqual('descriptionVersion');
+    });
+  });
 });
diff --git a/spec/frontend/vue_shared/components/issue/related_issuable_mock_data.js b/spec/frontend/vue_shared/components/issue/related_issuable_mock_data.js
new file mode 100644
index 0000000000000..5f69d761fdf88
--- /dev/null
+++ b/spec/frontend/vue_shared/components/issue/related_issuable_mock_data.js
@@ -0,0 +1,121 @@
+export const defaultProps = {
+  endpoint: '/foo/bar/issues/1/related_issues',
+  currentNamespacePath: 'foo',
+  currentProjectPath: 'bar',
+};
+
+export const issuable1 = {
+  id: 200,
+  epicIssueId: 1,
+  confidential: false,
+  reference: 'foo/bar#123',
+  displayReference: '#123',
+  title: 'some title',
+  path: '/foo/bar/issues/123',
+  relationPath: '/foo/bar/issues/123/relation',
+  state: 'opened',
+  linkType: 'relates_to',
+  dueDate: '2010-11-22',
+  weight: 5,
+};
+
+export const issuable2 = {
+  id: 201,
+  epicIssueId: 2,
+  confidential: false,
+  reference: 'foo/bar#124',
+  displayReference: '#124',
+  title: 'some other thing',
+  path: '/foo/bar/issues/124',
+  relationPath: '/foo/bar/issues/124/relation',
+  state: 'opened',
+  linkType: 'blocks',
+};
+
+export const issuable3 = {
+  id: 202,
+  epicIssueId: 3,
+  confidential: false,
+  reference: 'foo/bar#125',
+  displayReference: '#125',
+  title: 'some other other thing',
+  path: '/foo/bar/issues/125',
+  relationPath: '/foo/bar/issues/125/relation',
+  state: 'opened',
+  linkType: 'is_blocked_by',
+};
+
+export const issuable4 = {
+  id: 203,
+  epicIssueId: 4,
+  confidential: false,
+  reference: 'foo/bar#126',
+  displayReference: '#126',
+  title: 'some other other other thing',
+  path: '/foo/bar/issues/126',
+  relationPath: '/foo/bar/issues/126/relation',
+  state: 'opened',
+};
+
+export const issuable5 = {
+  id: 204,
+  epicIssueId: 5,
+  confidential: false,
+  reference: 'foo/bar#127',
+  displayReference: '#127',
+  title: 'some other other other thing',
+  path: '/foo/bar/issues/127',
+  relationPath: '/foo/bar/issues/127/relation',
+  state: 'opened',
+};
+
+export const defaultMilestone = {
+  id: 1,
+  state: 'active',
+  title: 'Milestone title',
+  start_date: '2018-01-01',
+  due_date: '2019-12-31',
+};
+
+export const defaultAssignees = [
+  {
+    id: 1,
+    name: 'Administrator',
+    username: 'root',
+    state: 'active',
+    avatar_url: `${gl.TEST_HOST}`,
+    web_url: `${gl.TEST_HOST}/root`,
+    status_tooltip_html: null,
+    path: '/root',
+  },
+  {
+    id: 13,
+    name: 'Brooks Beatty',
+    username: 'brynn_champlin',
+    state: 'active',
+    avatar_url: `${gl.TEST_HOST}`,
+    web_url: `${gl.TEST_HOST}/brynn_champlin`,
+    status_tooltip_html: null,
+    path: '/brynn_champlin',
+  },
+  {
+    id: 6,
+    name: 'Bryce Turcotte',
+    username: 'melynda',
+    state: 'active',
+    avatar_url: `${gl.TEST_HOST}`,
+    web_url: `${gl.TEST_HOST}/melynda`,
+    status_tooltip_html: null,
+    path: '/melynda',
+  },
+  {
+    id: 20,
+    name: 'Conchita Eichmann',
+    username: 'juliana_gulgowski',
+    state: 'active',
+    avatar_url: `${gl.TEST_HOST}`,
+    web_url: `${gl.TEST_HOST}/juliana_gulgowski`,
+    status_tooltip_html: null,
+    path: '/juliana_gulgowski',
+  },
+];
diff --git a/spec/javascripts/vue_shared/components/content_viewer/content_viewer_spec.js b/spec/javascripts/vue_shared/components/content_viewer/content_viewer_spec.js
index e2a1ed931f1e4..fbe9337ecf427 100644
--- a/spec/javascripts/vue_shared/components/content_viewer/content_viewer_spec.js
+++ b/spec/javascripts/vue_shared/components/content_viewer/content_viewer_spec.js
@@ -1,6 +1,7 @@
 import Vue from 'vue';
 import MockAdapter from 'axios-mock-adapter';
 import mountComponent from 'spec/helpers/vue_mount_component_helper';
+import waitForPromises from 'spec/helpers/wait_for_promises';
 import { GREEN_BOX_IMAGE_URL } from 'spec/test_constants';
 import axios from '~/lib/utils/axios_utils';
 import contentViewer from '~/vue_shared/components/content_viewer/content_viewer.vue';
@@ -22,7 +23,7 @@ describe('ContentViewer', () => {
 
   it('markdown preview renders + loads rendered markdown from server', done => {
     mock = new MockAdapter(axios);
-    mock.onPost(`${gon.relative_url_root}/testproject/preview_markdown`).reply(200, {
+    mock.onPost(`${gon.relative_url_root}/testproject/preview_markdown`).replyOnce(200, {
       body: '<b>testing</b>',
     });
 
@@ -33,13 +34,12 @@ describe('ContentViewer', () => {
       type: 'markdown',
     });
 
-    const previewContainer = vm.$el.querySelector('.md-previewer');
-
-    setTimeout(() => {
-      expect(previewContainer.textContent).toContain('testing');
-
-      done();
-    });
+    waitForPromises()
+      .then(() => {
+        expect(vm.$el.querySelector('.md-previewer').textContent).toContain('testing');
+      })
+      .then(done)
+      .catch(done.fail);
   });
 
   it('renders image preview', done => {
@@ -49,11 +49,12 @@ describe('ContentViewer', () => {
       type: 'image',
     });
 
-    setTimeout(() => {
-      expect(vm.$el.querySelector('img').getAttribute('src')).toBe(GREEN_BOX_IMAGE_URL);
-
-      done();
-    });
+    vm.$nextTick()
+      .then(() => {
+        expect(vm.$el.querySelector('img').getAttribute('src')).toBe(GREEN_BOX_IMAGE_URL);
+      })
+      .then(done)
+      .catch(done.fail);
   });
 
   it('renders fallback download control', done => {
@@ -62,18 +63,19 @@ describe('ContentViewer', () => {
       fileSize: 1024,
     });
 
-    setTimeout(() => {
-      expect(
-        vm.$el
-          .querySelector('.file-info')
-          .textContent.trim()
-          .replace(/\s+/, ' '),
-      ).toEqual('test.abc (1.00 KiB)');
-
-      expect(vm.$el.querySelector('.btn.btn-default').textContent.trim()).toEqual('Download');
-
-      done();
-    });
+    vm.$nextTick()
+      .then(() => {
+        expect(
+          vm.$el
+            .querySelector('.file-info')
+            .textContent.trim()
+            .replace(/\s+/, ' '),
+        ).toEqual('test.abc (1.00 KiB)');
+
+        expect(vm.$el.querySelector('.btn.btn-default').textContent.trim()).toEqual('Download');
+      })
+      .then(done)
+      .catch(done.fail);
   });
 
   it('renders fallback download control for file with a data URL path properly', done => {
@@ -82,13 +84,14 @@ describe('ContentViewer', () => {
       filePath: 'somepath/test.abc',
     });
 
-    setTimeout(() => {
-      expect(vm.$el.querySelector('.file-info').textContent.trim()).toEqual('test.abc');
-      expect(vm.$el.querySelector('.btn.btn-default')).toHaveAttr('download', 'test.abc');
-      expect(vm.$el.querySelector('.btn.btn-default').textContent.trim()).toEqual('Download');
-
-      done();
-    });
+    vm.$nextTick()
+      .then(() => {
+        expect(vm.$el.querySelector('.file-info').textContent.trim()).toEqual('test.abc');
+        expect(vm.$el.querySelector('.btn.btn-default')).toHaveAttr('download', 'test.abc');
+        expect(vm.$el.querySelector('.btn.btn-default').textContent.trim()).toEqual('Download');
+      })
+      .then(done)
+      .catch(done.fail);
   });
 
   it('markdown preview receives the file path as a parameter', done => {
@@ -106,14 +109,15 @@ describe('ContentViewer', () => {
       filePath: 'foo/test.md',
     });
 
-    setTimeout(() => {
-      expect(axios.post).toHaveBeenCalledWith(
-        `${gon.relative_url_root}/testproject/preview_markdown`,
-        { path: 'foo/test.md', text: '*  Test' },
-        jasmine.any(Object),
-      );
-
-      done();
-    });
+    vm.$nextTick()
+      .then(() => {
+        expect(axios.post).toHaveBeenCalledWith(
+          `${gon.relative_url_root}/testproject/preview_markdown`,
+          { path: 'foo/test.md', text: '*  Test' },
+          jasmine.any(Object),
+        );
+      })
+      .then(done)
+      .catch(done.fail);
   });
 });
diff --git a/spec/javascripts/vue_shared/components/issue/related_issuable_mock_data.js b/spec/javascripts/vue_shared/components/issue/related_issuable_mock_data.js
index d3dc169ddabb6..3c42f0c2aa976 100644
--- a/spec/javascripts/vue_shared/components/issue/related_issuable_mock_data.js
+++ b/spec/javascripts/vue_shared/components/issue/related_issuable_mock_data.js
@@ -1,116 +1 @@
-export const defaultProps = {
-  endpoint: '/foo/bar/issues/1/related_issues',
-  currentNamespacePath: 'foo',
-  currentProjectPath: 'bar',
-};
-
-export const issuable1 = {
-  id: 200,
-  epicIssueId: 1,
-  confidential: false,
-  reference: 'foo/bar#123',
-  displayReference: '#123',
-  title: 'some title',
-  path: '/foo/bar/issues/123',
-  state: 'opened',
-  linkType: 'relates_to',
-  dueDate: '2010-11-22',
-  weight: 5,
-};
-
-export const issuable2 = {
-  id: 201,
-  epicIssueId: 2,
-  confidential: false,
-  reference: 'foo/bar#124',
-  displayReference: '#124',
-  title: 'some other thing',
-  path: '/foo/bar/issues/124',
-  state: 'opened',
-  linkType: 'blocks',
-};
-
-export const issuable3 = {
-  id: 202,
-  epicIssueId: 3,
-  confidential: false,
-  reference: 'foo/bar#125',
-  displayReference: '#125',
-  title: 'some other other thing',
-  path: '/foo/bar/issues/125',
-  state: 'opened',
-  linkType: 'is_blocked_by',
-};
-
-export const issuable4 = {
-  id: 203,
-  epicIssueId: 4,
-  confidential: false,
-  reference: 'foo/bar#126',
-  displayReference: '#126',
-  title: 'some other other other thing',
-  path: '/foo/bar/issues/126',
-  state: 'opened',
-};
-
-export const issuable5 = {
-  id: 204,
-  epicIssueId: 5,
-  confidential: false,
-  reference: 'foo/bar#127',
-  displayReference: '#127',
-  title: 'some other other other thing',
-  path: '/foo/bar/issues/127',
-  state: 'opened',
-};
-
-export const defaultMilestone = {
-  id: 1,
-  state: 'active',
-  title: 'Milestone title',
-  start_date: '2018-01-01',
-  due_date: '2019-12-31',
-};
-
-export const defaultAssignees = [
-  {
-    id: 1,
-    name: 'Administrator',
-    username: 'root',
-    state: 'active',
-    avatar_url: `${gl.TEST_HOST}`,
-    web_url: `${gl.TEST_HOST}/root`,
-    status_tooltip_html: null,
-    path: '/root',
-  },
-  {
-    id: 13,
-    name: 'Brooks Beatty',
-    username: 'brynn_champlin',
-    state: 'active',
-    avatar_url: `${gl.TEST_HOST}`,
-    web_url: `${gl.TEST_HOST}/brynn_champlin`,
-    status_tooltip_html: null,
-    path: '/brynn_champlin',
-  },
-  {
-    id: 6,
-    name: 'Bryce Turcotte',
-    username: 'melynda',
-    state: 'active',
-    avatar_url: `${gl.TEST_HOST}`,
-    web_url: `${gl.TEST_HOST}/melynda`,
-    status_tooltip_html: null,
-    path: '/melynda',
-  },
-  {
-    id: 20,
-    name: 'Conchita Eichmann',
-    username: 'juliana_gulgowski',
-    state: 'active',
-    avatar_url: `${gl.TEST_HOST}`,
-    web_url: `${gl.TEST_HOST}/juliana_gulgowski`,
-    status_tooltip_html: null,
-    path: '/juliana_gulgowski',
-  },
-];
+export * from '../../../../frontend/vue_shared/components/issue/related_issuable_mock_data';
diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb
index ce6e8c731e292..1fd6157ce43c7 100644
--- a/spec/lib/gitlab/database/migration_helpers_spec.rb
+++ b/spec/lib/gitlab/database/migration_helpers_spec.rb
@@ -383,7 +383,8 @@
         it 'raises an error' do
           expect(model).to receive(:foreign_key_exists?).and_return(false)
 
-          expect { model.validate_foreign_key(:projects, :user_id) }.to raise_error(/cannot find/)
+          error_message = /Could not find foreign key "fk_name" on table "projects"/
+          expect { model.validate_foreign_key(:projects, :user_id, name: :fk_name) }.to raise_error(error_message)
         end
       end
     end
@@ -587,6 +588,8 @@
   end
 
   describe '#add_column_with_default' do
+    let(:column) { Project.columns.find { |c| c.name == "id" } }
+
     context 'outside of a transaction' do
       context 'when a column limit is not set' do
         before do
@@ -601,6 +604,9 @@
 
           expect(model).to receive(:change_column_default)
             .with(:projects, :foo, 10)
+
+          expect(model).to receive(:column_for)
+            .with(:projects, :foo).and_return(column)
         end
 
         it 'adds the column while allowing NULL values' do
@@ -655,6 +661,7 @@
         it 'adds the column with a limit' do
           allow(model).to receive(:transaction_open?).and_return(false)
           allow(model).to receive(:transaction).and_yield
+          allow(model).to receive(:column_for).with(:projects, :foo).and_return(column)
           allow(model).to receive(:update_column_in_batches).with(:projects, :foo, 10)
           allow(model).to receive(:change_column_null).with(:projects, :foo, false)
           allow(model).to receive(:change_column_default).with(:projects, :foo, 10)
@@ -721,50 +728,68 @@
 
       before do
         allow(model).to receive(:transaction_open?).and_return(false)
-        allow(model).to receive(:column_for).and_return(old_column)
       end
 
-      it 'renames a column concurrently' do
-        expect(model).to receive(:check_trigger_permissions!).with(:users)
+      context 'when the column to rename exists' do
+        before do
+          allow(model).to receive(:column_for).and_return(old_column)
+        end
 
-        expect(model).to receive(:install_rename_triggers_for_postgresql)
-          .with(trigger_name, '"users"', '"old"', '"new"')
+        it 'renames a column concurrently' do
+          expect(model).to receive(:check_trigger_permissions!).with(:users)
 
-        expect(model).to receive(:add_column)
-          .with(:users, :new, :integer,
-               limit: old_column.limit,
-               precision: old_column.precision,
-               scale: old_column.scale)
+          expect(model).to receive(:install_rename_triggers_for_postgresql)
+            .with(trigger_name, '"users"', '"old"', '"new"')
 
-        expect(model).to receive(:change_column_default)
-          .with(:users, :new, old_column.default)
+          expect(model).to receive(:add_column)
+            .with(:users, :new, :integer,
+                 limit: old_column.limit,
+                 precision: old_column.precision,
+                 scale: old_column.scale)
 
-        expect(model).to receive(:update_column_in_batches)
+          expect(model).to receive(:change_column_default)
+            .with(:users, :new, old_column.default)
 
-        expect(model).to receive(:change_column_null).with(:users, :new, false)
+          expect(model).to receive(:update_column_in_batches)
 
-        expect(model).to receive(:copy_indexes).with(:users, :old, :new)
-        expect(model).to receive(:copy_foreign_keys).with(:users, :old, :new)
+          expect(model).to receive(:change_column_null).with(:users, :new, false)
+
+          expect(model).to receive(:copy_indexes).with(:users, :old, :new)
+          expect(model).to receive(:copy_foreign_keys).with(:users, :old, :new)
+
+          model.rename_column_concurrently(:users, :old, :new)
+        end
 
-        model.rename_column_concurrently(:users, :old, :new)
+        context 'when default is false' do
+          let(:old_column) do
+            double(:column,
+                 type: :boolean,
+                 limit: nil,
+                 default: false,
+                 null: false,
+                 precision: nil,
+                 scale: nil)
+          end
+
+          it 'copies the default to the new column' do
+            expect(model).to receive(:change_column_default)
+              .with(:users, :new, old_column.default)
+
+            model.rename_column_concurrently(:users, :old, :new)
+          end
+        end
       end
 
-      context 'when default is false' do
-        let(:old_column) do
-          double(:column,
-               type: :boolean,
-               limit: nil,
-               default: false,
-               null: false,
-               precision: nil,
-               scale: nil)
+      context 'when the column to be renamed does not exist' do
+        before do
+          allow(model).to receive(:columns).and_return([])
         end
 
-        it 'copies the default to the new column' do
-          expect(model).to receive(:change_column_default)
-            .with(:users, :new, old_column.default)
+        it 'raises an error with appropriate message' do
+          expect(model).to receive(:check_trigger_permissions!).with(:users)
 
-          model.rename_column_concurrently(:users, :old, :new)
+          error_message = /Could not find column "missing_column" on table "users"/
+          expect { model.rename_column_concurrently(:users, :missing_column, :new) }.to raise_error(error_message)
         end
       end
     end
@@ -1133,8 +1158,9 @@
       expect(column.name).to eq('id')
     end
 
-    it 'returns nil when a column does not exist' do
-      expect(model.column_for(:users, :kittens)).to be_nil
+    it 'raises an error when a column does not exist' do
+      error_message = /Could not find column "kittens" on table "users"/
+      expect { model.column_for(:users, :kittens) }.to raise_error(error_message)
     end
   end
 
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index f6a3ade7f1804..7740c34702b27 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -609,3 +609,6 @@ epic:
 - events
 - resource_label_events
 - user_mentions
+epic_issue:
+- epic
+- issue
diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml
index 1cd3071ac684f..0b5fb7e4a9f30 100644
--- a/spec/lib/gitlab/import_export/safe_model_attributes.yml
+++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml
@@ -832,3 +832,6 @@ Epic:
   - start_date_sourcing_epic_id
   - due_date_sourcing_epic_id
   - health_status
+EpicIssue:
+  - id
+  - relative_position
diff --git a/spec/lib/marginalia_spec.rb b/spec/lib/marginalia_spec.rb
index db428bb65c490..d4b84c5cdc426 100644
--- a/spec/lib/marginalia_spec.rb
+++ b/spec/lib/marginalia_spec.rb
@@ -59,7 +59,6 @@ def make_request(correlation_id)
         "application"       => "test",
         "controller"        => "marginalia_test",
         "action"            => "first_user",
-        "line"              => "/spec/support/helpers/query_recorder.rb",
         "correlation_id"    => correlation_id
       }
     end
@@ -116,7 +115,6 @@ def make_request(correlation_id)
       {
         "application"       => "sidekiq",
         "job_class"         => "MarginaliaTestJob",
-        "line"              => "/spec/support/sidekiq_middleware.rb",
         "correlation_id"    => sidekiq_job['correlation_id'],
         "jid"               => sidekiq_job['jid']
       }
@@ -145,7 +143,6 @@ def make_request(correlation_id)
         let(:component_map) do
           {
             "application"  => "sidekiq",
-            "line"         => "/lib/gitlab/i18n.rb",
             "jid"          => delivery_job.job_id,
             "job_class"    => delivery_job.arguments.first
           }
diff --git a/spec/models/concerns/cache_markdown_field_spec.rb b/spec/models/concerns/cache_markdown_field_spec.rb
index 06d12c14793de..697a9e985050c 100644
--- a/spec/models/concerns/cache_markdown_field_spec.rb
+++ b/spec/models/concerns/cache_markdown_field_spec.rb
@@ -230,6 +230,26 @@ def thing_subclass(klass, extra_attribute)
         end
       end
     end
+
+    describe '#rendered_field_content' do
+      let(:thing) { klass.new(description: markdown, description_html: nil, cached_markdown_version: cache_version) }
+
+      context 'when a field can be cached' do
+        it 'returns the html' do
+          thing.description = updated_markdown
+
+          expect(thing.rendered_field_content(:description)).to eq updated_html
+        end
+      end
+
+      context 'when a field cannot be cached' do
+        it 'returns nil' do
+          allow(thing).to receive(:can_cache_field?).with(:description).and_return false
+
+          expect(thing.rendered_field_content(:description)).to eq nil
+        end
+      end
+    end
   end
 
   context 'for Active record classes' do
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 3531c695236ea..b5ed29189fd29 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -911,6 +911,16 @@ def setup_group_members(group)
 
     subject { group.ci_variables_for('ref', project) }
 
+    it 'memoizes the result by ref', :request_store do
+      expect(project).to receive(:protected_for?).with('ref').once.and_return(true)
+      expect(project).to receive(:protected_for?).with('other').once.and_return(false)
+
+      2.times do
+        expect(group.ci_variables_for('ref', project)).to contain_exactly(ci_variable, protected_variable)
+        expect(group.ci_variables_for('other', project)).to contain_exactly(ci_variable)
+      end
+    end
+
     shared_examples 'ref is protected' do
       it 'contains all the variables' do
         is_expected.to contain_exactly(ci_variable, protected_variable)
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index e7deae38b4676..2b4a832634f0d 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -2930,6 +2930,19 @@
       end
     end
 
+    it 'memoizes the result by ref and environment', :request_store do
+      scoped_variable = create(:ci_variable, value: 'secret', project: project, environment_scope: 'scoped')
+
+      expect(project).to receive(:protected_for?).with('ref').once.and_return(true)
+      expect(project).to receive(:protected_for?).with('other').twice.and_return(false)
+
+      2.times do
+        expect(project.reload.ci_variables_for(ref: 'ref', environment: 'production')).to contain_exactly(ci_variable, protected_variable)
+        expect(project.reload.ci_variables_for(ref: 'other')).to contain_exactly(ci_variable)
+        expect(project.reload.ci_variables_for(ref: 'other', environment: 'scoped')).to contain_exactly(ci_variable, scoped_variable)
+      end
+    end
+
     context 'when the ref is not protected' do
       before do
         allow(project).to receive(:protected_for?).with('ref').and_return(false)
diff --git a/spec/models/resource_label_event_spec.rb b/spec/models/resource_label_event_spec.rb
index a92f5ee93e184..ca887b485a215 100644
--- a/spec/models/resource_label_event_spec.rb
+++ b/spec/models/resource_label_event_spec.rb
@@ -10,6 +10,10 @@
 
   it_behaves_like 'having unique enum values'
 
+  it_behaves_like 'a resource event'
+  it_behaves_like 'a resource event for issues'
+  it_behaves_like 'a resource event for merge requests'
+
   describe 'associations' do
     it { is_expected.to belong_to(:user) }
     it { is_expected.to belong_to(:issue) }
diff --git a/spec/models/resource_weight_event_spec.rb b/spec/models/resource_weight_event_spec.rb
index 2f00204512e5c..11b633e1dcf7c 100644
--- a/spec/models/resource_weight_event_spec.rb
+++ b/spec/models/resource_weight_event_spec.rb
@@ -3,6 +3,9 @@
 require 'spec_helper'
 
 RSpec.describe ResourceWeightEvent, type: :model do
+  it_behaves_like 'a resource event'
+  it_behaves_like 'a resource event for issues'
+
   let_it_be(:user1) { create(:user) }
   let_it_be(:user2) { create(:user) }
 
@@ -11,13 +14,11 @@
   let_it_be(:issue3) { create(:issue, author: user2) }
 
   describe 'validations' do
-    it { is_expected.not_to allow_value(nil).for(:user) }
     it { is_expected.not_to allow_value(nil).for(:issue) }
     it { is_expected.to allow_value(nil).for(:weight) }
   end
 
   describe 'associations' do
-    it { is_expected.to belong_to(:user) }
     it { is_expected.to belong_to(:issue) }
   end
 
diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb
index 1265b95736dcf..cb7b996188016 100644
--- a/spec/models/snippet_spec.rb
+++ b/spec/models/snippet_spec.rb
@@ -632,4 +632,26 @@ def to_json(params = {})
       end
     end
   end
+
+  describe '#can_cache_field?' do
+    using RSpec::Parameterized::TableSyntax
+
+    let(:snippet) { create(:snippet, file_name: file_name) }
+
+    subject { snippet.can_cache_field?(field) }
+
+    where(:field, :file_name, :result) do
+      :title       | nil           | true
+      :title       | 'foo.bar'     | true
+      :description | nil           | true
+      :description | 'foo.bar'     | true
+      :content     | nil           | false
+      :content     | 'bar.foo'     | false
+      :content     | 'markdown.md' | true
+    end
+
+    with_them do
+      it { is_expected.to eq result }
+    end
+  end
 end
diff --git a/spec/services/projects/operations/update_service_spec.rb b/spec/services/projects/operations/update_service_spec.rb
index 182906a33370d..de028ecb69351 100644
--- a/spec/services/projects/operations/update_service_spec.rb
+++ b/spec/services/projects/operations/update_service_spec.rb
@@ -298,55 +298,28 @@
             manual_configuration: "0"
           })
         end
-        let(:prometheus_params) do
-          {
-            "type" => "PrometheusService",
-            "title" => nil,
-            "active" => true,
-            "properties" => { "api_url" => "http://example.prometheus.com", "manual_configuration" => "0" },
-            "push_events" => true,
-            "issues_events" => true,
-            "merge_requests_events" => true,
-            "tag_push_events" => true,
-            "note_events" => true,
-            "category" => "monitoring",
-            "default" => false,
-            "wiki_page_events" => true,
-            "pipeline_events" => true,
-            "confidential_issues_events" => true,
-            "commit_events" => true,
-            "job_events" => true,
-            "confidential_note_events" => true,
-            "deployment_events" => false,
-            "description" => nil,
-            "comment_on_event_enabled" => true,
-            "template" => false
-          }
-        end
         let(:params) do
           {
             prometheus_integration_attributes: {
-              api_url: 'http://new.prometheus.com',
-              manual_configuration: '1'
+              'api_url' => 'http://new.prometheus.com',
+              'manual_configuration' => '1'
             }
           }
         end
 
         it 'uses Project#find_or_initialize_service to include instance defined defaults and pass them to Projects::UpdateService', :aggregate_failures do
           project_update_service = double(Projects::UpdateService)
-          prometheus_update_params = prometheus_params.merge('properties' => {
-            'api_url' => 'http://new.prometheus.com',
-            'manual_configuration' => '1'
-          })
 
           expect(project)
             .to receive(:find_or_initialize_service)
             .with('prometheus')
             .and_return(prometheus_service)
-          expect(Projects::UpdateService)
-            .to receive(:new)
-            .with(project, user, { prometheus_service_attributes: prometheus_update_params })
-            .and_return(project_update_service)
+          expect(Projects::UpdateService).to receive(:new) do |project_arg, user_arg, update_params_hash|
+            expect(project_arg).to eq project
+            expect(user_arg).to eq user
+            expect(update_params_hash[:prometheus_service_attributes]).to include('properties' => { 'api_url' => 'http://new.prometheus.com', 'manual_configuration' => '1' })
+            expect(update_params_hash[:prometheus_service_attributes]).not_to include(*%w(id project_id created_at updated_at))
+          end.and_return(project_update_service)
           expect(project_update_service).to receive(:execute)
 
           subject.execute
diff --git a/spec/support/shared_contexts/features/error_tracking_shared_context.rb b/spec/support/shared_contexts/features/error_tracking_shared_context.rb
index 48356373c2623..cbd33dd109b1a 100644
--- a/spec/support/shared_contexts/features/error_tracking_shared_context.rb
+++ b/spec/support/shared_contexts/features/error_tracking_shared_context.rb
@@ -13,7 +13,7 @@
   let(:issue_id) { issue_response['id'] }
   let(:issue_seen) { 1.year.ago.utc }
   let(:formatted_issue_seen) { issue_seen.strftime("%Y-%m-%d %-l:%M:%S%p %Z") }
-  let(:date_received) { 1.month.ago.utc }
+  let(:date_received) { 32.days.ago.utc }
 
   before do
     request_headers = { 'Authorization' => 'Bearer access_token_123', 'Content-Type' => 'application/json' }
diff --git a/spec/support/shared_contexts/policies/group_policy_shared_context.rb b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
index 63ebbcb93f951..3a306f80b3cc9 100644
--- a/spec/support/shared_contexts/policies/group_policy_shared_context.rb
+++ b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
@@ -7,6 +7,7 @@
   let_it_be(:maintainer) { create(:user) }
   let_it_be(:owner) { create(:user) }
   let_it_be(:admin) { create(:admin) }
+  let_it_be(:non_group_member) { create(:user) }
   let_it_be(:group, refind: true) { create(:group, :private, :owner_subgroup_creation_only) }
 
   let(:guest_permissions) do
diff --git a/spec/support/shared_examples/features/error_tracking_shared_example.rb b/spec/support/shared_examples/features/error_tracking_shared_example.rb
index edc1f42f6462d..922d2627bce84 100644
--- a/spec/support/shared_examples/features/error_tracking_shared_example.rb
+++ b/spec/support/shared_examples/features/error_tracking_shared_example.rb
@@ -50,17 +50,21 @@
 
 shared_examples 'error tracking show page' do
   it 'renders the error details' do
+    content = page.find(".content")
+    nav = page.find("nav.breadcrumbs")
+    header = page.find(".error-details-header")
+
     release_short_version = issue_response['firstRelease']['shortVersion']
 
-    expect(page).to have_content('1 month ago by raven.scripts.runner in main')
-    expect(page).to have_content(issue_response['metadata']['title'])
-    expect(page).to have_content('level: error')
-    expect(page).to have_content('Error Details')
-    expect(page).to have_content('GitLab Issue: https://gitlab.com/gitlab-org/gitlab/issues/1')
-    expect(page).to have_content("Sentry event: https://sentrytest.gitlab.com/sentry-org/sentry-project/issues/#{issue_id}")
-    expect(page).to have_content("First seen: 1 year ago (#{formatted_issue_seen}) Release: #{release_short_version}")
-    expect(page).to have_content('Events: 1')
-    expect(page).to have_content('Users: 0')
+    expect(header).to have_content('1 month ago by raven.scripts.runner in main')
+    expect(content).to have_content(issue_response['metadata']['title'])
+    expect(content).to have_content('level: error')
+    expect(nav).to have_content('Error Details')
+    expect(content).to have_content('GitLab Issue: https://gitlab.com/gitlab-org/gitlab/issues/1')
+    expect(content).to have_content("Sentry event: https://sentrytest.gitlab.com/sentry-org/sentry-project/issues/#{issue_id}")
+    expect(content).to have_content("First seen: 1 year ago (#{formatted_issue_seen}) Release: #{release_short_version}")
+    expect(content).to have_content('Events: 1')
+    expect(content).to have_content('Users: 0')
   end
 
   it 'renders the stack trace heading' do
diff --git a/spec/support/shared_examples/resource_events.rb b/spec/support/shared_examples/resource_events.rb
index d7e7349ad6c20..963453666c90f 100644
--- a/spec/support/shared_examples/resource_events.rb
+++ b/spec/support/shared_examples/resource_events.rb
@@ -10,8 +10,21 @@
   let_it_be(:issue2) { create(:issue, author: user1) }
   let_it_be(:issue3) { create(:issue, author: user2) }
 
+  describe 'importable' do
+    it { is_expected.to respond_to(:importing?) }
+    it { is_expected.to respond_to(:imported?) }
+  end
+
   describe 'validations' do
     it { is_expected.not_to allow_value(nil).for(:user) }
+
+    context 'when importing' do
+      before do
+        allow(subject).to receive(:importing?).and_return(true)
+      end
+
+      it { is_expected.to allow_value(nil).for(:user) }
+    end
   end
 
   describe 'associations' do
diff --git a/spec/support_specs/helpers/active_record/query_recorder_spec.rb b/spec/support_specs/helpers/active_record/query_recorder_spec.rb
index 48069c6a76659..0827ce37b07b5 100644
--- a/spec/support_specs/helpers/active_record/query_recorder_spec.rb
+++ b/spec/support_specs/helpers/active_record/query_recorder_spec.rb
@@ -14,9 +14,6 @@ class TestQueries < ActiveRecord::Base
         TestQueries.first
       end
 
-      # Test first_only flag works as expected
-      expect(control.find_query(/.*query_recorder_spec.rb.*/, 0, first_only: true))
-        .to eq(control.find_query(/.*query_recorder_spec.rb.*/, 0).first)
       # Check #find_query
       expect(control.find_query(/.*/, 0).size)
         .to eq(control.data.keys.size)
@@ -32,9 +29,7 @@ class TestQueries < ActiveRecord::Base
       # Ensure memoization value match the raw value above
       expect(control.count).to eq(control.log.size)
       # Ensure we have only two sources of queries
-      expect(control.data.keys.size).to eq(2)
-      # Ensure we detect only queries from this file
-      expect(control.data.keys.find_all { |i| i.match(/query_recorder_spec.rb/) }.count).to eq(2)
+      expect(control.data.keys.size).to eq(1)
     end
   end
 end
-- 
GitLab