diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index 81b69b0e210..f0b549766ed 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -426,8 +426,8 @@ lib/gitlab/checks/**
/doc/administration/configure.md @axil
/doc/administration/consul.md @axil
/doc/administration/credentials_inventory.md @jglassman1
-/doc/administration/custom_project_templates.md @aqualls @msedlakjakubowski
-/doc/administration/diff_limits.md @aqualls @msedlakjakubowski
+/doc/administration/custom_project_templates.md @msedlakjakubowski
+/doc/administration/diff_limits.md @msedlakjakubowski
/doc/administration/docs_self_host.md @axil
/doc/administration/encrypted_configuration.md @axil
/doc/administration/environment_variables.md @axil
@@ -438,24 +438,21 @@ lib/gitlab/checks/**
/doc/administration/geo/ @axil
/doc/administration/geo_sites.md @axil
/doc/administration/get_started.md @kpaizee
-/doc/administration/git_protocol.md @aqualls @msedlakjakubowski
+/doc/administration/git_protocol.md @msedlakjakubowski
/doc/administration/gitaly/ @eread
/doc/administration/housekeeping.md @eread
/doc/administration/inactive_project_deletion.md @eread
/doc/administration/incoming_email.md @msedlakjakubowski
/doc/administration/index.md @axil
/doc/administration/instance_limits.md @axil
-/doc/administration/integration/diagrams_net.md @aqualls @msedlakjakubowski
-/doc/administration/integration/kroki.md @msedlakjakubowski
-/doc/administration/integration/mailgun.md @msedlakjakubowski
-/doc/administration/integration/plantuml.md @aqualls @msedlakjakubowski
+/doc/administration/integration/ @msedlakjakubowski
/doc/administration/integration/terminal.md @phillipwells
/doc/administration/invalidate_markdown_cache.md @msedlakjakubowski
/doc/administration/issue_closing_pattern.md @aqualls
/doc/administration/job_artifacts.md @marcel.amirault
/doc/administration/job_logs.md @fneill
/doc/administration/labels.md @msedlakjakubowski
-/doc/administration/lfs/ @aqualls @msedlakjakubowski
+/doc/administration/lfs/ @msedlakjakubowski
/doc/administration/libravatar.md @axil
/doc/administration/license.md @fneill
/doc/administration/license_file.md @fneill
@@ -463,8 +460,8 @@ lib/gitlab/checks/**
/doc/administration/logs/ @axil
/doc/administration/logs/index.md @msedlakjakubowski
/doc/administration/maintenance_mode/ @axil
-/doc/administration/merge_request_diffs.md @aqualls @msedlakjakubowski
-/doc/administration/merge_requests_approvals.md @aqualls @msedlakjakubowski
+/doc/administration/merge_request_diffs.md @msedlakjakubowski
+/doc/administration/merge_requests_approvals.md @msedlakjakubowski
/doc/administration/moderate_users.md @jglassman1
/doc/administration/monitoring/github_imports.md @eread @ashrafkhamis
/doc/administration/monitoring/health_check.md @msedlakjakubowski
@@ -483,8 +480,8 @@ lib/gitlab/checks/**
/doc/administration/nfs.md @axil
/doc/administration/object_storage.md @axil
/doc/administration/operations/ @axil
-/doc/administration/operations/fast_ssh_key_lookup.md @aqualls @msedlakjakubowski
-/doc/administration/operations/gitlab_sshd.md @aqualls @msedlakjakubowski
+/doc/administration/operations/fast_ssh_key_lookup.md @msedlakjakubowski
+/doc/administration/operations/gitlab_sshd.md @msedlakjakubowski
/doc/administration/operations/moving_repositories.md @eread
/doc/administration/package_information/ @axil
/doc/administration/packages/ @marcel.amirault
@@ -508,39 +505,39 @@ lib/gitlab/checks/**
/doc/administration/restart_gitlab.md @axil
/doc/administration/review_abuse_reports.md @phillipwells
/doc/administration/server_hooks.md @eread
-/doc/administration/settings/account_and_limit_settings.md @aqualls @msedlakjakubowski
+/doc/administration/settings/account_and_limit_settings.md @msedlakjakubowski
/doc/administration/settings/continuous_integration.md @marcel.amirault
-/doc/administration/settings/deprecated_api_rate_limits.md @aqualls @msedlakjakubowski
+/doc/administration/settings/deprecated_api_rate_limits.md @msedlakjakubowski
/doc/administration/settings/email.md @msedlakjakubowski
/doc/administration/settings/external_authorization.md @jglassman1
-/doc/administration/settings/files_api_rate_limits.md @aqualls @msedlakjakubowski
-/doc/administration/settings/git_lfs_rate_limits.md @aqualls @msedlakjakubowski
+/doc/administration/settings/files_api_rate_limits.md @msedlakjakubowski
+/doc/administration/settings/git_lfs_rate_limits.md @msedlakjakubowski
/doc/administration/settings/gitaly_timeouts.md @eread
/doc/administration/settings/import_export_rate_limits.md @eread @ashrafkhamis
/doc/administration/settings/incident_management_rate_limits.md @msedlakjakubowski
-/doc/administration/settings/index.md @aqualls @msedlakjakubowski
-/doc/administration/settings/instance_template_repository.md @aqualls @msedlakjakubowski
+/doc/administration/settings/index.md @msedlakjakubowski
+/doc/administration/settings/instance_template_repository.md @msedlakjakubowski
/doc/administration/settings/package_registry_rate_limits.md @phillipwells
/doc/administration/settings/project_integration_management.md @eread @ashrafkhamis
-/doc/administration/settings/push_event_activities_limit.md @aqualls @msedlakjakubowski
+/doc/administration/settings/push_event_activities_limit.md @msedlakjakubowski
/doc/administration/settings/rate_limit_on_issues_creation.md @msedlakjakubowski
/doc/administration/settings/rate_limit_on_notes_creation.md @msedlakjakubowski
/doc/administration/settings/rate_limit_on_pipelines_creation.md @marcel.amirault
/doc/administration/settings/rate_limit_on_projects_api.md @lciutacu
/doc/administration/settings/rate_limit_on_users_api.md @jglassman1
-/doc/administration/settings/rate_limits_on_git_ssh_operations.md @aqualls @msedlakjakubowski
+/doc/administration/settings/rate_limits_on_git_ssh_operations.md @msedlakjakubowski
/doc/administration/settings/scim_setup.md @jglassman1
/doc/administration/settings/security_and_compliance.md @rdickenson
/doc/administration/settings/slack_app.md @eread @ashrafkhamis
/doc/administration/settings/terraform_limits.md @phillipwells
/doc/administration/settings/third_party_offers.md @lciutacu
/doc/administration/settings/usage_statistics.md @lciutacu
-/doc/administration/settings/visibility_and_access_controls.md @aqualls @msedlakjakubowski
+/doc/administration/settings/visibility_and_access_controls.md @msedlakjakubowski
/doc/administration/sidekiq/ @axil
/doc/administration/sidekiq/sidekiq_memory_killer.md @jglassman1
/doc/administration/silent_mode/ @axil
/doc/administration/smime_signing_email.md @axil
-/doc/administration/snippets/ @aqualls @msedlakjakubowski
+/doc/administration/snippets/ @msedlakjakubowski
/doc/administration/static_objects_external_storage.md @ashrafkhamis
/doc/administration/system_hooks.md @eread @ashrafkhamis
/doc/administration/terraform_state.md @phillipwells
@@ -559,10 +556,10 @@ lib/gitlab/checks/**
/doc/api/avatar.md @jglassman1
/doc/api/award_emoji.md @msedlakjakubowski
/doc/api/boards.md @msedlakjakubowski
-/doc/api/branches.md @aqualls @msedlakjakubowski
+/doc/api/branches.md @msedlakjakubowski
/doc/api/bulk_imports.md @eread @ashrafkhamis
/doc/api/cluster_agents.md @phillipwells
-/doc/api/commits.md @aqualls @msedlakjakubowski
+/doc/api/commits.md @msedlakjakubowski
/doc/api/container_registry.md @marcel.amirault
/doc/api/custom_attributes.md @msedlakjakubowski
/doc/api/database_migrations.md @aqualls
@@ -571,7 +568,7 @@ lib/gitlab/checks/**
/doc/api/deploy_keys.md @phillipwells
/doc/api/deploy_tokens.md @phillipwells
/doc/api/deployments.md @phillipwells
-/doc/api/discussions.md @aqualls @msedlakjakubowski
+/doc/api/discussions.md @msedlakjakubowski
/doc/api/dora/ @lciutacu
/doc/api/draft_notes.md @aqualls
/doc/api/environments.md @phillipwells
@@ -586,7 +583,7 @@ lib/gitlab/checks/**
/doc/api/geo_nodes.md @axil
/doc/api/geo_sites.md @axil
/doc/api/graphql/audit_report.md @eread
-/doc/api/graphql/branch_rules.md @aqualls @msedlakjakubowski
+/doc/api/graphql/branch_rules.md @msedlakjakubowski
/doc/api/graphql/custom_emoji.md @msedlakjakubowski
/doc/api/graphql/getting_started.md @eread @ashrafkhamis
/doc/api/graphql/index.md @eread @ashrafkhamis
@@ -605,7 +602,7 @@ lib/gitlab/checks/**
/doc/api/group_labels.md @msedlakjakubowski
/doc/api/group_level_variables.md @marcel.amirault
/doc/api/group_milestones.md @msedlakjakubowski
-/doc/api/group_protected_branches.md @aqualls @msedlakjakubowski
+/doc/api/group_protected_branches.md @msedlakjakubowski
/doc/api/group_protected_environments.md @phillipwells
/doc/api/group_relations_export.md @eread @ashrafkhamis
/doc/api/group_releases.md @phillipwells
@@ -622,7 +619,7 @@ lib/gitlab/checks/**
/doc/api/iterations.md @msedlakjakubowski
/doc/api/job_artifacts.md @marcel.amirault
/doc/api/jobs.md @marcel.amirault
-/doc/api/keys.md @aqualls @msedlakjakubowski
+/doc/api/keys.md @msedlakjakubowski
/doc/api/labels.md @msedlakjakubowski
/doc/api/license.md @fneill
/doc/api/linked_epics.md @msedlakjakubowski
@@ -630,7 +627,7 @@ lib/gitlab/checks/**
/doc/api/markdown.md @msedlakjakubowski
/doc/api/member_roles.md @jglassman1
/doc/api/members.md @jglassman1
-/doc/api/merge_request_approvals.md @aqualls @msedlakjakubowski
+/doc/api/merge_request_approvals.md @msedlakjakubowski
/doc/api/merge_request_context_commits.md @aqualls
/doc/api/merge_requests.md @aqualls
/doc/api/merge_trains.md @marcel.amirault
@@ -652,27 +649,27 @@ lib/gitlab/checks/**
/doc/api/plan_limits.md @jglassman1
/doc/api/product_analytics.md @lciutacu
/doc/api/project_access_tokens.md @jglassman1
-/doc/api/project_aliases.md @aqualls @msedlakjakubowski
-/doc/api/project_badges.md @aqualls @msedlakjakubowski
+/doc/api/project_aliases.md @msedlakjakubowski
+/doc/api/project_badges.md @msedlakjakubowski
/doc/api/project_clusters.md @phillipwells
/doc/api/project_import_export.md @eread @ashrafkhamis
/doc/api/project_job_token_scopes.md @marcel.amirault
/doc/api/project_level_variables.md @marcel.amirault
/doc/api/project_relations_export.md @eread @ashrafkhamis
/doc/api/project_repository_storage_moves.md @eread
-/doc/api/project_snippets.md @aqualls @msedlakjakubowski
-/doc/api/project_statistics.md @aqualls @msedlakjakubowski
-/doc/api/project_templates.md @aqualls @msedlakjakubowski
+/doc/api/project_snippets.md @msedlakjakubowski
+/doc/api/project_statistics.md @msedlakjakubowski
+/doc/api/project_templates.md @msedlakjakubowski
/doc/api/project_vulnerabilities.md @rdickenson
/doc/api/projects.md @lciutacu
-/doc/api/protected_branches.md @aqualls @msedlakjakubowski
+/doc/api/protected_branches.md @msedlakjakubowski
/doc/api/protected_environments.md @phillipwells
-/doc/api/protected_tags.md @aqualls @msedlakjakubowski
+/doc/api/protected_tags.md @msedlakjakubowski
/doc/api/releases/ @phillipwells
-/doc/api/remote_mirrors.md @aqualls @msedlakjakubowski
-/doc/api/repositories.md @aqualls @msedlakjakubowski
-/doc/api/repository_files.md @aqualls @msedlakjakubowski
-/doc/api/repository_submodules.md @aqualls @msedlakjakubowski
+/doc/api/remote_mirrors.md @msedlakjakubowski
+/doc/api/repositories.md @msedlakjakubowski
+/doc/api/repository_files.md @msedlakjakubowski
+/doc/api/repository_submodules.md @msedlakjakubowski
/doc/api/resource_groups.md @phillipwells
/doc/api/resource_iteration_events.md @msedlakjakubowski
/doc/api/resource_label_events.md @eread
@@ -688,15 +685,15 @@ lib/gitlab/checks/**
/doc/api/secure_files.md @marcel.amirault
/doc/api/settings.md @jglassman1
/doc/api/sidekiq_metrics.md @axil
-/doc/api/snippet_repository_storage_moves.md @aqualls @msedlakjakubowski
-/doc/api/snippets.md @aqualls @msedlakjakubowski
+/doc/api/snippet_repository_storage_moves.md @msedlakjakubowski
+/doc/api/snippets.md @msedlakjakubowski
/doc/api/statistics.md @jglassman1
/doc/api/status_checks.md @eread
-/doc/api/suggestions.md @aqualls @msedlakjakubowski
+/doc/api/suggestions.md @msedlakjakubowski
/doc/api/system_hooks.md @eread @ashrafkhamis
-/doc/api/tags.md @aqualls @msedlakjakubowski
-/doc/api/templates/dockerfiles.md @aqualls @msedlakjakubowski
-/doc/api/templates/gitignores.md @aqualls @msedlakjakubowski
+/doc/api/tags.md @msedlakjakubowski
+/doc/api/templates/dockerfiles.md @msedlakjakubowski
+/doc/api/templates/gitignores.md @msedlakjakubowski
/doc/api/templates/gitlab_ci_ymls.md @marcel.amirault
/doc/api/templates/licenses.md @rdickenson
/doc/api/todos.md @msedlakjakubowski
@@ -709,6 +706,7 @@ lib/gitlab/checks/**
/doc/api/vulnerability_exports.md @rdickenson
/doc/api/vulnerability_findings.md @rdickenson
/doc/architecture/blueprints/cells/ @lciutacu
+/doc/architecture/blueprints/ci_builds_runner_fleet_metrics/ @fneill
/doc/architecture/blueprints/database/scalability/patterns/ @aqualls
/doc/architecture/blueprints/database_scaling/ @aqualls
/doc/ci/ @marcel.amirault
@@ -731,7 +729,7 @@ lib/gitlab/checks/**
/doc/development/auto_devops.md @phillipwells
/doc/development/avoiding_required_stops.md @axil
/doc/development/backend/ @sselhorn
-/doc/development/backend/create_source_code_be/ @aqualls @msedlakjakubowski
+/doc/development/backend/create_source_code_be/ @msedlakjakubowski
/doc/development/build_test_package.md @axil
/doc/development/bulk_import.md @eread @ashrafkhamis
/doc/development/cached_queries.md @jglassman1
@@ -739,13 +737,13 @@ lib/gitlab/checks/**
/doc/development/chatops_on_gitlabcom.md @phillipwells
/doc/development/cicd/ @marcel.amirault
/doc/development/code_intelligence/ @aqualls
-/doc/development/code_owners/ @aqualls @msedlakjakubowski
+/doc/development/code_owners/ @msedlakjakubowski
/doc/development/contributing/ @sselhorn
/doc/development/database/ @aqualls
/doc/development/database/filtering_by_label.md @msedlakjakubowski
/doc/development/database/multiple_databases.md @lciutacu
/doc/development/database_review.md @aqualls
-/doc/development/developing_with_solargraph.md @aqualls @msedlakjakubowski
+/doc/development/developing_with_solargraph.md @msedlakjakubowski
/doc/development/development_processes.md @sselhorn
/doc/development/distributed_tracing.md @msedlakjakubowski
/doc/development/distribution/ @axil
@@ -754,17 +752,17 @@ lib/gitlab/checks/**
/doc/development/fe_guide/ @sselhorn
/doc/development/fe_guide/customizable_dashboards.md @lciutacu
/doc/development/fe_guide/merge_request_widget_extensions.md @aqualls
-/doc/development/fe_guide/source_editor.md @aqualls @msedlakjakubowski
+/doc/development/fe_guide/source_editor.md @msedlakjakubowski
/doc/development/feature_categorization/ @sselhorn
/doc/development/feature_development.md @sselhorn
/doc/development/feature_flags/ @sselhorn
-/doc/development/fips_compliance.md @aqualls @msedlakjakubowski
+/doc/development/fips_compliance.md @msedlakjakubowski
/doc/development/geo.md @axil
/doc/development/geo/ @axil
/doc/development/git_object_deduplication.md @eread
/doc/development/gitaly.md @eread
/doc/development/gitlab_flavored_markdown/ @ashrafkhamis
-/doc/development/gitlab_shell/ @aqualls @msedlakjakubowski
+/doc/development/gitlab_shell/ @msedlakjakubowski
/doc/development/graphql_guide/ @eread @ashrafkhamis
/doc/development/graphql_guide/batchloader.md @aqualls
/doc/development/i18n/ @eread @ashrafkhamis
@@ -776,17 +774,17 @@ lib/gitlab/checks/**
/doc/development/integrations/secure.md @rdickenson
/doc/development/integrations/secure_partner_integration.md @rdickenson
/doc/development/internal_analytics/ @lciutacu
-/doc/development/internal_api/ @aqualls @msedlakjakubowski
+/doc/development/internal_api/ @msedlakjakubowski
/doc/development/internal_users.md @sselhorn
/doc/development/issuable-like-models.md @msedlakjakubowski
/doc/development/issue_types.md @msedlakjakubowski
/doc/development/kubernetes.md @phillipwells
/doc/development/labels/ @sselhorn
-/doc/development/lfs.md @aqualls @msedlakjakubowski
+/doc/development/lfs.md @msedlakjakubowski
/doc/development/logging.md @msedlakjakubowski
/doc/development/maintenance_mode.md @axil
/doc/development/merge_request_concepts/ @aqualls
-/doc/development/merge_request_concepts/rate_limits.md @aqualls @msedlakjakubowski
+/doc/development/merge_request_concepts/rate_limits.md @msedlakjakubowski
/doc/development/migration_style_guide.md @aqualls
/doc/development/navigation_sidebar.md @sselhorn
/doc/development/omnibus.md @axil
@@ -797,9 +795,9 @@ lib/gitlab/checks/**
/doc/development/permissions.md @jglassman1
/doc/development/permissions/ @jglassman1
/doc/development/policies.md @jglassman1
-/doc/development/project_templates.md @aqualls @msedlakjakubowski
+/doc/development/project_templates.md @msedlakjakubowski
/doc/development/prometheus_metrics.md @msedlakjakubowski
-/doc/development/rails_endpoints/ @aqualls @msedlakjakubowski
+/doc/development/rails_endpoints/ @msedlakjakubowski
/doc/development/real_time.md @jglassman1
/doc/development/rubocop_development_guide.md @sselhorn
/doc/development/search/ @ashrafkhamis
@@ -812,10 +810,10 @@ lib/gitlab/checks/**
/doc/development/value_stream_analytics/ @lciutacu
/doc/development/work_items.md @msedlakjakubowski
/doc/development/work_items_widgets.md @msedlakjakubowski
-/doc/development/workhorse/ @aqualls @msedlakjakubowski
+/doc/development/workhorse/ @msedlakjakubowski
/doc/downgrade_ee_to_ce/ @axil
/doc/drawers/ @ashrafkhamis
-/doc/gitlab-basics/ @aqualls @msedlakjakubowski
+/doc/gitlab-basics/ @msedlakjakubowski
/doc/install/ @axil
/doc/install/postgresql_extensions.md @aqualls
/doc/integration/ @jglassman1
@@ -833,7 +831,7 @@ lib/gitlab/checks/**
/doc/integration/mattermost/ @axil
/doc/integration/partner_marketplace.md @fneill
/doc/integration/recaptcha.md @phillipwells
-/doc/integration/sourcegraph.md @aqualls @msedlakjakubowski
+/doc/integration/sourcegraph.md @msedlakjakubowski
/doc/integration/trello_power_up.md @eread @ashrafkhamis
/doc/integration/vault.md @phillipwells
/doc/operations/feature_flags.md @phillipwells
@@ -842,7 +840,7 @@ lib/gitlab/checks/**
/doc/policy/ @axil
/doc/raketasks/ @axil
/doc/raketasks/spdx.md @rdickenson
-/doc/raketasks/x509_signatures.md @aqualls @msedlakjakubowski
+/doc/raketasks/x509_signatures.md @msedlakjakubowski
/doc/security/ @jglassman1
/doc/security/email_verification.md @phillipwells
/doc/security/identity_verification.md @phillipwells
@@ -850,8 +848,7 @@ lib/gitlab/checks/**
/doc/topics/authentication/ @jglassman1
/doc/topics/autodevops/ @phillipwells
/doc/topics/data_seeder.md @sselhorn
-/doc/topics/git/ @aqualls @msedlakjakubowski
-/doc/topics/gitlab_flow.md @aqualls @msedlakjakubowski
+/doc/topics/git/ @msedlakjakubowski
/doc/topics/offline/ @axil
/doc/topics/plan_and_track.md @msedlakjakubowski
/doc/tutorials/ @kpaizee
@@ -862,6 +859,7 @@ lib/gitlab/checks/**
/doc/tutorials/convert_personal_namespace_to_group/ @lciutacu
/doc/tutorials/dependency_scanning.md @rdickenson
/doc/tutorials/fuzz_testing/ @rdickenson
+/doc/tutorials/install_gitlab_single_node/ @axil
/doc/tutorials/move_personal_project_to_group/ @lciutacu
/doc/tutorials/protected_workflow/ @aqualls
/doc/tutorials/scan_result_policy/ @rdickenson
@@ -870,12 +868,11 @@ lib/gitlab/checks/**
/doc/user/analytics/ @lciutacu
/doc/user/analytics/ci_cd_analytics.md @phillipwells
/doc/user/application_security/ @rdickenson
-/doc/user/asciidoc.md @aqualls @msedlakjakubowski
+/doc/user/asciidoc.md @aqualls
/doc/user/award_emojis.md @msedlakjakubowski
/doc/user/clusters/ @phillipwells
/doc/user/compliance/ @rdickenson
/doc/user/compliance/compliance_center/ @eread
-/doc/user/compliance/compliance_report/ @eread
/doc/user/compliance/index.md @eread
/doc/user/crm/ @msedlakjakubowski
/doc/user/discussions/ @aqualls
@@ -884,7 +881,7 @@ lib/gitlab/checks/**
/doc/user/group/ @lciutacu
/doc/user/group/clusters/ @phillipwells
/doc/user/group/compliance_frameworks.md @eread
-/doc/user/group/custom_project_templates.md @aqualls @msedlakjakubowski
+/doc/user/group/custom_project_templates.md @aqualls
/doc/user/group/epics/ @msedlakjakubowski
/doc/user/group/import/ @eread @ashrafkhamis
/doc/user/group/issues_analytics/ @msedlakjakubowski
@@ -918,19 +915,19 @@ lib/gitlab/checks/**
/doc/user/profile/notifications.md @msedlakjakubowski
/doc/user/profile/personal_access_tokens.md @jglassman1
/doc/user/profile/user_passwords.md @jglassman1
-/doc/user/project/autocomplete_characters.md @aqualls @msedlakjakubowski
+/doc/user/project/autocomplete_characters.md @aqualls
/doc/user/project/badges.md @lciutacu
-/doc/user/project/changelogs.md @aqualls @msedlakjakubowski
+/doc/user/project/changelogs.md @aqualls
/doc/user/project/clusters/ @phillipwells
/doc/user/project/code_intelligence.md @aqualls
-/doc/user/project/codeowners/ @aqualls @msedlakjakubowski
+/doc/user/project/codeowners/ @aqualls
/doc/user/project/deploy_boards.md @phillipwells
/doc/user/project/deploy_keys/ @phillipwells
/doc/user/project/deploy_tokens/ @phillipwells
/doc/user/project/description_templates.md @msedlakjakubowski
-/doc/user/project/file_lock.md @aqualls @msedlakjakubowski
-/doc/user/project/git_attributes.md @aqualls @msedlakjakubowski
-/doc/user/project/highlighting.md @aqualls @msedlakjakubowski
+/doc/user/project/file_lock.md @aqualls
+/doc/user/project/git_attributes.md @aqualls
+/doc/user/project/highlighting.md @aqualls
/doc/user/project/import/ @eread @ashrafkhamis
/doc/user/project/import/jira.md @msedlakjakubowski
/doc/user/project/index.md @lciutacu
@@ -942,33 +939,29 @@ lib/gitlab/checks/**
/doc/user/project/labels.md @msedlakjakubowski
/doc/user/project/members/ @lciutacu
/doc/user/project/merge_requests/ @aqualls
-/doc/user/project/merge_requests/approvals/ @aqualls @msedlakjakubowski
-/doc/user/project/merge_requests/cherry_pick_changes.md @aqualls @msedlakjakubowski
/doc/user/project/merge_requests/csv_export.md @eread
-/doc/user/project/merge_requests/methods/ @aqualls @msedlakjakubowski
-/doc/user/project/merge_requests/squash_and_merge.md @aqualls @msedlakjakubowski
/doc/user/project/merge_requests/status_checks.md @eread
/doc/user/project/milestones/ @msedlakjakubowski
/doc/user/project/organize_work_with_projects.md @lciutacu
-/doc/user/project/protected_branches.md @aqualls @msedlakjakubowski
-/doc/user/project/protected_tags.md @aqualls @msedlakjakubowski
-/doc/user/project/push_options.md @aqualls @msedlakjakubowski
+/doc/user/project/protected_branches.md @aqualls
+/doc/user/project/protected_tags.md @aqualls
+/doc/user/project/push_options.md @aqualls
/doc/user/project/quick_actions.md @msedlakjakubowski
/doc/user/project/releases/ @phillipwells
/doc/user/project/releases/release_evidence.md @eread
/doc/user/project/remote_development/ @ashrafkhamis
-/doc/user/project/repository/ @aqualls @msedlakjakubowski
+/doc/user/project/repository/ @aqualls
/doc/user/project/repository/file_finder.md @ashrafkhamis
/doc/user/project/repository/managing_large_repositories.md @axil
/doc/user/project/repository/vscode.md @ashrafkhamis
/doc/user/project/repository/web_editor.md @ashrafkhamis
/doc/user/project/requirements/ @msedlakjakubowski
-/doc/user/project/service_desk.md @msedlakjakubowski
+/doc/user/project/service_desk/ @msedlakjakubowski
/doc/user/project/settings/import_export.md @eread @ashrafkhamis
/doc/user/project/settings/import_export_troubleshooting.md @eread @ashrafkhamis
/doc/user/project/settings/index.md @lciutacu
/doc/user/project/settings/project_access_tokens.md @jglassman1
-/doc/user/project/system_notes.md @aqualls @msedlakjakubowski
+/doc/user/project/system_notes.md @aqualls
/doc/user/project/time_tracking.md @msedlakjakubowski
/doc/user/project/web_ide/ @ashrafkhamis
/doc/user/project/working_with_projects.md @lciutacu
@@ -978,7 +971,7 @@ lib/gitlab/checks/**
/doc/user/search/ @ashrafkhamis
/doc/user/search/command_palette.md @sselhorn
/doc/user/shortcuts.md @ashrafkhamis
-/doc/user/snippets.md @aqualls @msedlakjakubowski
+/doc/user/snippets.md @aqualls
/doc/user/ssh.md @jglassman1
/doc/user/tasks.md @msedlakjakubowski
/doc/user/todos.md @msedlakjakubowski
diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml
index e20f211bd33..dc519aa803b 100644
--- a/.gitlab/ci/global.gitlab-ci.yml
+++ b/.gitlab/ci/global.gitlab-ci.yml
@@ -307,7 +307,7 @@
services:
- !reference [.zoekt-services, services]
- name: elasticsearch:7.17.6
- command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
+ command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false", "-E", "cluster.routing.allocation.disk.threshold_enabled=false"]
.use-pg12-es7-ee:
extends:
@@ -350,6 +350,7 @@
variables:
ES_SETTING_DISCOVERY_TYPE: "single-node"
ES_SETTING_XPACK_SECURITY_ENABLED: "false"
+ ES_SETTING_CLUSTER_ROUTING_ALLOCATION_DISK_THRESHOLD__ENABLED: "false"
.use-pg13-es8-ee:
extends:
@@ -383,7 +384,7 @@
- !reference [.zoekt-services, services]
- name: opensearchproject/opensearch:1.3.5
alias: elasticsearch
- command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
+ command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true", "-E", "cluster.routing.allocation.disk.threshold_enabled=false"]
.use-pg13-opensearch1-ee:
extends:
@@ -414,7 +415,7 @@
- !reference [.zoekt-services, services]
- name: opensearchproject/opensearch:2.2.1
alias: elasticsearch
- command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
+ command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true", "-E", "cluster.routing.allocation.disk.threshold_enabled=false"]
.use-pg13-opensearch2-ee:
extends:
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index a6d6351cee5..40b2f3f41d4 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -2756,8 +2756,6 @@
- "scripts/rspec_helpers.sh"
- <<: *if-merge-request
changes:
- - "gems/gitlab-rspec/**/*"
- - "gems/rspec_flaky/**/*"
- "scripts/flaky_examples/prune-old-flaky-examples"
###################
diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION
index 7c71d1e9f4c..dcd976bd2be 100644
--- a/GITLAB_KAS_VERSION
+++ b/GITLAB_KAS_VERSION
@@ -1 +1 @@
-v16.3.0-rc4
+v16.3.0-rc5
diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss
index 529f6acaf04..aee06a04351 100644
--- a/app/assets/stylesheets/framework/mixins.scss
+++ b/app/assets/stylesheets/framework/mixins.scss
@@ -474,3 +474,10 @@
margin-left: $gl-padding;
}
}
+
+@mixin btn-svg {
+ height: $gl-padding;
+ width: $gl-padding;
+ top: 0;
+ vertical-align: text-top;
+}
diff --git a/app/assets/stylesheets/page_bundles/profile.scss b/app/assets/stylesheets/page_bundles/profile.scss
index dfc86a73635..dbe82f583d1 100644
--- a/app/assets/stylesheets/page_bundles/profile.scss
+++ b/app/assets/stylesheets/page_bundles/profile.scss
@@ -1,5 +1,5 @@
@import 'mixins_and_variables_and_functions';
-@import 'framework/buttons';
+@import 'framework/mixins';
.edit-user {
.emoji-menu-toggle-button {
diff --git a/app/models/note.rb b/app/models/note.rb
index 92d4daeab3e..913d008003c 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -149,7 +149,7 @@ class Note < ApplicationRecord
scope :with_api_entity_associations, -> { preload(:note_diff_file, :author) }
scope :inc_relations_for_view, ->(noteable = nil) do
relations = [{ project: :group }, { author: :status }, :updated_by, :resolved_by,
- :award_emoji, { system_note_metadata: :description_version }, :suggestions]
+ :award_emoji, :note_metadata, { system_note_metadata: :description_version }, :suggestions]
if noteable.nil? || DiffNote.noteable_types.include?(noteable.class.name)
relations += [:note_diff_file, :diff_note_positions]
diff --git a/app/services/metrics/dashboard/gitlab_alert_embed_service.rb b/app/services/metrics/dashboard/gitlab_alert_embed_service.rb
deleted file mode 100644
index 6bf46fbc80e..00000000000
--- a/app/services/metrics/dashboard/gitlab_alert_embed_service.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-# frozen_string_literal: true
-
-# Responsible for returning an embed containing the specified
-# metrics chart for an alert. Creates panels based on the
-# matching metric stored in the database.
-#
-# Use Gitlab::Metrics::Dashboard::Finder to retrieve dashboards.
-module Metrics
- module Dashboard
- class GitlabAlertEmbedService < ::Metrics::Dashboard::BaseEmbedService
- include Gitlab::Metrics::Dashboard::Defaults
- include Gitlab::Utils::StrongMemoize
-
- SEQUENCE = [
- STAGES::PanelIdsInserter
- ].freeze
-
- class << self
- # Determines whether the provided params are sufficient
- # to uniquely identify a panel composed of user-defined
- # custom metrics from the DB.
- def valid_params?(params)
- [
- embedded?(params[:embedded]),
- params[:prometheus_alert_id].is_a?(Integer)
- ].all?
- end
- end
-
- def raw_dashboard
- panels_not_found!(alert_id: alert_id) unless alert && prometheus_metric
-
- { 'panel_groups' => [{ 'panels' => [panel] }] }
- end
-
- private
-
- def allowed?
- Ability.allowed?(current_user, :read_prometheus_alerts, project)
- end
-
- def alert_id
- params[:prometheus_alert_id]
- end
-
- def alert
- strong_memoize(:alert) do
- Projects::Prometheus::AlertsFinder.new(id: alert_id).execute.first
- end
- end
-
- def process_params
- params.merge(environment: alert.environment)
- end
-
- def prometheus_metric
- strong_memoize(:prometheus_metric) do
- PrometheusMetricsFinder.new(id: alert.prometheus_metric_id).execute.first
- end
- end
-
- def panel
- {
- title: prometheus_metric.title,
- y_label: prometheus_metric.y_label,
- metrics: [prometheus_metric.to_metric_hash],
- type: DEFAULT_PANEL_TYPE
- }
- end
-
- def sequence
- SEQUENCE
- end
- end
- end
-end
diff --git a/app/workers/integrations/group_mention_worker.rb b/app/workers/integrations/group_mention_worker.rb
index 6cde1657ccd..cbf70dc5c6a 100644
--- a/app/workers/integrations/group_mention_worker.rb
+++ b/app/workers/integrations/group_mention_worker.rb
@@ -22,19 +22,19 @@ module Integrations
mentionable = case mentionable_type
when 'Issue'
- Issue.find(mentionable_id)
+ Issue.find_by_id(mentionable_id)
when 'MergeRequest'
- MergeRequest.find(mentionable_id)
+ MergeRequest.find_by_id(mentionable_id)
+ else
+ Sidekiq.logger.error(
+ message: 'Integrations::GroupMentionWorker: mentionable not supported',
+ mentionable_type: mentionable_type,
+ mentionable_id: mentionable_id
+ )
+ nil
end
- if mentionable.nil?
- Sidekiq.logger.error(
- message: 'Integrations::GroupMentionWorker: mentionable not supported',
- mentionable_type: mentionable_type,
- mentionable_id: mentionable_id
- )
- return
- end
+ return if mentionable.nil?
Integrations::GroupMentionService.new(mentionable, hook_data: hook_data, is_confidential: is_confidential).execute
end
diff --git a/doc/administration/audit_event_streaming/audit_event_types.md b/doc/administration/audit_event_streaming/audit_event_types.md
index 1a2bf0df2d9..caef9ad08e0 100644
--- a/doc/administration/audit_event_streaming/audit_event_types.md
+++ b/doc/administration/audit_event_streaming/audit_event_types.md
@@ -27,6 +27,9 @@ Audit event types are used to [filter streamed audit events](index.md#update-eve
| [`audit_events_streaming_headers_create`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92068) | Triggered when a streaming header for audit events is created | **{check-circle}** Yes | **{check-circle}** Yes | `audit_events` | [15.3](https://gitlab.com/gitlab-org/gitlab/-/issues/366350) |
| [`audit_events_streaming_headers_destroy`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92068) | Triggered when a streaming header for audit events is deleted | **{check-circle}** Yes | **{check-circle}** Yes | `audit_events` | [15.3](https://gitlab.com/gitlab-org/gitlab/-/issues/366350) |
| [`audit_events_streaming_headers_update`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92068) | Triggered when a streaming header for audit events is updated | **{check-circle}** Yes | **{check-circle}** Yes | `compliance_management` | [15.3](https://gitlab.com/gitlab-org/gitlab/-/issues/366350) |
+| [`audit_events_streaming_instance_headers_create`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/125870) | Triggered when a streaming header for instance level external audit event destination is created | **{check-circle}** Yes | **{check-circle}** Yes | `audit_events` | [16.3](https://gitlab.com/gitlab-org/gitlab/-/issues/417433) |
+| [`audit_events_streaming_instance_headers_destroy`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127228) | Triggered when a streaming header for instance level external audit event destination is deleted | **{check-circle}** Yes | **{check-circle}** Yes | `audit_events` | [16.3](https://gitlab.com/gitlab-org/gitlab/-/issues/417433) |
+| [`audit_events_streaming_instance_headers_update`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127228) | Triggered when a streaming header for instance level external audit event destination is updated | **{check-circle}** Yes | **{check-circle}** Yes | `audit_events` | [16.3](https://gitlab.com/gitlab-org/gitlab/-/issues/417433) |
| [`authenticated_with_group_saml`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28575) | Triggered after successfully signing in with SAML authentication | **{check-circle}** Yes | **{check-circle}** Yes | `user_management` | [12.10](https://gitlab.com/gitlab-org/gitlab/-/issues/35710) |
| [`ban_user`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/116103) | Event triggered on user ban action | **{check-circle}** Yes | **{check-circle}** Yes | `user_management` | [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/377620) |
| [`change_membership_state`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87924) | Event triggered on a users membership is updated | **{check-circle}** Yes | **{check-circle}** Yes | `user_management` | [15.1](https://gitlab.com/gitlab-org/gitlab/-/issues/362200) |
@@ -91,6 +94,7 @@ Audit event types are used to [filter streamed audit events](index.md#update-eve
| [`group_access_token_creation_failed`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92225) | Event triggered on failing to create a group access token | **{check-circle}** Yes | **{check-circle}** Yes | `subgroup` | [15.2](https://gitlab.com/gitlab-org/gitlab/-/issues/363087) |
| [`group_access_token_deleted`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92225) | Event triggered on deleting a group access token | **{check-circle}** Yes | **{check-circle}** Yes | `subgroup` | [15.2](https://gitlab.com/gitlab-org/gitlab/-/issues/363087) |
| [`group_access_token_deletion_failed`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92225) | Event triggered on failure to delete a group access token | **{check-circle}** Yes | **{check-circle}** Yes | `subgroup` | [15.2](https://gitlab.com/gitlab-org/gitlab/-/issues/363087) |
+| [`group_created`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121005) | Event triggered when a group is created. | **{check-circle}** Yes | **{check-circle}** Yes | `groups_and_projects` | [16.3](https://gitlab.com/gitlab-org/gitlab/-/issues/411595) |
| [`group_deletion_marked`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/116986) | Event triggered when a group is marked for deletion. | **{check-circle}** Yes | **{check-circle}** Yes | `compliance_management` | [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374106) |
| [`group_deploy_token_created`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/93091) | Audit event triggered when a groups deploy token is created | **{check-circle}** Yes | **{check-circle}** Yes | `continuous_delivery` | [15.3](https://gitlab.com/gitlab-org/gitlab/-/issues/363087) |
| [`group_deploy_token_creation_failed`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/93091) | Audit event triggered when a groups deploy token fails to create | **{check-circle}** Yes | **{check-circle}** Yes | `continuous_delivery` | [15.3](https://gitlab.com/gitlab-org/gitlab/-/issues/363087) |
diff --git a/doc/administration/audit_event_streaming/graphql_api.md b/doc/administration/audit_event_streaming/graphql_api.md
index 2bfb8353710..f69ccdacdaf 100644
--- a/doc/administration/audit_event_streaming/graphql_api.md
+++ b/doc/administration/audit_event_streaming/graphql_api.md
@@ -309,6 +309,8 @@ Event type filters are removed if:
Manage Google Cloud Logging destinations for top-level groups.
+Before setting up Google Cloud Logging streaming audit events, you must satisfy [the prerequisites](index.md#prerequisites).
+
#### Add a new Google Cloud Logging destination
Add a new Google Cloud Logging configuration destination to a top-level group.
diff --git a/doc/administration/audit_event_streaming/index.md b/doc/administration/audit_event_streaming/index.md
index 9cc70f4b701..df1d146062b 100644
--- a/doc/administration/audit_event_streaming/index.md
+++ b/doc/administration/audit_event_streaming/index.md
@@ -186,11 +186,13 @@ To override the `content-type` header default value for a top-level group stream
Manage Google Cloud Logging destinations for top-level groups.
+#### Prerequisites
+
Before setting up Google Cloud Logging streaming audit events, you must:
1. Create a service account for Google Cloud with the appropriate credentials and permissions. This account is used to configure audit log streaming authentication.
For more information, see [Creating and managing service accounts in the Google Cloud documentation](https://cloud.google.com/iam/docs/service-accounts-create#creating).
-1. Enable the **Logging Admin** role for the service account to enable logging on Google Cloud. For more information, see [Access control with IAM](https://cloud.google.com/logging/docs/access-control#permissions_and_roles).
+1. Enable the **Logs Writer** role for the service account to enable logging on Google Cloud. For more information, see [Access control with IAM](https://cloud.google.com/logging/docs/access-control#logging.logWriter).
1. Create a JSON key for the service account. For more information, see [Creating a service account key](https://cloud.google.com/iam/docs/keys-create-delete#creating).
#### Add a new Google Cloud Logging destination
diff --git a/doc/ci/docker/using_docker_build.md b/doc/ci/docker/using_docker_build.md
index 97b4b6a428b..57e05cadca4 100644
--- a/doc/ci/docker/using_docker_build.md
+++ b/doc/ci/docker/using_docker_build.md
@@ -91,7 +91,7 @@ You should use Docker-in-Docker with TLS enabled,
which is supported by [GitLab.com shared runners](../runners/index.md).
You should always pin a specific version of the image, like `docker:20.10.16`.
-If you use a tag like `docker:stable`, you have no control over which version is used.
+If you use a tag like `docker:latest`, you have no control over which version is used.
This can cause incompatibility problems when new versions are released.
#### Use the Docker executor with Docker-in-Docker
diff --git a/doc/ci/services/index.md b/doc/ci/services/index.md
index f4c90934e06..ce9b322ff9b 100644
--- a/doc/ci/services/index.md
+++ b/doc/ci/services/index.md
@@ -48,7 +48,7 @@ socket or `localhost`. Read more in [accessing the services](#accessing-the-serv
## How the health check of services works
Services are designed to provide additional features which are **network accessible**.
-They may be a database like MySQL, or Redis, and even `docker:stable-dind` which
+They may be a database like MySQL, or Redis, and even `docker:dind` which
allows you to use Docker-in-Docker. It can be practically anything that's
required for the CI/CD job to proceed, and is accessed by network.
diff --git a/doc/ci/testing/code_quality.md b/doc/ci/testing/code_quality.md
index 9a45c840d54..97a21ab57b7 100644
--- a/doc/ci/testing/code_quality.md
+++ b/doc/ci/testing/code_quality.md
@@ -136,7 +136,7 @@ To use private runners:
```shell
$ gitlab-runner register --executor "docker" \
- --docker-image="docker:stable" \
+ --docker-image="docker:latest" \
--url "https://gitlab.com/" \
--description "cq-sans-dind" \
--tag-list "cq-sans-dind" \
@@ -171,7 +171,7 @@ To use private runners:
builds_dir = "/tmp/builds"
[runners.docker]
tls_verify = false
- image = "docker:stable"
+ image = "docker:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
diff --git a/doc/development/documentation/styleguide/index.md b/doc/development/documentation/styleguide/index.md
index 2d5963f82cc..f5d2ce73086 100644
--- a/doc/development/documentation/styleguide/index.md
+++ b/doc/development/documentation/styleguide/index.md
@@ -446,17 +446,23 @@ When the docs are generated, the output is:
To stop the command, press Control+C.
+### Buttons in the UI
+
+For elements with a visible label, use the label in bold with matching case.
+
+For example: `Select **Cancel**.`
+
### Text entered in the UI
If you want the user to type something in the UI, use backticks. For example:
```plaintext
-In the **Commit message** box, type `This is my merge request`.
+In the **Commit message** text box, type `This is my merge request`.
```
Backticks are more precise than quotes. For example, in this string:
-- In the **Commit message** box, type "This is my merge request."
+- In the **Commit message** text box, type "This is my merge request."
It's not clear whether the user should include the period in the string.
@@ -1552,20 +1558,6 @@ Do not copy and paste content from other sources unless it is a limited
quotation with the source cited. Typically it is better to rephrase
relevant information in your own words or link out to the other source.
-## Terms
-
-To maintain consistency through GitLab documentation, use these styles and terms.
-
-### Describe UI elements
-
-Follow these styles when you're describing user interface elements in an
-application:
-
-- For elements with a visible label, use that label in bold with matching case.
- For example, `Select **Cancel**`.
-- For elements with a tooltip or hover label, use that label in bold with
- matching case. For example, `Select **Add status emoji**`.
-
## Products and features
Refer to the information in this section when describing products and features
@@ -1871,8 +1863,3 @@ It renders as:
```
::EndTabs
-
-## Feature flags
-
-Learn how to [document features deployed behind flags](../feature_flags.md). For
-guidance on developing GitLab with feature flags, see [Feature flags in development of GitLab](../../feature_flags/index.md).
diff --git a/doc/user/application_security/container_scanning/index.md b/doc/user/application_security/container_scanning/index.md
index 791a73bfdc2..3cdd501101b 100644
--- a/doc/user/application_security/container_scanning/index.md
+++ b/doc/user/application_security/container_scanning/index.md
@@ -602,7 +602,7 @@ variables:
SOURCE_IMAGE: registry.gitlab.com/security-products/container-scanning:6
TARGET_IMAGE: $CI_REGISTRY/namespace/container-scanning
-image: docker:stable
+image: docker:latest
update-scanner-image:
services:
diff --git a/lib/gitlab/database/schema_validation/schema_inconsistency.rb b/lib/gitlab/database/schema_validation/schema_inconsistency.rb
deleted file mode 100644
index 9f39db5b4c0..00000000000
--- a/lib/gitlab/database/schema_validation/schema_inconsistency.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Database
- module SchemaValidation
- class SchemaInconsistency < ApplicationRecord
- self.table_name = :schema_inconsistencies
-
- belongs_to :issue
-
- validates :object_name, :valitador_name, :table_name, :diff, presence: true
-
- scope :with_open_issues, -> { joins(:issue).where('issue.state_id': Issue.available_states[:opened]) }
- end
- end
- end
-end
diff --git a/lib/gitlab/metrics/dashboard/service_selector.rb b/lib/gitlab/metrics/dashboard/service_selector.rb
index 6f366193159..9fb10d6a0bd 100644
--- a/lib/gitlab/metrics/dashboard/service_selector.rb
+++ b/lib/gitlab/metrics/dashboard/service_selector.rb
@@ -13,7 +13,6 @@ module Gitlab
include Gitlab::Utils::StrongMemoize
SERVICES = [
- ::Metrics::Dashboard::GitlabAlertEmbedService,
::Metrics::Dashboard::CustomMetricEmbedService,
::Metrics::Dashboard::DefaultEmbedService,
::Metrics::Dashboard::SystemDashboardService
diff --git a/lib/tasks/gitlab/tw/codeowners.rake b/lib/tasks/gitlab/tw/codeowners.rake
index afe2c564247..68393cb31d2 100644
--- a/lib/tasks/gitlab/tw/codeowners.rake
+++ b/lib/tasks/gitlab/tw/codeowners.rake
@@ -71,7 +71,7 @@ namespace :tw do
CodeOwnerRule.new('Runner', '@fneill'),
CodeOwnerRule.new('Runner SaaS', '@fneill'),
CodeOwnerRule.new('Security Policies', '@rdickenson'),
- CodeOwnerRule.new('Source Code', '@aqualls @msedlakjakubowski'),
+ CodeOwnerRule.new('Source Code', ->(path) { path.start_with?('/doc/user') ? '@aqualls' : '@msedlakjakubowski' }),
CodeOwnerRule.new('Static Analysis', '@rdickenson'),
CodeOwnerRule.new('Style Guide', '@sselhorn'),
CodeOwnerRule.new('Tenant Scale', '@lciutacu'),
@@ -100,8 +100,14 @@ namespace :tw do
end
end
- def self.writer_for_group(category)
- CODE_OWNER_RULES.find { |rule| rule.category == category }&.writer
+ def self.writer_for_group(category, path)
+ writer = CODE_OWNER_RULES.find { |rule| rule.category == category }&.writer
+
+ if writer.is_a?(String) || writer.nil?
+ writer
+ else
+ writer.call(path)
+ end
end
errors = []
@@ -118,7 +124,7 @@ namespace :tw do
next
end
- writer = writer_for_group(document.group)
+ writer = writer_for_group(document.group, relative_file)
next unless writer
mappings << DocumentOwnerMapping.new(relative_file, writer) if document.has_a_valid_group?
diff --git a/spec/factories/gitlab/database/background_migration/schema_inconsistencies.rb b/spec/factories/gitlab/database/background_migration/schema_inconsistencies.rb
deleted file mode 100644
index 1d2c460144d..00000000000
--- a/spec/factories/gitlab/database/background_migration/schema_inconsistencies.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# frozen_string_literal: true
-
-FactoryBot.define do
- factory :schema_inconsistency, class: '::Gitlab::Database::SchemaValidation::SchemaInconsistency' do
- issue factory: :issue
-
- object_name { 'name' }
- table_name { 'table' }
- valitador_name { 'validator' }
- diff { 'diff' }
- end
-end
diff --git a/spec/lib/gitlab/database/schema_validation/schema_inconsistency_spec.rb b/spec/lib/gitlab/database/schema_validation/schema_inconsistency_spec.rb
deleted file mode 100644
index fbaf8474f22..00000000000
--- a/spec/lib/gitlab/database/schema_validation/schema_inconsistency_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Database::SchemaValidation::SchemaInconsistency, type: :model, feature_category: :database do
- it { is_expected.to be_a ApplicationRecord }
-
- describe 'associations' do
- it { is_expected.to belong_to(:issue) }
- end
-
- describe "Validations" do
- it { is_expected.to validate_presence_of(:object_name) }
- it { is_expected.to validate_presence_of(:valitador_name) }
- it { is_expected.to validate_presence_of(:table_name) }
- it { is_expected.to validate_presence_of(:diff) }
- end
-
- describe 'scopes' do
- describe '.with_open_issues' do
- subject(:inconsistencies) { described_class.with_open_issues }
-
- let(:closed_issue) { create(:issue, :closed) }
- let(:open_issue) { create(:issue, :opened) }
-
- let!(:schema_inconsistency_with_issue_closed) do
- create(:schema_inconsistency, object_name: 'index_name', table_name: 'achievements',
- valitador_name: 'different_definition_indexes', issue: closed_issue)
- end
-
- let!(:schema_inconsistency_with_issue_opened) do
- create(:schema_inconsistency, object_name: 'index_name', table_name: 'achievements',
- valitador_name: 'different_definition_indexes', issue: open_issue)
- end
-
- it 'returns only schema inconsistencies with GitLab issues open' do
- expect(inconsistencies).to eq([schema_inconsistency_with_issue_opened])
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb b/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb
index 31d029a9c1d..dcaaa5873c8 100644
--- a/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb
+++ b/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb
@@ -44,12 +44,6 @@ RSpec.describe Gitlab::Metrics::Dashboard::ServiceSelector do
it { is_expected.to be Metrics::Dashboard::CustomMetricEmbedService }
end
-
- context 'when metrics embed is for an alert' do
- let(:arguments) { { embedded: true, prometheus_alert_id: 5 } }
-
- it { is_expected.to be Metrics::Dashboard::GitlabAlertEmbedService }
- end
end
end
end
diff --git a/spec/requests/projects/merge_requests_discussions_spec.rb b/spec/requests/projects/merge_requests_discussions_spec.rb
index 644f26af006..24b6fb2f640 100644
--- a/spec/requests/projects/merge_requests_discussions_spec.rb
+++ b/spec/requests/projects/merge_requests_discussions_spec.rb
@@ -27,19 +27,15 @@ RSpec.describe 'merge requests discussions', feature_category: :source_code_mana
end
# rubocop:enable RSpec/InstanceVariable
- shared_examples 'N+1 queries' do
- it 'avoids N+1 DB queries', :request_store do
- send_request # warm up
+ it 'avoids N+1 DB queries', :request_store do
+ send_request # warm up
- create(:diff_note_on_merge_request, noteable: merge_request, project: merge_request.project)
- control = ActiveRecord::QueryRecorder.new { send_request }
+ create(:diff_note_on_merge_request, noteable: merge_request, project: merge_request.project)
+ control = ActiveRecord::QueryRecorder.new { send_request }
- create(:diff_note_on_merge_request, noteable: merge_request, project: merge_request.project)
+ create(:diff_note_on_merge_request, noteable: merge_request, project: merge_request.project)
- expect do
- send_request
- end.not_to exceed_query_limit(control).with_threshold(notes_metadata_threshold)
- end
+ expect { send_request }.not_to exceed_query_limit(control)
end
it 'returns 200' do
@@ -48,13 +44,6 @@ RSpec.describe 'merge requests discussions', feature_category: :source_code_mana
expect(response).to have_gitlab_http_status(:ok)
end
- # https://docs.gitlab.com/ee/development/query_recorder.html#use-request-specs-instead-of-controller-specs
- context 'with notes_metadata_threshold' do
- let(:notes_metadata_threshold) { 1 }
-
- it_behaves_like 'N+1 queries'
- end
-
it 'limits Gitaly queries', :request_store do
Gitlab::GitalyClient.allow_n_plus_1_calls do
create_list(:diff_note_on_merge_request, 7, noteable: merge_request, project: merge_request.project)
diff --git a/spec/requests/projects/notes_controller_spec.rb b/spec/requests/projects/notes_controller_spec.rb
new file mode 100644
index 00000000000..9cd8ba364ea
--- /dev/null
+++ b/spec/requests/projects/notes_controller_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Projects::NotesController, feature_category: :team_planning do
+ let_it_be(:project) { create(:project, :public) }
+ let_it_be(:issue) { create(:issue, project: project) }
+
+ describe '#index' do
+ def get_notes
+ get project_noteable_notes_path(project, target_type: 'issue', target_id: issue.id, format: :json),
+ headers: { 'X-Last-Fetched-At': 0 }
+ end
+
+ it 'does not execute N+1 queries' do
+ get_notes
+
+ create(:note_on_issue, project: project, noteable: issue)
+
+ control = ActiveRecord::QueryRecorder.new { get_notes }
+
+ create(:note_on_issue, project: project, noteable: issue)
+
+ expect { get_notes }.not_to exceed_query_limit(control)
+ end
+ end
+end
diff --git a/spec/services/metrics/dashboard/gitlab_alert_embed_service_spec.rb b/spec/services/metrics/dashboard/gitlab_alert_embed_service_spec.rb
deleted file mode 100644
index 25812a492b2..00000000000
--- a/spec/services/metrics/dashboard/gitlab_alert_embed_service_spec.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Metrics::Dashboard::GitlabAlertEmbedService, feature_category: :metrics do
- include MetricsDashboardHelpers
-
- let_it_be(:alert) { create(:prometheus_alert) }
- let_it_be(:project) { alert.project }
- let_it_be(:user) { create(:user) }
-
- let(:alert_id) { alert.id }
-
- before_all do
- project.add_maintainer(user)
- end
-
- describe '.valid_params?' do
- let(:valid_params) do
- {
- embedded: true,
- prometheus_alert_id: alert_id
- }
- end
-
- subject { described_class.valid_params?(params) }
-
- let(:params) { valid_params }
-
- it { is_expected.to be_truthy }
-
- context 'missing embedded' do
- let(:params) { valid_params.except(:embedded) }
-
- it { is_expected.to be_falsey }
- end
-
- context 'not embedded' do
- let(:params) { valid_params.merge(embedded: 'false') }
-
- it { is_expected.to be_falsey }
- end
-
- context 'missing alert id' do
- let(:params) { valid_params.except(:prometheus_alert_id) }
-
- it { is_expected.to be_falsey }
- end
-
- context 'missing alert id' do
- let(:params) { valid_params.merge(prometheus_alert_id: 'none') }
-
- it { is_expected.to be_falsey }
- end
- end
-
- describe '#get_dashboard' do
- let(:service_params) do
- [
- project,
- user,
- {
- embedded: true,
- prometheus_alert_id: alert_id
- }
- ]
- end
-
- let(:service_call) { described_class.new(*service_params).get_dashboard }
-
- context 'when alerting is available' do
- it_behaves_like 'valid embedded dashboard service response'
- it_behaves_like 'raises error for users with insufficient permissions'
-
- it 'generates an panel based on the alert' do
- result = service_call
- panel = result[:dashboard][:panel_groups][0][:panels][0]
- metric = panel[:metrics].first
-
- expect(panel[:metrics].length).to eq 1
- expect(panel).to include(
- title: alert.prometheus_metric.title,
- y_label: alert.prometheus_metric.y_label,
- type: 'area-chart'
- )
- expect(metric[:metric_id]).to eq alert.prometheus_metric_id
- end
-
- context 'when the metric does not exist' do
- let(:alert_id) { -4 }
-
- it_behaves_like 'misconfigured dashboard service response', :not_found
- end
-
- it 'does not cache the unprocessed dashboard' do
- # Fail spec if any method of Cache class is called.
- stub_const('Gitlab::Metrics::Dashboard::Cache', double)
-
- described_class.new(*service_params).get_dashboard
- end
- end
- end
-end
diff --git a/spec/workers/integrations/group_mention_worker_spec.rb b/spec/workers/integrations/group_mention_worker_spec.rb
index 111e3f5a107..e79b654184d 100644
--- a/spec/workers/integrations/group_mention_worker_spec.rb
+++ b/spec/workers/integrations/group_mention_worker_spec.rb
@@ -37,12 +37,10 @@ RSpec.describe Integrations::GroupMentionWorker, :clean_gitlab_redis_shared_stat
context 'when mentionable_type is not supported' do
let(:args) do
- {
+ super().merge(
mentionable_type: 'Unsupported',
- mentionable_id: 23,
- hook_data: {},
- is_confidential: false
- }
+ mentionable_id: 23
+ )
end
it 'does not execute the service' do
@@ -61,5 +59,15 @@ RSpec.describe Integrations::GroupMentionWorker, :clean_gitlab_redis_shared_stat
worker.perform(args)
end
end
+
+ context 'when mentionable cannot be found' do
+ let(:args) { super().merge(mentionable_id: non_existing_record_id) }
+
+ it 'does not execute the service' do
+ expect(service_class).not_to receive(:new)
+
+ worker.perform(args)
+ end
+ end
end
end