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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.rubocop_todo/rspec/missing_feature_category.yml9138
-rw-r--r--app/assets/javascripts/ci/runner/admin_runner_show/admin_runner_show_app.vue69
-rw-r--r--app/assets/javascripts/ci/runner/components/runner_details_tabs.vue95
-rw-r--r--app/assets/javascripts/ci/runner/group_runner_show/group_runner_show_app.vue8
-rw-r--r--app/assets/javascripts/ci/runner/group_runner_show/index.js2
-rw-r--r--app/assets/javascripts/ide/stores/actions.js3
-rw-r--r--app/assets/javascripts/invite_members/components/invite_members_modal.vue1
-rw-r--r--app/assets/javascripts/invite_members/components/invite_modal_base.vue27
-rw-r--r--app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue79
-rw-r--r--app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql2
-rw-r--r--app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql54
-rw-r--r--app/assets/javascripts/issues/dashboard/queries/issue.fragment.graphql56
-rw-r--r--app/assets/javascripts/issues/list/constants.js1
-rw-r--r--app/assets/javascripts/milestones/components/delete_milestone_modal.vue4
-rw-r--r--app/assets/javascripts/related_issues/components/related_issues_root.vue3
-rw-r--r--app/assets/javascripts/token_access/components/opt_in_jwt.vue125
-rw-r--r--app/assets/javascripts/token_access/components/token_access.vue3
-rw-r--r--app/assets/javascripts/token_access/graphql/mutations/update_opt_in_jwt.mutation.graphql8
-rw-r--r--app/assets/javascripts/token_access/graphql/queries/get_opt_in_jwt_setting.query.graphql8
-rw-r--r--app/assets/javascripts/work_items/components/work_item_detail.vue2
-rw-r--r--app/controllers/autocomplete_controller.rb2
-rw-r--r--app/controllers/dashboard_controller.rb2
-rw-r--r--app/controllers/profiles/avatars_controller.rb2
-rw-r--r--app/controllers/profiles/emails_controller.rb2
-rw-r--r--app/controllers/profiles/groups_controller.rb2
-rw-r--r--app/controllers/profiles/keys_controller.rb2
-rw-r--r--app/controllers/profiles/preferences_controller.rb2
-rw-r--r--app/controllers/profiles_controller.rb2
-rw-r--r--app/controllers/projects/autocomplete_sources_controller.rb2
-rw-r--r--app/controllers/projects/learn_gitlab_controller.rb2
-rw-r--r--app/controllers/users/unsubscribes_controller.rb2
-rw-r--r--app/controllers/users_controller.rb2
-rw-r--r--app/models/analytics/cycle_analytics/project_stage.rb13
-rw-r--r--app/models/application_setting.rb1
-rw-r--r--app/models/ci/pipeline.rb4
-rw-r--r--app/models/concerns/analytics/cycle_analytics/stageable.rb5
-rw-r--r--app/models/deployment.rb21
-rw-r--r--app/models/project_authorization.rb12
-rw-r--r--app/models/user.rb9
-rw-r--r--app/services/ci/pipeline_creation/cancel_redundant_pipelines_service.rb88
-rw-r--r--app/services/search/project_service.rb4
-rw-r--r--app/services/search_service.rb2
-rw-r--r--app/views/groups/runners/show.html.haml3
-rw-r--r--app/views/shared/doorkeeper/applications/_delete_form.html.haml6
-rw-r--r--app/views/shared/doorkeeper/applications/_show.html.haml2
-rw-r--r--app/workers/all_queues.yml19
-rw-r--r--app/workers/approve_blocked_pending_approval_users_worker.rb2
-rw-r--r--app/workers/ci/cancel_redundant_pipelines_worker.rb21
-rw-r--r--app/workers/prune_old_events_worker.rb2
-rw-r--r--app/workers/user_status_cleanup/batch_worker.rb2
-rw-r--r--app/workers/users/create_statistics_worker.rb2
-rw-r--r--app/workers/users/migrate_records_to_ghost_user_in_batches_worker.rb2
-rw-r--r--config/feature_categories.yml2
-rw-r--r--config/feature_flags/development/improve_deployment_hooksworker_serialization.yml8
-rw-r--r--config/feature_flags/development/improved_spread_parallel_import.yml8
-rw-r--r--config/feature_flags/development/move_cancel_pending_pipelines_to_async.yml8
-rw-r--r--config/sidekiq_queues.yml2
-rw-r--r--danger/qa_selector/Dangerfile29
-rw-r--r--db/docs/achievements.yml2
-rw-r--r--db/docs/emails.yml2
-rw-r--r--db/docs/events.yml2
-rw-r--r--db/docs/ghost_user_migrations.yml2
-rw-r--r--db/docs/push_event_payloads.yml2
-rw-r--r--db/docs/routes.yml2
-rw-r--r--db/docs/user_achievements.yml2
-rw-r--r--db/docs/user_custom_attributes.yml2
-rw-r--r--db/docs/user_details.yml2
-rw-r--r--db/docs/user_follow_users.yml2
-rw-r--r--db/docs/user_preferences.yml2
-rw-r--r--db/docs/user_statuses.yml2
-rw-r--r--db/docs/users.yml2
-rw-r--r--db/migrate/20221216145659_add_pa_clickhouse_connection_string_to_application_settings.rb7
-rw-r--r--db/migrate/20221219122320_copy_clickhouse_connection_string_to_encrypted_var.rb25
-rw-r--r--db/schema_migrations/202212161456591
-rw-r--r--db/schema_migrations/202212191223201
-rw-r--r--db/structure.sql2
-rw-r--r--doc/api/bulk_imports.md18
-rw-r--r--doc/api/settings.md2
-rw-r--r--doc/development/bulk_import.md8
-rw-r--r--doc/development/feature_categorization/index.md6
-rw-r--r--doc/development/internal_api/index.md3
-rw-r--r--doc/user/admin_area/settings/visibility_and_access_controls.md8
-rw-r--r--doc/user/analytics/merge_request_analytics.md28
-rw-r--r--doc/user/group/import/index.md5
-rw-r--r--lib/api/avatar.rb2
-rw-r--r--lib/api/events.rb2
-rw-r--r--lib/api/invitations.rb2
-rw-r--r--lib/api/project_events.rb2
-rw-r--r--lib/api/users.rb52
-rw-r--r--lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb46
-rw-r--r--lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb4
-rw-r--r--lib/gitlab/github_import/parallel_scheduling.rb51
-rw-r--r--lib/gitlab/job_waiter.rb4
-rw-r--r--lib/gitlab/memory/reporter.rb4
-rw-r--r--locale/gitlab.pot18
-rw-r--r--rubocop/cop/rspec/missing_feature_category.rb44
-rw-r--r--spec/features/admin/admin_runners_spec.rb7
-rw-r--r--spec/features/groups/group_runners_spec.rb13
-rw-r--r--spec/frontend/captcha/captcha_modal_axios_interceptor_spec.js2
-rw-r--r--spec/frontend/ci/runner/admin_runner_show/admin_runner_show_app_spec.js108
-rw-r--r--spec/frontend/ci/runner/components/runner_details_tabs_spec.js127
-rw-r--r--spec/frontend/ci/runner/group_runner_show/group_runner_show_app_spec.js40
-rw-r--r--spec/frontend/diffs/store/actions_spec.js4
-rw-r--r--spec/frontend/ide/stores/actions_spec.js4
-rw-r--r--spec/frontend/ide/stores/modules/pipelines/actions_spec.js4
-rw-r--r--spec/frontend/invite_members/components/invite_modal_base_spec.js40
-rw-r--r--spec/frontend/issues/dashboard/components/issues_dashboard_app_spec.js66
-rw-r--r--spec/frontend/issues/dashboard/mock_data.js17
-rw-r--r--spec/frontend/lib/utils/apollo_startup_js_link_spec.js3
-rw-r--r--spec/frontend/projects/compare/components/revision_dropdown_legacy_spec.js3
-rw-r--r--spec/frontend/projects/compare/components/revision_dropdown_spec.js5
-rw-r--r--spec/frontend/ref/components/ref_selector_spec.js5
-rw-r--r--spec/frontend/token_access/mock_data.js26
-rw-r--r--spec/frontend/token_access/opt_in_jwt_spec.js126
-rw-r--r--spec/frontend/token_access/token_access_spec.js17
-rw-r--r--spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js5
-rw-r--r--spec/frontend/vue_shared/security_reports/store/modules/secret_detection/actions_spec.js5
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/routes/404.js3
-rw-r--r--spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb3
-rw-r--r--spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb24
-rw-r--r--spec/lib/gitlab/git_access_spec.rb2
-rw-r--r--spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb10
-rw-r--r--spec/lib/gitlab/github_import/importer/issue_events_importer_spec.rb10
-rw-r--r--spec/lib/gitlab/github_import/importer/issues_importer_spec.rb12
-rw-r--r--spec/lib/gitlab/github_import/importer/lfs_objects_importer_spec.rb10
-rw-r--r--spec/lib/gitlab/github_import/importer/notes_importer_spec.rb10
-rw-r--r--spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb12
-rw-r--r--spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb20
-rw-r--r--spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb13
-rw-r--r--spec/lib/gitlab/github_import/parallel_scheduling_spec.rb69
-rw-r--r--spec/lib/gitlab/import_export/project/tree_restorer_spec.rb2
-rw-r--r--spec/lib/gitlab/job_waiter_spec.rb10
-rw-r--r--spec/lib/gitlab/middleware/go_spec.rb2
-rw-r--r--spec/lib/gitlab/sidekiq_death_handler_spec.rb4
-rw-r--r--spec/migrations/20221219122320_copy_clickhouse_connection_string_to_encrypted_var_spec.rb19
-rw-r--r--spec/models/analytics/cycle_analytics/project_stage_spec.rb8
-rw-r--r--spec/models/ci/build_spec.rb19
-rw-r--r--spec/models/concerns/ci/has_status_spec.rb2
-rw-r--r--spec/models/concerns/noteable_spec.rb2
-rw-r--r--spec/models/deployment_spec.rb84
-rw-r--r--spec/models/namespace_spec.rb2
-rw-r--r--spec/models/project_authorization_spec.rb12
-rw-r--r--spec/models/project_team_spec.rb2
-rw-r--r--spec/requests/api/api_spec.rb2
-rw-r--r--spec/rubocop/cop/rspec/missing_feature_category_spec.rb31
-rw-r--r--spec/services/ci/pipeline_creation/cancel_redundant_pipelines_service_spec.rb250
-rw-r--r--spec/services/merge_requests/build_service_spec.rb2
-rw-r--r--spec/services/quick_actions/interpret_service_spec.rb2
-rw-r--r--spec/services/todos/destroy/entity_leave_service_spec.rb2
-rw-r--r--spec/support/shared_examples/features/runners_shared_examples.rb16
-rw-r--r--spec/workers/ci/cancel_redundant_pipelines_worker_spec.rb54
151 files changed, 11174 insertions, 538 deletions
diff --git a/.rubocop_todo/rspec/missing_feature_category.yml b/.rubocop_todo/rspec/missing_feature_category.yml
new file mode 100644
index 00000000000..21a30917e13
--- /dev/null
+++ b/.rubocop_todo/rspec/missing_feature_category.yml
@@ -0,0 +1,9138 @@
+---
+RSpec/MissingFeatureCategory:
+ Details: grace period
+ Exclude:
+ - 'ee/spec/components/billing/plan_component_spec.rb'
+ - 'ee/spec/components/namespaces/free_user_cap/enforcement_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/free_user_cap/enforcement_at_limit_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/free_user_cap/non_owner_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/free_user_cap/notification_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/free_user_cap/usage_quota_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/free_user_cap/usage_quota_trial_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/storage/limit_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/storage/project_pre_enforcement_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/storage/subgroup_pre_enforcement_alert_component_spec.rb'
+ - 'ee/spec/components/namespaces/storage/user_pre_enforcement_alert_component_spec.rb'
+ - 'ee/spec/config/metrics/every_metric_definition_spec.rb'
+ - 'ee/spec/controllers/admin/application_settings_controller_spec.rb'
+ - 'ee/spec/controllers/admin/clusters_controller_spec.rb'
+ - 'ee/spec/controllers/admin/geo/nodes_controller_spec.rb'
+ - 'ee/spec/controllers/admin/geo/projects_controller_spec.rb'
+ - 'ee/spec/controllers/autocomplete_controller_spec.rb'
+ - 'ee/spec/controllers/dashboard_controller_spec.rb'
+ - 'ee/spec/controllers/ee/projects/autocomplete_sources_controller_spec.rb'
+ - 'ee/spec/controllers/profiles_controller_spec.rb'
+ - 'ee/spec/controllers/projects/merge_requests_controller_spec.rb'
+ - 'ee/spec/controllers/projects/pipelines_controller_spec.rb'
+ - 'ee/spec/controllers/projects/security/configuration_controller_spec.rb'
+ - 'ee/spec/controllers/projects_controller_spec.rb'
+ - 'ee/spec/controllers/users_controller_spec.rb'
+ - 'ee/spec/db/production/license_spec.rb'
+ - 'ee/spec/elastic/migrate/20201105181100_apply_max_analyzed_offset_spec.rb'
+ - 'ee/spec/elastic/migrate/20201116142400_add_new_data_to_issues_documents_spec.rb'
+ - 'ee/spec/elastic/migrate/20201123123400_migrate_issues_to_separate_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20210112165500_delete_issues_from_original_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20210127154600_remove_permissions_data_from_notes_documents_spec.rb'
+ - 'ee/spec/elastic/migrate/20210128163600_add_permissions_data_to_notes_documents_spec.rb'
+ - 'ee/spec/elastic/migrate/20210201104800_migrate_notes_to_separate_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20210421140400_add_new_data_to_merge_requests_documents_spec.rb'
+ - 'ee/spec/elastic/migrate/20210429154500_migrate_merge_requests_to_separate_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20210510113500_delete_merge_requests_from_original_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20210510143200_delete_notes_from_original_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20210623081800_add_upvotes_to_issues_spec.rb'
+ - 'ee/spec/elastic/migrate/20210722112500_add_upvotes_mappings_to_merge_requests_spec.rb'
+ - 'ee/spec/elastic/migrate/20210813134600_add_namespace_ancestry_to_issues_mapping_spec.rb'
+ - 'ee/spec/elastic/migrate/20210825110300_backfill_namespace_ancestry_for_issues_spec.rb'
+ - 'ee/spec/elastic/migrate/20210910094600_add_namespace_ancestry_ids_to_issues_mapping_spec.rb'
+ - 'ee/spec/elastic/migrate/20210910100000_redo_backfill_namespace_ancestry_ids_for_issues_spec.rb'
+ - 'ee/spec/elastic/migrate/20220118150500_delete_orphaned_commits_spec.rb'
+ - 'ee/spec/elastic/migrate/20220119120500_populate_commit_permissions_in_main_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20220512150000_pause_indexing_for_unsupported_es_versions_spec.rb'
+ - 'ee/spec/elastic/migrate/20220613120500_migrate_commits_to_separate_index_spec.rb'
+ - 'ee/spec/elastic/migrate/20220824123000_add_label_ids_and_schema_version_to_issues_mapping_spec.rb'
+ - 'ee/spec/elastic/migrate/20221026082700_backfill_users_spec.rb'
+ - 'ee/spec/elastic_integration/global_search_spec.rb'
+ - 'ee/spec/elastic_integration/repository_index_spec.rb'
+ - 'ee/spec/features/admin/admin_emails_spec.rb'
+ - 'ee/spec/features/admin/admin_settings_spec.rb'
+ - 'ee/spec/features/promotion_spec.rb'
+ - 'ee/spec/features/search/elastic/global_search_spec.rb'
+ - 'ee/spec/features/search/elastic/group_search_spec.rb'
+ - 'ee/spec/features/search/elastic/project_search_spec.rb'
+ - 'ee/spec/finders/analytics/cycle_analytics/stage_finder_spec.rb'
+ - 'ee/spec/finders/analytics/devops_adoption/enabled_namespaces_finder_spec.rb'
+ - 'ee/spec/finders/analytics/devops_adoption/snapshots_finder_spec.rb'
+ - 'ee/spec/finders/app_sec/fuzzing/coverage/corpuses_finder_spec.rb'
+ - 'ee/spec/finders/approval_rules/group_finder_spec.rb'
+ - 'ee/spec/finders/audit_event_finder_spec.rb'
+ - 'ee/spec/finders/auth/group_saml_identity_finder_spec.rb'
+ - 'ee/spec/finders/auth/provisioned_users_finder_spec.rb'
+ - 'ee/spec/finders/autocomplete/group_subgroups_finder_spec.rb'
+ - 'ee/spec/finders/autocomplete/project_invited_groups_finder_spec.rb'
+ - 'ee/spec/finders/autocomplete/vulnerabilities_autocomplete_finder_spec.rb'
+ - 'ee/spec/finders/billed_users_finder_spec.rb'
+ - 'ee/spec/finders/boards/boards_finder_spec.rb'
+ - 'ee/spec/finders/boards/epic_boards_finder_spec.rb'
+ - 'ee/spec/finders/boards/milestones_finder_spec.rb'
+ - 'ee/spec/finders/boards/users_finder_spec.rb'
+ - 'ee/spec/finders/clusters/environments_finder_spec.rb'
+ - 'ee/spec/finders/compliance_management/merge_requests/compliance_violations_finder_spec.rb'
+ - 'ee/spec/finders/concerns/epics/with_access_check_spec.rb'
+ - 'ee/spec/finders/custom_project_templates_finder_spec.rb'
+ - 'ee/spec/finders/dast/profiles_finder_spec.rb'
+ - 'ee/spec/finders/dast_scanner_profiles_finder_spec.rb'
+ - 'ee/spec/finders/dast_site_profiles_finder_spec.rb'
+ - 'ee/spec/finders/dast_site_validations_finder_spec.rb'
+ - 'ee/spec/finders/ee/alert_management/http_integrations_finder_spec.rb'
+ - 'ee/spec/finders/ee/autocomplete/users_finder_spec.rb'
+ - 'ee/spec/finders/ee/ci/daily_build_group_report_results_finder_spec.rb'
+ - 'ee/spec/finders/ee/clusters/agent_authorizations_finder_spec.rb'
+ - 'ee/spec/finders/ee/clusters/agents_finder_spec.rb'
+ - 'ee/spec/finders/ee/fork_targets_finder_spec.rb'
+ - 'ee/spec/finders/ee/group_members_finder_spec.rb'
+ - 'ee/spec/finders/ee/namespaces/projects_finder_spec.rb'
+ - 'ee/spec/finders/ee/projects_finder_spec.rb'
+ - 'ee/spec/finders/ee/user_recent_events_finder_spec.rb'
+ - 'ee/spec/finders/ee/work_items/work_items_finder_spec.rb'
+ - 'ee/spec/finders/epics/cross_hierarchy_ancestors_finder_spec.rb'
+ - 'ee/spec/finders/epics/cross_hierarchy_children_finder_spec.rb'
+ - 'ee/spec/finders/epics/with_issues_finder_spec.rb'
+ - 'ee/spec/finders/epics_finder_spec.rb'
+ - 'ee/spec/finders/geo/ci_secure_file_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/container_repository_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/dependency_proxy_blob_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/dependency_proxy_manifest_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/design_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/group_wiki_repository_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/lfs_object_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/merge_request_diff_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/package_file_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/pages_deployment_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/pipeline_artifact_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/project_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/project_registry_status_finder_spec.rb'
+ - 'ee/spec/finders/geo/repository_verification_finder_spec.rb'
+ - 'ee/spec/finders/geo/snippet_repository_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/terraform_state_version_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo/upload_registry_finder_spec.rb'
+ - 'ee/spec/finders/geo_node_finder_spec.rb'
+ - 'ee/spec/finders/gpg_keys_finder_spec.rb'
+ - 'ee/spec/finders/group_projects_finder_spec.rb'
+ - 'ee/spec/finders/group_saml_identity_finder_spec.rb'
+ - 'ee/spec/finders/groups_with_templates_finder_spec.rb'
+ - 'ee/spec/finders/incident_management/escalation_rules_finder_spec.rb'
+ - 'ee/spec/finders/incident_management/issuable_resource_links_finder_spec.rb'
+ - 'ee/spec/finders/incident_management/member_oncall_rotations_finder_spec.rb'
+ - 'ee/spec/finders/incident_management/oncall_rotations_finder_spec.rb'
+ - 'ee/spec/finders/incident_management/oncall_schedules_finder_spec.rb'
+ - 'ee/spec/finders/incident_management/oncall_users_finder_spec.rb'
+ - 'ee/spec/finders/issues_finder_spec.rb'
+ - 'ee/spec/finders/iterations/cadences_finder_spec.rb'
+ - 'ee/spec/finders/iterations_finder_spec.rb'
+ - 'ee/spec/finders/license_template_finder_spec.rb'
+ - 'ee/spec/finders/licenses_finder_spec.rb'
+ - 'ee/spec/finders/merge_requests/by_approvers_finder_spec.rb'
+ - 'ee/spec/finders/merge_requests_finder_spec.rb'
+ - 'ee/spec/finders/merge_trains_finder_spec.rb'
+ - 'ee/spec/finders/notes_finder_spec.rb'
+ - 'ee/spec/finders/productivity_analytics_finder_spec.rb'
+ - 'ee/spec/finders/projects/integrations/jira/by_ids_finder_spec.rb'
+ - 'ee/spec/finders/projects/integrations/jira/issues_finder_spec.rb'
+ - 'ee/spec/finders/scim_finder_spec.rb'
+ - 'ee/spec/finders/security/scan_execution_policies_finder_spec.rb'
+ - 'ee/spec/finders/security/scan_result_policies_finder_spec.rb'
+ - 'ee/spec/finders/security/training_providers/base_url_finder_spec.rb'
+ - 'ee/spec/finders/security/training_providers/kontra_url_finder_spec.rb'
+ - 'ee/spec/finders/security/training_providers/secure_code_warrior_url_finder_spec.rb'
+ - 'ee/spec/finders/security/training_urls_finder_spec.rb'
+ - 'ee/spec/finders/security/vulnerabilities_finder_spec.rb'
+ - 'ee/spec/finders/security/vulnerability_feedbacks_finder_spec.rb'
+ - 'ee/spec/finders/security/vulnerability_reads_finder_spec.rb'
+ - 'ee/spec/finders/snippets_finder_spec.rb'
+ - 'ee/spec/finders/software_license_policies_finder_spec.rb'
+ - 'ee/spec/finders/status_page/incident_comments_finder_spec.rb'
+ - 'ee/spec/finders/status_page/incidents_finder_spec.rb'
+ - 'ee/spec/finders/template_finder_spec.rb'
+ - 'ee/spec/finders/users_finder_spec.rb'
+ - 'ee/spec/finders/work_items/widgets/filters/status_spec.rb'
+ - 'ee/spec/frontend/fixtures/analytics/charts.rb'
+ - 'ee/spec/frontend/fixtures/analytics/devops_reports/devops_adoption/enabled_namespaces.rb'
+ - 'ee/spec/frontend/fixtures/analytics/metrics.rb'
+ - 'ee/spec/frontend/fixtures/analytics/value_streams.rb'
+ - 'ee/spec/frontend/fixtures/analytics/value_streams_code_stage.rb'
+ - 'ee/spec/frontend/fixtures/analytics/value_streams_issue_stage.rb'
+ - 'ee/spec/frontend/fixtures/analytics/value_streams_plan_stage.rb'
+ - 'ee/spec/frontend/fixtures/analytics/value_streams_review_stage.rb'
+ - 'ee/spec/frontend/fixtures/analytics/value_streams_staging_stage.rb'
+ - 'ee/spec/frontend/fixtures/analytics/value_streams_test_stage.rb'
+ - 'ee/spec/frontend/fixtures/codequality_report.rb'
+ - 'ee/spec/frontend/fixtures/dast_profiles.rb'
+ - 'ee/spec/frontend/fixtures/deployments.rb'
+ - 'ee/spec/frontend/fixtures/dora/metrics.rb'
+ - 'ee/spec/frontend/fixtures/epic.rb'
+ - 'ee/spec/frontend/fixtures/issues.rb'
+ - 'ee/spec/frontend/fixtures/merge_requests.rb'
+ - 'ee/spec/frontend/fixtures/namespace.rb'
+ - 'ee/spec/frontend/fixtures/on_demand_dast_scans.rb'
+ - 'ee/spec/frontend/fixtures/oncall_schedule.rb'
+ - 'ee/spec/frontend/fixtures/project_quality_summary.rb'
+ - 'ee/spec/frontend/fixtures/runner.rb'
+ - 'ee/spec/frontend/fixtures/saml_providers.rb'
+ - 'ee/spec/frontend/fixtures/search.rb'
+ - 'ee/spec/graphql/api/vulnerabilities_spec.rb'
+ - 'ee/spec/graphql/ee/mutations/boards/issues/issue_move_list_spec.rb'
+ - 'ee/spec/graphql/ee/mutations/boards/lists/create_spec.rb'
+ - 'ee/spec/graphql/ee/mutations/ci/project_ci_cd_settings_update_spec.rb'
+ - 'ee/spec/graphql/ee/mutations/concerns/mutations/resolves_issuable_spec.rb'
+ - 'ee/spec/graphql/ee/resolvers/board_list_issues_resolver_spec.rb'
+ - 'ee/spec/graphql/ee/resolvers/board_lists_resolver_spec.rb'
+ - 'ee/spec/graphql/ee/resolvers/namespace_projects_resolver_spec.rb'
+ - 'ee/spec/graphql/ee/resolvers/project_issues_resolver_spec.rb'
+ - 'ee/spec/graphql/ee/resolvers/work_items_resolver_spec.rb'
+ - 'ee/spec/graphql/ee/types/access_level_enum_spec.rb'
+ - 'ee/spec/graphql/ee/types/alert_management/http_integration_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/board_list_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/board_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/boards/board_issue_input_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/branch_protection_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/branch_protections/merge_access_level_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/branch_protections/push_access_level_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/branch_protections/unprotect_access_level_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/ci/pipeline_merge_request_type_enum_spec.rb'
+ - 'ee/spec/graphql/ee/types/clusters/agent_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/compliance_management/compliance_framework_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/environment_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/group_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/issuable_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/issue_sort_enum_spec.rb'
+ - 'ee/spec/graphql/ee/types/merge_request_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/milestone_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/mutation_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/namespace_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/notes/noteable_interface_spec.rb'
+ - 'ee/spec/graphql/ee/types/projects/branch_rule_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/projects/service_type_enum_spec.rb'
+ - 'ee/spec/graphql/ee/types/repository/blob_type_spec.rb'
+ - 'ee/spec/graphql/ee/types/todoable_interface_spec.rb'
+ - 'ee/spec/graphql/ee/types/user_merge_request_interaction_type_spec.rb'
+ - 'ee/spec/graphql/graphql_triggers_spec.rb'
+ - 'ee/spec/graphql/mutations/app_sec/fuzzing/api/ci_configuration/create_spec.rb'
+ - 'ee/spec/graphql/mutations/app_sec/fuzzing/coverage/corpus/create_spec.rb'
+ - 'ee/spec/graphql/mutations/audit_events/streaming/event_type_filters/create_spec.rb'
+ - 'ee/spec/graphql/mutations/audit_events/streaming/event_type_filters/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/audit_events/streaming/headers/create_spec.rb'
+ - 'ee/spec/graphql/mutations/audit_events/streaming/headers/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/epic_boards/create_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/epic_boards/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/epic_boards/epic_move_list_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/epic_boards/update_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/epic_lists/create_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/epic_lists/update_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/epics/create_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/lists/update_limit_metrics_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/update_epic_user_preferences_spec.rb'
+ - 'ee/spec/graphql/mutations/boards/update_spec.rb'
+ - 'ee/spec/graphql/mutations/compliance_management/frameworks/create_spec.rb'
+ - 'ee/spec/graphql/mutations/compliance_management/frameworks/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/compliance_management/frameworks/update_spec.rb'
+ - 'ee/spec/graphql/mutations/dast/profiles/delete_spec.rb'
+ - 'ee/spec/graphql/mutations/dast/profiles/run_spec.rb'
+ - 'ee/spec/graphql/mutations/dast/profiles/update_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_on_demand_scans/create_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_scanner_profiles/delete_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_site_profiles/create_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_site_profiles/delete_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_site_profiles/update_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_site_tokens/create_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_site_validations/create_spec.rb'
+ - 'ee/spec/graphql/mutations/dast_site_validations/revoke_spec.rb'
+ - 'ee/spec/graphql/mutations/epics/create_spec.rb'
+ - 'ee/spec/graphql/mutations/epics/update_spec.rb'
+ - 'ee/spec/graphql/mutations/gitlab_subscriptions/activate_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/escalation_policy/create_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/escalation_policy/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/escalation_policy/update_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/issuable_resource_link/create_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/issuable_resource_link/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/oncall_rotation/create_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/oncall_rotation/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/oncall_rotation/update_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/oncall_schedule/create_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/oncall_schedule/destroy_spec.rb'
+ - 'ee/spec/graphql/mutations/incident_management/oncall_schedule/update_spec.rb'
+ - 'ee/spec/graphql/mutations/instance_security_dashboard/add_project_spec.rb'
+ - 'ee/spec/graphql/mutations/instance_security_dashboard/remove_project_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/create_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/promote_to_epic_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/set_assignees_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/set_epic_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/set_escalation_policy_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/set_iteration_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/set_weight_spec.rb'
+ - 'ee/spec/graphql/mutations/issues/update_spec.rb'
+ - 'ee/spec/graphql/mutations/merge_requests/accept_spec.rb'
+ - 'ee/spec/graphql/mutations/merge_requests/set_assignees_spec.rb'
+ - 'ee/spec/graphql/mutations/merge_requests/set_reviewers_spec.rb'
+ - 'ee/spec/graphql/mutations/namespaces/increase_storage_temporarily_spec.rb'
+ - 'ee/spec/graphql/mutations/projects/set_compliance_framework_spec.rb'
+ - 'ee/spec/graphql/mutations/projects/set_locked_spec.rb'
+ - 'ee/spec/graphql/mutations/releases/update_spec.rb'
+ - 'ee/spec/graphql/mutations/requirements_management/create_requirement_spec.rb'
+ - 'ee/spec/graphql/mutations/requirements_management/export_requirements_spec.rb'
+ - 'ee/spec/graphql/mutations/requirements_management/update_requirement_spec.rb'
+ - 'ee/spec/graphql/mutations/security/ci_configuration/configure_container_scanning_spec.rb'
+ - 'ee/spec/graphql/mutations/security/ci_configuration/configure_dependency_scanning_spec.rb'
+ - 'ee/spec/graphql/mutations/security/finding/dismiss_spec.rb'
+ - 'ee/spec/graphql/mutations/security/training_provider_update_spec.rb'
+ - 'ee/spec/graphql/mutations/security_policy/assign_security_policy_project_spec.rb'
+ - 'ee/spec/graphql/mutations/security_policy/commit_scan_execution_policy_spec.rb'
+ - 'ee/spec/graphql/mutations/security_policy/create_security_policy_project_spec.rb'
+ - 'ee/spec/graphql/mutations/security_policy/unassign_security_policy_project_spec.rb'
+ - 'ee/spec/graphql/mutations/todos/create_spec.rb'
+ - 'ee/spec/graphql/representation/vulnerability_scanner_entry_spec.rb'
+ - 'ee/spec/graphql/resolvers/admin/cloud_licenses/current_license_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/admin/cloud_licenses/license_history_entries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/admin/cloud_licenses/subscription_future_entries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/analytics/contribution_analytics/contributions_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/analytics/devops_adoption/enabled_namespaces_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/app_sec/dast/profile_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/app_sec/fuzzing/coverage/corpuses_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/board_groupings/epics_resolvers_spec.rb'
+ - 'ee/spec/graphql/resolvers/boards/board_list_epics_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/boards/epic_boards_resolvers_spec.rb'
+ - 'ee/spec/graphql/resolvers/boards/epic_list_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/boards/epic_lists_resolvers_spec.rb'
+ - 'ee/spec/graphql/resolvers/ci/code_coverage_activities_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/ci/code_coverage_summary_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/clusters/agents_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/compliance_management/merge_requests/compliance_violation_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/dast_site_profile_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/dast_site_validation_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/dora_metrics_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/epic_ancestors_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/epic_issues_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/epics/children_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/epics/default_project_for_issue_creation_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/epics_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/external_issue_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/ci_secure_file_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/container_repository_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/dependency_proxy_blob_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/dependency_proxy_manifest_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/geo_node_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/group_wiki_repository_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/job_artifact_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/lfs_object_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/merge_request_diff_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/package_file_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/pages_deployment_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/pipeline_artifact_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/snippet_repository_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/terraform_state_version_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/geo/upload_registries_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/incident_management/escalation_policies_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/incident_management/issuable_resource_links_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/incident_management/oncall_rotations_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/incident_management/oncall_schedule_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/incident_management/oncall_shifts_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/incident_management/oncall_users_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/instance_security_dashboard/projects_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/instance_security_dashboard_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/iterations/cadences_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/iterations_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/network_policy_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/path_locks_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/product_analytics/dashboards_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/product_analytics/visualization_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/requirements_management/requirements_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/requirements_management/test_reports_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/security_orchestration/scan_execution_policy_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/security_orchestration/scan_result_policy_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/security_report_summary_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/security_training_urls_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/timebox_report_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/user_discussions_count_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/user_notes_count_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/vulnerabilities_count_per_day_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/vulnerabilities_grade_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/vulnerabilities_resolver_spec.rb'
+ - 'ee/spec/graphql/resolvers/vulnerability_severities_count_resolver_spec.rb'
+ - 'ee/spec/graphql/types/access_levels/group_type_spec.rb'
+ - 'ee/spec/graphql/types/access_levels/user_type_spec.rb'
+ - 'ee/spec/graphql/types/admin/cloud_licenses/current_license_type_spec.rb'
+ - 'ee/spec/graphql/types/admin/cloud_licenses/license_history_entry_type_spec.rb'
+ - 'ee/spec/graphql/types/admin/cloud_licenses/subscription_future_entry_type_spec.rb'
+ - 'ee/spec/graphql/types/alert_management/payload_alert_field_name_enum_spec.rb'
+ - 'ee/spec/graphql/types/alert_management/payload_alert_field_path_segment_type_spec.rb'
+ - 'ee/spec/graphql/types/alert_management/payload_alert_field_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/app_sec/fuzzing/api/ci_configuration_type_spec.rb'
+ - 'ee/spec/graphql/types/app_sec/fuzzing/api/scan_mode_enum_spec.rb'
+ - 'ee/spec/graphql/types/app_sec/fuzzing/api/scan_profile_type_spec.rb'
+ - 'ee/spec/graphql/types/app_sec/fuzzing/coverage/corpus_type_spec.rb'
+ - 'ee/spec/graphql/types/approval_rule_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/approval_rule_type_spec.rb'
+ - 'ee/spec/graphql/types/asset_type_spec.rb'
+ - 'ee/spec/graphql/types/audit_events/exterrnal_audit_event_destination_type_spec.rb'
+ - 'ee/spec/graphql/types/audit_events/streaming/header_type_spec.rb'
+ - 'ee/spec/graphql/types/boards/board_epic_type_spec.rb'
+ - 'ee/spec/graphql/types/boards/epic_board_type_spec.rb'
+ - 'ee/spec/graphql/types/boards/epic_list_metadata_type_spec.rb'
+ - 'ee/spec/graphql/types/boards/epic_list_type_spec.rb'
+ - 'ee/spec/graphql/types/boards/epic_user_preferences_type_spec.rb'
+ - 'ee/spec/graphql/types/branch_rules/approval_project_rule_type_spec.rb'
+ - 'ee/spec/graphql/types/branch_rules/external_status_check_type_spec.rb'
+ - 'ee/spec/graphql/types/burnup_chart_daily_totals_type_spec.rb'
+ - 'ee/spec/graphql/types/ci/code_coverage_activity_type_spec.rb'
+ - 'ee/spec/graphql/types/ci/code_coverage_summary_spec.rb'
+ - 'ee/spec/graphql/types/ci/code_quality_degradation_severity_enum_spec.rb'
+ - 'ee/spec/graphql/types/ci/code_quality_degradation_type_spec.rb'
+ - 'ee/spec/graphql/types/ci/minutes/namespace_monthly_usage_type_spec.rb'
+ - 'ee/spec/graphql/types/ci/minutes/project_monthly_usage_type_spec.rb'
+ - 'ee/spec/graphql/types/ci/pipeline_type_spec.rb'
+ - 'ee/spec/graphql/types/ci/runner_type_spec.rb'
+ - 'ee/spec/graphql/types/compliance_management/merge_requests/compliance_violation_input_type_spec.rb'
+ - 'ee/spec/graphql/types/compliance_management/merge_requests/compliance_violation_reason_enum_spec.rb'
+ - 'ee/spec/graphql/types/compliance_management/merge_requests/compliance_violation_severity_enum_spec.rb'
+ - 'ee/spec/graphql/types/compliance_management/merge_requests/compliance_violation_sort_enum_spec.rb'
+ - 'ee/spec/graphql/types/compliance_management/merge_requests/compliance_violation_type_spec.rb'
+ - 'ee/spec/graphql/types/dast/profile_branch_type_spec.rb'
+ - 'ee/spec/graphql/types/dast/profile_cadence_enum_spec.rb'
+ - 'ee/spec/graphql/types/dast/profile_cadence_input_type_spec.rb'
+ - 'ee/spec/graphql/types/dast/profile_cadence_type_spec.rb'
+ - 'ee/spec/graphql/types/dast/profile_schedule_input_type_spec.rb'
+ - 'ee/spec/graphql/types/dast/profile_schedule_type_spec.rb'
+ - 'ee/spec/graphql/types/dast/scan_method_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/dast/site_profile_auth_input_type_spec.rb'
+ - 'ee/spec/graphql/types/dast/site_profile_auth_type_spec.rb'
+ - 'ee/spec/graphql/types/dast_scanner_profile_type_spec.rb'
+ - 'ee/spec/graphql/types/dast_site_profile_type_spec.rb'
+ - 'ee/spec/graphql/types/dast_site_validation_type_spec.rb'
+ - 'ee/spec/graphql/types/deployments/approval_summary_spec.rb'
+ - 'ee/spec/graphql/types/deployments/approval_type_spec.rb'
+ - 'ee/spec/graphql/types/dora_metric_bucketing_interval_enum_spec.rb'
+ - 'ee/spec/graphql/types/dora_metric_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/dora_metric_type_spec.rb'
+ - 'ee/spec/graphql/types/dora_type_spec.rb'
+ - 'ee/spec/graphql/types/epic_connection_type_spec.rb'
+ - 'ee/spec/graphql/types/epic_descendant_count_type_spec.rb'
+ - 'ee/spec/graphql/types/epic_descendant_weight_sum_type_spec.rb'
+ - 'ee/spec/graphql/types/epic_issue_type_spec.rb'
+ - 'ee/spec/graphql/types/epic_sort_enum_spec.rb'
+ - 'ee/spec/graphql/types/epic_state_enum_spec.rb'
+ - 'ee/spec/graphql/types/epic_type_spec.rb'
+ - 'ee/spec/graphql/types/external_issue_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/ci_secure_file_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/container_repository_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/dependency_proxy_blob_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/dependency_proxy_manifest_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/geo_node_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/job_artifact_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/lfs_object_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/merge_request_diff_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/package_file_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/pages_deployment_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/pipeline_artifact_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/registry_state_enum_spec.rb'
+ - 'ee/spec/graphql/types/geo/terraform_state_version_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/geo/upload_registry_type_spec.rb'
+ - 'ee/spec/graphql/types/gitlab_subscriptions/user_role_enum_spec.rb'
+ - 'ee/spec/graphql/types/global_id_type_spec.rb'
+ - 'ee/spec/graphql/types/group_release_stats_type_spec.rb'
+ - 'ee/spec/graphql/types/group_stats_type_spec.rb'
+ - 'ee/spec/graphql/types/health_status_enum_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/escalation_policy_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/escalation_rule_input_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/escalation_rule_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/issuable_resource_link_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/issuable_resource_link_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/oncall_participant_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/oncall_rotation_date_input_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/oncall_rotation_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/oncall_schedule_type_spec.rb'
+ - 'ee/spec/graphql/types/incident_management/oncall_shift_type_spec.rb'
+ - 'ee/spec/graphql/types/instance_security_dashboard_type_spec.rb'
+ - 'ee/spec/graphql/types/issue_connection_type_spec.rb'
+ - 'ee/spec/graphql/types/issue_type_spec.rb'
+ - 'ee/spec/graphql/types/iteration_type_spec.rb'
+ - 'ee/spec/graphql/types/iterations/cadence_type_spec.rb'
+ - 'ee/spec/graphql/types/json_string_type_spec.rb'
+ - 'ee/spec/graphql/types/merge_requests/approval_state_type_spec.rb'
+ - 'ee/spec/graphql/types/metric_image_type_spec.rb'
+ - 'ee/spec/graphql/types/move_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/network_policy_kind_enum_spec.rb'
+ - 'ee/spec/graphql/types/network_policy_type_spec.rb'
+ - 'ee/spec/graphql/types/path_lock_type_spec.rb'
+ - 'ee/spec/graphql/types/permission_types/epic_spec.rb'
+ - 'ee/spec/graphql/types/permission_types/project_spec.rb'
+ - 'ee/spec/graphql/types/permission_types/vulnerability_spec.rb'
+ - 'ee/spec/graphql/types/project_type_spec.rb'
+ - 'ee/spec/graphql/types/projects/services_enum_spec.rb'
+ - 'ee/spec/graphql/types/protected_environment_type_spec.rb'
+ - 'ee/spec/graphql/types/protected_environments/approval_rule_for_summary_type_spec.rb'
+ - 'ee/spec/graphql/types/protected_environments/approval_rule_type_spec.rb'
+ - 'ee/spec/graphql/types/protected_environments/deploy_access_level_type_spec.rb'
+ - 'ee/spec/graphql/types/push_rules_type_spec.rb'
+ - 'ee/spec/graphql/types/query_type_spec.rb'
+ - 'ee/spec/graphql/types/requirements_management/requirement_state_enum_spec.rb'
+ - 'ee/spec/graphql/types/requirements_management/requirement_states_count_type_spec.rb'
+ - 'ee/spec/graphql/types/requirements_management/requirement_type_spec.rb'
+ - 'ee/spec/graphql/types/requirements_management/test_report_state_enum_spec.rb'
+ - 'ee/spec/graphql/types/requirements_management/test_report_type_spec.rb'
+ - 'ee/spec/graphql/types/scan_type_spec.rb'
+ - 'ee/spec/graphql/types/scanned_resource_type_spec.rb'
+ - 'ee/spec/graphql/types/security/training_type_spec.rb'
+ - 'ee/spec/graphql/types/security/training_url_request_status_enum_spec.rb'
+ - 'ee/spec/graphql/types/security/training_url_type_spec.rb'
+ - 'ee/spec/graphql/types/security_orchestration/group_security_policy_source_type_spec.rb'
+ - 'ee/spec/graphql/types/security_orchestration/project_security_policy_source_type_spec.rb'
+ - 'ee/spec/graphql/types/security_orchestration/security_policy_relation_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/security_orchestration/security_policy_source_type_spec.rb'
+ - 'ee/spec/graphql/types/security_report_summary_section_type_spec.rb'
+ - 'ee/spec/graphql/types/security_report_summary_type_spec.rb'
+ - 'ee/spec/graphql/types/security_scanner_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/security_scanners_spec.rb'
+ - 'ee/spec/graphql/types/subscription_type_spec.rb'
+ - 'ee/spec/graphql/types/timebox_report_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerabilities_count_by_day_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability/external_issue_link_external_tracker_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability/external_issue_link_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability/external_issue_link_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability/issue_link_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability/issue_link_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_confidence_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_detail_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/base_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/boolean_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/code_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/commit_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/diff_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/file_location_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/int_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/list_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/markdown_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/module_location_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/table_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/text_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_details/url_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_evidence_source_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_evidence_supporting_message_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_evidence_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_grade_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_identifier_input_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_identifier_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/cluster_image_scanning_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/container_scanning_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/coverage_fuzzing_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/dast_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/dependency_scanning_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/generic_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/sast_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location/secret_detection_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_location_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_report_type_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_request_response_header_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_request_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_response_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_scanner_input_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_scanner_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_scanner_vendor_input_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_severities_count_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_severity_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_sort_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_state_enum_spec.rb'
+ - 'ee/spec/graphql/types/vulnerability_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerable_dependency_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerable_kubernetes_resource_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerable_package_type_spec.rb'
+ - 'ee/spec/graphql/types/vulnerable_projects_by_grade_type_spec.rb'
+ - 'ee/spec/graphql/types/work_items/type_spec.rb'
+ - 'ee/spec/graphql/types/work_items/widget_interface_spec.rb'
+ - 'ee/spec/graphql/types/work_items/widgets/progress_type_spec.rb'
+ - 'ee/spec/graphql/types/work_items/widgets/status_input_type_spec.rb'
+ - 'ee/spec/graphql/types/work_items/widgets/status_type_spec.rb'
+ - 'ee/spec/helpers/admin/emails_helper_spec.rb'
+ - 'ee/spec/helpers/admin/ip_restriction_helper_spec.rb'
+ - 'ee/spec/helpers/admin/repo_size_limit_helper_spec.rb'
+ - 'ee/spec/helpers/analytics/code_review_helper_spec.rb'
+ - 'ee/spec/helpers/application_helper_spec.rb'
+ - 'ee/spec/helpers/audit_events_helper_spec.rb'
+ - 'ee/spec/helpers/billing_plans_helper_spec.rb'
+ - 'ee/spec/helpers/boards_helper_spec.rb'
+ - 'ee/spec/helpers/compliance_management/compliance_framework/group_settings_helper_spec.rb'
+ - 'ee/spec/helpers/credentials_inventory_helper_spec.rb'
+ - 'ee/spec/helpers/ee/access_tokens_helper_spec.rb'
+ - 'ee/spec/helpers/ee/admin/identities_helper_spec.rb'
+ - 'ee/spec/helpers/ee/application_settings_helper_spec.rb'
+ - 'ee/spec/helpers/ee/auth_helper_spec.rb'
+ - 'ee/spec/helpers/ee/blob_helper_spec.rb'
+ - 'ee/spec/helpers/ee/branches_helper_spec.rb'
+ - 'ee/spec/helpers/ee/ci/pipeline_editor_helper_spec.rb'
+ - 'ee/spec/helpers/ee/ci/pipelines_helper_spec.rb'
+ - 'ee/spec/helpers/ee/dashboard_helper_spec.rb'
+ - 'ee/spec/helpers/ee/emails_helper_spec.rb'
+ - 'ee/spec/helpers/ee/environments_helper_spec.rb'
+ - 'ee/spec/helpers/ee/events_helper_spec.rb'
+ - 'ee/spec/helpers/ee/export_helper_spec.rb'
+ - 'ee/spec/helpers/ee/feature_flags_helper_spec.rb'
+ - 'ee/spec/helpers/ee/geo_helper_spec.rb'
+ - 'ee/spec/helpers/ee/gitlab_routing_helper_spec.rb'
+ - 'ee/spec/helpers/ee/graph_helper_spec.rb'
+ - 'ee/spec/helpers/ee/groups/analytics/cycle_analytics_helper_spec.rb'
+ - 'ee/spec/helpers/ee/groups/group_members_helper_spec.rb'
+ - 'ee/spec/helpers/ee/groups/settings_helper_spec.rb'
+ - 'ee/spec/helpers/ee/groups_helper_spec.rb'
+ - 'ee/spec/helpers/ee/hooks_helper_spec.rb'
+ - 'ee/spec/helpers/ee/integrations_helper_spec.rb'
+ - 'ee/spec/helpers/ee/invite_members_helper_spec.rb'
+ - 'ee/spec/helpers/ee/issues_helper_spec.rb'
+ - 'ee/spec/helpers/ee/labels_helper_spec.rb'
+ - 'ee/spec/helpers/ee/learn_gitlab_helper_spec.rb'
+ - 'ee/spec/helpers/ee/lock_helper_spec.rb'
+ - 'ee/spec/helpers/ee/namespace_user_cap_reached_alert_helper_spec.rb'
+ - 'ee/spec/helpers/ee/namespaces_helper_spec.rb'
+ - 'ee/spec/helpers/ee/operations_helper_spec.rb'
+ - 'ee/spec/helpers/ee/personal_access_tokens_helper_spec.rb'
+ - 'ee/spec/helpers/ee/profiles_helper_spec.rb'
+ - 'ee/spec/helpers/ee/projects/incidents_helper_spec.rb'
+ - 'ee/spec/helpers/ee/projects/security/api_fuzzing_configuration_helper_spec.rb'
+ - 'ee/spec/helpers/ee/projects/security/configuration_helper_spec.rb'
+ - 'ee/spec/helpers/ee/projects/security/dast_configuration_helper_spec.rb'
+ - 'ee/spec/helpers/ee/projects/security/sast_configuration_helper_spec.rb'
+ - 'ee/spec/helpers/ee/registrations_helper_spec.rb'
+ - 'ee/spec/helpers/ee/releases_helper_spec.rb'
+ - 'ee/spec/helpers/ee/security_orchestration_helper_spec.rb'
+ - 'ee/spec/helpers/ee/sorting_helper_spec.rb'
+ - 'ee/spec/helpers/ee/subscribable_banner_helper_spec.rb'
+ - 'ee/spec/helpers/ee/system_note_helper_spec.rb'
+ - 'ee/spec/helpers/ee/todos_helper_spec.rb'
+ - 'ee/spec/helpers/ee/trial_helper_spec.rb'
+ - 'ee/spec/helpers/ee/trial_registration_helper_spec.rb'
+ - 'ee/spec/helpers/ee/users/callouts_helper_spec.rb'
+ - 'ee/spec/helpers/ee/version_check_helper_spec.rb'
+ - 'ee/spec/helpers/ee/welcome_helper_spec.rb'
+ - 'ee/spec/helpers/ee/wiki_helper_spec.rb'
+ - 'ee/spec/helpers/epics_helper_spec.rb'
+ - 'ee/spec/helpers/gitlab_subscriptions/upcoming_reconciliation_helper_spec.rb'
+ - 'ee/spec/helpers/groups/feature_discovery_moments_helper_spec.rb'
+ - 'ee/spec/helpers/groups/ldap_sync_helper_spec.rb'
+ - 'ee/spec/helpers/groups/security_features_helper_spec.rb'
+ - 'ee/spec/helpers/groups/sso_helper_spec.rb'
+ - 'ee/spec/helpers/incident_management/escalation_policy_helper_spec.rb'
+ - 'ee/spec/helpers/incident_management/oncall_schedule_helper_spec.rb'
+ - 'ee/spec/helpers/kerberos_helper_spec.rb'
+ - 'ee/spec/helpers/license_helper_spec.rb'
+ - 'ee/spec/helpers/license_monitoring_helper_spec.rb'
+ - 'ee/spec/helpers/manual_quarterly_co_term_banner_helper_spec.rb'
+ - 'ee/spec/helpers/markup_helper_spec.rb'
+ - 'ee/spec/helpers/merge_requests_helper_spec.rb'
+ - 'ee/spec/helpers/nav/new_dropdown_helper_spec.rb'
+ - 'ee/spec/helpers/nav/top_nav_helper_spec.rb'
+ - 'ee/spec/helpers/notes_helper_spec.rb'
+ - 'ee/spec/helpers/paid_feature_callout_helper_spec.rb'
+ - 'ee/spec/helpers/path_locks_helper_spec.rb'
+ - 'ee/spec/helpers/preferences_helper_spec.rb'
+ - 'ee/spec/helpers/prevent_forking_helper_spec.rb'
+ - 'ee/spec/helpers/projects/on_demand_scans_helper_spec.rb'
+ - 'ee/spec/helpers/projects/project_members_helper_spec.rb'
+ - 'ee/spec/helpers/projects/security/dast_profiles_helper_spec.rb'
+ - 'ee/spec/helpers/projects/security/discover_helper_spec.rb'
+ - 'ee/spec/helpers/projects_helper_spec.rb'
+ - 'ee/spec/helpers/push_rules_helper_spec.rb'
+ - 'ee/spec/helpers/roadmaps_helper_spec.rb'
+ - 'ee/spec/helpers/routing/pseudonymization_helper_spec.rb'
+ - 'ee/spec/helpers/seat_count_alert_helper_spec.rb'
+ - 'ee/spec/helpers/security_helper_spec.rb'
+ - 'ee/spec/helpers/subscriptions_helper_spec.rb'
+ - 'ee/spec/helpers/timeboxes_helper_spec.rb'
+ - 'ee/spec/helpers/trial_registrations/reassurances_helper_spec.rb'
+ - 'ee/spec/helpers/users/identity_verification_helper_spec.rb'
+ - 'ee/spec/helpers/users_helper_spec.rb'
+ - 'ee/spec/initializers/1_settings_spec.rb'
+ - 'ee/spec/initializers/database_config_spec.rb'
+ - 'ee/spec/initializers/fog_google_https_private_urls_spec.rb'
+ - 'ee/spec/initializers/session_store_spec.rb'
+ - 'ee/spec/lib/analytics/devops_adoption/snapshot_calculator_spec.rb'
+ - 'ee/spec/lib/analytics/group_activity_calculator_spec.rb'
+ - 'ee/spec/lib/analytics/merge_request_metrics_refresh_spec.rb'
+ - 'ee/spec/lib/analytics/productivity_analytics_request_params_spec.rb'
+ - 'ee/spec/lib/analytics/refresh_approvals_data_spec.rb'
+ - 'ee/spec/lib/analytics/refresh_comments_data_spec.rb'
+ - 'ee/spec/lib/analytics/refresh_reassign_data_spec.rb'
+ - 'ee/spec/lib/api/entities/deployments/approval_spec.rb'
+ - 'ee/spec/lib/api/entities/deployments/approval_summary_spec.rb'
+ - 'ee/spec/lib/api/entities/merge_request_approval_setting_spec.rb'
+ - 'ee/spec/lib/api/entities/pending_member_spec.rb'
+ - 'ee/spec/lib/api/entities/protected_environments/approval_rule_for_summary_spec.rb'
+ - 'ee/spec/lib/api/entities/protected_environments/approval_rule_spec.rb'
+ - 'ee/spec/lib/api/entities/protected_environments/deploy_access_level_spec.rb'
+ - 'ee/spec/lib/arkose/logger_spec.rb'
+ - 'ee/spec/lib/arkose/settings_spec.rb'
+ - 'ee/spec/lib/arkose/verify_response_spec.rb'
+ - 'ee/spec/lib/audit/base_changes_auditor_spec.rb'
+ - 'ee/spec/lib/audit/changes_spec.rb'
+ - 'ee/spec/lib/audit/compliance_framework_changes_auditor_spec.rb'
+ - 'ee/spec/lib/audit/details_spec.rb'
+ - 'ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb'
+ - 'ee/spec/lib/audit/group_changes_auditor_spec.rb'
+ - 'ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb'
+ - 'ee/spec/lib/audit/group_push_rules_changes_auditor_spec.rb'
+ - 'ee/spec/lib/banzai/filter/cross_project_issuable_information_filter_spec.rb'
+ - 'ee/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb'
+ - 'ee/spec/lib/banzai/filter/jira_private_image_link_filter_spec.rb'
+ - 'ee/spec/lib/banzai/filter/references/epic_reference_filter_spec.rb'
+ - 'ee/spec/lib/banzai/filter/references/iteration_reference_filter_spec.rb'
+ - 'ee/spec/lib/banzai/filter/references/label_reference_filter_spec.rb'
+ - 'ee/spec/lib/banzai/filter/references/vulnerability_reference_filters_spec.rb'
+ - 'ee/spec/lib/banzai/issuable_extractor_spec.rb'
+ - 'ee/spec/lib/banzai/reference_parser/epic_parser_spec.rb'
+ - 'ee/spec/lib/banzai/reference_parser/iteration_parser_spec.rb'
+ - 'ee/spec/lib/banzai/reference_parser/vulnerability_parser_spec.rb'
+ - 'ee/spec/lib/bulk_imports/common/pipelines/boards_pipeline_spec.rb'
+ - 'ee/spec/lib/bulk_imports/common/pipelines/wiki_pipeline_spec.rb'
+ - 'ee/spec/lib/bulk_imports/groups/graphql/get_iterations_query_spec.rb'
+ - 'ee/spec/lib/bulk_imports/groups/pipelines/epics_pipeline_spec.rb'
+ - 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_cadences_pipeline_spec.rb'
+ - 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_pipeline_spec.rb'
+ - 'ee/spec/lib/bulk_imports/projects/pipelines/issues_pipeline_spec.rb'
+ - 'ee/spec/lib/bulk_imports/projects/pipelines/protected_branches_pipeline_spec.rb'
+ - 'ee/spec/lib/bulk_imports/projects/pipelines/push_rule_pipeline_spec.rb'
+ - 'ee/spec/lib/compliance_management/merge_request_approval_settings/resolver_spec.rb'
+ - 'ee/spec/lib/container_registry/client_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/analytics/code_review/merge_request_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/analytics/group_activity_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/billable_member_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/ci/minutes/additional_pack_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/deployment_extended_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/experiment_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/geo_node_status_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/group_detail_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/groups/repository_storage_move_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/identity_detail_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/member_role_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/member_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/project_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/scim/conflict_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/scim/emails_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/scim/error_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/scim/not_found_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/scim/user_name_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/scim/user_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/scim/users_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/user_with_admin_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/vulnerability_export_spec.rb'
+ - 'ee/spec/lib/ee/api/entities/vulnerability_spec.rb'
+ - 'ee/spec/lib/ee/api/helpers/issues_helpers_spec.rb'
+ - 'ee/spec/lib/ee/api/helpers/members_helpers_spec.rb'
+ - 'ee/spec/lib/ee/api/helpers/notes_helpers_spec.rb'
+ - 'ee/spec/lib/ee/api/helpers/scim_pagination_spec.rb'
+ - 'ee/spec/lib/ee/api/helpers/variables_helpers_spec.rb'
+ - 'ee/spec/lib/ee/api/helpers_spec.rb'
+ - 'ee/spec/lib/ee/api/support/git_access_actor_spec.rb'
+ - 'ee/spec/lib/ee/backup/repositories_spec.rb'
+ - 'ee/spec/lib/ee/banzai/filter/sanitization_filter_spec.rb'
+ - 'ee/spec/lib/ee/bulk_imports/groups/stage_spec.rb'
+ - 'ee/spec/lib/ee/bulk_imports/projects/stage_spec.rb'
+ - 'ee/spec/lib/ee/event_filter_spec.rb'
+ - 'ee/spec/lib/ee/feature_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/alert_management/payload/generic_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/analytics/cycle_analytics/aggregated/base_query_builder_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/analytics/cycle_analytics/base_query_builder_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/application_context_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/application_rate_limiter_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/auth_finders_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/current_user_mode_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/access_levels_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/config_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/group_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/admin_users_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/external_users_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/groups_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/proxy_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/request_authenticator_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/auth/saml/identity_linker_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/backfill_epic_cache_counts_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/backfill_iteration_cadence_id_for_boards_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/create_security_setting_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/delete_approval_rules_with_vulnerability_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/delete_invalid_epic_issues_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/migrate_shared_vulnerability_scanners_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/populate_approval_merge_request_rules_with_security_orchestration_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/populate_approval_project_rules_with_security_orchestration_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/populate_namespace_statistics_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/purge_stale_security_scans_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/checks/push_rule_check_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/checks/push_rules/branch_check_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/checks/push_rules/file_size_check_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/checks/push_rules/tag_check_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/config/entry/bridge_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/config/entry/need_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/config/entry/needs_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/config_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/jwt_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/matching/runner_matcher_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/parsers/security/common_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/parsers/security/validators/schema_validator_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/pipeline/chain/validate/after_config_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/pipeline/chain/validate/external_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/pipeline/chain/validate/security_orchestration_policy_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/pipeline/quota/activity_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/pipeline/quota/size_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/reports/security/reports_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/status/build/manual_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ci/templates/templates_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/cleanup/orphan_job_artifact_files_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/database/gitlab_schema_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/database_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/email/handler/service_desk_handler_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/etag_caching/router/rails_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/event_store_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/git_access_design_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/git_access_project_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/git_access_snippet_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/gon_helper_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/group_search_results_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/hook_data/group_member_builder_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/hook_data/issue_builder_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/hook_data/user_builder_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/import_export/after_export_strategies/custom_template_export_import_strategy_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/import_export/group/tree_restorer_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/import_export/group/tree_saver_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/import_export/project/tree_restorer_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/import_export/project/tree_saver_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/import_export/repo_restorer_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/import_export/wiki_repo_saver_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/ip_restriction/enforcer_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/issuable/clone/copy_resource_events_service_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/issuable_metadata_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/metrics/samplers/database_sampler_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/middleware/read_only_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/namespace_storage_size_error_message_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/namespaces/storage/enforcement_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/omniauth_initializer_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/pages/deployment_update_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/prometheus/metric_group_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/rack_attack/request_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/repo_path_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/repository_size_checker_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/scim/attribute_transform_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/scim/filter_parser_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/scim/params_parser_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/scim/value_parser_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/search_results_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/security/scan_configuration_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/slash_commands/incident_management/incident_new_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/snippet_search_results_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/template/gitlab_ci_yml_template_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/tracking_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/url_builder_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/usage/metrics/aggregates/aggregate_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/usage/service_ping/payload_keys_processor_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/usage/service_ping_report_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/usage_data_counters/issue_activity_unique_counter_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/usage_data_counters/work_item_activity_unique_counter_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/usage_data_non_sql_metrics_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/verify/lfs_objects_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/verify/uploads_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/web_hooks/rate_limiter_spec.rb'
+ - 'ee/spec/lib/ee/gitlab/web_ide/config/entry/global_spec.rb'
+ - 'ee/spec/lib/ee/service_ping/build_payload_spec.rb'
+ - 'ee/spec/lib/ee/service_ping/permit_data_categories_spec.rb'
+ - 'ee/spec/lib/ee/service_ping/service_ping_settings_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/groups/menus/issues_menu_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/projects/menus/analytics_menu_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/projects/menus/ci_cd_menu_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/projects/menus/issues_menu_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/projects/menus/monitor_menu_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/projects/menus/repository_menu_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/projects/menus/security_compliance_menu_spec.rb'
+ - 'ee/spec/lib/ee/sidebars/projects/panel_spec.rb'
+ - 'ee/spec/lib/elastic/latest/application_instance_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/commit_config_spec.rb'
+ - 'ee/spec/lib/elastic/latest/config_spec.rb'
+ - 'ee/spec/lib/elastic/latest/custom_language_analyzers_spec.rb'
+ - 'ee/spec/lib/elastic/latest/git_class_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/git_instance_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/issue_class_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/issue_config_spec.rb'
+ - 'ee/spec/lib/elastic/latest/merge_request_config_spec.rb'
+ - 'ee/spec/lib/elastic/latest/note_config_spec.rb'
+ - 'ee/spec/lib/elastic/latest/project_instance_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/project_wiki_class_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/project_wiki_instance_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/routing_spec.rb'
+ - 'ee/spec/lib/elastic/latest/snippet_instance_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/latest/user_config_spec.rb'
+ - 'ee/spec/lib/elastic/latest/user_instance_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/migration_spec.rb'
+ - 'ee/spec/lib/elastic/multi_version_class_proxy_spec.rb'
+ - 'ee/spec/lib/elastic/multi_version_instance_proxy_spec.rb'
+ - 'ee/spec/lib/gem_extensions/elasticsearch/model/adapter/active_record/records_spec.rb'
+ - 'ee/spec/lib/gem_extensions/elasticsearch/model/indexing/instance_methods_spec.rb'
+ - 'ee/spec/lib/gitlab/alert_management/alert_payload_field_extractor_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/aggregated/data_for_duration_chart_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/data_collector_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/data_for_duration_chart_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/distinct_stage_loader_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/request_params_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_closed_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_added_to_board_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_associated_with_milestone_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_label_added_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_label_removed_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_last_edited_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_closed_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_commit_at_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_label_added_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_label_removed_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_edited_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/base_dora_summary_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/change_failure_rate_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/group/stage_summary_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/lead_time_for_changes_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/lead_time_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/stage_time_summary_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/time_to_restore_service_spec.rb'
+ - 'ee/spec/lib/gitlab/analytics/type_of_work/tasks_by_type_spec.rb'
+ - 'ee/spec/lib/gitlab/audit/auditor_spec.rb'
+ - 'ee/spec/lib/gitlab/audit/events/preloader_spec.rb'
+ - 'ee/spec/lib/gitlab/audit/levels/group_spec.rb'
+ - 'ee/spec/lib/gitlab/audit/levels/instance_spec.rb'
+ - 'ee/spec/lib/gitlab/audit/levels/project_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/auth_hash_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/dynamic_settings_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/failure_handler_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/gma_membership_enforcer_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/group_lookup_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/identity_linker_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/membership_enforcer_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/membership_updater_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/response_check_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/response_store_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/session_enforcer_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/sso_state_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/token_actor_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/user_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/group_saml/xml_response_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/ldap/adapter_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/ldap/person_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/ldap/user_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/o_auth/user_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/otp/session_enforcer_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/saml/config_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/saml/membership_updater_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/saml/user_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/smartcard/certificate_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/smartcard/ldap_certificate_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/smartcard/san_extension_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/smartcard/session_enforcer_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/smartcard/session_spec.rb'
+ - 'ee/spec/lib/gitlab/auth_spec.rb'
+ - 'ee/spec/lib/gitlab/authority_analyzer_spec.rb'
+ - 'ee/spec/lib/gitlab/background_migration/populate_test_reports_issue_id_spec.rb'
+ - 'ee/spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
+ - 'ee/spec/lib/gitlab/bullet/exclusions_spec.rb'
+ - 'ee/spec/lib/gitlab/cache_spec.rb'
+ - 'ee/spec/lib/gitlab/checks/changes_access_spec.rb'
+ - 'ee/spec/lib/gitlab/checks/diff_check_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/config/entry/dast_configuration_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/config/entry/job_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/config/entry/secret_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/config/entry/vault/engine_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/config/entry/vault/secret_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/config/required/processor_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/minutes/build_consumption_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/minutes/cached_quota_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/minutes/cost_factor_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/minutes/gitlab_contribution_cost_factor_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/minutes/runners_availability_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/license_compliance/license_scanning_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/metrics/generic_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/security/cluster_image_scanning_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/security/container_scanning_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/security/coverage_fuzzing_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/security/dast_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/security/dependency_scanning_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/security/formatters/dependency_list_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/parsers/security/validators/default_branch_image_validator_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/pipeline/chain/config/content_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/pipeline/chain/create_cross_database_associations_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/pipeline/chain/limit/activity_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/pipeline/chain/limit/size_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/project_config_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/coverage_fuzzing/report_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/dependency_list/dependency_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/dependency_list/report_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/license_scanning/dependency_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/license_scanning/license_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/license_scanning/reports_comparer_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/metrics/report_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/metrics/reports_comparer_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/security/finding_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/security/locations/cluster_image_scanning_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/security/locations/container_scanning_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/security/locations/dast_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/security/locations/dependency_scanning_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/reports/security/remediation_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/Jobs/browser_performance_testing_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/Jobs/dast_default_branch_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/Jobs/load_performance_testing_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/Verify/browser_performance_testing_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/Verify/load_performance_testing_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/dast_on_demand_api_scan_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/dast_runner_validation_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/secure_binaries_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/yaml_processor_spec.rb'
+ - 'ee/spec/lib/gitlab/cidr_spec.rb'
+ - 'ee/spec/lib/gitlab/code_owners/entry_spec.rb'
+ - 'ee/spec/lib/gitlab/code_owners/groups_loader_spec.rb'
+ - 'ee/spec/lib/gitlab/code_owners/loader_spec.rb'
+ - 'ee/spec/lib/gitlab/code_owners/reference_extractor_spec.rb'
+ - 'ee/spec/lib/gitlab/code_owners/users_loader_spec.rb'
+ - 'ee/spec/lib/gitlab/code_owners/validator_spec.rb'
+ - 'ee/spec/lib/gitlab/code_owners_spec.rb'
+ - 'ee/spec/lib/gitlab/com_spec.rb'
+ - 'ee/spec/lib/gitlab/compliance_management/violations/approved_by_committer_spec.rb'
+ - 'ee/spec/lib/gitlab/compliance_management/violations/approved_by_insufficient_users_spec.rb'
+ - 'ee/spec/lib/gitlab/compliance_management/violations/approved_by_merge_request_author_spec.rb'
+ - 'ee/spec/lib/gitlab/console_spec.rb'
+ - 'ee/spec/lib/gitlab/contribution_analytics/data_collector_spec.rb'
+ - 'ee/spec/lib/gitlab/custom_file_templates_spec.rb'
+ - 'ee/spec/lib/gitlab/customers_dot/jwt_spec.rb'
+ - 'ee/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb'
+ - 'ee/spec/lib/gitlab/data_builder/vulnerability_spec.rb'
+ - 'ee/spec/lib/gitlab/elastic/bulk_indexer_spec.rb'
+ - 'ee/spec/lib/gitlab/elastic/client_spec.rb'
+ - 'ee/spec/lib/gitlab/elastic/document_reference_spec.rb'
+ - 'ee/spec/lib/gitlab/elastic/elasticsearch_enabled_cache_spec.rb'
+ - 'ee/spec/lib/gitlab/elastic/group_search_results_spec.rb'
+ - 'ee/spec/lib/gitlab/elastic/project_search_results_spec.rb'
+ - 'ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb'
+ - 'ee/spec/lib/gitlab/email/feature_flag_wrapper_spec.rb'
+ - 'ee/spec/lib/gitlab/email/handler/create_note_handler_spec.rb'
+ - 'ee/spec/lib/gitlab/email/message/account_validation_spec.rb'
+ - 'ee/spec/lib/gitlab/exclusive_lease_spec.rb'
+ - 'ee/spec/lib/gitlab/expiring_subscription_message_spec.rb'
+ - 'ee/spec/lib/gitlab/favicon_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/base_request_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/cron_manager_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/event_gap_tracking_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/geo_tasks_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/git_push_http_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/git_ssh_proxy_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/health_check_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/json_request_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/jwt_request_decoder_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/design_repository_updated_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/lease_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_cursor/logger_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/log_helpers_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/logger_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/oauth/login_state_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/oauth/logout_state_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/oauth/logout_token_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/oauth/session_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/registry_batcher_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/replication/blob_downloader_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/replication/blob_retriever_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/replicator_spec.rb'
+ - 'ee/spec/lib/gitlab/geo/signed_data_spec.rb'
+ - 'ee/spec/lib/gitlab/geo_spec.rb'
+ - 'ee/spec/lib/gitlab/git_access_spec.rb'
+ - 'ee/spec/lib/gitlab/git_access_wiki_spec.rb'
+ - 'ee/spec/lib/gitlab/gitaly_client/with_feature_flag_actors_spec.rb'
+ - 'ee/spec/lib/gitlab/gl_repository/identifier_spec.rb'
+ - 'ee/spec/lib/gitlab/gl_repository/repo_type_spec.rb'
+ - 'ee/spec/lib/gitlab/gl_repository_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/aggregations/epics/epic_node_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/aggregations/epics/lazy_epic_aggregate_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/aggregations/epics/lazy_links_aggregate_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/aggregations/issuables/lazy_links_aggregate_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/aggregations/issues/lazy_links_aggregate_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/aggregations/security_orchestration_policies/lazy_dast_profile_aggregate_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/aggregations/vulnerability_statistics/lazy_aggregate_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/loaders/bulk_epic_aggregate_loader_spec.rb'
+ - 'ee/spec/lib/gitlab/graphql/loaders/oncall_participant_loader_spec.rb'
+ - 'ee/spec/lib/gitlab/group_plans_preloader_spec.rb'
+ - 'ee/spec/lib/gitlab/import_export/attributes_permitter_spec.rb'
+ - 'ee/spec/lib/gitlab/import_export/group/group_and_descendants_repo_restorer_spec.rb'
+ - 'ee/spec/lib/gitlab/import_export/group/group_and_descendants_repo_saver_spec.rb'
+ - 'ee/spec/lib/gitlab/import_export/group/relation_factory_spec.rb'
+ - 'ee/spec/lib/gitlab/import_export/project/object_builder_spec.rb'
+ - 'ee/spec/lib/gitlab/import_export/project/relation_factory_spec.rb'
+ - 'ee/spec/lib/gitlab/import_sources_spec.rb'
+ - 'ee/spec/lib/gitlab/incident_management_spec.rb'
+ - 'ee/spec/lib/gitlab/ingestion/bulk_insertable_task_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/executors/dora_executor_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/executors/issuable_executor_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/finders/projects_finder_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/loader_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/reducers/base_reducer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/reducers/count_per_label_reducer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/reducers/count_per_period_reducer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/reducers/label_count_per_period_reducer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/serializers/chartjs/bar_serializer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/serializers/chartjs/bar_time_series_serializer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/serializers/chartjs/line_serializer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/serializers/chartjs/multi_series_serializer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/validators/params_validator_spec.rb'
+ - 'ee/spec/lib/gitlab/instrumentation/elasticsearch_transport_spec.rb'
+ - 'ee/spec/lib/gitlab/instrumentation_helper_spec.rb'
+ - 'ee/spec/lib/gitlab/ip_address_state_spec.rb'
+ - 'ee/spec/lib/gitlab/items_collection_spec.rb'
+ - 'ee/spec/lib/gitlab/kerberos/authentication_spec.rb'
+ - 'ee/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb'
+ - 'ee/spec/lib/gitlab/licenses/submit_license_usage_data_banner_spec.rb'
+ - 'ee/spec/lib/gitlab/manual_quarterly_co_term_banner_spec.rb'
+ - 'ee/spec/lib/gitlab/metrics/samplers/global_search_sampler_spec.rb'
+ - 'ee/spec/lib/gitlab/middleware/ip_restrictor_spec.rb'
+ - 'ee/spec/lib/gitlab/mirror_spec.rb'
+ - 'ee/spec/lib/gitlab/object_hierarchy_spec.rb'
+ - 'ee/spec/lib/gitlab/pagination/keyset/simple_order_builder_spec.rb'
+ - 'ee/spec/lib/gitlab/patch/database_config_spec.rb'
+ - 'ee/spec/lib/gitlab/patch/draw_route_spec.rb'
+ - 'ee/spec/lib/gitlab/patch/geo_database_tasks_spec.rb'
+ - 'ee/spec/lib/gitlab/path_locks_finder_spec.rb'
+ - 'ee/spec/lib/gitlab/project_template_spec.rb'
+ - 'ee/spec/lib/gitlab/prometheus/queries/additional_metrics_deployment_query_spec.rb'
+ - 'ee/spec/lib/gitlab/prometheus/queries/additional_metrics_environment_query_spec.rb'
+ - 'ee/spec/lib/gitlab/prometheus/queries/cluster_query_spec.rb'
+ - 'ee/spec/lib/gitlab/proxy_spec.rb'
+ - 'ee/spec/lib/gitlab/quick_actions/users_extractor_spec.rb'
+ - 'ee/spec/lib/gitlab/rack_attack_spec.rb'
+ - 'ee/spec/lib/gitlab/reference_extractor_spec.rb'
+ - 'ee/spec/lib/gitlab/regex_spec.rb'
+ - 'ee/spec/lib/gitlab/return_to_location_spec.rb'
+ - 'ee/spec/lib/gitlab/search/aggregation_parser_spec.rb'
+ - 'ee/spec/lib/gitlab/search/aggregation_spec.rb'
+ - 'ee/spec/lib/gitlab/search/client_spec.rb'
+ - 'ee/spec/lib/gitlab/search/recent_epics_spec.rb'
+ - 'ee/spec/lib/gitlab/search_context/builder_spec.rb'
+ - 'ee/spec/lib/gitlab/sidekiq_config_spec.rb'
+ - 'ee/spec/lib/gitlab/sitemaps/generator_spec.rb'
+ - 'ee/spec/lib/gitlab/sitemaps/sitemap_file_spec.rb'
+ - 'ee/spec/lib/gitlab/sitemaps/url_extractor_spec.rb'
+ - 'ee/spec/lib/gitlab/slash_commands/presenters/issue_show_spec.rb'
+ - 'ee/spec/lib/gitlab/spdx/catalogue_gateway_spec.rb'
+ - 'ee/spec/lib/gitlab/spdx/catalogue_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page/filter/image_filter_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page/filter/mention_anonymization_filter_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page/pipeline/post_process_pipeline_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page/storage/s3_client_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page/storage/s3_multipart_upload_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page/storage_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page/usage_data_counters/incident_counter_spec.rb'
+ - 'ee/spec/lib/gitlab/status_page_spec.rb'
+ - 'ee/spec/lib/gitlab/subscription_portal/client_spec.rb'
+ - 'ee/spec/lib/gitlab/subscription_portal/clients/graphql_spec.rb'
+ - 'ee/spec/lib/gitlab/subscription_portal/clients/rest_spec.rb'
+ - 'ee/spec/lib/gitlab/template/custom_templates_spec.rb'
+ - 'ee/spec/lib/gitlab/tracking/snowplow_schema_validation_spec.rb'
+ - 'ee/spec/lib/gitlab/tracking/standard_context_spec.rb'
+ - 'ee/spec/lib/gitlab/tree_summary_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/advanced_search/build_type_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/advanced_search/distribution_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/advanced_search/lucene_version_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/advanced_search/version_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/approval_project_rules_with_user_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_ci_environments_approval_required_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_deployment_approvals_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_distinct_merged_merge_requests_using_approval_rules_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_event_streaming_destinations_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_external_status_checks_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_groups_with_assigned_security_policy_project_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_groups_with_event_streaming_destinations_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_merge_requests_with_applied_scan_result_policies_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_projects_with_applied_scan_result_policies_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_projects_with_assigned_security_policy_project_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_projects_with_external_status_checks_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_saml_group_links_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_slack_app_installations_gbp_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_slack_app_installations_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_user_merge_requests_for_projects_with_applied_scan_result_policies_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_user_merge_requests_with_applied_scan_result_policies_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_associating_group_milestones_to_releases_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_creating_ci_builds_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_deployment_approvals_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/epics_deepest_relationship_level_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/historical_max_users_metrics_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/license_management_jobs_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/license_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/licensee_metrics_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/protected_environment_approval_rules_required_approvals_average_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/protected_environments_required_approvals_average_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/instrumentations/user_cap_setting_enabled_metric_spec.rb'
+ - 'ee/spec/lib/gitlab/usage/metrics/names_suggestions/generator_spec.rb'
+ - 'ee/spec/lib/gitlab/usage_data_counters/epic_activity_unique_counter_spec.rb'
+ - 'ee/spec/lib/gitlab/usage_data_counters/licenses_list_spec.rb'
+ - 'ee/spec/lib/gitlab/usage_data_counters/streaming_audit_event_type_counter_spec.rb'
+ - 'ee/spec/lib/gitlab/usage_data_metrics_spec.rb'
+ - 'ee/spec/lib/gitlab/user_access_spec.rb'
+ - 'ee/spec/lib/gitlab/visibility_level_spec.rb'
+ - 'ee/spec/lib/gitlab/web_ide/config/entry/schema/match_spec.rb'
+ - 'ee/spec/lib/gitlab/web_ide/config/entry/schema/uri_spec.rb'
+ - 'ee/spec/lib/gitlab/web_ide/config/entry/schema_spec.rb'
+ - 'ee/spec/lib/gitlab/web_ide/config/entry/schemas_spec.rb'
+ - 'ee/spec/lib/gitlab_subscriptions/upcoming_reconciliation_entity_spec.rb'
+ - 'ee/spec/lib/incident_management/oncall_shift_generator_spec.rb'
+ - 'ee/spec/lib/omni_auth/strategies/group_saml_spec.rb'
+ - 'ee/spec/lib/omni_auth/strategies/kerberos_spec.rb'
+ - 'ee/spec/lib/peek/views/elasticsearch_spec.rb'
+ - 'ee/spec/lib/quality/seeders/vulnerabilities_spec.rb'
+ - 'ee/spec/lib/sidebars/groups/menus/administration_menu_spec.rb'
+ - 'ee/spec/lib/sidebars/groups/menus/analytics_menu_spec.rb'
+ - 'ee/spec/lib/sidebars/groups/menus/epics_menu_spec.rb'
+ - 'ee/spec/lib/sidebars/groups/menus/security_compliance_menu_spec.rb'
+ - 'ee/spec/lib/sidebars/groups/menus/wiki_menu_spec.rb'
+ - 'ee/spec/lib/slack/api_spec.rb'
+ - 'ee/spec/lib/slack/block_kit/app_home_opened_spec.rb'
+ - 'ee/spec/lib/slack/block_kit/incident_management/incident_modal_opened_spec.rb'
+ - 'ee/spec/lib/system_check/app/search_check_spec.rb'
+ - 'ee/spec/lib/system_check/rake_task/geo_task_spec.rb'
+ - 'ee/spec/mailers/ci_minutes_usage_mailer_spec.rb'
+ - 'ee/spec/mailers/credentials_inventory_mailer_spec.rb'
+ - 'ee/spec/mailers/devise_mailer_spec.rb'
+ - 'ee/spec/mailers/ee/emails/admin_notification_spec.rb'
+ - 'ee/spec/mailers/ee/emails/identity_verification_spec.rb'
+ - 'ee/spec/mailers/ee/emails/issues_spec.rb'
+ - 'ee/spec/mailers/ee/emails/merge_requests_spec.rb'
+ - 'ee/spec/mailers/ee/emails/profile_spec.rb'
+ - 'ee/spec/mailers/ee/emails/projects_spec.rb'
+ - 'ee/spec/mailers/emails/epics_spec.rb'
+ - 'ee/spec/mailers/emails/free_user_cap_spec.rb'
+ - 'ee/spec/mailers/emails/group_memberships_spec.rb'
+ - 'ee/spec/mailers/emails/in_product_marketing_spec.rb'
+ - 'ee/spec/mailers/emails/merge_commits_spec.rb'
+ - 'ee/spec/mailers/emails/namespace_storage_usage_mailer_spec.rb'
+ - 'ee/spec/mailers/emails/requirements_spec.rb'
+ - 'ee/spec/mailers/emails/user_cap_spec.rb'
+ - 'ee/spec/mailers/license_mailer_spec.rb'
+ - 'ee/spec/mailers/notify_spec.rb'
+ - 'ee/spec/models/alert_management/alert_payload_field_spec.rb'
+ - 'ee/spec/models/allowed_email_domain_spec.rb'
+ - 'ee/spec/models/analytics/cycle_analytics/aggregation_context_spec.rb'
+ - 'ee/spec/models/analytics/cycle_analytics/group_level_spec.rb'
+ - 'ee/spec/models/analytics/cycle_analytics/project_stage_spec.rb'
+ - 'ee/spec/models/analytics/cycle_analytics/runtime_limiter_spec.rb'
+ - 'ee/spec/models/analytics/devops_adoption/enabled_namespace_spec.rb'
+ - 'ee/spec/models/analytics/devops_adoption/snapshot_spec.rb'
+ - 'ee/spec/models/analytics/issues_analytics_spec.rb'
+ - 'ee/spec/models/analytics/language_trend/repository_language_spec.rb'
+ - 'ee/spec/models/app_sec/fuzzing/api/ci_configuration_spec.rb'
+ - 'ee/spec/models/app_sec/fuzzing/coverage/corpus_spec.rb'
+ - 'ee/spec/models/application_setting_spec.rb'
+ - 'ee/spec/models/approval_merge_request_rule_spec.rb'
+ - 'ee/spec/models/approval_project_rule_spec.rb'
+ - 'ee/spec/models/approval_state_spec.rb'
+ - 'ee/spec/models/approval_wrapped_any_approver_rule_spec.rb'
+ - 'ee/spec/models/approval_wrapped_code_owner_rule_spec.rb'
+ - 'ee/spec/models/approval_wrapped_rule_spec.rb'
+ - 'ee/spec/models/approvals/scan_finding_wrapped_rule_set_spec.rb'
+ - 'ee/spec/models/approvals/wrapped_rule_set_spec.rb'
+ - 'ee/spec/models/approver_group_spec.rb'
+ - 'ee/spec/models/audit_events/external_audit_event_destination_spec.rb'
+ - 'ee/spec/models/audit_events/streaming/event_type_filter_spec.rb'
+ - 'ee/spec/models/audit_events/streaming/header_spec.rb'
+ - 'ee/spec/models/board_assignee_spec.rb'
+ - 'ee/spec/models/board_label_spec.rb'
+ - 'ee/spec/models/board_spec.rb'
+ - 'ee/spec/models/board_user_preference_spec.rb'
+ - 'ee/spec/models/boards/epic_board_label_spec.rb'
+ - 'ee/spec/models/boards/epic_board_position_spec.rb'
+ - 'ee/spec/models/boards/epic_board_recent_visit_spec.rb'
+ - 'ee/spec/models/boards/epic_board_spec.rb'
+ - 'ee/spec/models/boards/epic_list_spec.rb'
+ - 'ee/spec/models/boards/epic_list_user_preference_spec.rb'
+ - 'ee/spec/models/boards/epic_user_preference_spec.rb'
+ - 'ee/spec/models/broadcast_message_spec.rb'
+ - 'ee/spec/models/burndown_spec.rb'
+ - 'ee/spec/models/ci/bridge_spec.rb'
+ - 'ee/spec/models/ci/build_spec.rb'
+ - 'ee/spec/models/ci/daily_build_group_report_result_spec.rb'
+ - 'ee/spec/models/ci/minutes/additional_pack_spec.rb'
+ - 'ee/spec/models/ci/minutes/context_spec.rb'
+ - 'ee/spec/models/ci/minutes/namespace_monthly_usage_spec.rb'
+ - 'ee/spec/models/ci/minutes/notification_spec.rb'
+ - 'ee/spec/models/ci/minutes/project_monthly_usage_spec.rb'
+ - 'ee/spec/models/ci/minutes/usage_spec.rb'
+ - 'ee/spec/models/ci/pipeline_spec.rb'
+ - 'ee/spec/models/ci/processable_spec.rb'
+ - 'ee/spec/models/ci/sources/project_spec.rb'
+ - 'ee/spec/models/ci/subscriptions/project_spec.rb'
+ - 'ee/spec/models/commit_spec.rb'
+ - 'ee/spec/models/compliance_management/compliance_framework/project_settings_spec.rb'
+ - 'ee/spec/models/compliance_management/framework_spec.rb'
+ - 'ee/spec/models/concerns/approval_rule_like_spec.rb'
+ - 'ee/spec/models/concerns/approver_migrate_hook_spec.rb'
+ - 'ee/spec/models/concerns/auditable_spec.rb'
+ - 'ee/spec/models/concerns/deprecated_approvals_before_merge_spec.rb'
+ - 'ee/spec/models/concerns/ee/clusters/agents/authorization_config_scopes_spec.rb'
+ - 'ee/spec/models/concerns/ee/issuable_spec.rb'
+ - 'ee/spec/models/concerns/ee/mentionable_spec.rb'
+ - 'ee/spec/models/concerns/ee/milestoneable_spec.rb'
+ - 'ee/spec/models/concerns/ee/noteable_spec.rb'
+ - 'ee/spec/models/concerns/ee/participable_spec.rb'
+ - 'ee/spec/models/concerns/ee/project_security_scanners_information_spec.rb'
+ - 'ee/spec/models/concerns/ee/weight_eventable_spec.rb'
+ - 'ee/spec/models/concerns/elastic/application_versioned_search_spec.rb'
+ - 'ee/spec/models/concerns/elastic/issue_spec.rb'
+ - 'ee/spec/models/concerns/elastic/merge_request_spec.rb'
+ - 'ee/spec/models/concerns/elastic/milestone_spec.rb'
+ - 'ee/spec/models/concerns/elastic/note_spec.rb'
+ - 'ee/spec/models/concerns/elastic/project_spec.rb'
+ - 'ee/spec/models/concerns/elastic/project_wiki_spec.rb'
+ - 'ee/spec/models/concerns/elastic/projects_search_spec.rb'
+ - 'ee/spec/models/concerns/elastic/repository_spec.rb'
+ - 'ee/spec/models/concerns/elastic/snippet_spec.rb'
+ - 'ee/spec/models/concerns/epic_tree_sorting_spec.rb'
+ - 'ee/spec/models/concerns/filterable_by_test_reports_spec.rb'
+ - 'ee/spec/models/concerns/geo/eventable_spec.rb'
+ - 'ee/spec/models/concerns/geo/has_replicator_spec.rb'
+ - 'ee/spec/models/concerns/geo/replicable_model_spec.rb'
+ - 'ee/spec/models/concerns/geo/verifiable_model_spec.rb'
+ - 'ee/spec/models/concerns/geo/verification_state_spec.rb'
+ - 'ee/spec/models/concerns/health_status_spec.rb'
+ - 'ee/spec/models/concerns/identity_verifiable_spec.rb'
+ - 'ee/spec/models/concerns/incident_management/base_pending_escalation_spec.rb'
+ - 'ee/spec/models/concerns/mirror_configuration_spec.rb'
+ - 'ee/spec/models/concerns/password_complexity_spec.rb'
+ - 'ee/spec/models/concerns/scim_paginatable_spec.rb'
+ - 'ee/spec/models/concerns/timebox_spec.rb'
+ - 'ee/spec/models/container_registry/event_spec.rb'
+ - 'ee/spec/models/container_repository_spec.rb'
+ - 'ee/spec/models/dast/branch_spec.rb'
+ - 'ee/spec/models/dast/pre_scan_verification_spec.rb'
+ - 'ee/spec/models/dast/profile_schedule_spec.rb'
+ - 'ee/spec/models/dast/profile_spec.rb'
+ - 'ee/spec/models/dast/profiles_pipeline_spec.rb'
+ - 'ee/spec/models/dast/scanner_profiles_build_spec.rb'
+ - 'ee/spec/models/dast/site_profile_secret_variable_spec.rb'
+ - 'ee/spec/models/dast/site_profiles_build_spec.rb'
+ - 'ee/spec/models/dast_site_spec.rb'
+ - 'ee/spec/models/dast_site_token_spec.rb'
+ - 'ee/spec/models/dast_site_validation_spec.rb'
+ - 'ee/spec/models/deployment_spec.rb'
+ - 'ee/spec/models/deployments/approval_spec.rb'
+ - 'ee/spec/models/deployments/approval_summary_spec.rb'
+ - 'ee/spec/models/dora/base_metric_spec.rb'
+ - 'ee/spec/models/dora/change_failure_rate_metric_spec.rb'
+ - 'ee/spec/models/dora/configuration_spec.rb'
+ - 'ee/spec/models/dora/daily_metrics_spec.rb'
+ - 'ee/spec/models/dora/deployment_frequency_metric_spec.rb'
+ - 'ee/spec/models/dora/lead_time_for_changes_metric_spec.rb'
+ - 'ee/spec/models/dora/time_to_restore_service_metric_spec.rb'
+ - 'ee/spec/models/ee/alert_management/alert_spec.rb'
+ - 'ee/spec/models/ee/analytics/cycle_analytics/stage_event_hash_spec.rb'
+ - 'ee/spec/models/ee/analytics/usage_trends/measurement_spec.rb'
+ - 'ee/spec/models/ee/appearance_spec.rb'
+ - 'ee/spec/models/ee/approvable_spec.rb'
+ - 'ee/spec/models/ee/audit_event_spec.rb'
+ - 'ee/spec/models/ee/award_emoji_spec.rb'
+ - 'ee/spec/models/ee/ci/build_dependencies_spec.rb'
+ - 'ee/spec/models/ee/ci/job_artifact_spec.rb'
+ - 'ee/spec/models/ee/ci/pipeline_artifact_spec.rb'
+ - 'ee/spec/models/ee/ci/secure_file_spec.rb'
+ - 'ee/spec/models/ee/clusters/agent_spec.rb'
+ - 'ee/spec/models/ee/dependency_proxy/blob_spec.rb'
+ - 'ee/spec/models/ee/dependency_proxy/manifest_spec.rb'
+ - 'ee/spec/models/ee/description_version_spec.rb'
+ - 'ee/spec/models/ee/event_collection_spec.rb'
+ - 'ee/spec/models/ee/event_spec.rb'
+ - 'ee/spec/models/ee/gpg_key_spec.rb'
+ - 'ee/spec/models/ee/group_group_link_spec.rb'
+ - 'ee/spec/models/ee/group_spec.rb'
+ - 'ee/spec/models/ee/groups/feature_setting_spec.rb'
+ - 'ee/spec/models/ee/incident_management/project_incident_management_setting_spec.rb'
+ - 'ee/spec/models/ee/integration_spec.rb'
+ - 'ee/spec/models/ee/integrations/jira_spec.rb'
+ - 'ee/spec/models/ee/iteration_spec.rb'
+ - 'ee/spec/models/ee/iterations/cadence_spec.rb'
+ - 'ee/spec/models/ee/key_spec.rb'
+ - 'ee/spec/models/ee/label_spec.rb'
+ - 'ee/spec/models/ee/lfs_object_spec.rb'
+ - 'ee/spec/models/ee/list_spec.rb'
+ - 'ee/spec/models/ee/members_preloader_spec.rb'
+ - 'ee/spec/models/ee/merge_request/metrics_spec.rb'
+ - 'ee/spec/models/ee/merge_request_diff_spec.rb'
+ - 'ee/spec/models/ee/namespace/root_storage_statistics_spec.rb'
+ - 'ee/spec/models/ee/namespace/storage/notification_spec.rb'
+ - 'ee/spec/models/ee/namespace_ci_cd_setting_spec.rb'
+ - 'ee/spec/models/ee/namespace_spec.rb'
+ - 'ee/spec/models/ee/namespace_statistics_spec.rb'
+ - 'ee/spec/models/ee/namespaces/namespace_ban_spec.rb'
+ - 'ee/spec/models/ee/notification_setting_spec.rb'
+ - 'ee/spec/models/ee/pages_deployment_spec.rb'
+ - 'ee/spec/models/ee/personal_access_token_spec.rb'
+ - 'ee/spec/models/ee/preloaders/group_policy_preloader_spec.rb'
+ - 'ee/spec/models/ee/project_authorization_spec.rb'
+ - 'ee/spec/models/ee/project_group_link_spec.rb'
+ - 'ee/spec/models/ee/project_setting_spec.rb'
+ - 'ee/spec/models/ee/project_statistics_spec.rb'
+ - 'ee/spec/models/ee/project_wiki_spec.rb'
+ - 'ee/spec/models/ee/projects/wiki_repository_spec.rb'
+ - 'ee/spec/models/ee/protected_branch_spec.rb'
+ - 'ee/spec/models/ee/protected_ref_access_spec.rb'
+ - 'ee/spec/models/ee/protected_ref_spec.rb'
+ - 'ee/spec/models/ee/release_spec.rb'
+ - 'ee/spec/models/ee/resource_label_event_spec.rb'
+ - 'ee/spec/models/ee/resource_state_event_spec.rb'
+ - 'ee/spec/models/ee/service_desk_setting_spec.rb'
+ - 'ee/spec/models/ee/system_note_metadata_spec.rb'
+ - 'ee/spec/models/ee/terraform/state_version_spec.rb'
+ - 'ee/spec/models/ee/user_highest_role_spec.rb'
+ - 'ee/spec/models/ee/users/merge_request_interaction_spec.rb'
+ - 'ee/spec/models/ee/users_statistics_spec.rb'
+ - 'ee/spec/models/ee/vulnerability_spec.rb'
+ - 'ee/spec/models/ee/work_items/type_spec.rb'
+ - 'ee/spec/models/elastic/index_setting_spec.rb'
+ - 'ee/spec/models/elastic/migration_record_spec.rb'
+ - 'ee/spec/models/elastic/reindexing_slice_spec.rb'
+ - 'ee/spec/models/elastic/reindexing_subtask_spec.rb'
+ - 'ee/spec/models/elastic/reindexing_task_spec.rb'
+ - 'ee/spec/models/elasticsearch_indexed_namespace_spec.rb'
+ - 'ee/spec/models/elasticsearch_indexed_project_spec.rb'
+ - 'ee/spec/models/environment_spec.rb'
+ - 'ee/spec/models/epic/related_epic_link_spec.rb'
+ - 'ee/spec/models/epic_issue_spec.rb'
+ - 'ee/spec/models/epic_spec.rb'
+ - 'ee/spec/models/epic_user_mention_spec.rb'
+ - 'ee/spec/models/geo/cache_invalidation_event_spec.rb'
+ - 'ee/spec/models/geo/ci_secure_file_registry_spec.rb'
+ - 'ee/spec/models/geo/container_repository_registry_spec.rb'
+ - 'ee/spec/models/geo/deleted_project_spec.rb'
+ - 'ee/spec/models/geo/dependency_proxy_blob_registry_spec.rb'
+ - 'ee/spec/models/geo/dependency_proxy_manifest_registry_spec.rb'
+ - 'ee/spec/models/geo/design_registry_spec.rb'
+ - 'ee/spec/models/geo/event_log_spec.rb'
+ - 'ee/spec/models/geo/event_log_state_spec.rb'
+ - 'ee/spec/models/geo/every_geo_event_spec.rb'
+ - 'ee/spec/models/geo/group_wiki_repository_registry_spec.rb'
+ - 'ee/spec/models/geo/hashed_storage_migrated_event_spec.rb'
+ - 'ee/spec/models/geo/job_artifact_registry_spec.rb'
+ - 'ee/spec/models/geo/lfs_object_registry_spec.rb'
+ - 'ee/spec/models/geo/merge_request_diff_registry_spec.rb'
+ - 'ee/spec/models/geo/package_file_registry_spec.rb'
+ - 'ee/spec/models/geo/pages_deployment_registry_spec.rb'
+ - 'ee/spec/models/geo/pipeline_artifact_registry_spec.rb'
+ - 'ee/spec/models/geo/project_registry_spec.rb'
+ - 'ee/spec/models/geo/project_wiki_repository_registry_spec.rb'
+ - 'ee/spec/models/geo/project_wiki_repository_state_spec.rb'
+ - 'ee/spec/models/geo/push_user_spec.rb'
+ - 'ee/spec/models/geo/repositories_changed_event_spec.rb'
+ - 'ee/spec/models/geo/repository_created_event_spec.rb'
+ - 'ee/spec/models/geo/repository_renamed_event_spec.rb'
+ - 'ee/spec/models/geo/repository_updated_event_spec.rb'
+ - 'ee/spec/models/geo/reset_checksum_event_spec.rb'
+ - 'ee/spec/models/geo/secondary_usage_data_spec.rb'
+ - 'ee/spec/models/geo/snippet_repository_registry_spec.rb'
+ - 'ee/spec/models/geo/terraform_state_version_registry_spec.rb'
+ - 'ee/spec/models/geo/tracking_base_spec.rb'
+ - 'ee/spec/models/geo/upload_registry_spec.rb'
+ - 'ee/spec/models/geo/upload_state_spec.rb'
+ - 'ee/spec/models/geo_node_namespace_link_spec.rb'
+ - 'ee/spec/models/geo_node_spec.rb'
+ - 'ee/spec/models/gitlab/seat_link_data_spec.rb'
+ - 'ee/spec/models/gitlab_subscription_history_spec.rb'
+ - 'ee/spec/models/gitlab_subscription_spec.rb'
+ - 'ee/spec/models/gitlab_subscriptions/features_spec.rb'
+ - 'ee/spec/models/gitlab_subscriptions/upcoming_reconciliation_spec.rb'
+ - 'ee/spec/models/group_deletion_schedule_spec.rb'
+ - 'ee/spec/models/group_member_spec.rb'
+ - 'ee/spec/models/group_merge_request_approval_setting_spec.rb'
+ - 'ee/spec/models/group_wiki_repository_spec.rb'
+ - 'ee/spec/models/group_wiki_spec.rb'
+ - 'ee/spec/models/groups/repository_storage_move_spec.rb'
+ - 'ee/spec/models/historical_data_spec.rb'
+ - 'ee/spec/models/hooks/group_hook_spec.rb'
+ - 'ee/spec/models/identity_spec.rb'
+ - 'ee/spec/models/incident_management/escalation_rule_spec.rb'
+ - 'ee/spec/models/incident_management/issuable_escalation_status_spec.rb'
+ - 'ee/spec/models/incident_management/issuable_resource_link_spec.rb'
+ - 'ee/spec/models/incident_management/oncall_participant_spec.rb'
+ - 'ee/spec/models/incident_management/oncall_rotation_spec.rb'
+ - 'ee/spec/models/incident_management/oncall_schedule_spec.rb'
+ - 'ee/spec/models/incident_management/oncall_shift_spec.rb'
+ - 'ee/spec/models/incident_management/pending_escalations/alert_spec.rb'
+ - 'ee/spec/models/incident_management/pending_escalations/issue_spec.rb'
+ - 'ee/spec/models/instance_security_dashboard_spec.rb'
+ - 'ee/spec/models/integrations/chat_message/vulnerability_message_spec.rb'
+ - 'ee/spec/models/integrations/github/remote_project_spec.rb'
+ - 'ee/spec/models/integrations/github/status_message_spec.rb'
+ - 'ee/spec/models/integrations/github/status_notifier_spec.rb'
+ - 'ee/spec/models/integrations/github_spec.rb'
+ - 'ee/spec/models/ip_restriction_spec.rb'
+ - 'ee/spec/models/issuable_metric_image_spec.rb'
+ - 'ee/spec/models/issuable_sla_spec.rb'
+ - 'ee/spec/models/issuables_analytics_spec.rb'
+ - 'ee/spec/models/issue_link_spec.rb'
+ - 'ee/spec/models/iteration_note_spec.rb'
+ - 'ee/spec/models/label_note_spec.rb'
+ - 'ee/spec/models/ldap_group_link_spec.rb'
+ - 'ee/spec/models/license_spec.rb'
+ - 'ee/spec/models/member_spec.rb'
+ - 'ee/spec/models/merge_request/blocking_spec.rb'
+ - 'ee/spec/models/merge_request/suggested_reviewers_merge_request_spec.rb'
+ - 'ee/spec/models/merge_request_block_spec.rb'
+ - 'ee/spec/models/merge_request_spec.rb'
+ - 'ee/spec/models/merge_requests/compliance_violation_spec.rb'
+ - 'ee/spec/models/merge_requests/external_status_check_spec.rb'
+ - 'ee/spec/models/merge_requests/status_check_response_spec.rb'
+ - 'ee/spec/models/merge_train_spec.rb'
+ - 'ee/spec/models/milestone_release_spec.rb'
+ - 'ee/spec/models/milestone_spec.rb'
+ - 'ee/spec/models/namespace_limit_spec.rb'
+ - 'ee/spec/models/namespace_setting_spec.rb'
+ - 'ee/spec/models/namespaces/free_user_cap_spec.rb'
+ - 'ee/spec/models/namespaces/storage/root_excess_size_spec.rb'
+ - 'ee/spec/models/namespaces/storage/root_size_spec.rb'
+ - 'ee/spec/models/note_spec.rb'
+ - 'ee/spec/models/package_metadata/license_spec.rb'
+ - 'ee/spec/models/package_metadata/package_spec.rb'
+ - 'ee/spec/models/package_metadata/package_version_license_spec.rb'
+ - 'ee/spec/models/package_metadata/package_version_spec.rb'
+ - 'ee/spec/models/packages/package_file_spec.rb'
+ - 'ee/spec/models/path_lock_spec.rb'
+ - 'ee/spec/models/plan_spec.rb'
+ - 'ee/spec/models/preloaders/environments/protected_environment_preloader_spec.rb'
+ - 'ee/spec/models/product_analytics/dashboard_spec.rb'
+ - 'ee/spec/models/product_analytics/jitsu_authentication_spec.rb'
+ - 'ee/spec/models/product_analytics/widget_spec.rb'
+ - 'ee/spec/models/productivity_analytics_spec.rb'
+ - 'ee/spec/models/project_alias_spec.rb'
+ - 'ee/spec/models/project_ci_cd_setting_spec.rb'
+ - 'ee/spec/models/project_feature_spec.rb'
+ - 'ee/spec/models/project_import_data_spec.rb'
+ - 'ee/spec/models/project_member_spec.rb'
+ - 'ee/spec/models/project_repository_state_spec.rb'
+ - 'ee/spec/models/project_security_setting_spec.rb'
+ - 'ee/spec/models/project_team_spec.rb'
+ - 'ee/spec/models/protected_branch/required_code_owners_section_spec.rb'
+ - 'ee/spec/models/protected_branch/unprotect_access_level_spec.rb'
+ - 'ee/spec/models/protected_environment_spec.rb'
+ - 'ee/spec/models/protected_environments/approval_rule_spec.rb'
+ - 'ee/spec/models/protected_environments/deploy_access_level_spec.rb'
+ - 'ee/spec/models/push_rule_spec.rb'
+ - 'ee/spec/models/remote_mirror_spec.rb'
+ - 'ee/spec/models/repository_spec.rb'
+ - 'ee/spec/models/requirements_management/requirement_spec.rb'
+ - 'ee/spec/models/saml_group_link_spec.rb'
+ - 'ee/spec/models/saml_provider_spec.rb'
+ - 'ee/spec/models/sca/license_compliance_spec.rb'
+ - 'ee/spec/models/sca/license_policy_spec.rb'
+ - 'ee/spec/models/scoped_label_set_spec.rb'
+ - 'ee/spec/models/security/orchestration_policy_configuration_spec.rb'
+ - 'ee/spec/models/security/orchestration_policy_rule_schedule_spec.rb'
+ - 'ee/spec/models/security/training_provider_spec.rb'
+ - 'ee/spec/models/security/training_spec.rb'
+ - 'ee/spec/models/snippet_repository_spec.rb'
+ - 'ee/spec/models/snippet_spec.rb'
+ - 'ee/spec/models/software_license_policy_spec.rb'
+ - 'ee/spec/models/software_license_spec.rb'
+ - 'ee/spec/models/status_page/project_setting_spec.rb'
+ - 'ee/spec/models/status_page/published_incident_spec.rb'
+ - 'ee/spec/models/storage_shard_spec.rb'
+ - 'ee/spec/models/upload_spec.rb'
+ - 'ee/spec/models/uploads/local_spec.rb'
+ - 'ee/spec/models/user_detail_spec.rb'
+ - 'ee/spec/models/user_permission_export_upload_spec.rb'
+ - 'ee/spec/models/user_preference_spec.rb'
+ - 'ee/spec/models/users_security_dashboard_project_spec.rb'
+ - 'ee/spec/models/visible_approvable_spec.rb'
+ - 'ee/spec/models/vulnerability_user_mention_spec.rb'
+ - 'ee/spec/models/weight_note_spec.rb'
+ - 'ee/spec/models/work_item_spec.rb'
+ - 'ee/spec/models/work_items/progress_spec.rb'
+ - 'ee/spec/models/work_items/widgets/status_spec.rb'
+ - 'ee/spec/policies/app_sec/fuzzing/coverage/corpus_policy_spec.rb'
+ - 'ee/spec/policies/approval_merge_request_rule_policy_spec.rb'
+ - 'ee/spec/policies/approval_project_rule_policy_spec.rb'
+ - 'ee/spec/policies/approval_state_policy_spec.rb'
+ - 'ee/spec/policies/award_emoji_policy_spec.rb'
+ - 'ee/spec/policies/base_policy_spec.rb'
+ - 'ee/spec/policies/ci/build_policy_spec.rb'
+ - 'ee/spec/policies/ci/job_artifact_policy_spec.rb'
+ - 'ee/spec/policies/ci/minutes/namespace_monthly_usage_policy_spec.rb'
+ - 'ee/spec/policies/clusters/instance_policy_spec.rb'
+ - 'ee/spec/policies/compliance_management/framework_policy_spec.rb'
+ - 'ee/spec/policies/dast/branch_policy_spec.rb'
+ - 'ee/spec/policies/dast/profile_policy_spec.rb'
+ - 'ee/spec/policies/dast/profile_schedule_policy_spec.rb'
+ - 'ee/spec/policies/dast_scanner_profile_policy_spec.rb'
+ - 'ee/spec/policies/dast_site_profile_policy_spec.rb'
+ - 'ee/spec/policies/dast_site_validation_policy_spec.rb'
+ - 'ee/spec/policies/ee/namespaces/user_namespace_policy_spec.rb'
+ - 'ee/spec/policies/environment_policy_spec.rb'
+ - 'ee/spec/policies/event_policy_spec.rb'
+ - 'ee/spec/policies/geo/registry_policy_spec.rb'
+ - 'ee/spec/policies/geo_node_policy_spec.rb'
+ - 'ee/spec/policies/group_hook_policy_spec.rb'
+ - 'ee/spec/policies/group_policy_spec.rb'
+ - 'ee/spec/policies/identity_provider_policy_spec.rb'
+ - 'ee/spec/policies/incident_management/oncall_rotation_policy_spec.rb'
+ - 'ee/spec/policies/incident_management/oncall_schedule_policy_spec.rb'
+ - 'ee/spec/policies/incident_management/oncall_shift_policy_spec.rb'
+ - 'ee/spec/policies/instance_security_dashboard_policy_spec.rb'
+ - 'ee/spec/policies/issuable_policy_spec.rb'
+ - 'ee/spec/policies/issue_policy_spec.rb'
+ - 'ee/spec/policies/merge_request_policy_spec.rb'
+ - 'ee/spec/policies/merge_requests/external_status_check_policy_spec.rb'
+ - 'ee/spec/policies/note_policy_spec.rb'
+ - 'ee/spec/policies/path_lock_policy_spec.rb'
+ - 'ee/spec/policies/project_snippet_policy_spec.rb'
+ - 'ee/spec/policies/protected_branch_policy_spec.rb'
+ - 'ee/spec/policies/requirements_management/requirement_policy_spec.rb'
+ - 'ee/spec/policies/saml_provider_policy_spec.rb'
+ - 'ee/spec/policies/security/finding_policy_spec.rb'
+ - 'ee/spec/policies/security/scan_policy_spec.rb'
+ - 'ee/spec/policies/user_policy_spec.rb'
+ - 'ee/spec/policies/vulnerability_policy_spec.rb'
+ - 'ee/spec/presenters/analytics/cycle_analytics/stage_presenter_spec.rb'
+ - 'ee/spec/presenters/approval_rule_presenter_spec.rb'
+ - 'ee/spec/presenters/audit_event_presenter_spec.rb'
+ - 'ee/spec/presenters/ci/build_presenter_spec.rb'
+ - 'ee/spec/presenters/ci/build_runner_presenter_spec.rb'
+ - 'ee/spec/presenters/ci/minutes/usage_presenter_spec.rb'
+ - 'ee/spec/presenters/ci/pipeline_presenter_spec.rb'
+ - 'ee/spec/presenters/dast/site_profile_presenter_spec.rb'
+ - 'ee/spec/presenters/ee/blob_presenter_spec.rb'
+ - 'ee/spec/presenters/ee/clusters/cluster_presenter_spec.rb'
+ - 'ee/spec/presenters/ee/instance_clusterable_presenter_spec.rb'
+ - 'ee/spec/presenters/ee/issue_presenter_spec.rb'
+ - 'ee/spec/presenters/ee/projects/security/configuration_presenter_spec.rb'
+ - 'ee/spec/presenters/epic_presenter_spec.rb'
+ - 'ee/spec/presenters/group_clusterable_presenter_spec.rb'
+ - 'ee/spec/presenters/group_member_presenter_spec.rb'
+ - 'ee/spec/presenters/merge_request_approver_presenter_spec.rb'
+ - 'ee/spec/presenters/merge_request_presenter_spec.rb'
+ - 'ee/spec/presenters/project_clusterable_presenter_spec.rb'
+ - 'ee/spec/presenters/project_member_presenter_spec.rb'
+ - 'ee/spec/presenters/security/scan_presenter_spec.rb'
+ - 'ee/spec/presenters/subscription_presenter_spec.rb'
+ - 'ee/spec/presenters/subscriptions/new_plan_presenter_spec.rb'
+ - 'ee/spec/presenters/vulnerability_presenter_spec.rb'
+ - 'ee/spec/presenters/web_hooks/group/hook_presenter_spec.rb'
+ - 'ee/spec/replicators/geo/ci_secure_file_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/dependency_proxy_blob_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/dependency_proxy_manifest_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/group_wiki_repository_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/job_artifact_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/lfs_object_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/merge_request_diff_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/package_file_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/pages_deployment_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/pipeline_artifact_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/pipeline_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/snippet_repository_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/terraform_state_version_replicator_spec.rb'
+ - 'ee/spec/replicators/geo/upload_replicator_spec.rb'
+ - 'ee/spec/requests/admin/credentials_controller_spec.rb'
+ - 'ee/spec/requests/api/graphql/mutations/work_items/update_spec.rb'
+ - 'ee/spec/requests/api/internal/base_spec.rb'
+ - 'ee/spec/requests/ee/application_controller_spec.rb'
+ - 'ee/spec/requests/projects/analytics/code_reviews_controller_spec.rb'
+ - 'ee/spec/routing/admin_routing_spec.rb'
+ - 'ee/spec/routing/git_http_routing_spec.rb'
+ - 'ee/spec/routing/group_routing_spec.rb'
+ - 'ee/spec/routing/groups/cadences_routing_spec.rb'
+ - 'ee/spec/routing/operations_routing_spec.rb'
+ - 'ee/spec/routing/project_routing_spec.rb'
+ - 'ee/spec/routing/projects/security/configuration_controller_routing_spec.rb'
+ - 'ee/spec/routing/security_routing_spec.rb'
+ - 'ee/spec/routing/uploads_routing_spec.rb'
+ - 'ee/spec/routing/user_routing_spec.rb'
+ - 'ee/spec/routing/webhook_routes_spec.rb'
+ - 'ee/spec/serializers/analytics/cycle_analytics/event_entity_spec.rb'
+ - 'ee/spec/serializers/analytics/cycle_analytics/stage_entity_spec.rb'
+ - 'ee/spec/serializers/analytics/cycle_analytics/value_stream_errors_serializer_spec.rb'
+ - 'ee/spec/serializers/audit_event_entity_spec.rb'
+ - 'ee/spec/serializers/audit_event_serializer_spec.rb'
+ - 'ee/spec/serializers/autocomplete/group_entity_spec.rb'
+ - 'ee/spec/serializers/autocomplete/group_serializer_spec.rb'
+ - 'ee/spec/serializers/blocking_merge_request_entity_spec.rb'
+ - 'ee/spec/serializers/clusters/deployment_entity_spec.rb'
+ - 'ee/spec/serializers/clusters/environment_entity_spec.rb'
+ - 'ee/spec/serializers/clusters/environment_serializer_spec.rb'
+ - 'ee/spec/serializers/dashboard_environment_entity_spec.rb'
+ - 'ee/spec/serializers/dashboard_environments_project_entity_spec.rb'
+ - 'ee/spec/serializers/dashboard_environments_serializer_spec.rb'
+ - 'ee/spec/serializers/dashboard_operations_project_entity_spec.rb'
+ - 'ee/spec/serializers/dependency_entity_spec.rb'
+ - 'ee/spec/serializers/dependency_list_entity_spec.rb'
+ - 'ee/spec/serializers/dependency_list_serializer_spec.rb'
+ - 'ee/spec/serializers/ee/admin/user_entity_spec.rb'
+ - 'ee/spec/serializers/ee/blob_entity_spec.rb'
+ - 'ee/spec/serializers/ee/build_details_entity_spec.rb'
+ - 'ee/spec/serializers/ee/ci/job_entity_spec.rb'
+ - 'ee/spec/serializers/ee/ci/pipeline_entity_spec.rb'
+ - 'ee/spec/serializers/ee/deployment_entity_spec.rb'
+ - 'ee/spec/serializers/ee/environment_serializer_spec.rb'
+ - 'ee/spec/serializers/ee/evidences/release_entity_spec.rb'
+ - 'ee/spec/serializers/ee/group_child_entity_spec.rb'
+ - 'ee/spec/serializers/ee/issue_board_entity_spec.rb'
+ - 'ee/spec/serializers/ee/issue_entity_spec.rb'
+ - 'ee/spec/serializers/ee/issue_sidebar_basic_entity_spec.rb'
+ - 'ee/spec/serializers/ee/issue_sidebar_extras_entity_spec.rb'
+ - 'ee/spec/serializers/ee/merge_request_poll_cached_widget_entity_spec.rb'
+ - 'ee/spec/serializers/ee/note_entity_spec.rb'
+ - 'ee/spec/serializers/ee/user_serializer_spec.rb'
+ - 'ee/spec/serializers/environment_entity_spec.rb'
+ - 'ee/spec/serializers/epic_entity_spec.rb'
+ - 'ee/spec/serializers/epic_note_entity_spec.rb'
+ - 'ee/spec/serializers/evidences/build_artifact_entity_spec.rb'
+ - 'ee/spec/serializers/evidences/evidence_entity_spec.rb'
+ - 'ee/spec/serializers/fork_namespace_entity_spec.rb'
+ - 'ee/spec/serializers/geo_project_registry_entity_spec.rb'
+ - 'ee/spec/serializers/group_vulnerability_autocomplete_entity_spec.rb'
+ - 'ee/spec/serializers/incident_management/escalation_policy_entity_spec.rb'
+ - 'ee/spec/serializers/incident_management/oncall_schedule_entity_spec.rb'
+ - 'ee/spec/serializers/integrations/field_entity_spec.rb'
+ - 'ee/spec/serializers/integrations/jira_serializers/issue_detail_entity_spec.rb'
+ - 'ee/spec/serializers/integrations/jira_serializers/issue_entity_spec.rb'
+ - 'ee/spec/serializers/integrations/jira_serializers/issue_serializer_spec.rb'
+ - 'ee/spec/serializers/integrations/zentao_serializers/issue_entity_spec.rb'
+ - 'ee/spec/serializers/issuable_sidebar_extras_entity_spec.rb'
+ - 'ee/spec/serializers/issue_serializer_spec.rb'
+ - 'ee/spec/serializers/issues/linked_issue_feature_flag_entity_spec.rb'
+ - 'ee/spec/serializers/license_compliance/collapsed_comparer_entity_spec.rb'
+ - 'ee/spec/serializers/license_compliance/comparer_entity_spec.rb'
+ - 'ee/spec/serializers/license_entity_spec.rb'
+ - 'ee/spec/serializers/licenses_list_entity_spec.rb'
+ - 'ee/spec/serializers/licenses_list_serializer_spec.rb'
+ - 'ee/spec/serializers/linked_feature_flag_issue_entity_spec.rb'
+ - 'ee/spec/serializers/member_user_entity_spec.rb'
+ - 'ee/spec/serializers/merge_request_poll_widget_entity_spec.rb'
+ - 'ee/spec/serializers/merge_request_sidebar_basic_entity_spec.rb'
+ - 'ee/spec/serializers/merge_request_widget_entity_spec.rb'
+ - 'ee/spec/serializers/metrics_report_metric_entity_spec.rb'
+ - 'ee/spec/serializers/metrics_reports_comparer_entity_spec.rb'
+ - 'ee/spec/serializers/pipeline_serializer_spec.rb'
+ - 'ee/spec/serializers/productivity_analytics_merge_request_entity_spec.rb'
+ - 'ee/spec/serializers/protected_environments/deploy_access_level_entity_spec.rb'
+ - 'ee/spec/serializers/protected_environments/entity_spec.rb'
+ - 'ee/spec/serializers/scim_oauth_access_token_entity_spec.rb'
+ - 'ee/spec/serializers/security/license_policy_entity_spec.rb'
+ - 'ee/spec/serializers/security/vulnerability_report_data_entity_spec.rb'
+ - 'ee/spec/serializers/security/vulnerability_report_data_serializer_spec.rb'
+ - 'ee/spec/serializers/status_page/incident_comment_entity_spec.rb'
+ - 'ee/spec/serializers/status_page/incident_entity_spec.rb'
+ - 'ee/spec/serializers/status_page/incident_serializer_spec.rb'
+ - 'ee/spec/serializers/status_page/renderer_spec.rb'
+ - 'ee/spec/serializers/storage_shard_entity_spec.rb'
+ - 'ee/spec/serializers/test_reports_comparer_entity_spec.rb'
+ - 'ee/spec/serializers/test_reports_comparer_serializer_spec.rb'
+ - 'ee/spec/serializers/test_suite_comparer_entity_spec.rb'
+ - 'ee/spec/serializers/user_analytics_entity_spec.rb'
+ - 'ee/spec/serializers/vulnerability_entity_spec.rb'
+ - 'ee/spec/serializers/vulnerability_note_entity_spec.rb'
+ - 'ee/spec/services/admin/email_service_spec.rb'
+ - 'ee/spec/services/alert_management/extract_alert_payload_fields_service_spec.rb'
+ - 'ee/spec/services/alert_management/process_prometheus_alert_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/aggregator_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/consistency_check_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/data_loader_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/stages/create_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/stages/delete_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/stages/list_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/stages/update_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/value_streams/create_service_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/value_streams/update_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/enabled_namespaces/bulk_delete_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/enabled_namespaces/bulk_find_or_create_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/enabled_namespaces/create_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/enabled_namespaces/delete_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/enabled_namespaces/find_or_create_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/snapshots/calculate_and_save_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/snapshots/create_service_spec.rb'
+ - 'ee/spec/services/analytics/devops_adoption/snapshots/update_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/builds/associate_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/pipelines/find_latest_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/profile_schedules/audit/update_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/profiles/audit/update_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/profiles/build_config_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/profiles/create_associations_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/profiles/create_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/profiles/destroy_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/profiles/update_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/scan_configs/fetch_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/scans/create_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/scans/run_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_profile_secret_variables/create_or_update_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_profile_secret_variables/destroy_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_profiles/audit/update_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_profiles/create_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_profiles/destroy_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_profiles/update_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_tokens/find_or_create_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_validations/find_or_create_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_validations/revoke_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/site_validations/runner_service_spec.rb'
+ - 'ee/spec/services/app_sec/dast/sites/find_or_create_service_spec.rb'
+ - 'ee/spec/services/app_sec/fuzzing/api/ci_configuration_create_service_spec.rb'
+ - 'ee/spec/services/app_sec/fuzzing/coverage/corpuses/create_service_spec.rb'
+ - 'ee/spec/services/application_settings/update_service_spec.rb'
+ - 'ee/spec/services/applications/create_service_spec.rb'
+ - 'ee/spec/services/approval_rules/create_service_spec.rb'
+ - 'ee/spec/services/approval_rules/finalize_service_spec.rb'
+ - 'ee/spec/services/approval_rules/merge_request_rule_destroy_service_spec.rb'
+ - 'ee/spec/services/approval_rules/params_filtering_service_spec.rb'
+ - 'ee/spec/services/approval_rules/project_rule_destroy_service_spec.rb'
+ - 'ee/spec/services/approval_rules/update_service_spec.rb'
+ - 'ee/spec/services/arkose/blocked_users_report_service_spec.rb'
+ - 'ee/spec/services/arkose/record_user_data_service_spec.rb'
+ - 'ee/spec/services/arkose/token_verification_service_spec.rb'
+ - 'ee/spec/services/audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/build_service_spec.rb'
+ - 'ee/spec/services/audit_events/custom_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/export_csv_service_spec.rb'
+ - 'ee/spec/services/audit_events/impersonation_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/protected_branch_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/register_runner_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/release_artifacts_downloaded_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/release_associate_milestone_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/release_created_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/release_updated_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/repository_download_started_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/runner_custom_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/runners_token_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/streaming/event_type_filters/create_service_spec.rb'
+ - 'ee/spec/services/audit_events/streaming/event_type_filters/destroy_service_spec.rb'
+ - 'ee/spec/services/audit_events/streaming/headers/base_spec.rb'
+ - 'ee/spec/services/audit_events/streaming/headers/create_service_spec.rb'
+ - 'ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb'
+ - 'ee/spec/services/audit_events/streaming/headers/update_service_spec.rb'
+ - 'ee/spec/services/audit_events/unregister_runner_audit_event_service_spec.rb'
+ - 'ee/spec/services/audit_events/user_impersonation_group_audit_event_service_spec.rb'
+ - 'ee/spec/services/auto_merge/add_to_merge_train_when_pipeline_succeeds_service_spec.rb'
+ - 'ee/spec/services/auto_merge/merge_train_service_spec.rb'
+ - 'ee/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb'
+ - 'ee/spec/services/award_emojis/add_service_spec.rb'
+ - 'ee/spec/services/award_emojis/destroy_service_spec.rb'
+ - 'ee/spec/services/base_count_service_spec.rb'
+ - 'ee/spec/services/billable_members/destroy_service_spec.rb'
+ - 'ee/spec/services/boards/create_service_spec.rb'
+ - 'ee/spec/services/boards/epic_boards/create_service_spec.rb'
+ - 'ee/spec/services/boards/epic_boards/destroy_service_spec.rb'
+ - 'ee/spec/services/boards/epic_boards/update_service_spec.rb'
+ - 'ee/spec/services/boards/epic_boards/visits/create_service_spec.rb'
+ - 'ee/spec/services/boards/epic_lists/create_service_spec.rb'
+ - 'ee/spec/services/boards/epic_lists/destroy_service_spec.rb'
+ - 'ee/spec/services/boards/epic_lists/list_service_spec.rb'
+ - 'ee/spec/services/boards/epic_lists/update_service_spec.rb'
+ - 'ee/spec/services/boards/epic_user_preferences/update_service_spec.rb'
+ - 'ee/spec/services/boards/epics/create_service_spec.rb'
+ - 'ee/spec/services/boards/epics/list_service_spec.rb'
+ - 'ee/spec/services/boards/epics/move_service_spec.rb'
+ - 'ee/spec/services/boards/lists/update_service_spec.rb'
+ - 'ee/spec/services/boards/update_service_spec.rb'
+ - 'ee/spec/services/boards/user_preferences/update_service_spec.rb'
+ - 'ee/spec/services/branches/delete_service_spec.rb'
+ - 'ee/spec/services/ci/audit_variable_change_service_spec.rb'
+ - 'ee/spec/services/ci/compare_license_scanning_reports_collapsed_service_spec.rb'
+ - 'ee/spec/services/ci/compare_license_scanning_reports_service_spec.rb'
+ - 'ee/spec/services/ci/compare_metrics_reports_service_spec.rb'
+ - 'ee/spec/services/ci/compare_security_reports_service_spec.rb'
+ - 'ee/spec/services/ci/copy_cross_database_associations_service_spec.rb'
+ - 'ee/spec/services/ci/create_pipeline_service/compliance_spec.rb'
+ - 'ee/spec/services/ci/create_pipeline_service/cross_needs_artifacts_spec.rb'
+ - 'ee/spec/services/ci/create_pipeline_service/dast_configuration_spec.rb'
+ - 'ee/spec/services/ci/create_pipeline_service/needs_spec.rb'
+ - 'ee/spec/services/ci/create_pipeline_service/runnable_builds_spec.rb'
+ - 'ee/spec/services/ci/create_pipeline_service_spec.rb'
+ - 'ee/spec/services/ci/destroy_pipeline_service_spec.rb'
+ - 'ee/spec/services/ci/external_pull_requests/process_github_event_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/additional_packs/change_namespace_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/additional_packs/create_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/batch_reset_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/email_notification_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/refresh_cached_data_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/reset_usage_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/track_live_consumption_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/update_build_minutes_service_spec.rb'
+ - 'ee/spec/services/ci/minutes/update_project_and_namespace_usage_service_spec.rb'
+ - 'ee/spec/services/ci/pipeline_bridge_status_service_spec.rb'
+ - 'ee/spec/services/ci/pipeline_creation/drop_not_runnable_builds_service_spec.rb'
+ - 'ee/spec/services/ci/pipeline_creation/start_pipeline_service_spec.rb'
+ - 'ee/spec/services/ci/pipeline_trigger_service_spec.rb'
+ - 'ee/spec/services/ci/play_bridge_service_spec.rb'
+ - 'ee/spec/services/ci/play_build_service_spec.rb'
+ - 'ee/spec/services/ci/process_build_service_spec.rb'
+ - 'ee/spec/services/ci/process_pipeline_service_spec.rb'
+ - 'ee/spec/services/ci/register_job_service_spec.rb'
+ - 'ee/spec/services/ci/retry_job_service_spec.rb'
+ - 'ee/spec/services/ci/retry_pipeline_service_spec.rb'
+ - 'ee/spec/services/ci/subscribe_bridge_service_spec.rb'
+ - 'ee/spec/services/ci/trigger_downstream_subscription_service_spec.rb'
+ - 'ee/spec/services/ci_cd/github_integration_setup_service_spec.rb'
+ - 'ee/spec/services/ci_cd/github_setup_service_spec.rb'
+ - 'ee/spec/services/ci_cd/setup_project_spec.rb'
+ - 'ee/spec/services/compliance_management/frameworks/create_service_spec.rb'
+ - 'ee/spec/services/compliance_management/frameworks/destroy_service_spec.rb'
+ - 'ee/spec/services/compliance_management/frameworks/update_service_spec.rb'
+ - 'ee/spec/services/compliance_management/merge_requests/create_compliance_violations_service_spec.rb'
+ - 'ee/spec/services/concerns/epics/related_epic_links/usage_data_helper_spec.rb'
+ - 'ee/spec/services/dashboard/environments/list_service_spec.rb'
+ - 'ee/spec/services/dashboard/operations/list_service_spec.rb'
+ - 'ee/spec/services/dashboard/projects/create_service_spec.rb'
+ - 'ee/spec/services/dashboard/projects/list_service_spec.rb'
+ - 'ee/spec/services/deploy_keys/create_service_spec.rb'
+ - 'ee/spec/services/deployments/auto_rollback_service_spec.rb'
+ - 'ee/spec/services/dora/aggregate_metrics_service_spec.rb'
+ - 'ee/spec/services/ee/admin/set_feature_flag_service_spec.rb'
+ - 'ee/spec/services/ee/alert_management/alerts/update_service_spec.rb'
+ - 'ee/spec/services/ee/alert_management/create_alert_issue_service_spec.rb'
+ - 'ee/spec/services/ee/alert_management/http_integrations/create_service_spec.rb'
+ - 'ee/spec/services/ee/alert_management/http_integrations/update_service_spec.rb'
+ - 'ee/spec/services/ee/allowed_email_domains/update_service_spec.rb'
+ - 'ee/spec/services/ee/auth/container_registry_authentication_service_spec.rb'
+ - 'ee/spec/services/ee/auto_merge_service_spec.rb'
+ - 'ee/spec/services/ee/boards/issues/create_service_spec.rb'
+ - 'ee/spec/services/ee/boards/issues/list_service_spec.rb'
+ - 'ee/spec/services/ee/boards/issues/move_service_spec.rb'
+ - 'ee/spec/services/ee/boards/lists/create_service_spec.rb'
+ - 'ee/spec/services/ee/boards/lists/list_service_spec.rb'
+ - 'ee/spec/services/ee/boards/lists/max_limits_spec.rb'
+ - 'ee/spec/services/ee/ci/change_variable_service_spec.rb'
+ - 'ee/spec/services/ee/ci/change_variables_service_spec.rb'
+ - 'ee/spec/services/ee/ci/job_artifacts/create_service_spec.rb'
+ - 'ee/spec/services/ee/ci/job_artifacts/destroy_all_expired_service_spec.rb'
+ - 'ee/spec/services/ee/ci/job_artifacts/destroy_batch_service_spec.rb'
+ - 'ee/spec/services/ee/ci/pipeline_processing/atomic_processing_service_spec.rb'
+ - 'ee/spec/services/ee/commits/create_service_spec.rb'
+ - 'ee/spec/services/ee/deployments/update_environment_service_spec.rb'
+ - 'ee/spec/services/ee/design_management/delete_designs_service_spec.rb'
+ - 'ee/spec/services/ee/design_management/save_designs_service_spec.rb'
+ - 'ee/spec/services/ee/event_create_service_spec.rb'
+ - 'ee/spec/services/ee/git/branch_push_service_spec.rb'
+ - 'ee/spec/services/ee/git/wiki_push_service_spec.rb'
+ - 'ee/spec/services/ee/gpg_keys/create_service_spec.rb'
+ - 'ee/spec/services/ee/gpg_keys/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/groups/autocomplete_service_spec.rb'
+ - 'ee/spec/services/ee/groups/deploy_tokens/create_service_spec.rb'
+ - 'ee/spec/services/ee/groups/deploy_tokens/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/groups/deploy_tokens/revoke_service_spec.rb'
+ - 'ee/spec/services/ee/groups/import_export/export_service_spec.rb'
+ - 'ee/spec/services/ee/groups/import_export/import_service_spec.rb'
+ - 'ee/spec/services/ee/incident_management/issuable_escalation_statuses/after_update_service_spec.rb'
+ - 'ee/spec/services/ee/incident_management/issuable_escalation_statuses/create_service_spec.rb'
+ - 'ee/spec/services/ee/incident_management/issuable_escalation_statuses/prepare_update_service_spec.rb'
+ - 'ee/spec/services/ee/integrations/slack_interactions/incident_management/incident_modal_opened_service_spec.rb'
+ - 'ee/spec/services/ee/integrations/test/project_service_spec.rb'
+ - 'ee/spec/services/ee/ip_restrictions/update_service_spec.rb'
+ - 'ee/spec/services/ee/issuable/bulk_update_service_spec.rb'
+ - 'ee/spec/services/ee/issuable/common_system_notes_service_spec.rb'
+ - 'ee/spec/services/ee/issuable/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/issue_links/create_service_spec.rb'
+ - 'ee/spec/services/ee/issues/after_create_service_spec.rb'
+ - 'ee/spec/services/ee/issues/build_from_vulnerability_service_spec.rb'
+ - 'ee/spec/services/ee/issues/clone_service_spec.rb'
+ - 'ee/spec/services/ee/issues/create_from_vulnerability_data_service_spec.rb'
+ - 'ee/spec/services/ee/issues/move_service_spec.rb'
+ - 'ee/spec/services/ee/keys/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/labels/create_service_spec.rb'
+ - 'ee/spec/services/ee/labels/promote_service_spec.rb'
+ - 'ee/spec/services/ee/members/create_service_spec.rb'
+ - 'ee/spec/services/ee/members/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/members/import_project_team_service_spec.rb'
+ - 'ee/spec/services/ee/members/invite_service_spec.rb'
+ - 'ee/spec/services/ee/members/update_service_spec.rb'
+ - 'ee/spec/services/ee/merge_request_metrics_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/base_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/create_approval_event_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/create_from_vulnerability_data_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/create_pipeline_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/create_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/execute_approval_hooks_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/handle_assignees_change_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/post_merge_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/refresh_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/update_assignees_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/update_reviewers_service_spec.rb'
+ - 'ee/spec/services/ee/merge_requests/update_service_spec.rb'
+ - 'ee/spec/services/ee/namespace_settings/update_service_spec.rb'
+ - 'ee/spec/services/ee/notes/create_service_spec.rb'
+ - 'ee/spec/services/ee/notes/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/notes/post_process_service_spec.rb'
+ - 'ee/spec/services/ee/notes/quick_actions_service_spec.rb'
+ - 'ee/spec/services/ee/notes/update_service_spec.rb'
+ - 'ee/spec/services/ee/notification_service_spec.rb'
+ - 'ee/spec/services/ee/null_notification_service_spec.rb'
+ - 'ee/spec/services/ee/personal_access_tokens/revoke_service_spec.rb'
+ - 'ee/spec/services/ee/post_receive_service_spec.rb'
+ - 'ee/spec/services/ee/preview_markdown_service_spec.rb'
+ - 'ee/spec/services/ee/projects/autocomplete_service_spec.rb'
+ - 'ee/spec/services/ee/projects/deploy_tokens/create_service_spec.rb'
+ - 'ee/spec/services/ee/projects/deploy_tokens/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/projects/unlink_fork_service_spec.rb'
+ - 'ee/spec/services/ee/protected_branches/create_service_spec.rb'
+ - 'ee/spec/services/ee/protected_branches/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/protected_branches/update_service_spec.rb'
+ - 'ee/spec/services/ee/quick_actions/target_service_spec.rb'
+ - 'ee/spec/services/ee/releases/create_evidence_service_spec.rb'
+ - 'ee/spec/services/ee/resource_events/change_iteration_service_spec.rb'
+ - 'ee/spec/services/ee/resource_events/change_labels_service_spec.rb'
+ - 'ee/spec/services/ee/resource_events/merge_into_notes_service_spec.rb'
+ - 'ee/spec/services/ee/resource_events/synthetic_iteration_notes_builder_service_spec.rb'
+ - 'ee/spec/services/ee/resource_events/synthetic_weight_notes_builder_service_spec.rb'
+ - 'ee/spec/services/ee/system_notes/issuables_service_spec.rb'
+ - 'ee/spec/services/ee/terraform/states/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/todos/destroy/entity_leave_service_spec.rb'
+ - 'ee/spec/services/ee/users/approve_service_spec.rb'
+ - 'ee/spec/services/ee/users/authorized_build_service_spec.rb'
+ - 'ee/spec/services/ee/users/block_service_spec.rb'
+ - 'ee/spec/services/ee/users/build_service_spec.rb'
+ - 'ee/spec/services/ee/users/create_service_spec.rb'
+ - 'ee/spec/services/ee/users/destroy_service_spec.rb'
+ - 'ee/spec/services/ee/users/migrate_records_to_ghost_user_service_spec.rb'
+ - 'ee/spec/services/ee/users/reject_service_spec.rb'
+ - 'ee/spec/services/ee/users/update_service_spec.rb'
+ - 'ee/spec/services/ee/vulnerability_feedback_module/update_service_spec.rb'
+ - 'ee/spec/services/elastic/cluster_reindexing_service_spec.rb'
+ - 'ee/spec/services/elastic/data_migration_service_spec.rb'
+ - 'ee/spec/services/elastic/index_projects_by_id_service_spec.rb'
+ - 'ee/spec/services/elastic/index_projects_by_range_service_spec.rb'
+ - 'ee/spec/services/elastic/index_projects_service_spec.rb'
+ - 'ee/spec/services/elastic/indexing_control_service_spec.rb'
+ - 'ee/spec/services/elastic/metrics_update_service_spec.rb'
+ - 'ee/spec/services/elastic/process_initial_bookkeeping_service_spec.rb'
+ - 'ee/spec/services/emails/create_service_spec.rb'
+ - 'ee/spec/services/emails/destroy_service_spec.rb'
+ - 'ee/spec/services/epic_issues/destroy_service_spec.rb'
+ - 'ee/spec/services/epic_issues/list_service_spec.rb'
+ - 'ee/spec/services/epic_issues/update_service_spec.rb'
+ - 'ee/spec/services/epics/close_service_spec.rb'
+ - 'ee/spec/services/epics/create_service_spec.rb'
+ - 'ee/spec/services/epics/descendant_count_service_spec.rb'
+ - 'ee/spec/services/epics/epic_links/list_service_spec.rb'
+ - 'ee/spec/services/epics/issue_promote_service_spec.rb'
+ - 'ee/spec/services/epics/reopen_service_spec.rb'
+ - 'ee/spec/services/epics/transfer_service_spec.rb'
+ - 'ee/spec/services/epics/update_dates_service_spec.rb'
+ - 'ee/spec/services/epics/update_service_spec.rb'
+ - 'ee/spec/services/external_status_checks/create_service_spec.rb'
+ - 'ee/spec/services/external_status_checks/destroy_service_spec.rb'
+ - 'ee/spec/services/external_status_checks/dispatch_service_spec.rb'
+ - 'ee/spec/services/external_status_checks/update_service_spec.rb'
+ - 'ee/spec/services/feature_flag_issues/destroy_service_spec.rb'
+ - 'ee/spec/services/geo/base_file_service_spec.rb'
+ - 'ee/spec/services/geo/blob_download_service_spec.rb'
+ - 'ee/spec/services/geo/blob_upload_service_spec.rb'
+ - 'ee/spec/services/geo/cache_invalidation_event_store_spec.rb'
+ - 'ee/spec/services/geo/container_repository_registry_removal_service_spec.rb'
+ - 'ee/spec/services/geo/container_repository_sync_service_spec.rb'
+ - 'ee/spec/services/geo/container_repository_sync_spec.rb'
+ - 'ee/spec/services/geo/design_repository_sync_service_spec.rb'
+ - 'ee/spec/services/geo/event_service_spec.rb'
+ - 'ee/spec/services/geo/file_registry_removal_service_spec.rb'
+ - 'ee/spec/services/geo/files_expire_service_spec.rb'
+ - 'ee/spec/services/geo/framework_repository_sync_service_spec.rb'
+ - 'ee/spec/services/geo/graphql_request_service_spec.rb'
+ - 'ee/spec/services/geo/hashed_storage_attachments_event_store_spec.rb'
+ - 'ee/spec/services/geo/hashed_storage_attachments_migration_service_spec.rb'
+ - 'ee/spec/services/geo/hashed_storage_migrated_event_store_spec.rb'
+ - 'ee/spec/services/geo/hashed_storage_migration_service_spec.rb'
+ - 'ee/spec/services/geo/metrics_update_service_spec.rb'
+ - 'ee/spec/services/geo/move_repository_service_spec.rb'
+ - 'ee/spec/services/geo/node_create_service_spec.rb'
+ - 'ee/spec/services/geo/node_status_request_service_spec.rb'
+ - 'ee/spec/services/geo/node_update_service_spec.rb'
+ - 'ee/spec/services/geo/project_housekeeping_service_spec.rb'
+ - 'ee/spec/services/geo/prune_event_log_service_spec.rb'
+ - 'ee/spec/services/geo/rename_repository_service_spec.rb'
+ - 'ee/spec/services/geo/replication_toggle_request_service_spec.rb'
+ - 'ee/spec/services/geo/repositories_changed_event_store_spec.rb'
+ - 'ee/spec/services/geo/repository_base_sync_service_spec.rb'
+ - 'ee/spec/services/geo/repository_created_event_store_spec.rb'
+ - 'ee/spec/services/geo/repository_deleted_event_store_spec.rb'
+ - 'ee/spec/services/geo/repository_destroy_service_spec.rb'
+ - 'ee/spec/services/geo/repository_registry_removal_service_spec.rb'
+ - 'ee/spec/services/geo/repository_renamed_event_store_spec.rb'
+ - 'ee/spec/services/geo/repository_sync_service_spec.rb'
+ - 'ee/spec/services/geo/repository_updated_event_store_spec.rb'
+ - 'ee/spec/services/geo/repository_updated_service_spec.rb'
+ - 'ee/spec/services/geo/repository_verification_primary_service_spec.rb'
+ - 'ee/spec/services/geo/repository_verification_reset_spec.rb'
+ - 'ee/spec/services/geo/repository_verification_secondary_service_spec.rb'
+ - 'ee/spec/services/geo/reset_checksum_event_store_spec.rb'
+ - 'ee/spec/services/geo/wiki_sync_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/activate_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/check_future_renewal_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/create_hand_raise_lead_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/create_lead_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/create_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/create_trial_or_lead_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/extend_reactivate_trial_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/fetch_purchase_eligible_namespaces_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/fetch_subscription_plans_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/plan_upgrade_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/preview_billable_user_change_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/reconciliations/calculate_seat_count_data_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/reconciliations/check_seat_usage_alerts_eligibility_service_spec.rb'
+ - 'ee/spec/services/gitlab_subscriptions/trials/apply_trial_service_spec.rb'
+ - 'ee/spec/services/group_saml/group_managed_accounts/clean_up_members_service_spec.rb'
+ - 'ee/spec/services/group_saml/group_managed_accounts/transfer_membership_service_spec.rb'
+ - 'ee/spec/services/group_saml/identity/destroy_service_spec.rb'
+ - 'ee/spec/services/group_saml/saml_group_links/create_service_spec.rb'
+ - 'ee/spec/services/group_saml/saml_group_links/destroy_service_spec.rb'
+ - 'ee/spec/services/group_saml/saml_provider/create_service_spec.rb'
+ - 'ee/spec/services/group_saml/saml_provider/update_service_spec.rb'
+ - 'ee/spec/services/group_saml/sign_up_service_spec.rb'
+ - 'ee/spec/services/groups/create_service_spec.rb'
+ - 'ee/spec/services/groups/destroy_service_spec.rb'
+ - 'ee/spec/services/groups/epics_count_service_spec.rb'
+ - 'ee/spec/services/groups/mark_for_deletion_service_spec.rb'
+ - 'ee/spec/services/groups/memberships/export_service_spec.rb'
+ - 'ee/spec/services/groups/participants_service_spec.rb'
+ - 'ee/spec/services/groups/restore_service_spec.rb'
+ - 'ee/spec/services/groups/schedule_bulk_repository_shard_moves_service_spec.rb'
+ - 'ee/spec/services/groups/seat_usage_export_service_spec.rb'
+ - 'ee/spec/services/groups/transfer_service_spec.rb'
+ - 'ee/spec/services/groups/update_repository_storage_service_spec.rb'
+ - 'ee/spec/services/groups/update_service_spec.rb'
+ - 'ee/spec/services/historical_user_data/csv_service_spec.rb'
+ - 'ee/spec/services/ide/schemas_config_service_spec.rb'
+ - 'ee/spec/services/incident_management/create_incident_sla_exceeded_label_service_spec.rb'
+ - 'ee/spec/services/incident_management/escalation_policies/create_service_spec.rb'
+ - 'ee/spec/services/incident_management/escalation_policies/destroy_service_spec.rb'
+ - 'ee/spec/services/incident_management/escalation_policies/update_service_spec.rb'
+ - 'ee/spec/services/incident_management/escalation_rules/destroy_service_spec.rb'
+ - 'ee/spec/services/incident_management/incidents/create_sla_service_spec.rb'
+ - 'ee/spec/services/incident_management/incidents/upload_metric_service_spec.rb'
+ - 'ee/spec/services/incident_management/issuable_resource_links/create_service_spec.rb'
+ - 'ee/spec/services/incident_management/issuable_resource_links/destroy_service_spec.rb'
+ - 'ee/spec/services/incident_management/issuable_resource_links/zoom_link_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_rotations/create_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_rotations/destroy_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_rotations/edit_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_rotations/remove_participant_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_rotations/remove_participants_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_schedules/create_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_schedules/destroy_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_schedules/update_service_spec.rb'
+ - 'ee/spec/services/incident_management/oncall_shifts/read_service_spec.rb'
+ - 'ee/spec/services/incident_management/pending_escalations/create_service_spec.rb'
+ - 'ee/spec/services/incident_management/pending_escalations/process_service_spec.rb'
+ - 'ee/spec/services/integrations/slack_event_service_spec.rb'
+ - 'ee/spec/services/integrations/slack_events/app_home_opened_service_spec.rb'
+ - 'ee/spec/services/integrations/slack_events/url_verification_service_spec.rb'
+ - 'ee/spec/services/integrations/slack_interactions/incident_management/incident_modal_closed_service_spec.rb'
+ - 'ee/spec/services/issuable/destroy_label_links_service_spec.rb'
+ - 'ee/spec/services/issuable/discussions_list_service_spec.rb'
+ - 'ee/spec/services/issue_feature_flags/list_service_spec.rb'
+ - 'ee/spec/services/issues/build_service_spec.rb'
+ - 'ee/spec/services/issues/duplicate_service_spec.rb'
+ - 'ee/spec/services/issues/export_csv_service_spec.rb'
+ - 'ee/spec/services/iterations/cadences/create_iterations_in_advance_service_spec.rb'
+ - 'ee/spec/services/iterations/cadences/create_service_spec.rb'
+ - 'ee/spec/services/iterations/cadences/destroy_service_spec.rb'
+ - 'ee/spec/services/iterations/cadences/update_service_spec.rb'
+ - 'ee/spec/services/iterations/create_service_spec.rb'
+ - 'ee/spec/services/iterations/delete_service_spec.rb'
+ - 'ee/spec/services/iterations/roll_over_issues_service_spec.rb'
+ - 'ee/spec/services/iterations/update_service_spec.rb'
+ - 'ee/spec/services/jira/jql_builder_service_spec.rb'
+ - 'ee/spec/services/jira/requests/issues/list_service_spec.rb'
+ - 'ee/spec/services/keys/create_service_spec.rb'
+ - 'ee/spec/services/keys/last_used_service_spec.rb'
+ - 'ee/spec/services/ldap_group_reset_service_spec.rb'
+ - 'ee/spec/services/lfs/lock_file_service_spec.rb'
+ - 'ee/spec/services/lfs/unlock_file_service_spec.rb'
+ - 'ee/spec/services/licenses/destroy_service_spec.rb'
+ - 'ee/spec/services/members/activate_service_spec.rb'
+ - 'ee/spec/services/members/await_service_spec.rb'
+ - 'ee/spec/services/merge_commits/export_csv_service_spec.rb'
+ - 'ee/spec/services/merge_request_approval_settings/update_service_spec.rb'
+ - 'ee/spec/services/merge_requests/approval_service_spec.rb'
+ - 'ee/spec/services/merge_requests/build_service_spec.rb'
+ - 'ee/spec/services/merge_requests/capture_suggested_reviewers_accepted_service_spec.rb'
+ - 'ee/spec/services/merge_requests/fetch_suggested_reviewers_service_spec.rb'
+ - 'ee/spec/services/merge_requests/merge_service_spec.rb'
+ - 'ee/spec/services/merge_requests/merge_to_ref_service_spec.rb'
+ - 'ee/spec/services/merge_requests/mergeability/check_approved_service_spec.rb'
+ - 'ee/spec/services/merge_requests/mergeability/check_blocked_by_other_mrs_service_spec.rb'
+ - 'ee/spec/services/merge_requests/mergeability/check_denied_policies_service_spec.rb'
+ - 'ee/spec/services/merge_requests/mergeability/check_external_status_checks_passed_service_spec.rb'
+ - 'ee/spec/services/merge_requests/push_options_handler_service_spec.rb'
+ - 'ee/spec/services/merge_requests/reload_merge_head_diff_service_spec.rb'
+ - 'ee/spec/services/merge_requests/remove_approval_service_spec.rb'
+ - 'ee/spec/services/merge_requests/reset_approvals_service_spec.rb'
+ - 'ee/spec/services/merge_requests/stream_approval_audit_event_service_spec.rb'
+ - 'ee/spec/services/merge_requests/sync_code_owner_approval_rules_spec.rb'
+ - 'ee/spec/services/merge_requests/sync_report_approver_approval_rules_spec.rb'
+ - 'ee/spec/services/merge_requests/update_blocks_service_spec.rb'
+ - 'ee/spec/services/merge_trains/check_status_service_spec.rb'
+ - 'ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb'
+ - 'ee/spec/services/merge_trains/refresh_service_spec.rb'
+ - 'ee/spec/services/milestones/destroy_service_spec.rb'
+ - 'ee/spec/services/milestones/promote_service_spec.rb'
+ - 'ee/spec/services/milestones/update_service_spec.rb'
+ - 'ee/spec/services/namespaces/in_product_marketing_emails_service_spec.rb'
+ - 'ee/spec/services/namespaces/storage/email_notification_service_spec.rb'
+ - 'ee/spec/services/path_locks/lock_service_spec.rb'
+ - 'ee/spec/services/path_locks/unlock_service_spec.rb'
+ - 'ee/spec/services/personal_access_tokens/create_service_audit_log_spec.rb'
+ - 'ee/spec/services/personal_access_tokens/groups/update_lifetime_service_spec.rb'
+ - 'ee/spec/services/personal_access_tokens/instance/update_lifetime_service_spec.rb'
+ - 'ee/spec/services/personal_access_tokens/revoke_invalid_tokens_spec.rb'
+ - 'ee/spec/services/personal_access_tokens/revoke_service_audit_log_spec.rb'
+ - 'ee/spec/services/personal_access_tokens/rotation_verifier_service_spec.rb'
+ - 'ee/spec/services/phone_verification/telesign_client/base_service_spec.rb'
+ - 'ee/spec/services/phone_verification/telesign_client/risk_score_service_spec.rb'
+ - 'ee/spec/services/phone_verification/telesign_client/send_verification_code_service_spec.rb'
+ - 'ee/spec/services/phone_verification/telesign_client/verify_code_service_spec.rb'
+ - 'ee/spec/services/phone_verification/users/send_verification_code_service_spec.rb'
+ - 'ee/spec/services/product_analytics/initialize_stack_service_spec.rb'
+ - 'ee/spec/services/projects/after_rename_service_spec.rb'
+ - 'ee/spec/services/projects/alerting/notify_service_spec.rb'
+ - 'ee/spec/services/projects/cleanup_service_spec.rb'
+ - 'ee/spec/services/projects/create_from_template_service_spec.rb'
+ - 'ee/spec/services/projects/create_service_spec.rb'
+ - 'ee/spec/services/projects/destroy_service_spec.rb'
+ - 'ee/spec/services/projects/disable_deploy_key_service_spec.rb'
+ - 'ee/spec/services/projects/disable_legacy_inactive_projects_service_spec.rb'
+ - 'ee/spec/services/projects/enable_deploy_key_service_spec.rb'
+ - 'ee/spec/services/projects/fork_service_spec.rb'
+ - 'ee/spec/services/projects/gitlab_projects_import_service_spec.rb'
+ - 'ee/spec/services/projects/group_links/create_service_spec.rb'
+ - 'ee/spec/services/projects/group_links/destroy_service_spec.rb'
+ - 'ee/spec/services/projects/group_links/update_service_spec.rb'
+ - 'ee/spec/services/projects/hashed_storage/migrate_attachments_service_spec.rb'
+ - 'ee/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb'
+ - 'ee/spec/services/projects/import_export/export_service_spec.rb'
+ - 'ee/spec/services/projects/import_service_spec.rb'
+ - 'ee/spec/services/projects/mark_for_deletion_service_spec.rb'
+ - 'ee/spec/services/projects/open_issues_count_service_spec.rb'
+ - 'ee/spec/services/projects/operations/update_service_spec.rb'
+ - 'ee/spec/services/projects/prometheus/alerts/notify_service_spec.rb'
+ - 'ee/spec/services/projects/protect_default_branch_service_spec.rb'
+ - 'ee/spec/services/projects/register_suggested_reviewers_project_service_spec.rb'
+ - 'ee/spec/services/projects/restore_service_spec.rb'
+ - 'ee/spec/services/projects/setup_ci_cd_spec.rb'
+ - 'ee/spec/services/projects/transfer_service_spec.rb'
+ - 'ee/spec/services/projects/update_mirror_service_spec.rb'
+ - 'ee/spec/services/projects/update_service_spec.rb'
+ - 'ee/spec/services/protected_environments/base_service_spec.rb'
+ - 'ee/spec/services/protected_environments/environment_dropdown_service_spec.rb'
+ - 'ee/spec/services/protected_environments/search_service_spec.rb'
+ - 'ee/spec/services/protected_environments/update_service_spec.rb'
+ - 'ee/spec/services/push_rules/create_or_update_service_spec.rb'
+ - 'ee/spec/services/quality_management/test_cases/create_service_spec.rb'
+ - 'ee/spec/services/registrations/import_namespace_create_service_spec.rb'
+ - 'ee/spec/services/registrations/standard_namespace_create_service_spec.rb'
+ - 'ee/spec/services/releases/create_service_spec.rb'
+ - 'ee/spec/services/releases/update_service_spec.rb'
+ - 'ee/spec/services/requirements_management/export_csv_service_spec.rb'
+ - 'ee/spec/services/requirements_management/import_csv_service_spec.rb'
+ - 'ee/spec/services/requirements_management/map_export_fields_service_spec.rb'
+ - 'ee/spec/services/requirements_management/prepare_import_csv_service_spec.rb'
+ - 'ee/spec/services/requirements_management/process_test_reports_service_spec.rb'
+ - 'ee/spec/services/resource_access_tokens/create_service_spec.rb'
+ - 'ee/spec/services/resource_access_tokens/revoke_service_spec.rb'
+ - 'ee/spec/services/resource_events/change_weight_service_spec.rb'
+ - 'ee/spec/services/search/snippet_service_spec.rb'
+ - 'ee/spec/services/security/auto_fix_label_service_spec.rb'
+ - 'ee/spec/services/security/auto_fix_service_spec.rb'
+ - 'ee/spec/services/security/configuration/save_auto_fix_service_spec.rb'
+ - 'ee/spec/services/security/dependency_list_service_spec.rb'
+ - 'ee/spec/services/security/findings/dismiss_service_spec.rb'
+ - 'ee/spec/services/security/ingestion/finding_map_collection_spec.rb'
+ - 'ee/spec/services/security/ingestion/finding_map_spec.rb'
+ - 'ee/spec/services/security/ingestion/ingest_report_service_spec.rb'
+ - 'ee/spec/services/security/ingestion/ingest_report_slice_service_spec.rb'
+ - 'ee/spec/services/security/ingestion/ingest_reports_service_spec.rb'
+ - 'ee/spec/services/security/ingestion/mark_as_resolved_service_spec.rb'
+ - 'ee/spec/services/security/ingestion/schedule_mark_dropped_as_resolved_service_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/attach_findings_to_vulnerabilities_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/hooks_execution_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_finding_evidence_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_finding_identifiers_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_finding_links_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_finding_pipelines_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_finding_signatures_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_findings_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_identifiers_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_issue_links_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_remediations_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_vulnerabilities/mark_resolved_as_detected_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_vulnerabilities_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/ingest_vulnerability_statistics_spec.rb'
+ - 'ee/spec/services/security/ingestion/tasks/update_vulnerability_uuids_spec.rb'
+ - 'ee/spec/services/security/merge_reports_service_spec.rb'
+ - 'ee/spec/services/security/orchestration/assign_service_spec.rb'
+ - 'ee/spec/services/security/orchestration/unassign_service_spec.rb'
+ - 'ee/spec/services/security/override_uuids_service_spec.rb'
+ - 'ee/spec/services/security/purge_scans_service_spec.rb'
+ - 'ee/spec/services/security/report_fetch_service_spec.rb'
+ - 'ee/spec/services/security/report_summary_service_spec.rb'
+ - 'ee/spec/services/security/scanned_resources_counting_service_spec.rb'
+ - 'ee/spec/services/security/scanned_resources_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/fetch_policy_approvers_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/fetch_policy_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/on_demand_scan_pipeline_configuration_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/operational_vulnerabilities_configuration_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/policy_configuration_validation_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/process_policy_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/process_rule_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/project_create_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/rule_schedule_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/sync_open_merge_requests_head_pipeline_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/sync_opened_merge_requests_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/sync_scan_result_policies_service_spec.rb'
+ - 'ee/spec/services/security/security_orchestration_policies/validate_policy_service_spec.rb'
+ - 'ee/spec/services/security/store_findings_service_spec.rb'
+ - 'ee/spec/services/security/store_grouped_scans_service_spec.rb'
+ - 'ee/spec/services/security/store_scan_service_spec.rb'
+ - 'ee/spec/services/security/store_scans_service_spec.rb'
+ - 'ee/spec/services/security/token_revocation_service_spec.rb'
+ - 'ee/spec/services/security/track_scan_service_spec.rb'
+ - 'ee/spec/services/security/update_training_service_spec.rb'
+ - 'ee/spec/services/security/vulnerability_counting_service_spec.rb'
+ - 'ee/spec/services/sitemap/create_service_spec.rb'
+ - 'ee/spec/services/slash_commands/global_slack_handler_spec.rb'
+ - 'ee/spec/services/software_license_policies/update_service_spec.rb'
+ - 'ee/spec/services/start_pull_mirroring_service_spec.rb'
+ - 'ee/spec/services/status_page/mark_for_publication_service_spec.rb'
+ - 'ee/spec/services/status_page/publish_attachments_service_spec.rb'
+ - 'ee/spec/services/status_page/publish_details_service_spec.rb'
+ - 'ee/spec/services/status_page/publish_list_service_spec.rb'
+ - 'ee/spec/services/status_page/publish_service_spec.rb'
+ - 'ee/spec/services/status_page/trigger_publish_service_spec.rb'
+ - 'ee/spec/services/status_page/unpublish_details_service_spec.rb'
+ - 'ee/spec/services/system_note_service_spec.rb'
+ - 'ee/spec/services/system_notes/epics_service_spec.rb'
+ - 'ee/spec/services/system_notes/escalations_service_spec.rb'
+ - 'ee/spec/services/system_notes/merge_train_service_spec.rb'
+ - 'ee/spec/services/system_notes/vulnerabilities_service_spec.rb'
+ - 'ee/spec/services/timebox_report_service_spec.rb'
+ - 'ee/spec/services/todo_service_spec.rb'
+ - 'ee/spec/services/todos/allowed_target_filter_service_spec.rb'
+ - 'ee/spec/services/todos/destroy/confidential_epic_service_spec.rb'
+ - 'ee/spec/services/upcoming_reconciliations/update_service_spec.rb'
+ - 'ee/spec/services/user_permissions/export_service_spec.rb'
+ - 'ee/spec/services/users/abuse/git_abuse/application_throttle_service_spec.rb'
+ - 'ee/spec/services/users/abuse/git_abuse/namespace_throttle_service_spec.rb'
+ - 'ee/spec/services/users/abuse/namespace_bans/create_service_spec.rb'
+ - 'ee/spec/services/users/abuse/namespace_bans/destroy_service_spec.rb'
+ - 'ee/spec/services/users/abuse/projects_download_ban_check_service_spec.rb'
+ - 'ee/spec/services/users/captcha_challenge_service_spec.rb'
+ - 'ee/spec/services/users/update_highest_member_role_service_spec.rb'
+ - 'ee/spec/services/users_ops_dashboard_projects/destroy_service_spec.rb'
+ - 'ee/spec/services/vulnerability_exports/create_service_spec.rb'
+ - 'ee/spec/services/vulnerability_exports/export_service_spec.rb'
+ - 'ee/spec/services/vulnerability_exports/exporters/csv_service_spec.rb'
+ - 'ee/spec/services/vulnerability_external_issue_links/create_service_spec.rb'
+ - 'ee/spec/services/vulnerability_external_issue_links/destroy_service_spec.rb'
+ - 'ee/spec/services/vulnerability_feedback/destroy_service_spec.rb'
+ - 'ee/spec/services/vulnerability_issue_links/create_service_spec.rb'
+ - 'ee/spec/services/vulnerability_issue_links/delete_service_spec.rb'
+ - 'ee/spec/services/vulnerability_merge_request_links/create_service_spec.rb'
+ - 'ee/spec/services/vulnerability_scanners/list_service_spec.rb'
+ - 'ee/spec/services/web_hook_service_spec.rb'
+ - 'ee/spec/services/wiki_pages/create_service_spec.rb'
+ - 'ee/spec/services/wiki_pages/destroy_service_spec.rb'
+ - 'ee/spec/services/wiki_pages/update_service_spec.rb'
+ - 'ee/spec/services/wikis/create_attachment_service_spec.rb'
+ - 'ee/spec/services/work_items/update_service_spec.rb'
+ - 'ee/spec/services/work_items/widgets/status_service/update_service_spec.rb'
+ - 'ee/spec/services/work_items/widgets/weight_service/update_service_spec.rb'
+ - 'ee/spec/tasks/geo/git_rake_spec.rb'
+ - 'ee/spec/tasks/gitlab/check_rake_spec.rb'
+ - 'ee/spec/tasks/gitlab/elastic_rake_spec.rb'
+ - 'ee/spec/tasks/gitlab/license_rake_spec.rb'
+ - 'ee/spec/tasks/gitlab/seed/group_seed_rake_spec.rb'
+ - 'ee/spec/tasks/gitlab/spdx_rake_spec.rb'
+ - 'ee/spec/uploaders/every_gitlab_uploader_spec.rb'
+ - 'ee/spec/validators/json_schema_validator_spec.rb'
+ - 'ee/spec/validators/ldap_filter_validator_spec.rb'
+ - 'ee/spec/validators/password/complexity_validator_spec.rb'
+ - 'ee/spec/validators/user_existence_validator_spec.rb'
+ - 'ee/spec/views/admin/application_settings/_deletion_protection_settings.html.haml_spec.rb'
+ - 'ee/spec/views/admin/application_settings/_elasticsearch_form.html.haml_spec.rb'
+ - 'ee/spec/views/admin/application_settings/_git_abuse_rate_limit.html.haml_spec.rb'
+ - 'ee/spec/views/admin/application_settings/general.html.haml_spec.rb'
+ - 'ee/spec/views/admin/dashboard/index.html.haml_spec.rb'
+ - 'ee/spec/views/admin/dev_ops_report/show.html.haml_spec.rb'
+ - 'ee/spec/views/admin/groups/_form.html.haml_spec.rb'
+ - 'ee/spec/views/admin/identities/index.html.haml_spec.rb'
+ - 'ee/spec/views/admin/push_rules/_merge_request_approvals.html.haml_spec.rb'
+ - 'ee/spec/views/admin/users/_credit_card_info.html.haml_spec.rb'
+ - 'ee/spec/views/admin/users/index.html.haml_spec.rb'
+ - 'ee/spec/views/admin/users/show.html.haml_spec.rb'
+ - 'ee/spec/views/clusters/clusters/show.html.haml_spec.rb'
+ - 'ee/spec/views/compliance_management/compliance_framework/_compliance_framework_badge.html.haml_spec.rb'
+ - 'ee/spec/views/compliance_management/compliance_framework/_project_settings.html.haml_spec.rb'
+ - 'ee/spec/views/devise/registrations/new.html.haml_spec.rb'
+ - 'ee/spec/views/devise/sessions/new.html.haml_spec.rb'
+ - 'ee/spec/views/groups/_compliance_frameworks.html.haml_spec.rb'
+ - 'ee/spec/views/groups/analytics/dashboards/index.html.haml_spec.rb'
+ - 'ee/spec/views/groups/billings/index.html.haml_spec.rb'
+ - 'ee/spec/views/groups/compliance_frameworks/edit.html.haml_spec.rb'
+ - 'ee/spec/views/groups/compliance_frameworks/new.html.haml_spec.rb'
+ - 'ee/spec/views/groups/edit.html.haml_spec.rb'
+ - 'ee/spec/views/groups/feature_discovery_moments/advanced_features_dashboard.html.haml_spec.rb'
+ - 'ee/spec/views/groups/group_members/index.html.haml_spec.rb'
+ - 'ee/spec/views/groups/hook_logs/show.html.haml_spec.rb'
+ - 'ee/spec/views/groups/hooks/edit.html.haml_spec.rb'
+ - 'ee/spec/views/groups/security/discover/show.html.haml_spec.rb'
+ - 'ee/spec/views/groups/settings/_remove.html.haml_spec.rb'
+ - 'ee/spec/views/groups/settings/reporting/show.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/_search.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/application.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/checkout.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/group.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/header/_current_user_dropdown.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/header/_ee_subscribable_banner.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/header/_new_dropdown.haml_spec.rb'
+ - 'ee/spec/views/layouts/header/_read_only_banner.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/header/help_dropdown/_cross_stage_fdm.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/nav/sidebar/_push_rules_link.html.haml_spec.rb'
+ - 'ee/spec/views/layouts/project.html.haml_spec.rb'
+ - 'ee/spec/views/operations/environments.html.haml_spec.rb'
+ - 'ee/spec/views/operations/index.html.haml_spec.rb'
+ - 'ee/spec/views/profiles/preferences/show.html.haml_spec.rb'
+ - 'ee/spec/views/projects/_merge_request_status_checks_settings.html.haml_spec.rb'
+ - 'ee/spec/views/projects/edit.html.haml_spec.rb'
+ - 'ee/spec/views/projects/issues/show.html.haml_spec.rb'
+ - 'ee/spec/views/projects/on_demand_scans/index.html.haml_spec.rb'
+ - 'ee/spec/views/projects/project_members/index.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/corpus_management/show.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/dast_profiles/show.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/dast_scanner_profiles/edit.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/dast_scanner_profiles/new.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/dast_site_profiles/edit.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/dast_site_profiles/new.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/discover/show.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/policies/index.html.haml_spec.rb'
+ - 'ee/spec/views/projects/security/sast_configuration/show.html.haml_spec.rb'
+ - 'ee/spec/views/projects/settings/merge_requests/_merge_request_approvals.html.haml_spec.rb'
+ - 'ee/spec/views/projects/settings/merge_requests/_suggested_reviewers_settings.html.haml_spec.rb'
+ - 'ee/spec/views/projects/settings/subscriptions/_index.html.haml_spec.rb'
+ - 'ee/spec/views/registrations/company/new.html.haml_spec.rb'
+ - 'ee/spec/views/registrations/groups_projects/new.html.haml_spec.rb'
+ - 'ee/spec/views/registrations/welcome/continuous_onboarding_getting_started.html.haml_spec.rb'
+ - 'ee/spec/views/registrations/welcome/show.html.haml_spec.rb'
+ - 'ee/spec/views/shared/_clone_panel.html.haml_spec.rb'
+ - 'ee/spec/views/shared/_kerberos_clone_button.html.haml_spec.rb'
+ - 'ee/spec/views/shared/_mirror_status.html.haml_spec.rb'
+ - 'ee/spec/views/shared/_mirror_update_button.html.haml_spec.rb'
+ - 'ee/spec/views/shared/_namespace_user_cap_reached_alert.html.haml_spec.rb'
+ - 'ee/spec/views/shared/billings/_billing_plan.html.haml_spec.rb'
+ - 'ee/spec/views/shared/billings/_billing_plan_actions.html.haml_spec.rb'
+ - 'ee/spec/views/shared/billings/_billing_plans.html.haml_spec.rb'
+ - 'ee/spec/views/shared/billings/_eoa_bronze_plan_banner.html.haml_spec.rb'
+ - 'ee/spec/views/shared/billings/_trial_status.html.haml_spec.rb'
+ - 'ee/spec/views/shared/credentials_inventory/_expiry_date.html.haml_spec.rb'
+ - 'ee/spec/views/shared/credentials_inventory/gpg_keys/_gpg_key.html.haml_spec.rb'
+ - 'ee/spec/views/shared/credentials_inventory/personal_access_tokens/_personal_access_token.html.haml_spec.rb'
+ - 'ee/spec/views/shared/credentials_inventory/resource_access_tokens/_resource_access_token.html.haml_spec.rb'
+ - 'ee/spec/views/shared/credentials_inventory/ssh_keys/_ssh_key.html.haml_spec.rb'
+ - 'ee/spec/views/shared/issuable/_approver_suggestion.html.haml_spec.rb'
+ - 'ee/spec/views/shared/issuable/_epic_dropdown.html.haml_spec.rb'
+ - 'ee/spec/views/shared/issuable/_health_status_dropdown.html.haml_spec.rb'
+ - 'ee/spec/views/shared/issuable/_iterations_dropdown.html.haml_spec.rb'
+ - 'ee/spec/views/shared/issuable/_sidebar.html.haml_spec.rb'
+ - 'ee/spec/views/shared/labels/_create_label_help_text.html.haml_spec.rb'
+ - 'ee/spec/views/shared/milestones/_milestone.html.haml_spec.rb'
+ - 'ee/spec/views/shared/promotions/_promotion_link_project.html.haml_spec.rb'
+ - 'ee/spec/views/subscriptions/buy_minutes.html.haml_spec.rb'
+ - 'ee/spec/views/subscriptions/buy_storage.html.haml_spec.rb'
+ - 'ee/spec/views/subscriptions/groups/edit.html.haml_spec.rb'
+ - 'ee/spec/views/subscriptions/new.html.haml_spec.rb'
+ - 'ee/spec/views/trial_registrations/new.html.haml_spec.rb'
+ - 'ee/spec/workers/active_user_count_threshold_worker_spec.rb'
+ - 'ee/spec/workers/adjourned_group_deletion_worker_spec.rb'
+ - 'ee/spec/workers/adjourned_project_deletion_worker_spec.rb'
+ - 'ee/spec/workers/adjourned_projects_deletion_cron_worker_spec.rb'
+ - 'ee/spec/workers/admin_emails_worker_spec.rb'
+ - 'ee/spec/workers/analytics/code_review_metrics_worker_spec.rb'
+ - 'ee/spec/workers/analytics/cycle_analytics/consistency_worker_spec.rb'
+ - 'ee/spec/workers/analytics/cycle_analytics/incremental_worker_spec.rb'
+ - 'ee/spec/workers/analytics/cycle_analytics/reaggregation_worker_spec.rb'
+ - 'ee/spec/workers/analytics/devops_adoption/create_all_snapshots_worker_spec.rb'
+ - 'ee/spec/workers/analytics/devops_adoption/create_snapshot_worker_spec.rb'
+ - 'ee/spec/workers/app_sec/dast/profile_schedule_worker_spec.rb'
+ - 'ee/spec/workers/app_sec/dast/scanner_profiles_builds/consistency_worker_spec.rb'
+ - 'ee/spec/workers/app_sec/dast/scans/consistency_worker_spec.rb'
+ - 'ee/spec/workers/app_sec/dast/site_profiles_builds/consistency_worker_spec.rb'
+ - 'ee/spec/workers/approval_rules/external_approval_rule_payload_worker_spec.rb'
+ - 'ee/spec/workers/audit_events/user_impersonation_event_create_worker_spec.rb'
+ - 'ee/spec/workers/auth/saml_group_sync_worker_spec.rb'
+ - 'ee/spec/workers/ci/batch_reset_minutes_worker_spec.rb'
+ - 'ee/spec/workers/ci/initial_pipeline_process_worker_spec.rb'
+ - 'ee/spec/workers/ci/minutes/refresh_cached_data_worker_spec.rb'
+ - 'ee/spec/workers/ci/minutes/update_project_and_namespace_usage_worker_spec.rb'
+ - 'ee/spec/workers/ci/runners/stale_group_runners_prune_cron_worker_spec.rb'
+ - 'ee/spec/workers/ci/sync_reports_to_report_approval_rules_worker_spec.rb'
+ - 'ee/spec/workers/ci/trigger_downstream_subscriptions_worker_spec.rb'
+ - 'ee/spec/workers/ci/upstream_projects_subscriptions_cleanup_worker_spec.rb'
+ - 'ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb'
+ - 'ee/spec/workers/compliance_management/chain_of_custody_report_worker_spec.rb'
+ - 'ee/spec/workers/compliance_management/merge_requests/compliance_violations_worker_spec.rb'
+ - 'ee/spec/workers/compliance_management/update_default_framework_worker_spec.rb'
+ - 'ee/spec/workers/concerns/elastic/indexing_control_spec.rb'
+ - 'ee/spec/workers/concerns/elastic/migration_obsolete_spec.rb'
+ - 'ee/spec/workers/concerns/elastic/migration_options_spec.rb'
+ - 'ee/spec/workers/concerns/geo_queue_spec.rb'
+ - 'ee/spec/workers/concerns/update_orchestration_policy_configuration_spec.rb'
+ - 'ee/spec/workers/create_github_webhook_worker_spec.rb'
+ - 'ee/spec/workers/deployments/auto_rollback_worker_spec.rb'
+ - 'ee/spec/workers/dora/daily_metrics/refresh_worker_spec.rb'
+ - 'ee/spec/workers/ee/arkose/blocked_users_report_worker_spec.rb'
+ - 'ee/spec/workers/ee/ci/build_finished_worker_spec.rb'
+ - 'ee/spec/workers/ee/issuable_export_csv_worker_spec.rb'
+ - 'ee/spec/workers/ee/namespaces/in_product_marketing_emails_worker_spec.rb'
+ - 'ee/spec/workers/ee/namespaces/root_statistics_worker_spec.rb'
+ - 'ee/spec/workers/ee/projects/inactive_projects_deletion_cron_worker_spec.rb'
+ - 'ee/spec/workers/ee/repository_check/batch_worker_spec.rb'
+ - 'ee/spec/workers/ee/repository_check/single_repository_worker_spec.rb'
+ - 'ee/spec/workers/elastic/migration_worker_spec.rb'
+ - 'ee/spec/workers/elastic/project_transfer_worker_spec.rb'
+ - 'ee/spec/workers/elastic_association_indexer_worker_spec.rb'
+ - 'ee/spec/workers/elastic_cluster_reindexing_cron_worker_spec.rb'
+ - 'ee/spec/workers/elastic_commit_indexer_worker_spec.rb'
+ - 'ee/spec/workers/elastic_full_index_worker_spec.rb'
+ - 'ee/spec/workers/elastic_index_bulk_cron_worker_spec.rb'
+ - 'ee/spec/workers/elastic_index_initial_bulk_cron_worker_spec.rb'
+ - 'ee/spec/workers/elastic_indexing_control_worker_spec.rb'
+ - 'ee/spec/workers/elastic_namespace_indexer_worker_spec.rb'
+ - 'ee/spec/workers/elastic_namespace_rollout_worker_spec.rb'
+ - 'ee/spec/workers/elastic_remove_expired_namespace_subscriptions_from_index_cron_worker_spec.rb'
+ - 'ee/spec/workers/epics/new_epic_issue_worker_spec.rb'
+ - 'ee/spec/workers/epics/update_cached_metadata_worker_spec.rb'
+ - 'ee/spec/workers/geo/batch/project_registry_scheduler_worker_spec.rb'
+ - 'ee/spec/workers/geo/batch/project_registry_worker_spec.rb'
+ - 'ee/spec/workers/geo/batch_event_create_worker_spec.rb'
+ - 'ee/spec/workers/geo/container_repository_sync_worker_spec.rb'
+ - 'ee/spec/workers/geo/create_repository_updated_event_worker_spec.rb'
+ - 'ee/spec/workers/geo/design_repository_shard_sync_worker_spec.rb'
+ - 'ee/spec/workers/geo/design_repository_sync_worker_spec.rb'
+ - 'ee/spec/workers/geo/destroy_worker_spec.rb'
+ - 'ee/spec/workers/geo/event_worker_spec.rb'
+ - 'ee/spec/workers/geo/file_registry_removal_worker_spec.rb'
+ - 'ee/spec/workers/geo/metrics_update_worker_spec.rb'
+ - 'ee/spec/workers/geo/prune_event_log_worker_spec.rb'
+ - 'ee/spec/workers/geo/repositories_clean_up_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_cleanup_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_shard_sync_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_sync_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_verification/secondary/shard_worker_spec.rb'
+ - 'ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb'
+ - 'ee/spec/workers/geo/reverification_batch_worker_spec.rb'
+ - 'ee/spec/workers/geo/scheduler/per_shard_scheduler_worker_spec.rb'
+ - 'ee/spec/workers/geo/scheduler/scheduler_worker_spec.rb'
+ - 'ee/spec/workers/geo/secondary/registry_consistency_worker_spec.rb'
+ - 'ee/spec/workers/geo/secondary_usage_data_cron_worker_spec.rb'
+ - 'ee/spec/workers/geo/sidekiq_cron_config_worker_spec.rb'
+ - 'ee/spec/workers/geo/sync_timeout_cron_worker_spec.rb'
+ - 'ee/spec/workers/geo/verification_batch_worker_spec.rb'
+ - 'ee/spec/workers/geo/verification_cron_worker_spec.rb'
+ - 'ee/spec/workers/geo/verification_state_backfill_service_spec.rb'
+ - 'ee/spec/workers/geo/verification_state_backfill_worker_spec.rb'
+ - 'ee/spec/workers/geo/verification_worker_spec.rb'
+ - 'ee/spec/workers/geo_repository_destroy_worker_spec.rb'
+ - 'ee/spec/workers/gitlab_subscriptions/trials/apply_trial_worker_spec.rb'
+ - 'ee/spec/workers/group_saml_group_sync_worker_spec.rb'
+ - 'ee/spec/workers/groups/create_event_worker_spec.rb'
+ - 'ee/spec/workers/groups/export_memberships_worker_spec.rb'
+ - 'ee/spec/workers/groups/schedule_bulk_repository_shard_moves_worker_spec.rb'
+ - 'ee/spec/workers/groups/update_repository_storage_worker_spec.rb'
+ - 'ee/spec/workers/historical_data_worker_spec.rb'
+ - 'ee/spec/workers/import_software_licenses_worker_spec.rb'
+ - 'ee/spec/workers/incident_management/apply_incident_sla_exceeded_label_worker_spec.rb'
+ - 'ee/spec/workers/incident_management/incident_sla_exceeded_check_worker_spec.rb'
+ - 'ee/spec/workers/incident_management/oncall_rotations/persist_all_rotations_shifts_job_spec.rb'
+ - 'ee/spec/workers/incident_management/oncall_rotations/persist_shifts_job_spec.rb'
+ - 'ee/spec/workers/incident_management/pending_escalations/alert_check_worker_spec.rb'
+ - 'ee/spec/workers/incident_management/pending_escalations/alert_create_worker_spec.rb'
+ - 'ee/spec/workers/incident_management/pending_escalations/issue_check_worker_spec.rb'
+ - 'ee/spec/workers/incident_management/pending_escalations/issue_create_worker_spec.rb'
+ - 'ee/spec/workers/incident_management/pending_escalations/schedule_check_cron_worker_spec.rb'
+ - 'ee/spec/workers/integrations/slack_event_worker_spec.rb'
+ - 'ee/spec/workers/iterations/cadences/create_iterations_worker_spec.rb'
+ - 'ee/spec/workers/iterations/cadences/schedule_create_iterations_worker_spec.rb'
+ - 'ee/spec/workers/iterations/roll_over_issues_worker_spec.rb'
+ - 'ee/spec/workers/iterations_update_status_worker_spec.rb'
+ - 'ee/spec/workers/ldap_all_groups_sync_worker_spec.rb'
+ - 'ee/spec/workers/ldap_group_sync_worker_spec.rb'
+ - 'ee/spec/workers/ldap_sync_worker_spec.rb'
+ - 'ee/spec/workers/licenses/reset_submit_license_usage_data_banner_worker_spec.rb'
+ - 'ee/spec/workers/merge_request_reset_approvals_worker_spec.rb'
+ - 'ee/spec/workers/merge_requests/capture_suggested_reviewers_accepted_worker_spec.rb'
+ - 'ee/spec/workers/merge_requests/stream_approval_audit_event_worker_spec.rb'
+ - 'ee/spec/workers/merge_requests/sync_code_owner_approval_rules_worker_spec.rb'
+ - 'ee/spec/workers/merge_trains/refresh_worker_spec.rb'
+ - 'ee/spec/workers/namespaces/sync_namespace_name_worker_spec.rb'
+ - 'ee/spec/workers/new_epic_worker_spec.rb'
+ - 'ee/spec/workers/onboarding/create_learn_gitlab_worker_spec.rb'
+ - 'ee/spec/workers/personal_access_tokens/groups/policy_worker_spec.rb'
+ - 'ee/spec/workers/personal_access_tokens/instance/policy_worker_spec.rb'
+ - 'ee/spec/workers/post_receive_spec.rb'
+ - 'ee/spec/workers/product_analytics/initialize_analytics_worker_spec.rb'
+ - 'ee/spec/workers/project_cache_worker_spec.rb'
+ - 'ee/spec/workers/project_import_schedule_worker_spec.rb'
+ - 'ee/spec/workers/project_template_export_worker_spec.rb'
+ - 'ee/spec/workers/projects/disable_legacy_open_source_license_for_inactive_projects_worker_spec.rb'
+ - 'ee/spec/workers/projects/register_suggested_reviewers_project_worker_spec.rb'
+ - 'ee/spec/workers/refresh_license_compliance_checks_worker_spec.rb'
+ - 'ee/spec/workers/repository_update_mirror_worker_spec.rb'
+ - 'ee/spec/workers/requirements_management/import_requirements_csv_worker_spec.rb'
+ - 'ee/spec/workers/requirements_management/process_requirements_reports_worker_spec.rb'
+ - 'ee/spec/workers/scan_security_report_secrets_worker_spec.rb'
+ - 'ee/spec/workers/search/index_curation_worker_spec.rb'
+ - 'ee/spec/workers/security/auto_fix_worker_spec.rb'
+ - 'ee/spec/workers/security/create_orchestration_policy_worker_spec.rb'
+ - 'ee/spec/workers/security/orchestration_policy_rule_schedule_namespace_worker_spec.rb'
+ - 'ee/spec/workers/security/orchestration_policy_rule_schedule_worker_spec.rb'
+ - 'ee/spec/workers/security/process_scan_result_policy_worker_spec.rb'
+ - 'ee/spec/workers/security/scans/purge_by_job_id_worker_spec.rb'
+ - 'ee/spec/workers/security/scans/purge_worker_spec.rb'
+ - 'ee/spec/workers/security/store_scans_worker_spec.rb'
+ - 'ee/spec/workers/security/sync_scan_policies_worker_spec.rb'
+ - 'ee/spec/workers/security/track_secure_scans_worker_spec.rb'
+ - 'ee/spec/workers/set_user_status_based_on_user_cap_setting_worker_spec.rb'
+ - 'ee/spec/workers/status_page/publish_worker_spec.rb'
+ - 'ee/spec/workers/store_security_reports_worker_spec.rb'
+ - 'ee/spec/workers/sync_seat_link_request_worker_spec.rb'
+ - 'ee/spec/workers/sync_seat_link_worker_spec.rb'
+ - 'ee/spec/workers/todos_destroyer/confidential_epic_worker_spec.rb'
+ - 'ee/spec/workers/update_all_mirrors_worker_spec.rb'
+ - 'ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb'
+ - 'ee/spec/workers/vulnerability_exports/export_deletion_worker_spec.rb'
+ - 'ee/spec/workers/vulnerability_exports/export_worker_spec.rb'
+ - 'qa/qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb'
+ - 'qa/qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb'
+ - 'qa/qa/specs/features/api/12_systems/gitaly/changing_repository_storage_spec.rb'
+ - 'qa/qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb'
+ - 'qa/qa/specs/features/api/12_systems/gitaly/praefect_connectivity_spec.rb'
+ - 'qa/qa/specs/features/api/12_systems/gitaly/praefect_dataloss_spec.rb'
+ - 'qa/qa/specs/features/api/12_systems/gitaly/praefect_repo_sync_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/group_access_token_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/import/import_github_repo_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_large_project_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_members_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_mr_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/migration/gitlab_migration_release_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/project_access_token_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/rate_limits_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb'
+ - 'qa/qa/specs/features/api/1_manage/user_inherited_access_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/merge_request/push_options_labels_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/merge_request/push_options_target_branch_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/merge_request/push_options_title_description_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/repository/storage_size_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb'
+ - 'qa/qa/specs/features/api/3_create/snippet/snippet_repository_storage_move_spec.rb'
+ - 'qa/qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb'
+ - 'qa/qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb'
+ - 'qa/qa/specs/features/api/4_verify/file_variable_spec.rb'
+ - 'qa/qa/specs/features/api/8_monitor/metrics_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/group/create_group_with_mattermost_team_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/group/group_access_token_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/group/group_member_access_request_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/group/transfer_group_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/import/import_github_repo_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/2fa_recovery_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/2fa_ssh_recovery_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/log_in_with_2fa_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/log_into_gitlab_via_ldap_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/log_into_mattermost_via_gitlab_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/login_via_instance_wide_saml_sso_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/maintain_log_in_mixed_env_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/create_project_badge_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/invite_group_to_project_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/project_owner_permissions_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/project/view_project_activity_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/user/follow_user_activity_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/user/impersonation_token_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/user/parent_group_access_termination_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/1_manage/user/user_inherited_access_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/2_plan/transient/comment_on_discussion_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_from_push_notification_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_via_template_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/squash_merge_request_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/pages/new_static_page_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/project_wiki/project_based_content_creation_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/project_wiki/project_based_content_manipulation_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/project_wiki/project_based_directory_management_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/project_wiki/project_based_file_upload_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/project_wiki/project_based_list_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/project_wiki/project_based_page_deletion_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/add_list_delete_branches_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/clone_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/file/create_file_via_web_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/file/delete_file_via_web_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/file/edit_file_via_web_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/file/file_with_unusual_name_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/move_project_create_fork_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/ssh_key_support_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/link_to_line_in_web_ide_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/open_web_ide_from_diff_tab_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/server_hooks_custom_error_message_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/3_create/web_ide_new/add_new_directory_in_web_ide_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_remove_ci_variable_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/custom_variable_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/prefill_variables_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_non_inheritable_when_forward_pipeline_variables_false_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/locked_artifacts_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/merge_mr_when_pipline_is_blocked_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/mr_event_rule_pipeline_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_editor_branch_switcher_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_editor_can_create_merge_request_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_editor_tabs_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_with_image_pull_policy_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_via_web_only_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/testing/view_code_coverage_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/container_registry/online_garbage_collection_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/infrastructure_registry/terraform_module_registry_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/npm/npm_project_level_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_group_level_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_project_level_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/5_package/package_registry/rubygems_registry_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/7_configure/auto_devops/auto_devops_templates_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb'
+ - 'qa/qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb'
+ - 'qa/qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb'
+ - 'qa/qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb'
+ - 'qa/qa/specs/features/ee/api/1_manage/user/minimal_access_user_spec.rb'
+ - 'qa/qa/specs/features/ee/api/3_create/wiki/group_wiki_repository_storage_move_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_2_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/policies_list_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/free_trial_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/overage_modal_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/purchase_ci_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/purchase_storage_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/upgrade_group_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/user_registration_billing_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/saas_user_limit_experience_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/utilization/billing_seats_usage_data_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/utilization/free_namespace_storage_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/utilization/usage_quotas_seats_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/attachment_replication_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/database_delete_replication_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_ci_job_log_artifacts_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_maven_package_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_npm_registry_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_project_snippets_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/http_push_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/http_push_to_secondary_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/rename_replication_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/ssh_push_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/ssh_push_to_secondary_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_http_push_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_http_push_to_secondary_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_ssh_push_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_ssh_push_to_secondary_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/13_secure/enable_scanning_from_configuration_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/13_secure/license_compliance_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/13_secure/merge_request_license_widget_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/14_model_ops/suggested_reviewer_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_ldap_sync_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_git_access_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_new_account_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_non_enforced_sso_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/prevent_forking_outside_group_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/restrict_by_ip_address_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/share_group_with_group_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/ldap/admin_ldap_sync_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/1_manage/user/minimal_access_user_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/contribution_analytics_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/group_wiki/create_group_wiki_page_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/group_wiki/delete_group_wiki_page_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/group_wiki/file_upload_group_wiki_page_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/code_owners_with_protected_branch_and_squashed_commits_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/job_trace_archival_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/new_discussion_not_dropping_merge_trains_mr_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/pipelines_for_merged_results_and_merge_trains_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/system_cancel_merge_request_in_merge_train_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/transient/merge_trains_transient_bug_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/user_cancel_merge_request_in_merge_train_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/5_package/dependency_proxy_sso_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/6_release/pipeline_status_on_operation_dashboard_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/9_data_stores/elasticsearch/elasticsearch_reindexing_spec.rb'
+ - 'qa/qa/specs/features/sanity/feature_flags_spec.rb'
+ - 'qa/qa/specs/features/sanity/framework_spec.rb'
+ - 'qa/qa/specs/features/sanity/interception_spec.rb'
+ - 'qa/spec/ee/resource/mixins/group_base_spec.rb'
+ - 'qa/spec/ee/runtime/geo_spec.rb'
+ - 'qa/spec/ee/scenario/test/integration/group_saml_spec.rb'
+ - 'qa/spec/factory/resource/user_spec.rb'
+ - 'qa/spec/git/location_spec.rb'
+ - 'qa/spec/git/repository_spec.rb'
+ - 'qa/spec/page/base_spec.rb'
+ - 'qa/spec/page/element_spec.rb'
+ - 'qa/spec/page/logging_spec.rb'
+ - 'qa/spec/page/validator_spec.rb'
+ - 'qa/spec/page/view_spec.rb'
+ - 'qa/spec/resource/api_fabricator_spec.rb'
+ - 'qa/spec/resource/base_spec.rb'
+ - 'qa/spec/resource/events/base_spec.rb'
+ - 'qa/spec/resource/events/project_spec.rb'
+ - 'qa/spec/resource/repository/push_spec.rb'
+ - 'qa/spec/resource/ssh_key_spec.rb'
+ - 'qa/spec/resource/user_spec.rb'
+ - 'qa/spec/runtime/api/client_spec.rb'
+ - 'qa/spec/runtime/api/request_spec.rb'
+ - 'qa/spec/runtime/application_settings_spec.rb'
+ - 'qa/spec/runtime/env_spec.rb'
+ - 'qa/spec/runtime/feature_spec.rb'
+ - 'qa/spec/runtime/key/ecdsa_spec.rb'
+ - 'qa/spec/runtime/key/ed25519_spec.rb'
+ - 'qa/spec/runtime/key/rsa_spec.rb'
+ - 'qa/spec/runtime/logger_spec.rb'
+ - 'qa/spec/runtime/namespace_spec.rb'
+ - 'qa/spec/runtime/release_spec.rb'
+ - 'qa/spec/runtime/scenario_spec.rb'
+ - 'qa/spec/runtime/script_extensions/interceptor_spec.rb'
+ - 'qa/spec/scenario/actable_spec.rb'
+ - 'qa/spec/scenario/bootable_spec.rb'
+ - 'qa/spec/scenario/template_spec.rb'
+ - 'qa/spec/scenario/test/instance/airgapped_spec.rb'
+ - 'qa/spec/scenario/test/instance/all_spec.rb'
+ - 'qa/spec/scenario/test/instance/reliable_spec.rb'
+ - 'qa/spec/scenario/test/instance/smoke_spec.rb'
+ - 'qa/spec/scenario/test/integration/instance_saml_spec.rb'
+ - 'qa/spec/scenario/test/integration/ldap_spec.rb'
+ - 'qa/spec/scenario/test/integration/mattermost_spec.rb'
+ - 'qa/spec/scenario/test/integration/service_ping_disabled_spec.rb'
+ - 'qa/spec/scenario/test/sanity/framework_spec.rb'
+ - 'qa/spec/scenario/test/sanity/selectors_spec.rb'
+ - 'qa/spec/service/docker_run/base_spec.rb'
+ - 'qa/spec/service/docker_run/gitlab_runner_spec.rb'
+ - 'qa/spec/service/docker_run/k3s_spec.rb'
+ - 'qa/spec/service/docker_run/mixins/third_party_docker_spec.rb'
+ - 'qa/spec/service/shellout_spec.rb'
+ - 'qa/spec/specs/allure_report_spec.rb'
+ - 'qa/spec/specs/helpers/context_selector_spec.rb'
+ - 'qa/spec/specs/helpers/feature_flag_spec.rb'
+ - 'qa/spec/specs/helpers/quarantine_spec.rb'
+ - 'qa/spec/specs/parallel_runner_spec.rb'
+ - 'qa/spec/specs/runner_spec.rb'
+ - 'qa/spec/support/formatters/allure_metadata_formatter_spec.rb'
+ - 'qa/spec/support/formatters/test_metrics_formatter_spec.rb'
+ - 'qa/spec/support/loglinking_spec.rb'
+ - 'qa/spec/support/page_error_checker_spec.rb'
+ - 'qa/spec/support/repeater_spec.rb'
+ - 'qa/spec/support/retrier_spec.rb'
+ - 'qa/spec/support/run_spec.rb'
+ - 'qa/spec/support/ssh_spec.rb'
+ - 'qa/spec/support/system_logs/kibana_spec.rb'
+ - 'qa/spec/support/system_logs/sentry_spec.rb'
+ - 'qa/spec/support/wait_for_requests_spec.rb'
+ - 'qa/spec/support/waiter_spec.rb'
+ - 'qa/spec/tools/ci/ff_changes_spec.rb'
+ - 'qa/spec/tools/ci/non_empty_suites_spec.rb'
+ - 'qa/spec/tools/ci/qa_changes_spec.rb'
+ - 'qa/spec/tools/ci/test_metrics_spec.rb'
+ - 'qa/spec/tools/long_running_spec_reporter_spec.rb'
+ - 'qa/spec/tools/reliable_report_spec.rb'
+ - 'qa/spec/tools/test_resources_data_processor_spec.rb'
+ - 'spec/benchmarks/banzai_benchmark.rb'
+ - 'spec/bin/audit_event_type_spec.rb'
+ - 'spec/bin/diagnostic_reports_uploader_spec.rb'
+ - 'spec/bin/feature_flag_spec.rb'
+ - 'spec/bin/sidekiq_cluster_spec.rb'
+ - 'spec/channels/application_cable/connection_spec.rb'
+ - 'spec/channels/awareness_channel_spec.rb'
+ - 'spec/commands/diagnostic_reports/uploader_smoke_spec.rb'
+ - 'spec/commands/metrics_server/metrics_server_spec.rb'
+ - 'spec/commands/sidekiq_cluster/cli_spec.rb'
+ - 'spec/components/diffs/overflow_warning_component_spec.rb'
+ - 'spec/components/diffs/stats_component_spec.rb'
+ - 'spec/components/layouts/horizontal_section_component_spec.rb'
+ - 'spec/components/pajamas/alert_component_spec.rb'
+ - 'spec/components/pajamas/avatar_component_spec.rb'
+ - 'spec/components/pajamas/badge_component_spec.rb'
+ - 'spec/components/pajamas/banner_component_spec.rb'
+ - 'spec/components/pajamas/button_component_spec.rb'
+ - 'spec/components/pajamas/card_component_spec.rb'
+ - 'spec/components/pajamas/checkbox_component_spec.rb'
+ - 'spec/components/pajamas/checkbox_tag_component_spec.rb'
+ - 'spec/components/pajamas/component_spec.rb'
+ - 'spec/components/pajamas/concerns/checkbox_radio_label_with_help_text_spec.rb'
+ - 'spec/components/pajamas/concerns/checkbox_radio_options_spec.rb'
+ - 'spec/components/pajamas/progress_component_spec.rb'
+ - 'spec/components/pajamas/radio_component_spec.rb'
+ - 'spec/components/pajamas/spinner_component_spec.rb'
+ - 'spec/components/pajamas/toggle_component_spec.rb'
+ - 'spec/controllers/acme_challenges_controller_spec.rb'
+ - 'spec/controllers/admin/application_settings/appearances_controller_spec.rb'
+ - 'spec/controllers/admin/application_settings_controller_spec.rb'
+ - 'spec/controllers/admin/applications_controller_spec.rb'
+ - 'spec/controllers/admin/ci/variables_controller_spec.rb'
+ - 'spec/controllers/admin/clusters_controller_spec.rb'
+ - 'spec/controllers/admin/cohorts_controller_spec.rb'
+ - 'spec/controllers/admin/dashboard_controller_spec.rb'
+ - 'spec/controllers/admin/dev_ops_report_controller_spec.rb'
+ - 'spec/controllers/admin/gitaly_servers_controller_spec.rb'
+ - 'spec/controllers/admin/groups_controller_spec.rb'
+ - 'spec/controllers/admin/health_check_controller_spec.rb'
+ - 'spec/controllers/admin/hooks_controller_spec.rb'
+ - 'spec/controllers/admin/identities_controller_spec.rb'
+ - 'spec/controllers/admin/impersonations_controller_spec.rb'
+ - 'spec/controllers/admin/instance_review_controller_spec.rb'
+ - 'spec/controllers/admin/integrations_controller_spec.rb'
+ - 'spec/controllers/admin/jobs_controller_spec.rb'
+ - 'spec/controllers/admin/plan_limits_controller_spec.rb'
+ - 'spec/controllers/admin/projects_controller_spec.rb'
+ - 'spec/controllers/admin/sessions_controller_spec.rb'
+ - 'spec/controllers/admin/spam_logs_controller_spec.rb'
+ - 'spec/controllers/admin/topics/avatars_controller_spec.rb'
+ - 'spec/controllers/admin/topics_controller_spec.rb'
+ - 'spec/controllers/admin/usage_trends_controller_spec.rb'
+ - 'spec/controllers/admin/users_controller_spec.rb'
+ - 'spec/controllers/application_controller_spec.rb'
+ - 'spec/controllers/autocomplete_controller_spec.rb'
+ - 'spec/controllers/chaos_controller_spec.rb'
+ - 'spec/controllers/concerns/check_rate_limit_spec.rb'
+ - 'spec/controllers/concerns/checks_collaboration_spec.rb'
+ - 'spec/controllers/concerns/confirm_email_warning_spec.rb'
+ - 'spec/controllers/concerns/continue_params_spec.rb'
+ - 'spec/controllers/concerns/controller_with_cross_project_access_check_spec.rb'
+ - 'spec/controllers/concerns/enforces_admin_authentication_spec.rb'
+ - 'spec/controllers/concerns/graceful_timeout_handling_spec.rb'
+ - 'spec/controllers/concerns/group_tree_spec.rb'
+ - 'spec/controllers/concerns/harbor/artifact_spec.rb'
+ - 'spec/controllers/concerns/harbor/repository_spec.rb'
+ - 'spec/controllers/concerns/harbor/tag_spec.rb'
+ - 'spec/controllers/concerns/import_url_params_spec.rb'
+ - 'spec/controllers/concerns/internal_redirect_spec.rb'
+ - 'spec/controllers/concerns/issuable_actions_spec.rb'
+ - 'spec/controllers/concerns/issuable_collections_spec.rb'
+ - 'spec/controllers/concerns/metrics_dashboard_spec.rb'
+ - 'spec/controllers/concerns/page_limiter_spec.rb'
+ - 'spec/controllers/concerns/preferred_language_switcher_spec.rb'
+ - 'spec/controllers/concerns/product_analytics_tracking_spec.rb'
+ - 'spec/controllers/concerns/project_unauthorized_spec.rb'
+ - 'spec/controllers/concerns/redirects_for_missing_path_on_tree_spec.rb'
+ - 'spec/controllers/concerns/redis_tracking_spec.rb'
+ - 'spec/controllers/concerns/renders_commits_spec.rb'
+ - 'spec/controllers/concerns/routable_actions_spec.rb'
+ - 'spec/controllers/concerns/send_file_upload_spec.rb'
+ - 'spec/controllers/concerns/sorting_preference_spec.rb'
+ - 'spec/controllers/concerns/sourcegraph_decorator_spec.rb'
+ - 'spec/controllers/concerns/spammable_actions/akismet_mark_as_spam_action_spec.rb'
+ - 'spec/controllers/concerns/spammable_actions/captcha_check/html_format_actions_support_spec.rb'
+ - 'spec/controllers/concerns/spammable_actions/captcha_check/json_format_actions_support_spec.rb'
+ - 'spec/controllers/concerns/spammable_actions/captcha_check/rest_api_actions_support_spec.rb'
+ - 'spec/controllers/concerns/static_object_external_storage_spec.rb'
+ - 'spec/controllers/confirmations_controller_spec.rb'
+ - 'spec/controllers/dashboard/groups_controller_spec.rb'
+ - 'spec/controllers/dashboard/labels_controller_spec.rb'
+ - 'spec/controllers/dashboard/milestones_controller_spec.rb'
+ - 'spec/controllers/dashboard/projects_controller_spec.rb'
+ - 'spec/controllers/dashboard/snippets_controller_spec.rb'
+ - 'spec/controllers/dashboard/todos_controller_spec.rb'
+ - 'spec/controllers/every_controller_spec.rb'
+ - 'spec/controllers/explore/groups_controller_spec.rb'
+ - 'spec/controllers/explore/projects_controller_spec.rb'
+ - 'spec/controllers/explore/snippets_controller_spec.rb'
+ - 'spec/controllers/google_api/authorizations_controller_spec.rb'
+ - 'spec/controllers/graphql_controller_spec.rb'
+ - 'spec/controllers/groups/application_controller_spec.rb'
+ - 'spec/controllers/groups/avatars_controller_spec.rb'
+ - 'spec/controllers/groups/boards_controller_spec.rb'
+ - 'spec/controllers/groups/children_controller_spec.rb'
+ - 'spec/controllers/groups/clusters_controller_spec.rb'
+ - 'spec/controllers/groups/dependency_proxies_controller_spec.rb'
+ - 'spec/controllers/groups/dependency_proxy_auth_controller_spec.rb'
+ - 'spec/controllers/groups/dependency_proxy_for_containers_controller_spec.rb'
+ - 'spec/controllers/groups/group_links_controller_spec.rb'
+ - 'spec/controllers/groups/group_members_controller_spec.rb'
+ - 'spec/controllers/groups/imports_controller_spec.rb'
+ - 'spec/controllers/groups/labels_controller_spec.rb'
+ - 'spec/controllers/groups/milestones_controller_spec.rb'
+ - 'spec/controllers/groups/packages_controller_spec.rb'
+ - 'spec/controllers/groups/registry/repositories_controller_spec.rb'
+ - 'spec/controllers/groups/releases_controller_spec.rb'
+ - 'spec/controllers/groups/settings/applications_controller_spec.rb'
+ - 'spec/controllers/groups/settings/ci_cd_controller_spec.rb'
+ - 'spec/controllers/groups/settings/integrations_controller_spec.rb'
+ - 'spec/controllers/groups/settings/repository_controller_spec.rb'
+ - 'spec/controllers/groups/shared_projects_controller_spec.rb'
+ - 'spec/controllers/groups/uploads_controller_spec.rb'
+ - 'spec/controllers/groups/variables_controller_spec.rb'
+ - 'spec/controllers/groups_controller_spec.rb'
+ - 'spec/controllers/health_check_controller_spec.rb'
+ - 'spec/controllers/help_controller_spec.rb'
+ - 'spec/controllers/import/bitbucket_controller_spec.rb'
+ - 'spec/controllers/import/bitbucket_server_controller_spec.rb'
+ - 'spec/controllers/import/fogbugz_controller_spec.rb'
+ - 'spec/controllers/import/gitea_controller_spec.rb'
+ - 'spec/controllers/import/gitlab_controller_spec.rb'
+ - 'spec/controllers/import/manifest_controller_spec.rb'
+ - 'spec/controllers/import/phabricator_controller_spec.rb'
+ - 'spec/controllers/invites_controller_spec.rb'
+ - 'spec/controllers/jira_connect/app_descriptor_controller_spec.rb'
+ - 'spec/controllers/jira_connect/branches_controller_spec.rb'
+ - 'spec/controllers/jira_connect/events_controller_spec.rb'
+ - 'spec/controllers/jira_connect/subscriptions_controller_spec.rb'
+ - 'spec/controllers/ldap/omniauth_callbacks_controller_spec.rb'
+ - 'spec/controllers/metrics_controller_spec.rb'
+ - 'spec/controllers/oauth/applications_controller_spec.rb'
+ - 'spec/controllers/oauth/authorizations_controller_spec.rb'
+ - 'spec/controllers/oauth/authorized_applications_controller_spec.rb'
+ - 'spec/controllers/oauth/jira_dvcs/authorizations_controller_spec.rb'
+ - 'spec/controllers/oauth/token_info_controller_spec.rb'
+ - 'spec/controllers/oauth/tokens_controller_spec.rb'
+ - 'spec/controllers/omniauth_callbacks_controller_spec.rb'
+ - 'spec/controllers/passwords_controller_spec.rb'
+ - 'spec/controllers/profiles/accounts_controller_spec.rb'
+ - 'spec/controllers/profiles/active_sessions_controller_spec.rb'
+ - 'spec/controllers/profiles/avatars_controller_spec.rb'
+ - 'spec/controllers/profiles/emails_controller_spec.rb'
+ - 'spec/controllers/profiles/gpg_keys_controller_spec.rb'
+ - 'spec/controllers/profiles/keys_controller_spec.rb'
+ - 'spec/controllers/profiles/notifications_controller_spec.rb'
+ - 'spec/controllers/profiles/personal_access_tokens_controller_spec.rb'
+ - 'spec/controllers/profiles/preferences_controller_spec.rb'
+ - 'spec/controllers/profiles/two_factor_auths_controller_spec.rb'
+ - 'spec/controllers/profiles/webauthn_registrations_controller_spec.rb'
+ - 'spec/controllers/profiles_controller_spec.rb'
+ - 'spec/controllers/projects/alert_management_controller_spec.rb'
+ - 'spec/controllers/projects/alerting/notifications_controller_spec.rb'
+ - 'spec/controllers/projects/analytics/cycle_analytics/stages_controller_spec.rb'
+ - 'spec/controllers/projects/analytics/cycle_analytics/summary_controller_spec.rb'
+ - 'spec/controllers/projects/analytics/cycle_analytics/value_streams_controller_spec.rb'
+ - 'spec/controllers/projects/artifacts_controller_spec.rb'
+ - 'spec/controllers/projects/autocomplete_sources_controller_spec.rb'
+ - 'spec/controllers/projects/avatars_controller_spec.rb'
+ - 'spec/controllers/projects/badges_controller_spec.rb'
+ - 'spec/controllers/projects/blame_controller_spec.rb'
+ - 'spec/controllers/projects/blob_controller_spec.rb'
+ - 'spec/controllers/projects/boards_controller_spec.rb'
+ - 'spec/controllers/projects/branches_controller_spec.rb'
+ - 'spec/controllers/projects/ci/daily_build_group_report_results_controller_spec.rb'
+ - 'spec/controllers/projects/ci/lints_controller_spec.rb'
+ - 'spec/controllers/projects/ci/pipeline_editor_controller_spec.rb'
+ - 'spec/controllers/projects/clusters_controller_spec.rb'
+ - 'spec/controllers/projects/commit_controller_spec.rb'
+ - 'spec/controllers/projects/commits_controller_spec.rb'
+ - 'spec/controllers/projects/compare_controller_spec.rb'
+ - 'spec/controllers/projects/cycle_analytics/events_controller_spec.rb'
+ - 'spec/controllers/projects/cycle_analytics_controller_spec.rb'
+ - 'spec/controllers/projects/deploy_keys_controller_spec.rb'
+ - 'spec/controllers/projects/deployments_controller_spec.rb'
+ - 'spec/controllers/projects/design_management/designs/raw_images_controller_spec.rb'
+ - 'spec/controllers/projects/discussions_controller_spec.rb'
+ - 'spec/controllers/projects/environments/prometheus_api_controller_spec.rb'
+ - 'spec/controllers/projects/environments/sample_metrics_controller_spec.rb'
+ - 'spec/controllers/projects/environments_controller_spec.rb'
+ - 'spec/controllers/projects/error_tracking/projects_controller_spec.rb'
+ - 'spec/controllers/projects/error_tracking/stack_traces_controller_spec.rb'
+ - 'spec/controllers/projects/error_tracking_controller_spec.rb'
+ - 'spec/controllers/projects/feature_flags_clients_controller_spec.rb'
+ - 'spec/controllers/projects/feature_flags_controller_spec.rb'
+ - 'spec/controllers/projects/feature_flags_user_lists_controller_spec.rb'
+ - 'spec/controllers/projects/find_file_controller_spec.rb'
+ - 'spec/controllers/projects/forks_controller_spec.rb'
+ - 'spec/controllers/projects/graphs_controller_spec.rb'
+ - 'spec/controllers/projects/hooks_controller_spec.rb'
+ - 'spec/controllers/projects/import/jira_controller_spec.rb'
+ - 'spec/controllers/projects/imports_controller_spec.rb'
+ - 'spec/controllers/projects/incidents_controller_spec.rb'
+ - 'spec/controllers/projects/issue_links_controller_spec.rb'
+ - 'spec/controllers/projects/issues_controller_spec.rb'
+ - 'spec/controllers/projects/jobs_controller_spec.rb'
+ - 'spec/controllers/projects/labels_controller_spec.rb'
+ - 'spec/controllers/projects/mattermosts_controller_spec.rb'
+ - 'spec/controllers/projects/merge_requests/conflicts_controller_spec.rb'
+ - 'spec/controllers/projects/merge_requests/content_controller_spec.rb'
+ - 'spec/controllers/projects/merge_requests/creations_controller_spec.rb'
+ - 'spec/controllers/projects/merge_requests/diffs_controller_spec.rb'
+ - 'spec/controllers/projects/merge_requests/drafts_controller_spec.rb'
+ - 'spec/controllers/projects/milestones_controller_spec.rb'
+ - 'spec/controllers/projects/mirrors_controller_spec.rb'
+ - 'spec/controllers/projects/notes_controller_spec.rb'
+ - 'spec/controllers/projects/packages/infrastructure_registry_controller_spec.rb'
+ - 'spec/controllers/projects/packages/packages_controller_spec.rb'
+ - 'spec/controllers/projects/pages_controller_spec.rb'
+ - 'spec/controllers/projects/performance_monitoring/dashboards_controller_spec.rb'
+ - 'spec/controllers/projects/pipelines/stages_controller_spec.rb'
+ - 'spec/controllers/projects/pipelines/tests_controller_spec.rb'
+ - 'spec/controllers/projects/pipelines_controller_spec.rb'
+ - 'spec/controllers/projects/pipelines_settings_controller_spec.rb'
+ - 'spec/controllers/projects/project_members_controller_spec.rb'
+ - 'spec/controllers/projects/prometheus/alerts_controller_spec.rb'
+ - 'spec/controllers/projects/prometheus/metrics_controller_spec.rb'
+ - 'spec/controllers/projects/protected_branches_controller_spec.rb'
+ - 'spec/controllers/projects/protected_tags_controller_spec.rb'
+ - 'spec/controllers/projects/raw_controller_spec.rb'
+ - 'spec/controllers/projects/registry/repositories_controller_spec.rb'
+ - 'spec/controllers/projects/registry/tags_controller_spec.rb'
+ - 'spec/controllers/projects/releases/evidences_controller_spec.rb'
+ - 'spec/controllers/projects/releases_controller_spec.rb'
+ - 'spec/controllers/projects/repositories_controller_spec.rb'
+ - 'spec/controllers/projects/security/configuration_controller_spec.rb'
+ - 'spec/controllers/projects/service_desk_controller_spec.rb'
+ - 'spec/controllers/projects/service_ping_controller_spec.rb'
+ - 'spec/controllers/projects/settings/ci_cd_controller_spec.rb'
+ - 'spec/controllers/projects/settings/integration_hook_logs_controller_spec.rb'
+ - 'spec/controllers/projects/settings/merge_requests_controller_spec.rb'
+ - 'spec/controllers/projects/settings/operations_controller_spec.rb'
+ - 'spec/controllers/projects/snippets/blobs_controller_spec.rb'
+ - 'spec/controllers/projects/snippets_controller_spec.rb'
+ - 'spec/controllers/projects/starrers_controller_spec.rb'
+ - 'spec/controllers/projects/tags_controller_spec.rb'
+ - 'spec/controllers/projects/templates_controller_spec.rb'
+ - 'spec/controllers/projects/terraform_controller_spec.rb'
+ - 'spec/controllers/projects/todos_controller_spec.rb'
+ - 'spec/controllers/projects/tree_controller_spec.rb'
+ - 'spec/controllers/projects/uploads_controller_spec.rb'
+ - 'spec/controllers/projects/usage_quotas_controller_spec.rb'
+ - 'spec/controllers/projects/variables_controller_spec.rb'
+ - 'spec/controllers/projects/web_ide_schemas_controller_spec.rb'
+ - 'spec/controllers/projects/web_ide_terminals_controller_spec.rb'
+ - 'spec/controllers/projects/wikis_controller_spec.rb'
+ - 'spec/controllers/projects_controller_spec.rb'
+ - 'spec/controllers/registrations_controller_spec.rb'
+ - 'spec/controllers/repositories/git_http_controller_spec.rb'
+ - 'spec/controllers/repositories/lfs_storage_controller_spec.rb'
+ - 'spec/controllers/root_controller_spec.rb'
+ - 'spec/controllers/search_controller_spec.rb'
+ - 'spec/controllers/sent_notifications_controller_spec.rb'
+ - 'spec/controllers/sessions_controller_spec.rb'
+ - 'spec/controllers/snippets/blobs_controller_spec.rb'
+ - 'spec/controllers/snippets/notes_controller_spec.rb'
+ - 'spec/controllers/snippets_controller_spec.rb'
+ - 'spec/controllers/uploads_controller_spec.rb'
+ - 'spec/controllers/users/callouts_controller_spec.rb'
+ - 'spec/controllers/users/terms_controller_spec.rb'
+ - 'spec/controllers/users/unsubscribes_controller_spec.rb'
+ - 'spec/db/development/add_security_training_providers_spec.rb'
+ - 'spec/db/development/create_base_work_item_types_spec.rb'
+ - 'spec/db/development/import_common_metrics_spec.rb'
+ - 'spec/db/production/add_security_training_providers_spec.rb'
+ - 'spec/db/production/create_base_work_item_types_spec.rb'
+ - 'spec/db/production/import_common_metrics_spec.rb'
+ - 'spec/db/production/settings_spec.rb'
+ - 'spec/dependencies/omniauth_saml_spec.rb'
+ - 'spec/docs_screenshots/container_registry_docs.rb'
+ - 'spec/docs_screenshots/wiki_docs.rb'
+ - 'spec/experiments/application_experiment_spec.rb'
+ - 'spec/experiments/concerns/project_commit_count_spec.rb'
+ - 'spec/experiments/force_company_trial_experiment_spec.rb'
+ - 'spec/experiments/in_product_guidance_environments_webide_experiment_spec.rb'
+ - 'spec/experiments/ios_specific_templates_experiment_spec.rb'
+ - 'spec/experiments/require_verification_for_namespace_creation_experiment_spec.rb'
+ - 'spec/experiments/security_reports_mr_widget_prompt_experiment_spec.rb'
+ - 'spec/experiments/video_tutorials_continuous_onboarding_experiment_spec.rb'
+ - 'spec/features/admin/dashboard_spec.rb'
+ - 'spec/features/groups/integrations/group_integrations_spec.rb'
+ - 'spec/features/markdown/observability_spec.rb'
+ - 'spec/features/milestones/user_views_milestones_spec.rb'
+ - 'spec/features/projects/commits/multi_view_diff_spec.rb'
+ - 'spec/features/projects/feature_flags/user_creates_feature_flag_spec.rb'
+ - 'spec/features/projects/issues/viewing_issues_with_external_authorization_enabled_spec.rb'
+ - 'spec/features/projects/members/anonymous_user_sees_members_spec.rb'
+ - 'spec/features/reportable_note/commit_spec.rb'
+ - 'spec/features/user_sorts_things_spec.rb'
+ - 'spec/finders/abuse_reports_finder_spec.rb'
+ - 'spec/finders/access_requests_finder_spec.rb'
+ - 'spec/finders/admin/plans_finder_spec.rb'
+ - 'spec/finders/admin/projects_finder_spec.rb'
+ - 'spec/finders/alert_management/alerts_finder_spec.rb'
+ - 'spec/finders/alert_management/http_integrations_finder_spec.rb'
+ - 'spec/finders/analytics/cycle_analytics/stage_finder_spec.rb'
+ - 'spec/finders/applications_finder_spec.rb'
+ - 'spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb'
+ - 'spec/finders/autocomplete/deploy_keys_with_write_access_finder_spec.rb'
+ - 'spec/finders/autocomplete/group_finder_spec.rb'
+ - 'spec/finders/autocomplete/move_to_project_finder_spec.rb'
+ - 'spec/finders/autocomplete/project_finder_spec.rb'
+ - 'spec/finders/autocomplete/routes_finder_spec.rb'
+ - 'spec/finders/autocomplete/users_finder_spec.rb'
+ - 'spec/finders/award_emojis_finder_spec.rb'
+ - 'spec/finders/boards/boards_finder_spec.rb'
+ - 'spec/finders/boards/visits_finder_spec.rb'
+ - 'spec/finders/bulk_imports/entities_finder_spec.rb'
+ - 'spec/finders/bulk_imports/imports_finder_spec.rb'
+ - 'spec/finders/ci/commit_statuses_finder_spec.rb'
+ - 'spec/finders/ci/daily_build_group_report_results_finder_spec.rb'
+ - 'spec/finders/ci/job_artifacts_finder_spec.rb'
+ - 'spec/finders/ci/jobs_finder_spec.rb'
+ - 'spec/finders/ci/pipeline_schedules_finder_spec.rb'
+ - 'spec/finders/ci/pipelines_finder_spec.rb'
+ - 'spec/finders/ci/pipelines_for_merge_request_finder_spec.rb'
+ - 'spec/finders/ci/runner_jobs_finder_spec.rb'
+ - 'spec/finders/ci/variables_finder_spec.rb'
+ - 'spec/finders/cluster_ancestors_finder_spec.rb'
+ - 'spec/finders/clusters/agent_authorizations_finder_spec.rb'
+ - 'spec/finders/clusters/agent_tokens_finder_spec.rb'
+ - 'spec/finders/clusters/agents_finder_spec.rb'
+ - 'spec/finders/clusters/knative_services_finder_spec.rb'
+ - 'spec/finders/clusters/kubernetes_namespace_finder_spec.rb'
+ - 'spec/finders/clusters_finder_spec.rb'
+ - 'spec/finders/concerns/finder_methods_spec.rb'
+ - 'spec/finders/concerns/finder_with_cross_project_access_spec.rb'
+ - 'spec/finders/concerns/finder_with_group_hierarchy_spec.rb'
+ - 'spec/finders/concerns/packages/finder_helper_spec.rb'
+ - 'spec/finders/container_repositories_finder_spec.rb'
+ - 'spec/finders/context_commits_finder_spec.rb'
+ - 'spec/finders/contributed_projects_finder_spec.rb'
+ - 'spec/finders/crm/contacts_finder_spec.rb'
+ - 'spec/finders/crm/organizations_finder_spec.rb'
+ - 'spec/finders/database/batched_background_migrations_finder_spec.rb'
+ - 'spec/finders/deploy_tokens/tokens_finder_spec.rb'
+ - 'spec/finders/deployments_finder_spec.rb'
+ - 'spec/finders/design_management/designs_finder_spec.rb'
+ - 'spec/finders/design_management/versions_finder_spec.rb'
+ - 'spec/finders/environments/environment_names_finder_spec.rb'
+ - 'spec/finders/environments/environments_by_deployments_finder_spec.rb'
+ - 'spec/finders/environments/environments_finder_spec.rb'
+ - 'spec/finders/events_finder_spec.rb'
+ - 'spec/finders/feature_flags_finder_spec.rb'
+ - 'spec/finders/feature_flags_user_lists_finder_spec.rb'
+ - 'spec/finders/fork_projects_finder_spec.rb'
+ - 'spec/finders/fork_targets_finder_spec.rb'
+ - 'spec/finders/group_descendants_finder_spec.rb'
+ - 'spec/finders/group_members_finder_spec.rb'
+ - 'spec/finders/group_projects_finder_spec.rb'
+ - 'spec/finders/groups/accepting_group_transfers_finder_spec.rb'
+ - 'spec/finders/groups/accepting_project_transfers_finder_spec.rb'
+ - 'spec/finders/groups/projects_requiring_authorizations_refresh/on_direct_membership_finder_spec.rb'
+ - 'spec/finders/groups/projects_requiring_authorizations_refresh/on_transfer_finder_spec.rb'
+ - 'spec/finders/groups/user_groups_finder_spec.rb'
+ - 'spec/finders/groups_finder_spec.rb'
+ - 'spec/finders/incident_management/timeline_event_tags_finder_spec.rb'
+ - 'spec/finders/incident_management/timeline_events_finder_spec.rb'
+ - 'spec/finders/issuables/crm_contact_filter_spec.rb'
+ - 'spec/finders/issuables/crm_organization_filter_spec.rb'
+ - 'spec/finders/joined_groups_finder_spec.rb'
+ - 'spec/finders/keys_finder_spec.rb'
+ - 'spec/finders/labels_finder_spec.rb'
+ - 'spec/finders/lfs_pointers_finder_spec.rb'
+ - 'spec/finders/license_template_finder_spec.rb'
+ - 'spec/finders/merge_request/metrics_finder_spec.rb'
+ - 'spec/finders/merge_request_target_project_finder_spec.rb'
+ - 'spec/finders/merge_requests/by_approvals_finder_spec.rb'
+ - 'spec/finders/merge_requests/oldest_per_commit_finder_spec.rb'
+ - 'spec/finders/metrics/dashboards/annotations_finder_spec.rb'
+ - 'spec/finders/metrics/users_starred_dashboards_finder_spec.rb'
+ - 'spec/finders/milestones_finder_spec.rb'
+ - 'spec/finders/namespaces/projects_finder_spec.rb'
+ - 'spec/finders/notes_finder_spec.rb'
+ - 'spec/finders/packages/build_infos_finder_spec.rb'
+ - 'spec/finders/packages/composer/packages_finder_spec.rb'
+ - 'spec/finders/packages/conan/package_file_finder_spec.rb'
+ - 'spec/finders/packages/conan/package_finder_spec.rb'
+ - 'spec/finders/packages/debian/distributions_finder_spec.rb'
+ - 'spec/finders/packages/generic/package_finder_spec.rb'
+ - 'spec/finders/packages/go/module_finder_spec.rb'
+ - 'spec/finders/packages/go/package_finder_spec.rb'
+ - 'spec/finders/packages/go/version_finder_spec.rb'
+ - 'spec/finders/packages/group_or_project_package_finder_spec.rb'
+ - 'spec/finders/packages/group_packages_finder_spec.rb'
+ - 'spec/finders/packages/helm/package_files_finder_spec.rb'
+ - 'spec/finders/packages/helm/packages_finder_spec.rb'
+ - 'spec/finders/packages/maven/package_finder_spec.rb'
+ - 'spec/finders/packages/npm/package_finder_spec.rb'
+ - 'spec/finders/packages/nuget/package_finder_spec.rb'
+ - 'spec/finders/packages/package_file_finder_spec.rb'
+ - 'spec/finders/packages/package_finder_spec.rb'
+ - 'spec/finders/packages/packages_finder_spec.rb'
+ - 'spec/finders/packages/pypi/package_finder_spec.rb'
+ - 'spec/finders/packages/pypi/packages_finder_spec.rb'
+ - 'spec/finders/packages/tags_finder_spec.rb'
+ - 'spec/finders/pending_todos_finder_spec.rb'
+ - 'spec/finders/personal_access_tokens_finder_spec.rb'
+ - 'spec/finders/personal_projects_finder_spec.rb'
+ - 'spec/finders/projects/export_job_finder_spec.rb'
+ - 'spec/finders/projects/groups_finder_spec.rb'
+ - 'spec/finders/projects/members/effective_access_level_finder_spec.rb'
+ - 'spec/finders/projects/members/effective_access_level_per_user_finder_spec.rb'
+ - 'spec/finders/projects/prometheus/alerts_finder_spec.rb'
+ - 'spec/finders/projects/topics_finder_spec.rb'
+ - 'spec/finders/projects_finder_spec.rb'
+ - 'spec/finders/prometheus_metrics_finder_spec.rb'
+ - 'spec/finders/protected_branches_finder_spec.rb'
+ - 'spec/finders/releases/evidence_pipeline_finder_spec.rb'
+ - 'spec/finders/releases/group_releases_finder_spec.rb'
+ - 'spec/finders/releases_finder_spec.rb'
+ - 'spec/finders/repositories/branch_names_finder_spec.rb'
+ - 'spec/finders/repositories/changelog_commits_finder_spec.rb'
+ - 'spec/finders/repositories/changelog_tag_finder_spec.rb'
+ - 'spec/finders/repositories/tree_finder_spec.rb'
+ - 'spec/finders/resource_milestone_event_finder_spec.rb'
+ - 'spec/finders/resource_state_event_finder_spec.rb'
+ - 'spec/finders/security/jobs_finder_spec.rb'
+ - 'spec/finders/security/license_compliance_jobs_finder_spec.rb'
+ - 'spec/finders/security/security_jobs_finder_spec.rb'
+ - 'spec/finders/sentry_issue_finder_spec.rb'
+ - 'spec/finders/serverless_domain_finder_spec.rb'
+ - 'spec/finders/snippets_finder_spec.rb'
+ - 'spec/finders/starred_projects_finder_spec.rb'
+ - 'spec/finders/tags_finder_spec.rb'
+ - 'spec/finders/template_finder_spec.rb'
+ - 'spec/finders/terraform/states_finder_spec.rb'
+ - 'spec/finders/todos_finder_spec.rb'
+ - 'spec/finders/uploader_finder_spec.rb'
+ - 'spec/finders/user_finder_spec.rb'
+ - 'spec/finders/user_group_notification_settings_finder_spec.rb'
+ - 'spec/finders/user_groups_counter_spec.rb'
+ - 'spec/finders/user_recent_events_finder_spec.rb'
+ - 'spec/finders/users_finder_spec.rb'
+ - 'spec/finders/users_star_projects_finder_spec.rb'
+ - 'spec/fixtures/lib/generators/gitlab/usage_metric_generator/sample_metric_test.rb'
+ - 'spec/frontend/fixtures/abuse_reports.rb'
+ - 'spec/frontend/fixtures/admin_users.rb'
+ - 'spec/frontend/fixtures/analytics.rb'
+ - 'spec/frontend/fixtures/api_deploy_keys.rb'
+ - 'spec/frontend/fixtures/api_merge_requests.rb'
+ - 'spec/frontend/fixtures/api_projects.rb'
+ - 'spec/frontend/fixtures/application_settings.rb'
+ - 'spec/frontend/fixtures/autocomplete.rb'
+ - 'spec/frontend/fixtures/autocomplete_sources.rb'
+ - 'spec/frontend/fixtures/blob.rb'
+ - 'spec/frontend/fixtures/branches.rb'
+ - 'spec/frontend/fixtures/clusters.rb'
+ - 'spec/frontend/fixtures/commit.rb'
+ - 'spec/frontend/fixtures/deploy_keys.rb'
+ - 'spec/frontend/fixtures/freeze_period.rb'
+ - 'spec/frontend/fixtures/groups.rb'
+ - 'spec/frontend/fixtures/integrations.rb'
+ - 'spec/frontend/fixtures/issues.rb'
+ - 'spec/frontend/fixtures/job_artifacts.rb'
+ - 'spec/frontend/fixtures/jobs.rb'
+ - 'spec/frontend/fixtures/labels.rb'
+ - 'spec/frontend/fixtures/listbox.rb'
+ - 'spec/frontend/fixtures/merge_requests.rb'
+ - 'spec/frontend/fixtures/merge_requests_diffs.rb'
+ - 'spec/frontend/fixtures/metrics_dashboard.rb'
+ - 'spec/frontend/fixtures/namespaces.rb'
+ - 'spec/frontend/fixtures/pipeline_schedules.rb'
+ - 'spec/frontend/fixtures/pipelines.rb'
+ - 'spec/frontend/fixtures/projects.rb'
+ - 'spec/frontend/fixtures/projects_json.rb'
+ - 'spec/frontend/fixtures/prometheus_integration.rb'
+ - 'spec/frontend/fixtures/raw.rb'
+ - 'spec/frontend/fixtures/releases.rb'
+ - 'spec/frontend/fixtures/runner.rb'
+ - 'spec/frontend/fixtures/search.rb'
+ - 'spec/frontend/fixtures/sessions.rb'
+ - 'spec/frontend/fixtures/snippet.rb'
+ - 'spec/frontend/fixtures/startup_css.rb'
+ - 'spec/frontend/fixtures/tabs.rb'
+ - 'spec/frontend/fixtures/tags.rb'
+ - 'spec/frontend/fixtures/timezones.rb'
+ - 'spec/frontend/fixtures/todos.rb'
+ - 'spec/frontend/fixtures/u2f.rb'
+ - 'spec/frontend/fixtures/webauthn.rb'
+ - 'spec/graphql/features/authorization_spec.rb'
+ - 'spec/graphql/gitlab_schema_spec.rb'
+ - 'spec/graphql/graphql_triggers_spec.rb'
+ - 'spec/graphql/mutations/alert_management/alerts/set_assignees_spec.rb'
+ - 'spec/graphql/mutations/alert_management/alerts/todo/create_spec.rb'
+ - 'spec/graphql/mutations/alert_management/create_alert_issue_spec.rb'
+ - 'spec/graphql/mutations/alert_management/http_integration/create_spec.rb'
+ - 'spec/graphql/mutations/alert_management/http_integration/destroy_spec.rb'
+ - 'spec/graphql/mutations/alert_management/http_integration/reset_token_spec.rb'
+ - 'spec/graphql/mutations/alert_management/http_integration/update_spec.rb'
+ - 'spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb'
+ - 'spec/graphql/mutations/alert_management/prometheus_integration/reset_token_spec.rb'
+ - 'spec/graphql/mutations/alert_management/prometheus_integration/update_spec.rb'
+ - 'spec/graphql/mutations/alert_management/update_alert_status_spec.rb'
+ - 'spec/graphql/mutations/base_mutation_spec.rb'
+ - 'spec/graphql/mutations/boards/issues/issue_move_list_spec.rb'
+ - 'spec/graphql/mutations/boards/lists/create_spec.rb'
+ - 'spec/graphql/mutations/boards/lists/update_spec.rb'
+ - 'spec/graphql/mutations/boards/update_spec.rb'
+ - 'spec/graphql/mutations/branches/create_spec.rb'
+ - 'spec/graphql/mutations/ci/job_token_scope/add_project_spec.rb'
+ - 'spec/graphql/mutations/ci/job_token_scope/remove_project_spec.rb'
+ - 'spec/graphql/mutations/clusters/agent_tokens/create_spec.rb'
+ - 'spec/graphql/mutations/clusters/agent_tokens/revoke_spec.rb'
+ - 'spec/graphql/mutations/clusters/agents/create_spec.rb'
+ - 'spec/graphql/mutations/clusters/agents/delete_spec.rb'
+ - 'spec/graphql/mutations/commits/create_spec.rb'
+ - 'spec/graphql/mutations/concerns/mutations/finds_by_gid_spec.rb'
+ - 'spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb'
+ - 'spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb'
+ - 'spec/graphql/mutations/container_expiration_policies/update_spec.rb'
+ - 'spec/graphql/mutations/container_repositories/destroy_spec.rb'
+ - 'spec/graphql/mutations/container_repositories/destroy_tags_spec.rb'
+ - 'spec/graphql/mutations/custom_emoji/create_spec.rb'
+ - 'spec/graphql/mutations/custom_emoji/destroy_spec.rb'
+ - 'spec/graphql/mutations/customer_relations/contacts/create_spec.rb'
+ - 'spec/graphql/mutations/customer_relations/contacts/update_spec.rb'
+ - 'spec/graphql/mutations/customer_relations/organizations/create_spec.rb'
+ - 'spec/graphql/mutations/customer_relations/organizations/update_spec.rb'
+ - 'spec/graphql/mutations/dependency_proxy/group_settings/update_spec.rb'
+ - 'spec/graphql/mutations/dependency_proxy/image_ttl_group_policy/update_spec.rb'
+ - 'spec/graphql/mutations/design_management/delete_spec.rb'
+ - 'spec/graphql/mutations/design_management/move_spec.rb'
+ - 'spec/graphql/mutations/design_management/upload_spec.rb'
+ - 'spec/graphql/mutations/discussions/toggle_resolve_spec.rb'
+ - 'spec/graphql/mutations/environments/canary_ingress/update_spec.rb'
+ - 'spec/graphql/mutations/groups/update_spec.rb'
+ - 'spec/graphql/mutations/incident_management/timeline_event/create_spec.rb'
+ - 'spec/graphql/mutations/incident_management/timeline_event/destroy_spec.rb'
+ - 'spec/graphql/mutations/incident_management/timeline_event/promote_from_note_spec.rb'
+ - 'spec/graphql/mutations/incident_management/timeline_event/update_spec.rb'
+ - 'spec/graphql/mutations/incident_management/timeline_event_tag/create_spec.rb'
+ - 'spec/graphql/mutations/issues/create_spec.rb'
+ - 'spec/graphql/mutations/issues/move_spec.rb'
+ - 'spec/graphql/mutations/issues/set_assignees_spec.rb'
+ - 'spec/graphql/mutations/issues/set_confidential_spec.rb'
+ - 'spec/graphql/mutations/issues/set_due_date_spec.rb'
+ - 'spec/graphql/mutations/issues/set_escalation_status_spec.rb'
+ - 'spec/graphql/mutations/issues/set_locked_spec.rb'
+ - 'spec/graphql/mutations/issues/set_severity_spec.rb'
+ - 'spec/graphql/mutations/issues/set_subscription_spec.rb'
+ - 'spec/graphql/mutations/issues/update_spec.rb'
+ - 'spec/graphql/mutations/labels/create_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/accept_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/create_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/set_assignees_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/set_draft_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/set_labels_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/set_locked_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/set_milestone_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/set_reviewers_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/set_subscription_spec.rb'
+ - 'spec/graphql/mutations/merge_requests/update_spec.rb'
+ - 'spec/graphql/mutations/namespace/package_settings/update_spec.rb'
+ - 'spec/graphql/mutations/notes/reposition_image_diff_note_spec.rb'
+ - 'spec/graphql/mutations/pages/mark_onboarding_complete_spec.rb'
+ - 'spec/graphql/mutations/release_asset_links/create_spec.rb'
+ - 'spec/graphql/mutations/release_asset_links/delete_spec.rb'
+ - 'spec/graphql/mutations/release_asset_links/update_spec.rb'
+ - 'spec/graphql/mutations/releases/create_spec.rb'
+ - 'spec/graphql/mutations/releases/delete_spec.rb'
+ - 'spec/graphql/mutations/releases/update_spec.rb'
+ - 'spec/graphql/mutations/saved_replies/create_spec.rb'
+ - 'spec/graphql/mutations/saved_replies/destroy_spec.rb'
+ - 'spec/graphql/mutations/saved_replies/update_spec.rb'
+ - 'spec/graphql/mutations/security/ci_configuration/base_security_analyzer_spec.rb'
+ - 'spec/graphql/mutations/security/ci_configuration/configure_sast_iac_spec.rb'
+ - 'spec/graphql/mutations/security/ci_configuration/configure_sast_spec.rb'
+ - 'spec/graphql/mutations/security/ci_configuration/configure_secret_detection_spec.rb'
+ - 'spec/graphql/mutations/terraform/state/delete_spec.rb'
+ - 'spec/graphql/mutations/terraform/state/lock_spec.rb'
+ - 'spec/graphql/mutations/terraform/state/unlock_spec.rb'
+ - 'spec/graphql/mutations/timelogs/delete_spec.rb'
+ - 'spec/graphql/mutations/todos/create_spec.rb'
+ - 'spec/graphql/mutations/todos/mark_all_done_spec.rb'
+ - 'spec/graphql/mutations/todos/mark_done_spec.rb'
+ - 'spec/graphql/mutations/todos/restore_many_spec.rb'
+ - 'spec/graphql/mutations/todos/restore_spec.rb'
+ - 'spec/graphql/mutations/user_callouts/create_spec.rb'
+ - 'spec/graphql/mutations/work_items/update_task_spec.rb'
+ - 'spec/graphql/resolvers/admin/analytics/usage_trends/measurements_resolver_spec.rb'
+ - 'spec/graphql/resolvers/alert_management/alert_resolver_spec.rb'
+ - 'spec/graphql/resolvers/alert_management/alert_status_counts_resolver_spec.rb'
+ - 'spec/graphql/resolvers/alert_management/http_integrations_resolver_spec.rb'
+ - 'spec/graphql/resolvers/alert_management/integrations_resolver_spec.rb'
+ - 'spec/graphql/resolvers/base_resolver_spec.rb'
+ - 'spec/graphql/resolvers/blobs_resolver_spec.rb'
+ - 'spec/graphql/resolvers/board_list_issues_resolver_spec.rb'
+ - 'spec/graphql/resolvers/board_list_resolver_spec.rb'
+ - 'spec/graphql/resolvers/board_lists_resolver_spec.rb'
+ - 'spec/graphql/resolvers/board_resolver_spec.rb'
+ - 'spec/graphql/resolvers/boards_resolver_spec.rb'
+ - 'spec/graphql/resolvers/branch_commit_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/all_jobs_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/config_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/job_token_scope_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/jobs_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/project_pipeline_counts_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/template_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/test_report_summary_resolver_spec.rb'
+ - 'spec/graphql/resolvers/ci/test_suite_resolver_spec.rb'
+ - 'spec/graphql/resolvers/clusters/agent_activity_events_resolver_spec.rb'
+ - 'spec/graphql/resolvers/clusters/agent_tokens_resolver_spec.rb'
+ - 'spec/graphql/resolvers/clusters/agents_resolver_spec.rb'
+ - 'spec/graphql/resolvers/commit_pipelines_resolver_spec.rb'
+ - 'spec/graphql/resolvers/concerns/caching_array_resolver_spec.rb'
+ - 'spec/graphql/resolvers/concerns/looks_ahead_spec.rb'
+ - 'spec/graphql/resolvers/concerns/resolves_groups_spec.rb'
+ - 'spec/graphql/resolvers/concerns/resolves_ids_spec.rb'
+ - 'spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb'
+ - 'spec/graphql/resolvers/concerns/resolves_project_spec.rb'
+ - 'spec/graphql/resolvers/container_repositories_resolver_spec.rb'
+ - 'spec/graphql/resolvers/container_repository_tags_resolver_spec.rb'
+ - 'spec/graphql/resolvers/crm/contact_state_counts_resolver_spec.rb'
+ - 'spec/graphql/resolvers/crm/contacts_resolver_spec.rb'
+ - 'spec/graphql/resolvers/crm/organization_state_counts_resolver_spec.rb'
+ - 'spec/graphql/resolvers/crm/organizations_resolver_spec.rb'
+ - 'spec/graphql/resolvers/deployment_resolver_spec.rb'
+ - 'spec/graphql/resolvers/deployments_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/design_at_version_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/design_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/designs_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/version/design_at_version_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/version/designs_at_version_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/version_in_collection_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/version_resolver_spec.rb'
+ - 'spec/graphql/resolvers/design_management/versions_resolver_spec.rb'
+ - 'spec/graphql/resolvers/echo_resolver_spec.rb'
+ - 'spec/graphql/resolvers/environments/last_deployment_resolver_spec.rb'
+ - 'spec/graphql/resolvers/environments_resolver_spec.rb'
+ - 'spec/graphql/resolvers/error_tracking/sentry_detailed_error_resolver_spec.rb'
+ - 'spec/graphql/resolvers/error_tracking/sentry_error_collection_resolver_spec.rb'
+ - 'spec/graphql/resolvers/error_tracking/sentry_errors_resolver_spec.rb'
+ - 'spec/graphql/resolvers/group_issues_resolver_spec.rb'
+ - 'spec/graphql/resolvers/group_labels_resolver_spec.rb'
+ - 'spec/graphql/resolvers/group_members/notification_email_resolver_spec.rb'
+ - 'spec/graphql/resolvers/group_members_resolver_spec.rb'
+ - 'spec/graphql/resolvers/group_milestones_resolver_spec.rb'
+ - 'spec/graphql/resolvers/group_packages_resolver_spec.rb'
+ - 'spec/graphql/resolvers/group_resolver_spec.rb'
+ - 'spec/graphql/resolvers/groups_resolver_spec.rb'
+ - 'spec/graphql/resolvers/incident_management/timeline_event_tags_resolver_spec.rb'
+ - 'spec/graphql/resolvers/incident_management/timeline_events_resolver_spec.rb'
+ - 'spec/graphql/resolvers/issue_status_counts_resolver_spec.rb'
+ - 'spec/graphql/resolvers/kas/agent_configurations_resolver_spec.rb'
+ - 'spec/graphql/resolvers/kas/agent_connections_resolver_spec.rb'
+ - 'spec/graphql/resolvers/labels_resolver_spec.rb'
+ - 'spec/graphql/resolvers/last_commit_resolver_spec.rb'
+ - 'spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb'
+ - 'spec/graphql/resolvers/merge_requests_count_resolver_spec.rb'
+ - 'spec/graphql/resolvers/merge_requests_resolver_spec.rb'
+ - 'spec/graphql/resolvers/metadata_resolver_spec.rb'
+ - 'spec/graphql/resolvers/metrics/dashboard_resolver_spec.rb'
+ - 'spec/graphql/resolvers/metrics/dashboards/annotation_resolver_spec.rb'
+ - 'spec/graphql/resolvers/package_details_resolver_spec.rb'
+ - 'spec/graphql/resolvers/package_pipelines_resolver_spec.rb'
+ - 'spec/graphql/resolvers/packages_base_resolver_spec.rb'
+ - 'spec/graphql/resolvers/paginated_tree_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_issues_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_jobs_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_members_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_merge_requests_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_milestones_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_packages_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_pipeline_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_pipeline_schedules_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_pipeline_statistics_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_pipelines_resolver_spec.rb'
+ - 'spec/graphql/resolvers/project_resolver_spec.rb'
+ - 'spec/graphql/resolvers/projects/fork_targets_resolver_spec.rb'
+ - 'spec/graphql/resolvers/projects/grafana_integration_resolver_spec.rb'
+ - 'spec/graphql/resolvers/projects/jira_projects_resolver_spec.rb'
+ - 'spec/graphql/resolvers/projects/services_resolver_spec.rb'
+ - 'spec/graphql/resolvers/projects/snippets_resolver_spec.rb'
+ - 'spec/graphql/resolvers/projects_resolver_spec.rb'
+ - 'spec/graphql/resolvers/recent_boards_resolver_spec.rb'
+ - 'spec/graphql/resolvers/release_milestones_resolver_spec.rb'
+ - 'spec/graphql/resolvers/release_resolver_spec.rb'
+ - 'spec/graphql/resolvers/releases_resolver_spec.rb'
+ - 'spec/graphql/resolvers/repository_branch_names_resolver_spec.rb'
+ - 'spec/graphql/resolvers/snippets/blobs_resolver_spec.rb'
+ - 'spec/graphql/resolvers/snippets_resolver_spec.rb'
+ - 'spec/graphql/resolvers/terraform/states_resolver_spec.rb'
+ - 'spec/graphql/resolvers/todos_resolver_spec.rb'
+ - 'spec/graphql/resolvers/topics_resolver_spec.rb'
+ - 'spec/graphql/resolvers/tree_resolver_spec.rb'
+ - 'spec/graphql/resolvers/user_discussions_count_resolver_spec.rb'
+ - 'spec/graphql/resolvers/user_notes_count_resolver_spec.rb'
+ - 'spec/graphql/resolvers/user_resolver_spec.rb'
+ - 'spec/graphql/resolvers/users/group_count_resolver_spec.rb'
+ - 'spec/graphql/resolvers/users/groups_resolver_spec.rb'
+ - 'spec/graphql/resolvers/users/participants_resolver_spec.rb'
+ - 'spec/graphql/resolvers/users/snippets_resolver_spec.rb'
+ - 'spec/graphql/resolvers/users_resolver_spec.rb'
+ - 'spec/graphql/resolvers/work_item_resolver_spec.rb'
+ - 'spec/graphql/resolvers/work_items/types_resolver_spec.rb'
+ - 'spec/graphql/resolvers/work_items_resolver_spec.rb'
+ - 'spec/graphql/subscriptions/issuable_updated_spec.rb'
+ - 'spec/graphql/types/access_level_enum_spec.rb'
+ - 'spec/graphql/types/access_level_type_spec.rb'
+ - 'spec/graphql/types/admin/analytics/usage_trends/measurement_identifier_enum_spec.rb'
+ - 'spec/graphql/types/admin/analytics/usage_trends/measurement_type_spec.rb'
+ - 'spec/graphql/types/alert_management/alert_status_count_type_spec.rb'
+ - 'spec/graphql/types/alert_management/domain_filter_enum_spec.rb'
+ - 'spec/graphql/types/alert_management/http_integration_type_spec.rb'
+ - 'spec/graphql/types/alert_management/integration_type_enum_spec.rb'
+ - 'spec/graphql/types/alert_management/integration_type_spec.rb'
+ - 'spec/graphql/types/alert_management/prometheus_integration_type_spec.rb'
+ - 'spec/graphql/types/alert_management/severity_enum_spec.rb'
+ - 'spec/graphql/types/alert_management/status_enum_spec.rb'
+ - 'spec/graphql/types/availability_enum_spec.rb'
+ - 'spec/graphql/types/award_emojis/award_emoji_type_spec.rb'
+ - 'spec/graphql/types/base_argument_spec.rb'
+ - 'spec/graphql/types/base_edge_spec.rb'
+ - 'spec/graphql/types/base_enum_spec.rb'
+ - 'spec/graphql/types/base_field_spec.rb'
+ - 'spec/graphql/types/base_object_spec.rb'
+ - 'spec/graphql/types/blob_viewer_type_spec.rb'
+ - 'spec/graphql/types/blob_viewers/type_enum_spec.rb'
+ - 'spec/graphql/types/board_list_type_spec.rb'
+ - 'spec/graphql/types/board_type_spec.rb'
+ - 'spec/graphql/types/boards/board_issue_input_type_spec.rb'
+ - 'spec/graphql/types/branch_protections/merge_access_level_type_spec.rb'
+ - 'spec/graphql/types/branch_protections/push_access_level_type_spec.rb'
+ - 'spec/graphql/types/branch_rules/branch_protection_type_spec.rb'
+ - 'spec/graphql/types/branch_type_spec.rb'
+ - 'spec/graphql/types/ci/analytics_type_spec.rb'
+ - 'spec/graphql/types/ci/config/config_type_spec.rb'
+ - 'spec/graphql/types/ci/config/group_type_spec.rb'
+ - 'spec/graphql/types/ci/config/include_type_enum_spec.rb'
+ - 'spec/graphql/types/ci/config/include_type_spec.rb'
+ - 'spec/graphql/types/ci/config/job_restriction_type_spec.rb'
+ - 'spec/graphql/types/ci/config/job_type_spec.rb'
+ - 'spec/graphql/types/ci/config/need_type_spec.rb'
+ - 'spec/graphql/types/ci/config/stage_type_spec.rb'
+ - 'spec/graphql/types/ci/config_variable_type_spec.rb'
+ - 'spec/graphql/types/ci/detailed_status_type_spec.rb'
+ - 'spec/graphql/types/ci/group_type_spec.rb'
+ - 'spec/graphql/types/ci/group_variable_connection_type_spec.rb'
+ - 'spec/graphql/types/ci/group_variable_type_spec.rb'
+ - 'spec/graphql/types/ci/instance_variable_type_spec.rb'
+ - 'spec/graphql/types/ci/job_artifact_file_type_enum_spec.rb'
+ - 'spec/graphql/types/ci/job_artifact_type_spec.rb'
+ - 'spec/graphql/types/ci/job_kind_enum_spec.rb'
+ - 'spec/graphql/types/ci/job_need_union_spec.rb'
+ - 'spec/graphql/types/ci/job_status_enum_spec.rb'
+ - 'spec/graphql/types/ci/job_token_scope_type_spec.rb'
+ - 'spec/graphql/types/ci/job_type_spec.rb'
+ - 'spec/graphql/types/ci/manual_variable_type_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_counts_type_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_merge_request_event_type_enum_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_message_type_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_schedule_status_enum_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_schedule_type_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_scope_enum_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_status_enum_spec.rb'
+ - 'spec/graphql/types/ci/pipeline_type_spec.rb'
+ - 'spec/graphql/types/ci/project_variable_connection_type_spec.rb'
+ - 'spec/graphql/types/ci/project_variable_type_spec.rb'
+ - 'spec/graphql/types/ci/recent_failures_type_spec.rb'
+ - 'spec/graphql/types/ci/runner_architecture_type_spec.rb'
+ - 'spec/graphql/types/ci/runner_platform_type_spec.rb'
+ - 'spec/graphql/types/ci/runner_setup_type_spec.rb'
+ - 'spec/graphql/types/ci/runner_type_spec.rb'
+ - 'spec/graphql/types/ci/runner_upgrade_status_enum_spec.rb'
+ - 'spec/graphql/types/ci/runner_web_url_edge_spec.rb'
+ - 'spec/graphql/types/ci/stage_type_spec.rb'
+ - 'spec/graphql/types/ci/status_action_type_spec.rb'
+ - 'spec/graphql/types/ci/template_type_spec.rb'
+ - 'spec/graphql/types/ci/test_case_status_enum_spec.rb'
+ - 'spec/graphql/types/ci/test_case_type_spec.rb'
+ - 'spec/graphql/types/ci/test_report_summary_type_spec.rb'
+ - 'spec/graphql/types/ci/test_report_total_type_spec.rb'
+ - 'spec/graphql/types/ci/test_suite_summary_type_spec.rb'
+ - 'spec/graphql/types/ci/test_suite_type_spec.rb'
+ - 'spec/graphql/types/ci/variable_input_type_spec.rb'
+ - 'spec/graphql/types/ci/variable_interface_spec.rb'
+ - 'spec/graphql/types/ci/variable_type_enum_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/analyzers_entity_input_type_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/analyzers_entity_type_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/entity_input_type_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/entity_type_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/input_type_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/options_entity_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/type_spec.rb'
+ - 'spec/graphql/types/ci_configuration/sast/ui_component_size_enum_spec.rb'
+ - 'spec/graphql/types/clusters/agent_activity_event_type_spec.rb'
+ - 'spec/graphql/types/clusters/agent_token_status_enum_spec.rb'
+ - 'spec/graphql/types/clusters/agent_token_type_spec.rb'
+ - 'spec/graphql/types/clusters/agent_type_spec.rb'
+ - 'spec/graphql/types/color_type_spec.rb'
+ - 'spec/graphql/types/commit_action_mode_enum_spec.rb'
+ - 'spec/graphql/types/commit_encoding_enum_spec.rb'
+ - 'spec/graphql/types/commit_signature_interface_spec.rb'
+ - 'spec/graphql/types/commit_signatures/gpg_signature_type_spec.rb'
+ - 'spec/graphql/types/commit_signatures/verification_status_enum_spec.rb'
+ - 'spec/graphql/types/commit_signatures/x509_signature_type_spec.rb'
+ - 'spec/graphql/types/commit_type_spec.rb'
+ - 'spec/graphql/types/container_expiration_policy_cadence_enum_spec.rb'
+ - 'spec/graphql/types/container_expiration_policy_keep_enum_spec.rb'
+ - 'spec/graphql/types/container_expiration_policy_older_than_enum_spec.rb'
+ - 'spec/graphql/types/container_expiration_policy_type_spec.rb'
+ - 'spec/graphql/types/container_repository_cleanup_status_enum_spec.rb'
+ - 'spec/graphql/types/container_repository_details_type_spec.rb'
+ - 'spec/graphql/types/container_repository_sort_enum_spec.rb'
+ - 'spec/graphql/types/container_repository_status_enum_spec.rb'
+ - 'spec/graphql/types/container_repository_tag_type_spec.rb'
+ - 'spec/graphql/types/container_repository_type_spec.rb'
+ - 'spec/graphql/types/container_respository_tags_sort_enum_spec.rb'
+ - 'spec/graphql/types/countable_connection_type_spec.rb'
+ - 'spec/graphql/types/current_user_todos_type_spec.rb'
+ - 'spec/graphql/types/custom_emoji_type_spec.rb'
+ - 'spec/graphql/types/customer_relations/contact_sort_enum_spec.rb'
+ - 'spec/graphql/types/customer_relations/contact_state_counts_type_spec.rb'
+ - 'spec/graphql/types/customer_relations/contact_type_spec.rb'
+ - 'spec/graphql/types/customer_relations/organization_sort_enum_spec.rb'
+ - 'spec/graphql/types/customer_relations/organization_state_counts_type_spec.rb'
+ - 'spec/graphql/types/customer_relations/organization_type_spec.rb'
+ - 'spec/graphql/types/dependency_proxy/blob_type_spec.rb'
+ - 'spec/graphql/types/dependency_proxy/group_setting_type_spec.rb'
+ - 'spec/graphql/types/dependency_proxy/image_ttl_group_policy_type_spec.rb'
+ - 'spec/graphql/types/dependency_proxy/manifest_type_spec.rb'
+ - 'spec/graphql/types/deployment_tier_enum_spec.rb'
+ - 'spec/graphql/types/design_management/design_at_version_type_spec.rb'
+ - 'spec/graphql/types/design_management/design_collection_copy_state_enum_spec.rb'
+ - 'spec/graphql/types/design_management/design_collection_type_spec.rb'
+ - 'spec/graphql/types/design_management/design_type_spec.rb'
+ - 'spec/graphql/types/design_management/design_version_event_enum_spec.rb'
+ - 'spec/graphql/types/design_management/version_type_spec.rb'
+ - 'spec/graphql/types/design_management_type_spec.rb'
+ - 'spec/graphql/types/detployment_tag_type_spec.rb'
+ - 'spec/graphql/types/diff_refs_type_spec.rb'
+ - 'spec/graphql/types/duration_type_spec.rb'
+ - 'spec/graphql/types/environment_type_spec.rb'
+ - 'spec/graphql/types/error_tracking/sentry_detailed_error_type_spec.rb'
+ - 'spec/graphql/types/error_tracking/sentry_error_collection_type_spec.rb'
+ - 'spec/graphql/types/error_tracking/sentry_error_stack_trace_entry_type_spec.rb'
+ - 'spec/graphql/types/error_tracking/sentry_error_stack_trace_type_spec.rb'
+ - 'spec/graphql/types/error_tracking/sentry_error_type_spec.rb'
+ - 'spec/graphql/types/event_type_spec.rb'
+ - 'spec/graphql/types/eventable_type_spec.rb'
+ - 'spec/graphql/types/evidence_type_spec.rb'
+ - 'spec/graphql/types/global_id_type_spec.rb'
+ - 'spec/graphql/types/grafana_integration_type_spec.rb'
+ - 'spec/graphql/types/group_invitation_type_spec.rb'
+ - 'spec/graphql/types/group_member_relation_enum_spec.rb'
+ - 'spec/graphql/types/group_member_type_spec.rb'
+ - 'spec/graphql/types/group_type_spec.rb'
+ - 'spec/graphql/types/incident_management/escalation_status_enum_spec.rb'
+ - 'spec/graphql/types/incident_management/timeline_event_tag_type_spec.rb'
+ - 'spec/graphql/types/incident_management/timeline_event_type_spec.rb'
+ - 'spec/graphql/types/invitation_interface_spec.rb'
+ - 'spec/graphql/types/issuable_searchable_field_enum_spec.rb'
+ - 'spec/graphql/types/issuable_severity_enum_spec.rb'
+ - 'spec/graphql/types/issuable_sort_enum_spec.rb'
+ - 'spec/graphql/types/issuable_state_enum_spec.rb'
+ - 'spec/graphql/types/issuable_type_spec.rb'
+ - 'spec/graphql/types/issue_sort_enum_spec.rb'
+ - 'spec/graphql/types/issue_state_enum_spec.rb'
+ - 'spec/graphql/types/issue_status_count_type_spec.rb'
+ - 'spec/graphql/types/issue_type_spec.rb'
+ - 'spec/graphql/types/jira_import_type_spec.rb'
+ - 'spec/graphql/types/jira_user_type_spec.rb'
+ - 'spec/graphql/types/kas/agent_configuration_type_spec.rb'
+ - 'spec/graphql/types/kas/agent_connection_type_spec.rb'
+ - 'spec/graphql/types/kas/agent_metadata_type_spec.rb'
+ - 'spec/graphql/types/label_type_spec.rb'
+ - 'spec/graphql/types/limited_countable_connection_type_spec.rb'
+ - 'spec/graphql/types/member_interface_spec.rb'
+ - 'spec/graphql/types/merge_request_connection_type_spec.rb'
+ - 'spec/graphql/types/merge_request_review_state_enum_spec.rb'
+ - 'spec/graphql/types/merge_request_sort_enum_spec.rb'
+ - 'spec/graphql/types/merge_request_state_enum_spec.rb'
+ - 'spec/graphql/types/merge_request_state_event_enum_spec.rb'
+ - 'spec/graphql/types/merge_request_type_spec.rb'
+ - 'spec/graphql/types/merge_requests/assignee_type_spec.rb'
+ - 'spec/graphql/types/merge_requests/author_type_spec.rb'
+ - 'spec/graphql/types/merge_requests/participant_type_spec.rb'
+ - 'spec/graphql/types/merge_requests/reviewer_type_spec.rb'
+ - 'spec/graphql/types/metadata/kas_type_spec.rb'
+ - 'spec/graphql/types/metadata_type_spec.rb'
+ - 'spec/graphql/types/metrics/dashboard_type_spec.rb'
+ - 'spec/graphql/types/metrics/dashboards/annotation_type_spec.rb'
+ - 'spec/graphql/types/milestone_stats_type_spec.rb'
+ - 'spec/graphql/types/milestone_type_spec.rb'
+ - 'spec/graphql/types/mutation_type_spec.rb'
+ - 'spec/graphql/types/namespace/package_settings_type_spec.rb'
+ - 'spec/graphql/types/namespace_type_spec.rb'
+ - 'spec/graphql/types/notes/diff_position_type_spec.rb'
+ - 'spec/graphql/types/notes/discussion_type_spec.rb'
+ - 'spec/graphql/types/notes/noteable_interface_spec.rb'
+ - 'spec/graphql/types/packages/cleanup/keep_duplicated_package_files_enum_spec.rb'
+ - 'spec/graphql/types/packages/cleanup/policy_type_spec.rb'
+ - 'spec/graphql/types/packages/composer/json_type_spec.rb'
+ - 'spec/graphql/types/packages/composer/metadatum_type_spec.rb'
+ - 'spec/graphql/types/packages/conan/file_metadatum_type_spec.rb'
+ - 'spec/graphql/types/packages/conan/metadatum_file_type_enum_spec.rb'
+ - 'spec/graphql/types/packages/conan/metadatum_type_spec.rb'
+ - 'spec/graphql/types/packages/helm/dependency_type_spec.rb'
+ - 'spec/graphql/types/packages/helm/file_metadatum_type_spec.rb'
+ - 'spec/graphql/types/packages/helm/maintainer_type_spec.rb'
+ - 'spec/graphql/types/packages/helm/metadata_type_spec.rb'
+ - 'spec/graphql/types/packages/maven/metadatum_type_spec.rb'
+ - 'spec/graphql/types/packages/nuget/dependency_link_metdatum_type_spec.rb'
+ - 'spec/graphql/types/packages/nuget/metadatum_type_spec.rb'
+ - 'spec/graphql/types/packages/package_base_type_spec.rb'
+ - 'spec/graphql/types/packages/package_dependency_link_type_spec.rb'
+ - 'spec/graphql/types/packages/package_dependency_type_enum_spec.rb'
+ - 'spec/graphql/types/packages/package_dependency_type_spec.rb'
+ - 'spec/graphql/types/packages/package_details_type_spec.rb'
+ - 'spec/graphql/types/packages/package_file_type_spec.rb'
+ - 'spec/graphql/types/packages/package_group_sort_enum_spec.rb'
+ - 'spec/graphql/types/packages/package_sort_enum_spec.rb'
+ - 'spec/graphql/types/packages/package_status_enum_spec.rb'
+ - 'spec/graphql/types/packages/package_type_enum_spec.rb'
+ - 'spec/graphql/types/packages/package_type_spec.rb'
+ - 'spec/graphql/types/packages/pypi/metadatum_type_spec.rb'
+ - 'spec/graphql/types/packages/tag_type_spec.rb'
+ - 'spec/graphql/types/permission_types/base_permission_type_spec.rb'
+ - 'spec/graphql/types/permission_types/ci/job_spec.rb'
+ - 'spec/graphql/types/permission_types/ci/pipeline_schedule_type_spec.rb'
+ - 'spec/graphql/types/permission_types/ci/runner_spec.rb'
+ - 'spec/graphql/types/permission_types/issue_spec.rb'
+ - 'spec/graphql/types/permission_types/merge_request_spec.rb'
+ - 'spec/graphql/types/permission_types/merge_request_type_spec.rb'
+ - 'spec/graphql/types/permission_types/note_spec.rb'
+ - 'spec/graphql/types/permission_types/project_spec.rb'
+ - 'spec/graphql/types/permission_types/snippet_spec.rb'
+ - 'spec/graphql/types/permission_types/user_spec.rb'
+ - 'spec/graphql/types/permission_types/work_item_spec.rb'
+ - 'spec/graphql/types/project_invitation_type_spec.rb'
+ - 'spec/graphql/types/project_member_relation_enum_spec.rb'
+ - 'spec/graphql/types/project_member_type_spec.rb'
+ - 'spec/graphql/types/project_statistics_type_spec.rb'
+ - 'spec/graphql/types/project_type_spec.rb'
+ - 'spec/graphql/types/projects/base_service_type_spec.rb'
+ - 'spec/graphql/types/projects/branch_rule_type_spec.rb'
+ - 'spec/graphql/types/projects/jira_project_type_spec.rb'
+ - 'spec/graphql/types/projects/jira_service_type_spec.rb'
+ - 'spec/graphql/types/projects/repository_language_type_spec.rb'
+ - 'spec/graphql/types/projects/service_type_enum_spec.rb'
+ - 'spec/graphql/types/projects/service_type_spec.rb'
+ - 'spec/graphql/types/projects/topic_type_spec.rb'
+ - 'spec/graphql/types/prometheus_alert_type_spec.rb'
+ - 'spec/graphql/types/query_complexity_type_spec.rb'
+ - 'spec/graphql/types/query_type_spec.rb'
+ - 'spec/graphql/types/range_input_type_spec.rb'
+ - 'spec/graphql/types/release_asset_link_input_type_spec.rb'
+ - 'spec/graphql/types/release_asset_link_type_spec.rb'
+ - 'spec/graphql/types/release_assets_input_type_spec.rb'
+ - 'spec/graphql/types/release_assets_type_spec.rb'
+ - 'spec/graphql/types/release_links_type_spec.rb'
+ - 'spec/graphql/types/release_source_type_spec.rb'
+ - 'spec/graphql/types/release_type_spec.rb'
+ - 'spec/graphql/types/repository_type_spec.rb'
+ - 'spec/graphql/types/resolvable_interface_spec.rb'
+ - 'spec/graphql/types/root_storage_statistics_type_spec.rb'
+ - 'spec/graphql/types/saved_reply_type_spec.rb'
+ - 'spec/graphql/types/security/report_types_enum_spec.rb'
+ - 'spec/graphql/types/snippet_type_spec.rb'
+ - 'spec/graphql/types/snippets/blob_action_enum_spec.rb'
+ - 'spec/graphql/types/snippets/blob_action_input_type_spec.rb'
+ - 'spec/graphql/types/snippets/blob_type_spec.rb'
+ - 'spec/graphql/types/snippets/blob_viewer_type_spec.rb'
+ - 'spec/graphql/types/subscription_type_spec.rb'
+ - 'spec/graphql/types/terraform/state_type_spec.rb'
+ - 'spec/graphql/types/terraform/state_version_type_spec.rb'
+ - 'spec/graphql/types/time_tracking/timelog_category_type_spec.rb'
+ - 'spec/graphql/types/time_type_spec.rb'
+ - 'spec/graphql/types/timeframe_type_spec.rb'
+ - 'spec/graphql/types/todo_type_spec.rb'
+ - 'spec/graphql/types/todoable_interface_spec.rb'
+ - 'spec/graphql/types/tree/blob_type_spec.rb'
+ - 'spec/graphql/types/tree/submodule_type_spec.rb'
+ - 'spec/graphql/types/tree/tree_entry_type_spec.rb'
+ - 'spec/graphql/types/tree/tree_type_spec.rb'
+ - 'spec/graphql/types/tree/type_enum_spec.rb'
+ - 'spec/graphql/types/untrusted_regexp_spec.rb'
+ - 'spec/graphql/types/upload_type_spec.rb'
+ - 'spec/graphql/types/user_callout_feature_name_enum_spec.rb'
+ - 'spec/graphql/types/user_callout_type_spec.rb'
+ - 'spec/graphql/types/user_merge_request_interaction_type_spec.rb'
+ - 'spec/graphql/types/user_preferences_type_spec.rb'
+ - 'spec/graphql/types/user_status_type_spec.rb'
+ - 'spec/graphql/types/work_item_id_type_spec.rb'
+ - 'spec/graphql/types/work_item_type_spec.rb'
+ - 'spec/graphql/types/work_items/widget_interface_spec.rb'
+ - 'spec/graphql/types/work_items/widget_type_enum_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/assignees_input_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/assignees_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/description_input_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/description_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/hierarchy_update_input_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/labels_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/labels_update_input_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/start_and_due_date_type_spec.rb'
+ - 'spec/graphql/types/work_items/widgets/start_and_due_date_update_input_type_spec.rb'
+ - 'spec/graphql/types/x509_certificate_type_spec.rb'
+ - 'spec/graphql/types/x509_issuer_type_spec.rb'
+ - 'spec/haml_lint/linter/documentation_links_spec.rb'
+ - 'spec/haml_lint/linter/inline_javascript_spec.rb'
+ - 'spec/haml_lint/linter/no_plain_nodes_spec.rb'
+ - 'spec/helpers/access_tokens_helper_spec.rb'
+ - 'spec/helpers/admin/application_settings/settings_helper_spec.rb'
+ - 'spec/helpers/admin/background_migrations_helper_spec.rb'
+ - 'spec/helpers/admin/deploy_key_helper_spec.rb'
+ - 'spec/helpers/admin/identities_helper_spec.rb'
+ - 'spec/helpers/admin/user_actions_helper_spec.rb'
+ - 'spec/helpers/analytics/cycle_analytics_helper_spec.rb'
+ - 'spec/helpers/appearances_helper_spec.rb'
+ - 'spec/helpers/application_helper_spec.rb'
+ - 'spec/helpers/application_settings_helper_spec.rb'
+ - 'spec/helpers/auth_helper_spec.rb'
+ - 'spec/helpers/auto_devops_helper_spec.rb'
+ - 'spec/helpers/avatars_helper_spec.rb'
+ - 'spec/helpers/award_emoji_helper_spec.rb'
+ - 'spec/helpers/badges_helper_spec.rb'
+ - 'spec/helpers/bizible_helper_spec.rb'
+ - 'spec/helpers/blame_helper_spec.rb'
+ - 'spec/helpers/blob_helper_spec.rb'
+ - 'spec/helpers/boards_helper_spec.rb'
+ - 'spec/helpers/branches_helper_spec.rb'
+ - 'spec/helpers/breadcrumbs_helper_spec.rb'
+ - 'spec/helpers/broadcast_messages_helper_spec.rb'
+ - 'spec/helpers/button_helper_spec.rb'
+ - 'spec/helpers/calendar_helper_spec.rb'
+ - 'spec/helpers/ci/builds_helper_spec.rb'
+ - 'spec/helpers/ci/jobs_helper_spec.rb'
+ - 'spec/helpers/ci/pipeline_editor_helper_spec.rb'
+ - 'spec/helpers/ci/pipelines_helper_spec.rb'
+ - 'spec/helpers/ci/runners_helper_spec.rb'
+ - 'spec/helpers/ci/secure_files_helper_spec.rb'
+ - 'spec/helpers/ci/status_helper_spec.rb'
+ - 'spec/helpers/ci/triggers_helper_spec.rb'
+ - 'spec/helpers/clusters_helper_spec.rb'
+ - 'spec/helpers/colors_helper_spec.rb'
+ - 'spec/helpers/commits_helper_spec.rb'
+ - 'spec/helpers/components_helper_spec.rb'
+ - 'spec/helpers/container_expiration_policies_helper_spec.rb'
+ - 'spec/helpers/container_registry_helper_spec.rb'
+ - 'spec/helpers/cookies_helper_spec.rb'
+ - 'spec/helpers/dashboard_helper_spec.rb'
+ - 'spec/helpers/deploy_tokens_helper_spec.rb'
+ - 'spec/helpers/dev_ops_report_helper_spec.rb'
+ - 'spec/helpers/diff_helper_spec.rb'
+ - 'spec/helpers/dropdowns_helper_spec.rb'
+ - 'spec/helpers/emails_helper_spec.rb'
+ - 'spec/helpers/emoji_helper_spec.rb'
+ - 'spec/helpers/enable_search_settings_helper_spec.rb'
+ - 'spec/helpers/environment_helper_spec.rb'
+ - 'spec/helpers/environments_helper_spec.rb'
+ - 'spec/helpers/events_helper_spec.rb'
+ - 'spec/helpers/explore_helper_spec.rb'
+ - 'spec/helpers/export_helper_spec.rb'
+ - 'spec/helpers/external_link_helper_spec.rb'
+ - 'spec/helpers/feature_flags_helper_spec.rb'
+ - 'spec/helpers/form_helper_spec.rb'
+ - 'spec/helpers/git_helper_spec.rb'
+ - 'spec/helpers/gitlab_routing_helper_spec.rb'
+ - 'spec/helpers/gitlab_script_tag_helper_spec.rb'
+ - 'spec/helpers/graph_helper_spec.rb'
+ - 'spec/helpers/groups/group_members_helper_spec.rb'
+ - 'spec/helpers/groups/observability_helper_spec.rb'
+ - 'spec/helpers/groups/settings_helper_spec.rb'
+ - 'spec/helpers/groups_helper_spec.rb'
+ - 'spec/helpers/hooks_helper_spec.rb'
+ - 'spec/helpers/icons_helper_spec.rb'
+ - 'spec/helpers/import_helper_spec.rb'
+ - 'spec/helpers/instance_configuration_helper_spec.rb'
+ - 'spec/helpers/integrations_helper_spec.rb'
+ - 'spec/helpers/invite_members_helper_spec.rb'
+ - 'spec/helpers/issuables_description_templates_helper_spec.rb'
+ - 'spec/helpers/issuables_helper_spec.rb'
+ - 'spec/helpers/issues_helper_spec.rb'
+ - 'spec/helpers/jira_connect_helper_spec.rb'
+ - 'spec/helpers/json_helper_spec.rb'
+ - 'spec/helpers/keyset_helper_spec.rb'
+ - 'spec/helpers/labels_helper_spec.rb'
+ - 'spec/helpers/lazy_image_tag_helper_spec.rb'
+ - 'spec/helpers/listbox_helper_spec.rb'
+ - 'spec/helpers/markup_helper_spec.rb'
+ - 'spec/helpers/members_helper_spec.rb'
+ - 'spec/helpers/merge_requests_helper_spec.rb'
+ - 'spec/helpers/milestones_helper_spec.rb'
+ - 'spec/helpers/namespaces_helper_spec.rb'
+ - 'spec/helpers/nav/new_dropdown_helper_spec.rb'
+ - 'spec/helpers/nav/top_nav_helper_spec.rb'
+ - 'spec/helpers/nav_helper_spec.rb'
+ - 'spec/helpers/notes_helper_spec.rb'
+ - 'spec/helpers/notifications_helper_spec.rb'
+ - 'spec/helpers/notify_helper_spec.rb'
+ - 'spec/helpers/numbers_helper_spec.rb'
+ - 'spec/helpers/one_trust_helper_spec.rb'
+ - 'spec/helpers/operations_helper_spec.rb'
+ - 'spec/helpers/packages_helper_spec.rb'
+ - 'spec/helpers/page_layout_helper_spec.rb'
+ - 'spec/helpers/pagination_helper_spec.rb'
+ - 'spec/helpers/preferences_helper_spec.rb'
+ - 'spec/helpers/preferred_language_switcher_helper_spec.rb'
+ - 'spec/helpers/profiles_helper_spec.rb'
+ - 'spec/helpers/programming_languages_helper_spec.rb'
+ - 'spec/helpers/projects/alert_management_helper_spec.rb'
+ - 'spec/helpers/projects/cluster_agents_helper_spec.rb'
+ - 'spec/helpers/projects/error_tracking_helper_spec.rb'
+ - 'spec/helpers/projects/google_cloud/cloudsql_helper_spec.rb'
+ - 'spec/helpers/projects/incidents_helper_spec.rb'
+ - 'spec/helpers/projects/pages_helper_spec.rb'
+ - 'spec/helpers/projects/pipeline_helper_spec.rb'
+ - 'spec/helpers/projects/project_members_helper_spec.rb'
+ - 'spec/helpers/projects/security/configuration_helper_spec.rb'
+ - 'spec/helpers/projects/terraform_helper_spec.rb'
+ - 'spec/helpers/projects_helper_spec.rb'
+ - 'spec/helpers/recaptcha_helper_spec.rb'
+ - 'spec/helpers/registrations_helper_spec.rb'
+ - 'spec/helpers/releases_helper_spec.rb'
+ - 'spec/helpers/routing/packages_helper_spec.rb'
+ - 'spec/helpers/routing/pseudonymization_helper_spec.rb'
+ - 'spec/helpers/rss_helper_spec.rb'
+ - 'spec/helpers/sessions_helper_spec.rb'
+ - 'spec/helpers/sidebars_helper_spec.rb'
+ - 'spec/helpers/sidekiq_helper_spec.rb'
+ - 'spec/helpers/snippets_helper_spec.rb'
+ - 'spec/helpers/sorting_helper_spec.rb'
+ - 'spec/helpers/sourcegraph_helper_spec.rb'
+ - 'spec/helpers/ssh_keys_helper_spec.rb'
+ - 'spec/helpers/startupjs_helper_spec.rb'
+ - 'spec/helpers/stat_anchors_helper_spec.rb'
+ - 'spec/helpers/storage_helper_spec.rb'
+ - 'spec/helpers/subscribable_banner_helper_spec.rb'
+ - 'spec/helpers/tab_helper_spec.rb'
+ - 'spec/helpers/terms_helper_spec.rb'
+ - 'spec/helpers/time_helper_spec.rb'
+ - 'spec/helpers/time_zone_helper_spec.rb'
+ - 'spec/helpers/timeboxes_routing_helper_spec.rb'
+ - 'spec/helpers/todos_helper_spec.rb'
+ - 'spec/helpers/tooling/visual_review_helper_spec.rb'
+ - 'spec/helpers/tracking_helper_spec.rb'
+ - 'spec/helpers/tree_helper_spec.rb'
+ - 'spec/helpers/users/callouts_helper_spec.rb'
+ - 'spec/helpers/users/group_callouts_helper_spec.rb'
+ - 'spec/helpers/users_helper_spec.rb'
+ - 'spec/helpers/version_check_helper_spec.rb'
+ - 'spec/helpers/visibility_level_helper_spec.rb'
+ - 'spec/helpers/web_hooks/web_hooks_helper_spec.rb'
+ - 'spec/helpers/web_ide_button_helper_spec.rb'
+ - 'spec/helpers/webpack_helper_spec.rb'
+ - 'spec/helpers/whats_new_helper_spec.rb'
+ - 'spec/helpers/wiki_helper_spec.rb'
+ - 'spec/helpers/wiki_page_version_helper_spec.rb'
+ - 'spec/helpers/x509_helper_spec.rb'
+ - 'spec/initializers/00_deprecations_spec.rb'
+ - 'spec/initializers/00_rails_disable_joins_spec.rb'
+ - 'spec/initializers/0_log_deprecations_spec.rb'
+ - 'spec/initializers/0_postgresql_types_spec.rb'
+ - 'spec/initializers/100_patch_omniauth_oauth2_spec.rb'
+ - 'spec/initializers/100_patch_omniauth_saml_spec.rb'
+ - 'spec/initializers/1_acts_as_taggable_spec.rb'
+ - 'spec/initializers/6_validations_spec.rb'
+ - 'spec/initializers/action_cable_subscription_adapter_identifier_spec.rb'
+ - 'spec/initializers/action_mailer_hooks_spec.rb'
+ - 'spec/initializers/active_record_locking_spec.rb'
+ - 'spec/initializers/asset_proxy_setting_spec.rb'
+ - 'spec/initializers/carrierwave_patch_spec.rb'
+ - 'spec/initializers/cookies_serializer_spec.rb'
+ - 'spec/initializers/database_config_spec.rb'
+ - 'spec/initializers/direct_upload_support_spec.rb'
+ - 'spec/initializers/doorkeeper_spec.rb'
+ - 'spec/initializers/enumerator_next_patch_spec.rb'
+ - 'spec/initializers/fog_google_https_private_urls_spec.rb'
+ - 'spec/initializers/forbid_sidekiq_in_transactions_spec.rb'
+ - 'spec/initializers/global_id_spec.rb'
+ - 'spec/initializers/google_api_client_spec.rb'
+ - 'spec/initializers/hangouts_chat_http_override_spec.rb'
+ - 'spec/initializers/hashie_mash_permitted_patch_spec.rb'
+ - 'spec/initializers/load_balancing_spec.rb'
+ - 'spec/initializers/lograge_spec.rb'
+ - 'spec/initializers/mail_encoding_patch_spec.rb'
+ - 'spec/initializers/mailer_retries_spec.rb'
+ - 'spec/initializers/memory_watchdog_spec.rb'
+ - 'spec/initializers/microsoft_graph_mailer_spec.rb'
+ - 'spec/initializers/net_http_patch_spec.rb'
+ - 'spec/initializers/net_http_response_patch_spec.rb'
+ - 'spec/initializers/omniauth_spec.rb'
+ - 'spec/initializers/pages_storage_check_spec.rb'
+ - 'spec/initializers/rack_VULNDB-255039_patch_spec.rb'
+ - 'spec/initializers/rack_multipart_patch_spec.rb'
+ - 'spec/initializers/rails_asset_host_spec.rb'
+ - 'spec/initializers/rails_yaml_safe_load_spec.rb'
+ - 'spec/initializers/rdoc_segfault_patch_spec.rb'
+ - 'spec/initializers/remove_active_job_execute_callback_spec.rb'
+ - 'spec/initializers/rest-client-hostname_override_spec.rb'
+ - 'spec/initializers/sawyer_patch_spec.rb'
+ - 'spec/initializers/secret_token_spec.rb'
+ - 'spec/initializers/session_store_spec.rb'
+ - 'spec/initializers/settings_spec.rb'
+ - 'spec/initializers/sidekiq_spec.rb'
+ - 'spec/initializers/trusted_proxies_spec.rb'
+ - 'spec/initializers/validate_database_config_spec.rb'
+ - 'spec/initializers/validate_puma_spec.rb'
+ - 'spec/lib/api/api_spec.rb'
+ - 'spec/lib/api/base_spec.rb'
+ - 'spec/lib/api/ci/helpers/runner_spec.rb'
+ - 'spec/lib/api/entities/application_setting_spec.rb'
+ - 'spec/lib/api/entities/branch_spec.rb'
+ - 'spec/lib/api/entities/bulk_import_spec.rb'
+ - 'spec/lib/api/entities/bulk_imports/entity_failure_spec.rb'
+ - 'spec/lib/api/entities/bulk_imports/entity_spec.rb'
+ - 'spec/lib/api/entities/bulk_imports/export_status_spec.rb'
+ - 'spec/lib/api/entities/changelog_spec.rb'
+ - 'spec/lib/api/entities/ci/job_artifact_file_spec.rb'
+ - 'spec/lib/api/entities/ci/job_request/dependency_spec.rb'
+ - 'spec/lib/api/entities/ci/job_request/image_spec.rb'
+ - 'spec/lib/api/entities/ci/job_request/port_spec.rb'
+ - 'spec/lib/api/entities/ci/job_request/service_spec.rb'
+ - 'spec/lib/api/entities/ci/pipeline_spec.rb'
+ - 'spec/lib/api/entities/clusters/agent_authorization_spec.rb'
+ - 'spec/lib/api/entities/clusters/agent_spec.rb'
+ - 'spec/lib/api/entities/deploy_key_spec.rb'
+ - 'spec/lib/api/entities/deploy_keys_project_spec.rb'
+ - 'spec/lib/api/entities/deployment_extended_spec.rb'
+ - 'spec/lib/api/entities/design_management/design_spec.rb'
+ - 'spec/lib/api/entities/group_detail_spec.rb'
+ - 'spec/lib/api/entities/merge_request_approvals_spec.rb'
+ - 'spec/lib/api/entities/merge_request_basic_spec.rb'
+ - 'spec/lib/api/entities/merge_request_changes_spec.rb'
+ - 'spec/lib/api/entities/ml/mlflow/run_info_spec.rb'
+ - 'spec/lib/api/entities/ml/mlflow/run_spec.rb'
+ - 'spec/lib/api/entities/nuget/dependency_group_spec.rb'
+ - 'spec/lib/api/entities/nuget/dependency_spec.rb'
+ - 'spec/lib/api/entities/nuget/metadatum_spec.rb'
+ - 'spec/lib/api/entities/nuget/package_metadata_catalog_entry_spec.rb'
+ - 'spec/lib/api/entities/nuget/search_result_spec.rb'
+ - 'spec/lib/api/entities/package_spec.rb'
+ - 'spec/lib/api/entities/personal_access_token_spec.rb'
+ - 'spec/lib/api/entities/plan_limit_spec.rb'
+ - 'spec/lib/api/entities/project_import_failed_relation_spec.rb'
+ - 'spec/lib/api/entities/project_import_status_spec.rb'
+ - 'spec/lib/api/entities/project_spec.rb'
+ - 'spec/lib/api/entities/projects/repository_storage_move_spec.rb'
+ - 'spec/lib/api/entities/projects/topic_spec.rb'
+ - 'spec/lib/api/entities/public_group_details_spec.rb'
+ - 'spec/lib/api/entities/release_spec.rb'
+ - 'spec/lib/api/entities/snippet_spec.rb'
+ - 'spec/lib/api/entities/snippets/repository_storage_move_spec.rb'
+ - 'spec/lib/api/entities/user_counts_spec.rb'
+ - 'spec/lib/api/entities/user_spec.rb'
+ - 'spec/lib/api/entities/wiki_page_spec.rb'
+ - 'spec/lib/api/every_api_endpoint_spec.rb'
+ - 'spec/lib/api/github/entities_spec.rb'
+ - 'spec/lib/api/helpers/authentication_spec.rb'
+ - 'spec/lib/api/helpers/caching_spec.rb'
+ - 'spec/lib/api/helpers/common_helpers_spec.rb'
+ - 'spec/lib/api/helpers/graphql_helpers_spec.rb'
+ - 'spec/lib/api/helpers/label_helpers_spec.rb'
+ - 'spec/lib/api/helpers/merge_requests_helpers_spec.rb'
+ - 'spec/lib/api/helpers/open_api_spec.rb'
+ - 'spec/lib/api/helpers/packages/dependency_proxy_helpers_spec.rb'
+ - 'spec/lib/api/helpers/packages_manager_clients_helpers_spec.rb'
+ - 'spec/lib/api/helpers/pagination_spec.rb'
+ - 'spec/lib/api/helpers/pagination_strategies_spec.rb'
+ - 'spec/lib/api/helpers/project_stats_refresh_conflicts_helpers_spec.rb'
+ - 'spec/lib/api/helpers/rate_limiter_spec.rb'
+ - 'spec/lib/api/helpers/related_resources_helpers_spec.rb'
+ - 'spec/lib/api/helpers/variables_helpers_spec.rb'
+ - 'spec/lib/api/helpers/version_spec.rb'
+ - 'spec/lib/api/support/git_access_actor_spec.rb'
+ - 'spec/lib/api/validations/validators/absence_spec.rb'
+ - 'spec/lib/api/validations/validators/array_none_any_spec.rb'
+ - 'spec/lib/api/validations/validators/email_or_email_list_spec.rb'
+ - 'spec/lib/api/validations/validators/file_path_spec.rb'
+ - 'spec/lib/api/validations/validators/git_ref_spec.rb'
+ - 'spec/lib/api/validations/validators/git_sha_spec.rb'
+ - 'spec/lib/api/validations/validators/integer_none_any_spec.rb'
+ - 'spec/lib/api/validations/validators/integer_or_custom_value_spec.rb'
+ - 'spec/lib/api/validations/validators/limit_spec.rb'
+ - 'spec/lib/api/validations/validators/project_portable_spec.rb'
+ - 'spec/lib/api/validations/validators/untrusted_regexp_spec.rb'
+ - 'spec/lib/atlassian/jira_issue_key_extractor_spec.rb'
+ - 'spec/lib/backup/database_backup_error_spec.rb'
+ - 'spec/lib/backup/file_backup_error_spec.rb'
+ - 'spec/lib/backup/files_spec.rb'
+ - 'spec/lib/backup/gitaly_backup_spec.rb'
+ - 'spec/lib/backup/repositories_spec.rb'
+ - 'spec/lib/backup/task_spec.rb'
+ - 'spec/lib/banzai/color_parser_spec.rb'
+ - 'spec/lib/banzai/commit_renderer_spec.rb'
+ - 'spec/lib/banzai/cross_project_reference_spec.rb'
+ - 'spec/lib/banzai/filter/absolute_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter/ascii_doc_post_processing_filter_spec.rb'
+ - 'spec/lib/banzai/filter/ascii_doc_sanitization_filter_spec.rb'
+ - 'spec/lib/banzai/filter/asset_proxy_filter_spec.rb'
+ - 'spec/lib/banzai/filter/audio_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter/autolink_filter_spec.rb'
+ - 'spec/lib/banzai/filter/blockquote_fence_filter_spec.rb'
+ - 'spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb'
+ - 'spec/lib/banzai/filter/broadcast_message_sanitization_filter_spec.rb'
+ - 'spec/lib/banzai/filter/color_filter_spec.rb'
+ - 'spec/lib/banzai/filter/custom_emoji_filter_spec.rb'
+ - 'spec/lib/banzai/filter/emoji_filter_spec.rb'
+ - 'spec/lib/banzai/filter/external_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter/footnote_filter_spec.rb'
+ - 'spec/lib/banzai/filter/front_matter_filter_spec.rb'
+ - 'spec/lib/banzai/filter/gollum_tags_filter_spec.rb'
+ - 'spec/lib/banzai/filter/html_entity_filter_spec.rb'
+ - 'spec/lib/banzai/filter/image_lazy_load_filter_spec.rb'
+ - 'spec/lib/banzai/filter/image_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter/inline_alert_metrics_filter_spec.rb'
+ - 'spec/lib/banzai/filter/inline_cluster_metrics_filter_spec.rb'
+ - 'spec/lib/banzai/filter/inline_diff_filter_spec.rb'
+ - 'spec/lib/banzai/filter/inline_grafana_metrics_filter_spec.rb'
+ - 'spec/lib/banzai/filter/inline_metrics_filter_spec.rb'
+ - 'spec/lib/banzai/filter/inline_metrics_redactor_filter_spec.rb'
+ - 'spec/lib/banzai/filter/inline_observability_filter_spec.rb'
+ - 'spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb'
+ - 'spec/lib/banzai/filter/jira_import/adf_to_commonmark_filter_spec.rb'
+ - 'spec/lib/banzai/filter/kroki_filter_spec.rb'
+ - 'spec/lib/banzai/filter/markdown_filter_spec.rb'
+ - 'spec/lib/banzai/filter/mermaid_filter_spec.rb'
+ - 'spec/lib/banzai/filter/normalize_source_filter_spec.rb'
+ - 'spec/lib/banzai/filter/output_safety_spec.rb'
+ - 'spec/lib/banzai/filter/plantuml_filter_spec.rb'
+ - 'spec/lib/banzai/filter/reference_redactor_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/abstract_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/alert_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/commit_range_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/commit_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/design_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/external_issue_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/feature_flag_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/issue_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/label_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/merge_request_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/milestone_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/project_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/reference_cache_spec.rb'
+ - 'spec/lib/banzai/filter/references/reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/snippet_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/references/user_reference_filter_spec.rb'
+ - 'spec/lib/banzai/filter/sanitization_filter_spec.rb'
+ - 'spec/lib/banzai/filter/spaced_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter/suggestion_filter_spec.rb'
+ - 'spec/lib/banzai/filter/syntax_highlight_filter_spec.rb'
+ - 'spec/lib/banzai/filter/table_of_contents_filter_spec.rb'
+ - 'spec/lib/banzai/filter/table_of_contents_tag_filter_spec.rb'
+ - 'spec/lib/banzai/filter/task_list_filter_spec.rb'
+ - 'spec/lib/banzai/filter/timeout_html_pipeline_filter_spec.rb'
+ - 'spec/lib/banzai/filter/truncate_source_filter_spec.rb'
+ - 'spec/lib/banzai/filter/truncate_visible_filter_spec.rb'
+ - 'spec/lib/banzai/filter/upload_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter/video_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter/wiki_link_filter_spec.rb'
+ - 'spec/lib/banzai/filter_array_spec.rb'
+ - 'spec/lib/banzai/issuable_extractor_spec.rb'
+ - 'spec/lib/banzai/object_renderer_spec.rb'
+ - 'spec/lib/banzai/pipeline/broadcast_message_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/description_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/email_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/emoji_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/gfm_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/incident_management/timeline_event_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/jira_import/adf_commonmark_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/post_process_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/pre_process_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/wiki_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline_spec.rb'
+ - 'spec/lib/banzai/querying_spec.rb'
+ - 'spec/lib/banzai/reference_parser/alert_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/base_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/commit_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/commit_range_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/design_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/external_issue_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/feature_flag_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/issue_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/label_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/mentioned_group_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/mentioned_project_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/merge_request_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/milestone_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/project_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/snippet_parser_spec.rb'
+ - 'spec/lib/banzai/reference_parser/user_parser_spec.rb'
+ - 'spec/lib/banzai/reference_redactor_spec.rb'
+ - 'spec/lib/banzai/render_context_spec.rb'
+ - 'spec/lib/banzai/renderer_spec.rb'
+ - 'spec/lib/bitbucket/collection_spec.rb'
+ - 'spec/lib/bitbucket/connection_spec.rb'
+ - 'spec/lib/bitbucket/page_spec.rb'
+ - 'spec/lib/bitbucket/paginator_spec.rb'
+ - 'spec/lib/bitbucket/representation/comment_spec.rb'
+ - 'spec/lib/bitbucket/representation/issue_spec.rb'
+ - 'spec/lib/bitbucket/representation/pull_request_comment_spec.rb'
+ - 'spec/lib/bitbucket/representation/pull_request_spec.rb'
+ - 'spec/lib/bitbucket/representation/repo_spec.rb'
+ - 'spec/lib/bitbucket/representation/user_spec.rb'
+ - 'spec/lib/bitbucket_server/client_spec.rb'
+ - 'spec/lib/bitbucket_server/collection_spec.rb'
+ - 'spec/lib/bitbucket_server/connection_spec.rb'
+ - 'spec/lib/bitbucket_server/page_spec.rb'
+ - 'spec/lib/bitbucket_server/paginator_spec.rb'
+ - 'spec/lib/bitbucket_server/representation/activity_spec.rb'
+ - 'spec/lib/bitbucket_server/representation/comment_spec.rb'
+ - 'spec/lib/bitbucket_server/representation/pull_request_comment_spec.rb'
+ - 'spec/lib/bitbucket_server/representation/pull_request_spec.rb'
+ - 'spec/lib/bitbucket_server/representation/repo_spec.rb'
+ - 'spec/lib/bulk_imports/clients/graphql_spec.rb'
+ - 'spec/lib/bulk_imports/common/extractors/graphql_extractor_spec.rb'
+ - 'spec/lib/bulk_imports/common/extractors/json_extractor_spec.rb'
+ - 'spec/lib/bulk_imports/common/extractors/ndjson_extractor_spec.rb'
+ - 'spec/lib/bulk_imports/common/extractors/rest_extractor_spec.rb'
+ - 'spec/lib/bulk_imports/common/graphql/get_members_query_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/badges_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/boards_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/entity_finisher_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/labels_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/members_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/milestones_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/common/pipelines/wiki_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/common/rest/get_badges_query_spec.rb'
+ - 'spec/lib/bulk_imports/common/transformers/prohibited_attributes_transformer_spec.rb'
+ - 'spec/lib/bulk_imports/common/transformers/user_reference_transformer_spec.rb'
+ - 'spec/lib/bulk_imports/features_spec.rb'
+ - 'spec/lib/bulk_imports/file_downloads/filename_fetch_spec.rb'
+ - 'spec/lib/bulk_imports/file_downloads/validations_spec.rb'
+ - 'spec/lib/bulk_imports/groups/extractors/subgroups_extractor_spec.rb'
+ - 'spec/lib/bulk_imports/groups/graphql/get_group_query_spec.rb'
+ - 'spec/lib/bulk_imports/groups/graphql/get_projects_query_spec.rb'
+ - 'spec/lib/bulk_imports/groups/loaders/group_loader_spec.rb'
+ - 'spec/lib/bulk_imports/groups/pipelines/group_attributes_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/groups/pipelines/group_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/groups/pipelines/namespace_settings_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/groups/pipelines/project_entities_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/groups/pipelines/subgroup_entities_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/groups/transformers/member_attributes_transformer_spec.rb'
+ - 'spec/lib/bulk_imports/groups/transformers/subgroup_to_entity_transformer_spec.rb'
+ - 'spec/lib/bulk_imports/ndjson_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/network_error_spec.rb'
+ - 'spec/lib/bulk_imports/pipeline/context_spec.rb'
+ - 'spec/lib/bulk_imports/pipeline/extracted_data_spec.rb'
+ - 'spec/lib/bulk_imports/pipeline/runner_spec.rb'
+ - 'spec/lib/bulk_imports/pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/graphql/get_project_query_spec.rb'
+ - 'spec/lib/bulk_imports/projects/graphql/get_repository_query_spec.rb'
+ - 'spec/lib/bulk_imports/projects/graphql/get_snippet_repository_query_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/auto_devops_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/ci_pipelines_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/container_expiration_policy_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/external_pull_requests_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/issues_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/merge_requests_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/pipeline_schedules_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/project_attributes_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/project_feature_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/project_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/protected_branches_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/references_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/releases_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/repository_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/service_desk_setting_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/snippets_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/pipelines/snippets_repository_pipeline_spec.rb'
+ - 'spec/lib/bulk_imports/projects/stage_spec.rb'
+ - 'spec/lib/bulk_imports/retry_pipeline_error_spec.rb'
+ - 'spec/lib/bulk_imports/users_mapper_spec.rb'
+ - 'spec/lib/constraints/admin_constrainer_spec.rb'
+ - 'spec/lib/constraints/group_url_constrainer_spec.rb'
+ - 'spec/lib/constraints/jira_encoded_url_constrainer_spec.rb'
+ - 'spec/lib/constraints/project_url_constrainer_spec.rb'
+ - 'spec/lib/constraints/user_url_constrainer_spec.rb'
+ - 'spec/lib/container_registry/blob_spec.rb'
+ - 'spec/lib/container_registry/client_spec.rb'
+ - 'spec/lib/container_registry/gitlab_api_client_spec.rb'
+ - 'spec/lib/container_registry/migration_spec.rb'
+ - 'spec/lib/container_registry/path_spec.rb'
+ - 'spec/lib/container_registry/registry_spec.rb'
+ - 'spec/lib/container_registry/tag_spec.rb'
+ - 'spec/lib/csv_builder_spec.rb'
+ - 'spec/lib/csv_builders/stream_spec.rb'
+ - 'spec/lib/declarative_enum_spec.rb'
+ - 'spec/lib/error_tracking/collector/payload_validator_spec.rb'
+ - 'spec/lib/error_tracking/collector/sentry_auth_parser_spec.rb'
+ - 'spec/lib/error_tracking/collector/sentry_request_parser_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client/api_urls_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client/event_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client/issue_link_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client/issue_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client/pagination_parser_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client/projects_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client/repo_spec.rb'
+ - 'spec/lib/error_tracking/sentry_client_spec.rb'
+ - 'spec/lib/error_tracking/stacktrace_builder_spec.rb'
+ - 'spec/lib/event_filter_spec.rb'
+ - 'spec/lib/expand_variables_spec.rb'
+ - 'spec/lib/extracts_path_spec.rb'
+ - 'spec/lib/extracts_ref_spec.rb'
+ - 'spec/lib/feature/definition_spec.rb'
+ - 'spec/lib/feature/gitaly_spec.rb'
+ - 'spec/lib/feature_spec.rb'
+ - 'spec/lib/file_size_validator_spec.rb'
+ - 'spec/lib/forever_spec.rb'
+ - 'spec/lib/generators/gitlab/snowplow_event_definition_generator_spec.rb'
+ - 'spec/lib/generators/gitlab/usage_metric_definition/redis_hll_generator_spec.rb'
+ - 'spec/lib/generators/gitlab/usage_metric_definition_generator_spec.rb'
+ - 'spec/lib/generators/gitlab/usage_metric_generator_spec.rb'
+ - 'spec/lib/generators/model/model_generator_spec.rb'
+ - 'spec/lib/gitaly/server_spec.rb'
+ - 'spec/lib/gitlab/access/branch_protection_spec.rb'
+ - 'spec/lib/gitlab/action_cable/request_store_callbacks_spec.rb'
+ - 'spec/lib/gitlab/alert_management/alert_status_counts_spec.rb'
+ - 'spec/lib/gitlab/alert_management/fingerprint_spec.rb'
+ - 'spec/lib/gitlab/alert_management/payload/base_spec.rb'
+ - 'spec/lib/gitlab/alert_management/payload/generic_spec.rb'
+ - 'spec/lib/gitlab/alert_management/payload/managed_prometheus_spec.rb'
+ - 'spec/lib/gitlab/alert_management/payload/prometheus_spec.rb'
+ - 'spec/lib/gitlab/alert_management/payload_spec.rb'
+ - 'spec/lib/gitlab/allowable_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/average_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/base_query_builder_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/median_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/sorting_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_deployed_to_production_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start_spec.rb'
+ - 'spec/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event_spec.rb'
+ - 'spec/lib/gitlab/analytics/date_filler_spec.rb'
+ - 'spec/lib/gitlab/analytics/usage_trends/workers_argument_builder_spec.rb'
+ - 'spec/lib/gitlab/anonymous_session_spec.rb'
+ - 'spec/lib/gitlab/api_authentication/builder_spec.rb'
+ - 'spec/lib/gitlab/api_authentication/sent_through_builder_spec.rb'
+ - 'spec/lib/gitlab/api_authentication/token_locator_spec.rb'
+ - 'spec/lib/gitlab/api_authentication/token_resolver_spec.rb'
+ - 'spec/lib/gitlab/api_authentication/token_type_builder_spec.rb'
+ - 'spec/lib/gitlab/app_json_logger_spec.rb'
+ - 'spec/lib/gitlab/app_logger_spec.rb'
+ - 'spec/lib/gitlab/app_text_logger_spec.rb'
+ - 'spec/lib/gitlab/application_context_spec.rb'
+ - 'spec/lib/gitlab/application_rate_limiter/base_strategy_spec.rb'
+ - 'spec/lib/gitlab/application_rate_limiter/increment_per_action_spec.rb'
+ - 'spec/lib/gitlab/application_rate_limiter/increment_per_actioned_resource_spec.rb'
+ - 'spec/lib/gitlab/application_rate_limiter_spec.rb'
+ - 'spec/lib/gitlab/asciidoc/html5_converter_spec.rb'
+ - 'spec/lib/gitlab/asciidoc/include_processor_spec.rb'
+ - 'spec/lib/gitlab/asset_proxy_spec.rb'
+ - 'spec/lib/gitlab/audit/auditor_spec.rb'
+ - 'spec/lib/gitlab/audit/ci_runner_token_author_spec.rb'
+ - 'spec/lib/gitlab/audit/deploy_key_author_spec.rb'
+ - 'spec/lib/gitlab/audit/deploy_token_author_spec.rb'
+ - 'spec/lib/gitlab/audit/null_author_spec.rb'
+ - 'spec/lib/gitlab/audit/null_target_spec.rb'
+ - 'spec/lib/gitlab/audit/target_spec.rb'
+ - 'spec/lib/gitlab/audit/type/definition_spec.rb'
+ - 'spec/lib/gitlab/audit/unauthenticated_author_spec.rb'
+ - 'spec/lib/gitlab/auth/activity_spec.rb'
+ - 'spec/lib/gitlab/auth/atlassian/auth_hash_spec.rb'
+ - 'spec/lib/gitlab/auth/atlassian/identity_linker_spec.rb'
+ - 'spec/lib/gitlab/auth/atlassian/user_spec.rb'
+ - 'spec/lib/gitlab/auth/auth_finders_spec.rb'
+ - 'spec/lib/gitlab/auth/blocked_user_tracker_spec.rb'
+ - 'spec/lib/gitlab/auth/crowd/authentication_spec.rb'
+ - 'spec/lib/gitlab/auth/current_user_mode_spec.rb'
+ - 'spec/lib/gitlab/auth/ip_rate_limiter_spec.rb'
+ - 'spec/lib/gitlab/auth/key_status_checker_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/access_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/adapter_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/auth_hash_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/authentication_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/config_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/dn_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/person_spec.rb'
+ - 'spec/lib/gitlab/auth/ldap/user_spec.rb'
+ - 'spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb'
+ - 'spec/lib/gitlab/auth/o_auth/identity_linker_spec.rb'
+ - 'spec/lib/gitlab/auth/o_auth/provider_spec.rb'
+ - 'spec/lib/gitlab/auth/otp/strategies/devise_spec.rb'
+ - 'spec/lib/gitlab/auth/otp/strategies/forti_authenticator/manual_otp_spec.rb'
+ - 'spec/lib/gitlab/auth/otp/strategies/forti_authenticator/push_otp_spec.rb'
+ - 'spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb'
+ - 'spec/lib/gitlab/auth/request_authenticator_spec.rb'
+ - 'spec/lib/gitlab/auth/result_spec.rb'
+ - 'spec/lib/gitlab/auth/saml/auth_hash_spec.rb'
+ - 'spec/lib/gitlab/auth/saml/config_spec.rb'
+ - 'spec/lib/gitlab/auth/saml/identity_linker_spec.rb'
+ - 'spec/lib/gitlab/auth/saml/origin_validator_spec.rb'
+ - 'spec/lib/gitlab/auth/saml/user_spec.rb'
+ - 'spec/lib/gitlab/auth/two_factor_auth_verifier_spec.rb'
+ - 'spec/lib/gitlab/auth/u2f_webauthn_converter_spec.rb'
+ - 'spec/lib/gitlab/auth/unique_ips_limiter_spec.rb'
+ - 'spec/lib/gitlab/auth/user_access_denied_reason_spec.rb'
+ - 'spec/lib/gitlab/authorized_keys_spec.rb'
+ - 'spec/lib/gitlab/avatar_cache_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_ci_queuing_tables_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_cluster_agents_has_vulnerabilities_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_with_corrected_regex_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_group_features_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_imported_issue_search_data_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_integrations_enable_ssl_verification_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_integrations_type_new_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_internal_on_notes_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_issue_search_data_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type2_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_member_namespace_for_group_members_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_namespace_details_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_namespace_id_for_namespace_route_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_namespace_id_for_project_route_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_namespace_id_of_vulnerability_reads_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_namespace_traversal_ids_children_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_namespace_traversal_ids_roots_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_note_discussion_id_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_project_feature_package_registry_access_level_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_project_import_level_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_project_member_namespace_id_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_project_namespace_details_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_project_settings_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_topics_title_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_upvotes_count_on_issues_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_user_details_fields_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_user_namespace_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_vulnerability_reads_cluster_agent_spec.rb'
+ - 'spec/lib/gitlab/background_migration/backfill_work_item_type_id_for_issues_spec.rb'
+ - 'spec/lib/gitlab/background_migration/base_job_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batched_migration_job_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batching_strategies/backfill_project_namespace_per_group_batching_strategy_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batching_strategies/backfill_project_statistics_with_container_registry_size_batching_strategy_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batching_strategies/base_strategy_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batching_strategies/dismissed_vulnerabilities_strategy_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batching_strategies/loose_index_scan_batching_strategy_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batching_strategies/primary_key_batching_strategy_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batching_strategies/remove_backfilled_job_artifacts_expire_at_batching_strategy_spec.rb'
+ - 'spec/lib/gitlab/background_migration/cleanup_draft_data_from_faulty_regex_spec.rb'
+ - 'spec/lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/cleanup_orphaned_routes_spec.rb'
+ - 'spec/lib/gitlab/background_migration/copy_column_using_background_migration_job_spec.rb'
+ - 'spec/lib/gitlab/background_migration/delete_orphaned_deployments_spec.rb'
+ - 'spec/lib/gitlab/background_migration/delete_orphaned_operational_vulnerabilities_spec.rb'
+ - 'spec/lib/gitlab/background_migration/delete_orphans_approval_merge_request_rules_spec.rb'
+ - 'spec/lib/gitlab/background_migration/delete_orphans_approval_project_rules_spec.rb'
+ - 'spec/lib/gitlab/background_migration/destroy_invalid_group_members_spec.rb'
+ - 'spec/lib/gitlab/background_migration/destroy_invalid_members_spec.rb'
+ - 'spec/lib/gitlab/background_migration/destroy_invalid_project_members_spec.rb'
+ - 'spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb'
+ - 'spec/lib/gitlab/background_migration/disable_legacy_open_source_licence_for_recent_public_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_inactive_public_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_no_issues_no_repo_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_one_member_no_repo_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_projects_less_than_one_mb_spec.rb'
+ - 'spec/lib/gitlab/background_migration/drop_invalid_security_findings_spec.rb'
+ - 'spec/lib/gitlab/background_migration/drop_invalid_vulnerabilities_spec.rb'
+ - 'spec/lib/gitlab/background_migration/encrypt_integration_properties_spec.rb'
+ - 'spec/lib/gitlab/background_migration/encrypt_static_object_token_spec.rb'
+ - 'spec/lib/gitlab/background_migration/expire_o_auth_tokens_spec.rb'
+ - 'spec/lib/gitlab/background_migration/extract_project_topics_into_separate_table_spec.rb'
+ - 'spec/lib/gitlab/background_migration/fix_duplicate_project_name_and_path_spec.rb'
+ - 'spec/lib/gitlab/background_migration/fix_first_mentioned_in_commit_at_spec.rb'
+ - 'spec/lib/gitlab/background_migration/fix_merge_request_diff_commit_users_spec.rb'
+ - 'spec/lib/gitlab/background_migration/fix_vulnerability_occurrences_with_hashes_as_raw_metadata_spec.rb'
+ - 'spec/lib/gitlab/background_migration/job_coordinator_spec.rb'
+ - 'spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb'
+ - 'spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb'
+ - 'spec/lib/gitlab/background_migration/mailers/unconfirm_mailer_spec.rb'
+ - 'spec/lib/gitlab/background_migration/merge_topics_with_same_name_spec.rb'
+ - 'spec/lib/gitlab/background_migration/migrate_merge_request_diff_commit_users_spec.rb'
+ - 'spec/lib/gitlab/background_migration/migrate_personal_namespace_project_maintainer_to_owner_spec.rb'
+ - 'spec/lib/gitlab/background_migration/migrate_project_taggings_context_from_tags_to_topics_spec.rb'
+ - 'spec/lib/gitlab/background_migration/migrate_shimo_confluence_integration_category_spec.rb'
+ - 'spec/lib/gitlab/background_migration/migrate_u2f_webauthn_spec.rb'
+ - 'spec/lib/gitlab/background_migration/move_container_registry_enabled_to_project_feature_spec.rb'
+ - 'spec/lib/gitlab/background_migration/nullify_orphan_runner_id_on_ci_builds_spec.rb'
+ - 'spec/lib/gitlab/background_migration/populate_container_repository_migration_plan_spec.rb'
+ - 'spec/lib/gitlab/background_migration/populate_namespace_statistics_spec.rb'
+ - 'spec/lib/gitlab/background_migration/populate_operation_visibility_permissions_from_operations_spec.rb'
+ - 'spec/lib/gitlab/background_migration/populate_projects_star_count_spec.rb'
+ - 'spec/lib/gitlab/background_migration/populate_topics_non_private_projects_count_spec.rb'
+ - 'spec/lib/gitlab/background_migration/populate_topics_total_projects_count_cache_spec.rb'
+ - 'spec/lib/gitlab/background_migration/populate_vulnerability_reads_spec.rb'
+ - 'spec/lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces_spec.rb'
+ - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
+ - 'spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
+ - 'spec/lib/gitlab/background_migration/remove_backfilled_job_artifacts_expire_at_spec.rb'
+ - 'spec/lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings_spec.rb'
+ - 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
+ - 'spec/lib/gitlab/background_migration/remove_self_managed_wiki_notes_spec.rb'
+ - 'spec/lib/gitlab/background_migration/remove_vulnerability_finding_links_spec.rb'
+ - 'spec/lib/gitlab/background_migration/rename_task_system_note_to_checklist_item_spec.rb'
+ - 'spec/lib/gitlab/background_migration/reset_duplicate_ci_runners_token_encrypted_values_on_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/reset_duplicate_ci_runners_token_values_on_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/reset_too_many_tags_skipped_registry_imports_spec.rb'
+ - 'spec/lib/gitlab/background_migration/set_correct_vulnerability_state_spec.rb'
+ - 'spec/lib/gitlab/background_migration/set_legacy_open_source_license_available_for_non_public_projects_spec.rb'
+ - 'spec/lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users_spec.rb'
+ - 'spec/lib/gitlab/background_migration/update_ci_pipeline_artifacts_unknown_locked_status_spec.rb'
+ - 'spec/lib/gitlab/background_migration/update_delayed_project_removal_to_null_for_user_namespaces_spec.rb'
+ - 'spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb'
+ - 'spec/lib/gitlab/background_migration/update_timelogs_null_spent_at_spec.rb'
+ - 'spec/lib/gitlab/background_migration/update_timelogs_project_id_spec.rb'
+ - 'spec/lib/gitlab/background_migration/update_users_where_two_factor_auth_required_from_group_spec.rb'
+ - 'spec/lib/gitlab/background_migration_spec.rb'
+ - 'spec/lib/gitlab/background_task_spec.rb'
+ - 'spec/lib/gitlab/backtrace_cleaner_spec.rb'
+ - 'spec/lib/gitlab/bare_repository_import/importer_spec.rb'
+ - 'spec/lib/gitlab/bare_repository_import/repository_spec.rb'
+ - 'spec/lib/gitlab/batch_worker_context_spec.rb'
+ - 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
+ - 'spec/lib/gitlab/bitbucket_import/project_creator_spec.rb'
+ - 'spec/lib/gitlab/bitbucket_import/wiki_formatter_spec.rb'
+ - 'spec/lib/gitlab/bitbucket_server_import/importer_spec.rb'
+ - 'spec/lib/gitlab/blame_spec.rb'
+ - 'spec/lib/gitlab/blob_helper_spec.rb'
+ - 'spec/lib/gitlab/branch_push_merge_commit_analyzer_spec.rb'
+ - 'spec/lib/gitlab/buffered_io_spec.rb'
+ - 'spec/lib/gitlab/build_access_spec.rb'
+ - 'spec/lib/gitlab/bullet/exclusions_spec.rb'
+ - 'spec/lib/gitlab/bullet_spec.rb'
+ - 'spec/lib/gitlab/cache/ci/project_pipeline_status_spec.rb'
+ - 'spec/lib/gitlab/cache/helpers_spec.rb'
+ - 'spec/lib/gitlab/cache/import/caching_spec.rb'
+ - 'spec/lib/gitlab/cache/metrics_spec.rb'
+ - 'spec/lib/gitlab/cache/request_cache_spec.rb'
+ - 'spec/lib/gitlab/cache_spec.rb'
+ - 'spec/lib/gitlab/changelog/committer_spec.rb'
+ - 'spec/lib/gitlab/changelog/config_spec.rb'
+ - 'spec/lib/gitlab/changelog/generator_spec.rb'
+ - 'spec/lib/gitlab/changelog/release_spec.rb'
+ - 'spec/lib/gitlab/changes_list_spec.rb'
+ - 'spec/lib/gitlab/chat/command_spec.rb'
+ - 'spec/lib/gitlab/chat/output_spec.rb'
+ - 'spec/lib/gitlab/chat/responder/base_spec.rb'
+ - 'spec/lib/gitlab/chat/responder/mattermost_spec.rb'
+ - 'spec/lib/gitlab/chat/responder/slack_spec.rb'
+ - 'spec/lib/gitlab/chat/responder_spec.rb'
+ - 'spec/lib/gitlab/chat_name_token_spec.rb'
+ - 'spec/lib/gitlab/chat_spec.rb'
+ - 'spec/lib/gitlab/checks/branch_check_spec.rb'
+ - 'spec/lib/gitlab/checks/changes_access_spec.rb'
+ - 'spec/lib/gitlab/checks/container_moved_spec.rb'
+ - 'spec/lib/gitlab/checks/diff_check_spec.rb'
+ - 'spec/lib/gitlab/checks/force_push_spec.rb'
+ - 'spec/lib/gitlab/checks/lfs_check_spec.rb'
+ - 'spec/lib/gitlab/checks/lfs_integrity_spec.rb'
+ - 'spec/lib/gitlab/checks/matching_merge_request_spec.rb'
+ - 'spec/lib/gitlab/checks/project_created_spec.rb'
+ - 'spec/lib/gitlab/checks/push_check_spec.rb'
+ - 'spec/lib/gitlab/checks/push_file_count_check_spec.rb'
+ - 'spec/lib/gitlab/checks/single_change_access_spec.rb'
+ - 'spec/lib/gitlab/checks/snippet_check_spec.rb'
+ - 'spec/lib/gitlab/checks/tag_check_spec.rb'
+ - 'spec/lib/gitlab/checks/timed_logger_spec.rb'
+ - 'spec/lib/gitlab/ci/ansi2html_spec.rb'
+ - 'spec/lib/gitlab/ci/ansi2json/line_spec.rb'
+ - 'spec/lib/gitlab/ci/ansi2json/parser_spec.rb'
+ - 'spec/lib/gitlab/ci/ansi2json/result_spec.rb'
+ - 'spec/lib/gitlab/ci/ansi2json/style_spec.rb'
+ - 'spec/lib/gitlab/ci/ansi2json_spec.rb'
+ - 'spec/lib/gitlab/ci/artifact_file_reader_spec.rb'
+ - 'spec/lib/gitlab/ci/artifacts/logger_spec.rb'
+ - 'spec/lib/gitlab/ci/artifacts/metrics_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/coverage/metadata_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/coverage/report_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/coverage/template_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/pipeline/metadata_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/pipeline/status_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/pipeline/template_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/release/latest_release_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/release/metadata_spec.rb'
+ - 'spec/lib/gitlab/ci/badge/release/template_spec.rb'
+ - 'spec/lib/gitlab/ci/build/artifacts/adapters/gzip_stream_spec.rb'
+ - 'spec/lib/gitlab/ci/build/artifacts/adapters/raw_stream_spec.rb'
+ - 'spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb'
+ - 'spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb'
+ - 'spec/lib/gitlab/ci/build/artifacts/path_spec.rb'
+ - 'spec/lib/gitlab/ci/build/auto_retry_spec.rb'
+ - 'spec/lib/gitlab/ci/build/cache_spec.rb'
+ - 'spec/lib/gitlab/ci/build/context/global_spec.rb'
+ - 'spec/lib/gitlab/ci/build/credentials/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/build/credentials/registry/dependency_proxy_spec.rb'
+ - 'spec/lib/gitlab/ci/build/credentials/registry/gitlab_registry_spec.rb'
+ - 'spec/lib/gitlab/ci/build/duration_parser_spec.rb'
+ - 'spec/lib/gitlab/ci/build/image_spec.rb'
+ - 'spec/lib/gitlab/ci/build/policy/changes_spec.rb'
+ - 'spec/lib/gitlab/ci/build/policy/kubernetes_spec.rb'
+ - 'spec/lib/gitlab/ci/build/policy/refs_spec.rb'
+ - 'spec/lib/gitlab/ci/build/policy/variables_spec.rb'
+ - 'spec/lib/gitlab/ci/build/policy_spec.rb'
+ - 'spec/lib/gitlab/ci/build/port_spec.rb'
+ - 'spec/lib/gitlab/ci/build/prerequisite/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/build/prerequisite/kubernetes_namespace_spec.rb'
+ - 'spec/lib/gitlab/ci/build/releaser_spec.rb'
+ - 'spec/lib/gitlab/ci/build/rules/rule/clause/changes_spec.rb'
+ - 'spec/lib/gitlab/ci/build/rules/rule/clause/exists_spec.rb'
+ - 'spec/lib/gitlab/ci/build/rules/rule/clause/if_spec.rb'
+ - 'spec/lib/gitlab/ci/build/rules/rule/clause_spec.rb'
+ - 'spec/lib/gitlab/ci/build/rules/rule_spec.rb'
+ - 'spec/lib/gitlab/ci/build/rules_spec.rb'
+ - 'spec/lib/gitlab/ci/build/status/reason_spec.rb'
+ - 'spec/lib/gitlab/ci/build/step_spec.rb'
+ - 'spec/lib/gitlab/ci/charts_spec.rb'
+ - 'spec/lib/gitlab/ci/config/edge_stages_injector_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/allow_failure_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/artifacts_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/bridge_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/cache_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/caches_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/commands_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/coverage_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/default_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/environment_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/files_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/hidden_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/hooks_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/id_token_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/image_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/imageable_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/include/rules/rule_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/include/rules_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/include_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/inherit/default_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/inherit/variables_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/jobs_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/key_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/kubernetes_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/need_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/needs_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/paths_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/policy_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/port_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/ports_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/prefix_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/product/matrix_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/product/parallel_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/product/variables_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/pull_policy_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/release/assets/link_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/release/assets/links_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/release/assets_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/release_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/retry_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/root_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/rules/rule/changes_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/rules/rule_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/rules_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/service_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/services_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/stage_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/stages_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/tags_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/trigger/forward_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/variable_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/variables_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/workflow_spec.rb'
+ - 'spec/lib/gitlab/ci/config/extendable/entry_spec.rb'
+ - 'spec/lib/gitlab/ci/config/extendable_spec.rb'
+ - 'spec/lib/gitlab/ci/config/external/context_spec.rb'
+ - 'spec/lib/gitlab/ci/config/external/file/artifact_spec.rb'
+ - 'spec/lib/gitlab/ci/config/external/file/base_spec.rb'
+ - 'spec/lib/gitlab/ci/config/external/file/project_spec.rb'
+ - 'spec/lib/gitlab/ci/config/external/file/remote_spec.rb'
+ - 'spec/lib/gitlab/ci/config/external/file/template_spec.rb'
+ - 'spec/lib/gitlab/ci/config/external/rules_spec.rb'
+ - 'spec/lib/gitlab/ci/config/normalizer/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/config/normalizer/matrix_strategy_spec.rb'
+ - 'spec/lib/gitlab/ci/config/normalizer/number_strategy_spec.rb'
+ - 'spec/lib/gitlab/ci/config/normalizer_spec.rb'
+ - 'spec/lib/gitlab/ci/config/yaml/tags/reference_spec.rb'
+ - 'spec/lib/gitlab/ci/config/yaml/tags/resolver_spec.rb'
+ - 'spec/lib/gitlab/ci/cron_parser_spec.rb'
+ - 'spec/lib/gitlab/ci/jwt_spec.rb'
+ - 'spec/lib/gitlab/ci/jwt_v2_spec.rb'
+ - 'spec/lib/gitlab/ci/mask_secret_spec.rb'
+ - 'spec/lib/gitlab/ci/matching/build_matcher_spec.rb'
+ - 'spec/lib/gitlab/ci/matching/runner_matcher_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/accessibility/pa11y_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/codequality/code_climate_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/coverage/cobertura_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/coverage/sax_document_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/instrumentation_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/security/common_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/security/sast_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/security/secret_detection_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers/test/junit_spec.rb'
+ - 'spec/lib/gitlab/ci/parsers_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/assign_partition_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/build_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/command_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/config/content_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/create_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/ensure_environments_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/ensure_resource_groups_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/helpers_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/limit/active_jobs_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/limit/deployments_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/limit/rate_limit_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/pipeline/process_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/populate_metadata_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/remove_unwanted_chat_jobs_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/seed_block_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/sequence_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/skip_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/template_usage_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/validate/external_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/duration_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/and_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/equals_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/matches_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/not_equals_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/not_matches_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/null_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/or_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/pattern_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/string_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexeme/variable_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/lexer_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/parser_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/expression/token_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/metrics_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/preloader_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/quota/deployments_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/seed/build/cache_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/seed/pipeline_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/seed/processable/resource_group_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline_object_hierarchy_spec.rb'
+ - 'spec/lib/gitlab/ci/processable_object_hierarchy_spec.rb'
+ - 'spec/lib/gitlab/ci/project_config/repository_spec.rb'
+ - 'spec/lib/gitlab/ci/project_config/source_spec.rb'
+ - 'spec/lib/gitlab/ci/project_config_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/accessibility_reports_comparer_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/accessibility_reports_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/codequality_mr_diff_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/codequality_reports_comparer_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/codequality_reports_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/coverage_report_generator_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/coverage_report_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/reports_comparer_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/aggregated_report_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/finding_key_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/finding_signature_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/flag_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/identifier_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/link_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/locations/sast_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/locations/secret_detection_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/report_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/reports_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/scan_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/scanned_resource_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/scanner_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/security/vulnerability_reports_comparer_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/terraform_reports_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_case_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_failure_history_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_report_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_report_summary_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_reports_comparer_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_suite_spec.rb'
+ - 'spec/lib/gitlab/ci/reports/test_suite_summary_spec.rb'
+ - 'spec/lib/gitlab/ci/runner/backoff_spec.rb'
+ - 'spec/lib/gitlab/ci/runner/metrics_spec.rb'
+ - 'spec/lib/gitlab/ci/runner_instructions_spec.rb'
+ - 'spec/lib/gitlab/ci/runner_releases_spec.rb'
+ - 'spec/lib/gitlab/ci/runner_upgrade_check_spec.rb'
+ - 'spec/lib/gitlab/ci/secure_files/cer_spec.rb'
+ - 'spec/lib/gitlab/ci/secure_files/mobile_provision_spec.rb'
+ - 'spec/lib/gitlab/ci/secure_files/p12_spec.rb'
+ - 'spec/lib/gitlab/ci/secure_files/x509_name_spec.rb'
+ - 'spec/lib/gitlab/ci/status/bridge/common_spec.rb'
+ - 'spec/lib/gitlab/ci/status/bridge/waiting_for_resource_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/action_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/cancelable_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/canceled_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/common_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/created_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/erased_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/failed_allowed_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/failed_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/failed_unmet_prerequisites_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/pending_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/play_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/preparing_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/retried_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/retryable_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/scheduled_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/skipped_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/stop_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/unschedule_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/waiting_for_approval_spec.rb'
+ - 'spec/lib/gitlab/ci/status/build/waiting_for_resource_spec.rb'
+ - 'spec/lib/gitlab/ci/status/canceled_spec.rb'
+ - 'spec/lib/gitlab/ci/status/composite_spec.rb'
+ - 'spec/lib/gitlab/ci/status/core_spec.rb'
+ - 'spec/lib/gitlab/ci/status/created_spec.rb'
+ - 'spec/lib/gitlab/ci/status/extended_spec.rb'
+ - 'spec/lib/gitlab/ci/status/external/common_spec.rb'
+ - 'spec/lib/gitlab/ci/status/external/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/status/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/status/failed_spec.rb'
+ - 'spec/lib/gitlab/ci/status/group/common_spec.rb'
+ - 'spec/lib/gitlab/ci/status/group/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/status/manual_spec.rb'
+ - 'spec/lib/gitlab/ci/status/pending_spec.rb'
+ - 'spec/lib/gitlab/ci/status/pipeline/blocked_spec.rb'
+ - 'spec/lib/gitlab/ci/status/pipeline/common_spec.rb'
+ - 'spec/lib/gitlab/ci/status/pipeline/delayed_spec.rb'
+ - 'spec/lib/gitlab/ci/status/pipeline/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/status/preparing_spec.rb'
+ - 'spec/lib/gitlab/ci/status/processable/waiting_for_resource_spec.rb'
+ - 'spec/lib/gitlab/ci/status/running_spec.rb'
+ - 'spec/lib/gitlab/ci/status/scheduled_spec.rb'
+ - 'spec/lib/gitlab/ci/status/skipped_spec.rb'
+ - 'spec/lib/gitlab/ci/status/stage/common_spec.rb'
+ - 'spec/lib/gitlab/ci/status/stage/factory_spec.rb'
+ - 'spec/lib/gitlab/ci/status/stage/play_manual_spec.rb'
+ - 'spec/lib/gitlab/ci/status/success_spec.rb'
+ - 'spec/lib/gitlab/ci/status/success_warning_spec.rb'
+ - 'spec/lib/gitlab/ci/status/waiting_for_resource_spec.rb'
+ - 'spec/lib/gitlab/ci/tags/bulk_insert_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/5_minute_production_app_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/AWS/deploy_ecs_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/MATLAB_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/Terraform/base_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/Terraform/base_latest_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/Verify/load_performance_testing_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/flutter_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/kaniko_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/katalon_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/templates_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/terraform_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/archive_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/backoff_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/checksum_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/chunked_io_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/metrics_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/remote_checksum_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/section_parser_spec.rb'
+ - 'spec/lib/gitlab/ci/trace/stream_spec.rb'
+ - 'spec/lib/gitlab/ci/trace_spec.rb'
+ - 'spec/lib/gitlab/ci/variables/builder/group_spec.rb'
+ - 'spec/lib/gitlab/ci/variables/builder/instance_spec.rb'
+ - 'spec/lib/gitlab/ci/variables/builder/project_spec.rb'
+ - 'spec/lib/gitlab/ci/variables/builder/release_spec.rb'
+ - 'spec/lib/gitlab/ci/variables/collection/item_spec.rb'
+ - 'spec/lib/gitlab/ci/variables/collection/sort_spec.rb'
+ - 'spec/lib/gitlab/ci/variables/helpers_spec.rb'
+ - 'spec/lib/gitlab/ci/yaml_processor/dag_spec.rb'
+ - 'spec/lib/gitlab/ci/yaml_processor/feature_flags_spec.rb'
+ - 'spec/lib/gitlab/ci_access_spec.rb'
+ - 'spec/lib/gitlab/class_attributes_spec.rb'
+ - 'spec/lib/gitlab/cleanup/orphan_job_artifact_files_batch_spec.rb'
+ - 'spec/lib/gitlab/cleanup/orphan_job_artifact_files_spec.rb'
+ - 'spec/lib/gitlab/cleanup/orphan_lfs_file_references_spec.rb'
+ - 'spec/lib/gitlab/cleanup/personal_access_tokens_spec.rb'
+ - 'spec/lib/gitlab/cleanup/project_uploads_spec.rb'
+ - 'spec/lib/gitlab/cleanup/remote_uploads_spec.rb'
+ - 'spec/lib/gitlab/closing_issue_extractor_spec.rb'
+ - 'spec/lib/gitlab/cluster/lifecycle_events_spec.rb'
+ - 'spec/lib/gitlab/cluster/mixins/puma_cluster_spec.rb'
+ - 'spec/lib/gitlab/cluster/puma_worker_killer_initializer_spec.rb'
+ - 'spec/lib/gitlab/cluster/puma_worker_killer_observer_spec.rb'
+ - 'spec/lib/gitlab/cluster/rack_timeout_observer_spec.rb'
+ - 'spec/lib/gitlab/code_navigation_path_spec.rb'
+ - 'spec/lib/gitlab/color_schemes_spec.rb'
+ - 'spec/lib/gitlab/color_spec.rb'
+ - 'spec/lib/gitlab/composer/cache_spec.rb'
+ - 'spec/lib/gitlab/composer/version_index_spec.rb'
+ - 'spec/lib/gitlab/conan_token_spec.rb'
+ - 'spec/lib/gitlab/config/entry/attributable_spec.rb'
+ - 'spec/lib/gitlab/config/entry/boolean_spec.rb'
+ - 'spec/lib/gitlab/config/entry/composable_array_spec.rb'
+ - 'spec/lib/gitlab/config/entry/composable_hash_spec.rb'
+ - 'spec/lib/gitlab/config/entry/configurable_spec.rb'
+ - 'spec/lib/gitlab/config/entry/factory_spec.rb'
+ - 'spec/lib/gitlab/config/entry/simplifiable_spec.rb'
+ - 'spec/lib/gitlab/config/entry/undefined_spec.rb'
+ - 'spec/lib/gitlab/config/entry/unspecified_spec.rb'
+ - 'spec/lib/gitlab/config/entry/validatable_spec.rb'
+ - 'spec/lib/gitlab/config/entry/validator_spec.rb'
+ - 'spec/lib/gitlab/config/entry/validators/nested_array_helpers_spec.rb'
+ - 'spec/lib/gitlab/config/loader/yaml_spec.rb'
+ - 'spec/lib/gitlab/config_checker/external_database_checker_spec.rb'
+ - 'spec/lib/gitlab/config_checker/puma_rugged_checker_spec.rb'
+ - 'spec/lib/gitlab/conflict/file_collection_spec.rb'
+ - 'spec/lib/gitlab/conflict/file_spec.rb'
+ - 'spec/lib/gitlab/console_spec.rb'
+ - 'spec/lib/gitlab/consul/internal_spec.rb'
+ - 'spec/lib/gitlab/container_repository/tags/cache_spec.rb'
+ - 'spec/lib/gitlab/content_security_policy/config_loader_spec.rb'
+ - 'spec/lib/gitlab/counters/buffered_counter_spec.rb'
+ - 'spec/lib/gitlab/counters/legacy_counter_spec.rb'
+ - 'spec/lib/gitlab/cross_project_access/check_collection_spec.rb'
+ - 'spec/lib/gitlab/cross_project_access/check_info_spec.rb'
+ - 'spec/lib/gitlab/cross_project_access/class_methods_spec.rb'
+ - 'spec/lib/gitlab/cross_project_access_spec.rb'
+ - 'spec/lib/gitlab/crypto_helper_spec.rb'
+ - 'spec/lib/gitlab/current_settings_spec.rb'
+ - 'spec/lib/gitlab/cycle_analytics/permissions_spec.rb'
+ - 'spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb'
+ - 'spec/lib/gitlab/cycle_analytics/summary/value_spec.rb'
+ - 'spec/lib/gitlab/cycle_analytics/updater_spec.rb'
+ - 'spec/lib/gitlab/daemon_spec.rb'
+ - 'spec/lib/gitlab/data_builder/alert_spec.rb'
+ - 'spec/lib/gitlab/data_builder/archive_trace_spec.rb'
+ - 'spec/lib/gitlab/data_builder/deployment_spec.rb'
+ - 'spec/lib/gitlab/data_builder/feature_flag_spec.rb'
+ - 'spec/lib/gitlab/data_builder/issuable_spec.rb'
+ - 'spec/lib/gitlab/data_builder/note_spec.rb'
+ - 'spec/lib/gitlab/data_builder/pipeline_spec.rb'
+ - 'spec/lib/gitlab/data_builder/push_spec.rb'
+ - 'spec/lib/gitlab/data_builder/wiki_page_spec.rb'
+ - 'spec/lib/gitlab/database/async_indexes/index_creator_spec.rb'
+ - 'spec/lib/gitlab/database/async_indexes/index_destructor_spec.rb'
+ - 'spec/lib/gitlab/database/async_indexes/migration_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/async_indexes/postgres_async_index_spec.rb'
+ - 'spec/lib/gitlab/database/async_indexes_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/batch_optimizer_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/batched_job_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/batched_job_transition_log_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/batched_migration_runner_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/batched_migration_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/batched_migration_wrapper_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/health_status/indicators/write_ahead_log_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/health_status_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration/prometheus_metrics_spec.rb'
+ - 'spec/lib/gitlab/database/background_migration_job_spec.rb'
+ - 'spec/lib/gitlab/database/batch_average_counter_spec.rb'
+ - 'spec/lib/gitlab/database/batch_count_spec.rb'
+ - 'spec/lib/gitlab/database/bulk_update_spec.rb'
+ - 'spec/lib/gitlab/database/connection_timer_spec.rb'
+ - 'spec/lib/gitlab/database/consistency_spec.rb'
+ - 'spec/lib/gitlab/database/count/exact_count_strategy_spec.rb'
+ - 'spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb'
+ - 'spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb'
+ - 'spec/lib/gitlab/database/count_spec.rb'
+ - 'spec/lib/gitlab/database/dynamic_model_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/each_database_spec.rb'
+ - 'spec/lib/gitlab/database/gitlab_schema_spec.rb'
+ - 'spec/lib/gitlab/database/grant_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/action_cable_callbacks_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/configuration_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/connection_proxy_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/host_list_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/host_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/load_balancer_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/primary_host_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/rack_middleware_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/service_discovery/sampler_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/session_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/setup_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/sidekiq_server_middleware_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/srv_resolver_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/sticking_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing/transaction_leaking_spec.rb'
+ - 'spec/lib/gitlab/database/load_balancing_spec.rb'
+ - 'spec/lib/gitlab/database/loose_foreign_keys_spec.rb'
+ - 'spec/lib/gitlab/database/migration_helpers/announce_database_spec.rb'
+ - 'spec/lib/gitlab/database/migration_helpers/cascading_namespace_settings_spec.rb'
+ - 'spec/lib/gitlab/database/migration_helpers/loose_foreign_key_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migration_helpers/v2_spec.rb'
+ - 'spec/lib/gitlab/database/migration_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migration_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/background_migration_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/base_background_runner_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/batched_background_migration_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/constraints_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/extension_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/instrumentation_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/lock_retries_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/lock_retry_mixin_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/observers/query_details_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/observers/query_log_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/observers/query_statistics_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/observers/total_database_size_change_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/observers/transaction_duration_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/reestablished_connection_stack_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/runner_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/sidekiq_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/test_background_runner_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/test_batched_background_runner_spec.rb'
+ - 'spec/lib/gitlab/database/migrations/timeout_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/no_cross_db_foreign_keys_spec.rb'
+ - 'spec/lib/gitlab/database/obsolete_ignored_columns_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/convert_table_to_first_list_partition_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/detached_partition_dropper_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/monthly_strategy_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/partition_manager_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/partition_monitoring_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/replace_table_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/single_numeric_list_partition_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/sliding_list_strategy_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning/time_partition_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning_migration_helpers/backfill_partitioned_table_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning_migration_helpers/foreign_key_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning_migration_helpers/index_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb'
+ - 'spec/lib/gitlab/database/partitioning_spec.rb'
+ - 'spec/lib/gitlab/database/pg_class_spec.rb'
+ - 'spec/lib/gitlab/database/postgres_constraint_spec.rb'
+ - 'spec/lib/gitlab/database/postgres_hll/batch_distinct_counter_spec.rb'
+ - 'spec/lib/gitlab/database/postgres_hll/buckets_spec.rb'
+ - 'spec/lib/gitlab/database/postgres_index_bloat_estimate_spec.rb'
+ - 'spec/lib/gitlab/database/postgres_index_spec.rb'
+ - 'spec/lib/gitlab/database/postgres_partition_spec.rb'
+ - 'spec/lib/gitlab/database/postgres_partitioned_table_spec.rb'
+ - 'spec/lib/gitlab/database/postgresql_adapter/dump_schema_versions_mixin_spec.rb'
+ - 'spec/lib/gitlab/database/postgresql_adapter/empty_query_ping_spec.rb'
+ - 'spec/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin_spec.rb'
+ - 'spec/lib/gitlab/database/postgresql_adapter/type_map_cache_spec.rb'
+ - 'spec/lib/gitlab/database/postgresql_database_tasks/load_schema_versions_mixin_spec.rb'
+ - 'spec/lib/gitlab/database/query_analyzer_spec.rb'
+ - 'spec/lib/gitlab/database/query_analyzers/ci/partitioning_id_analyzer_spec.rb'
+ - 'spec/lib/gitlab/database/query_analyzers/ci/partitioning_routing_analyzer_spec.rb'
+ - 'spec/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics_spec.rb'
+ - 'spec/lib/gitlab/database/query_analyzers/restrict_allowed_schemas_spec.rb'
+ - 'spec/lib/gitlab/database/reflection_spec.rb'
+ - 'spec/lib/gitlab/database/reindexing/grafana_notifier_spec.rb'
+ - 'spec/lib/gitlab/database/reindexing/reindex_concurrently_spec.rb'
+ - 'spec/lib/gitlab/database/rename_reserved_paths_migration/v1/rename_base_spec.rb'
+ - 'spec/lib/gitlab/database/rename_reserved_paths_migration/v1/rename_namespaces_spec.rb'
+ - 'spec/lib/gitlab/database/rename_reserved_paths_migration/v1/rename_projects_spec.rb'
+ - 'spec/lib/gitlab/database/rename_reserved_paths_migration/v1_spec.rb'
+ - 'spec/lib/gitlab/database/schema_cache_with_renamed_table_spec.rb'
+ - 'spec/lib/gitlab/database/schema_cleaner_spec.rb'
+ - 'spec/lib/gitlab/database/schema_migrations/context_spec.rb'
+ - 'spec/lib/gitlab/database/schema_migrations/migrations_spec.rb'
+ - 'spec/lib/gitlab/database/sha_attribute_spec.rb'
+ - 'spec/lib/gitlab/database/shared_model_spec.rb'
+ - 'spec/lib/gitlab/database/similarity_score_spec.rb'
+ - 'spec/lib/gitlab/database/tables_sorted_by_foreign_keys_spec.rb'
+ - 'spec/lib/gitlab/database/transaction/observer_spec.rb'
+ - 'spec/lib/gitlab/database/type/color_spec.rb'
+ - 'spec/lib/gitlab/database/type/indifferent_jsonb_spec.rb'
+ - 'spec/lib/gitlab/database/type/json_pg_safe_spec.rb'
+ - 'spec/lib/gitlab/database/type/symbolized_jsonb_spec.rb'
+ - 'spec/lib/gitlab/database/unidirectional_copy_trigger_spec.rb'
+ - 'spec/lib/gitlab/database/with_lock_retries_outside_transaction_spec.rb'
+ - 'spec/lib/gitlab/database/with_lock_retries_spec.rb'
+ - 'spec/lib/gitlab/database_importers/common_metrics/importer_spec.rb'
+ - 'spec/lib/gitlab/database_importers/common_metrics/prometheus_metric_spec.rb'
+ - 'spec/lib/gitlab/database_importers/instance_administrators/create_group_spec.rb'
+ - 'spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb'
+ - 'spec/lib/gitlab/database_importers/self_monitoring/project/delete_service_spec.rb'
+ - 'spec/lib/gitlab/database_importers/work_items/base_type_importer_spec.rb'
+ - 'spec/lib/gitlab/database_spec.rb'
+ - 'spec/lib/gitlab/default_branch_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/base_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/cargo_toml_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/cartfile_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/composer_json_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/gemfile_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/gemspec_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/go_mod_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/go_sum_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/godeps_json_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/package_json_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/parser/gemfile_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/podfile_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/podspec_json_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/podspec_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker/requirements_txt_linker_spec.rb'
+ - 'spec/lib/gitlab/dependency_linker_spec.rb'
+ - 'spec/lib/gitlab/deploy_key_access_spec.rb'
+ - 'spec/lib/gitlab/diff/char_diff_spec.rb'
+ - 'spec/lib/gitlab/diff/diff_refs_spec.rb'
+ - 'spec/lib/gitlab/diff/file_collection/base_spec.rb'
+ - 'spec/lib/gitlab/diff/file_collection/commit_spec.rb'
+ - 'spec/lib/gitlab/diff/file_collection/compare_spec.rb'
+ - 'spec/lib/gitlab/diff/file_collection/merge_request_diff_base_spec.rb'
+ - 'spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb'
+ - 'spec/lib/gitlab/diff/file_collection_sorter_spec.rb'
+ - 'spec/lib/gitlab/diff/file_spec.rb'
+ - 'spec/lib/gitlab/diff/formatters/image_formatter_spec.rb'
+ - 'spec/lib/gitlab/diff/formatters/text_formatter_spec.rb'
+ - 'spec/lib/gitlab/diff/highlight_cache_spec.rb'
+ - 'spec/lib/gitlab/diff/highlight_spec.rb'
+ - 'spec/lib/gitlab/diff/inline_diff_markdown_marker_spec.rb'
+ - 'spec/lib/gitlab/diff/inline_diff_marker_spec.rb'
+ - 'spec/lib/gitlab/diff/inline_diff_spec.rb'
+ - 'spec/lib/gitlab/diff/line_mapper_spec.rb'
+ - 'spec/lib/gitlab/diff/line_spec.rb'
+ - 'spec/lib/gitlab/diff/lines_unfolder_spec.rb'
+ - 'spec/lib/gitlab/diff/pair_selector_spec.rb'
+ - 'spec/lib/gitlab/diff/parallel_diff_spec.rb'
+ - 'spec/lib/gitlab/diff/parser_spec.rb'
+ - 'spec/lib/gitlab/diff/position_collection_spec.rb'
+ - 'spec/lib/gitlab/diff/position_spec.rb'
+ - 'spec/lib/gitlab/diff/position_tracer/image_strategy_spec.rb'
+ - 'spec/lib/gitlab/diff/position_tracer/line_strategy_spec.rb'
+ - 'spec/lib/gitlab/diff/position_tracer_spec.rb'
+ - 'spec/lib/gitlab/diff/rendered/notebook/diff_file_helper_spec.rb'
+ - 'spec/lib/gitlab/diff/rendered/notebook/diff_file_spec.rb'
+ - 'spec/lib/gitlab/diff/stats_cache_spec.rb'
+ - 'spec/lib/gitlab/diff/suggestion_diff_spec.rb'
+ - 'spec/lib/gitlab/diff/suggestion_spec.rb'
+ - 'spec/lib/gitlab/diff/suggestions_parser_spec.rb'
+ - 'spec/lib/gitlab/discussions_diff/file_collection_spec.rb'
+ - 'spec/lib/gitlab/discussions_diff/highlight_cache_spec.rb'
+ - 'spec/lib/gitlab/doctor/secrets_spec.rb'
+ - 'spec/lib/gitlab/doorkeeper_secret_storing/secret/pbkdf2_sha512_spec.rb'
+ - 'spec/lib/gitlab/doorkeeper_secret_storing/token/pbkdf2_sha512_spec.rb'
+ - 'spec/lib/gitlab/email/attachment_uploader_spec.rb'
+ - 'spec/lib/gitlab/email/failure_handler_spec.rb'
+ - 'spec/lib/gitlab/email/handler/create_issue_handler_spec.rb'
+ - 'spec/lib/gitlab/email/handler/create_merge_request_handler_spec.rb'
+ - 'spec/lib/gitlab/email/handler/create_note_handler_spec.rb'
+ - 'spec/lib/gitlab/email/handler/create_note_on_issuable_handler_spec.rb'
+ - 'spec/lib/gitlab/email/handler/service_desk_handler_spec.rb'
+ - 'spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb'
+ - 'spec/lib/gitlab/email/handler_spec.rb'
+ - 'spec/lib/gitlab/email/hook/additional_headers_interceptor_spec.rb'
+ - 'spec/lib/gitlab/email/hook/delivery_metrics_observer_spec.rb'
+ - 'spec/lib/gitlab/email/hook/disable_email_interceptor_spec.rb'
+ - 'spec/lib/gitlab/email/hook/smime_signature_interceptor_spec.rb'
+ - 'spec/lib/gitlab/email/hook/validate_addresses_interceptor_spec.rb'
+ - 'spec/lib/gitlab/email/message/build_ios_app_guide_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/admin_verify_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/create_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/team_short_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/trial_short_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing/verify_spec.rb'
+ - 'spec/lib/gitlab/email/message/in_product_marketing_spec.rb'
+ - 'spec/lib/gitlab/email/message/repository_push_spec.rb'
+ - 'spec/lib/gitlab/email/receiver_spec.rb'
+ - 'spec/lib/gitlab/email/reply_parser_spec.rb'
+ - 'spec/lib/gitlab/email/service_desk_receiver_spec.rb'
+ - 'spec/lib/gitlab/email/smime/signer_spec.rb'
+ - 'spec/lib/gitlab/emoji_spec.rb'
+ - 'spec/lib/gitlab/empty_search_results_spec.rb'
+ - 'spec/lib/gitlab/encoding_helper_spec.rb'
+ - 'spec/lib/gitlab/encrypted_configuration_spec.rb'
+ - 'spec/lib/gitlab/endpoint_attributes_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/error_repository/open_api_strategy_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/log_formatter_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/logger_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/processor/context_payload_processor_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/processor/grpc_error_processor_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/processor/sanitize_error_message_processor_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/processor/sanitizer_processor_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/processor/sidekiq_processor_spec.rb'
+ - 'spec/lib/gitlab/error_tracking/stack_trace_highlight_decorator_spec.rb'
+ - 'spec/lib/gitlab/error_tracking_spec.rb'
+ - 'spec/lib/gitlab/etag_caching/middleware_spec.rb'
+ - 'spec/lib/gitlab/etag_caching/router/graphql_spec.rb'
+ - 'spec/lib/gitlab/etag_caching/router/rails_spec.rb'
+ - 'spec/lib/gitlab/etag_caching/router_spec.rb'
+ - 'spec/lib/gitlab/etag_caching/store_spec.rb'
+ - 'spec/lib/gitlab/event_store/event_spec.rb'
+ - 'spec/lib/gitlab/event_store/store_spec.rb'
+ - 'spec/lib/gitlab/exception_log_formatter_spec.rb'
+ - 'spec/lib/gitlab/exceptions_app_spec.rb'
+ - 'spec/lib/gitlab/exclusive_lease_helpers/sleeping_lock_spec.rb'
+ - 'spec/lib/gitlab/exclusive_lease_helpers_spec.rb'
+ - 'spec/lib/gitlab/exclusive_lease_spec.rb'
+ - 'spec/lib/gitlab/experiment/rollout/feature_spec.rb'
+ - 'spec/lib/gitlab/external_authorization/access_spec.rb'
+ - 'spec/lib/gitlab/external_authorization/cache_spec.rb'
+ - 'spec/lib/gitlab/external_authorization/client_spec.rb'
+ - 'spec/lib/gitlab/external_authorization/logger_spec.rb'
+ - 'spec/lib/gitlab/external_authorization/response_spec.rb'
+ - 'spec/lib/gitlab/external_authorization_spec.rb'
+ - 'spec/lib/gitlab/fake_application_settings_spec.rb'
+ - 'spec/lib/gitlab/faraday/error_callback_spec.rb'
+ - 'spec/lib/gitlab/favicon_spec.rb'
+ - 'spec/lib/gitlab/feature_categories_spec.rb'
+ - 'spec/lib/gitlab/file_detector_spec.rb'
+ - 'spec/lib/gitlab/file_finder_spec.rb'
+ - 'spec/lib/gitlab/file_hook_spec.rb'
+ - 'spec/lib/gitlab/file_markdown_link_builder_spec.rb'
+ - 'spec/lib/gitlab/file_type_detection_spec.rb'
+ - 'spec/lib/gitlab/fips_spec.rb'
+ - 'spec/lib/gitlab/fogbugz_import/client_spec.rb'
+ - 'spec/lib/gitlab/fogbugz_import/importer_spec.rb'
+ - 'spec/lib/gitlab/fogbugz_import/project_creator_spec.rb'
+ - 'spec/lib/gitlab/form_builders/gitlab_ui_form_builder_spec.rb'
+ - 'spec/lib/gitlab/gfm/reference_rewriter_spec.rb'
+ - 'spec/lib/gitlab/gfm/uploads_rewriter_spec.rb'
+ - 'spec/lib/gitlab/git/attributes_at_ref_parser_spec.rb'
+ - 'spec/lib/gitlab/git/attributes_parser_spec.rb'
+ - 'spec/lib/gitlab/git/base_error_spec.rb'
+ - 'spec/lib/gitlab/git/blame_spec.rb'
+ - 'spec/lib/gitlab/git/blob_spec.rb'
+ - 'spec/lib/gitlab/git/branch_spec.rb'
+ - 'spec/lib/gitlab/git/bundle_file_spec.rb'
+ - 'spec/lib/gitlab/git/changed_path_spec.rb'
+ - 'spec/lib/gitlab/git/changes_spec.rb'
+ - 'spec/lib/gitlab/git/commit_spec.rb'
+ - 'spec/lib/gitlab/git/commit_stats_spec.rb'
+ - 'spec/lib/gitlab/git/compare_spec.rb'
+ - 'spec/lib/gitlab/git/conflict/file_spec.rb'
+ - 'spec/lib/gitlab/git/conflict/parser_spec.rb'
+ - 'spec/lib/gitlab/git/conflict/resolver_spec.rb'
+ - 'spec/lib/gitlab/git/cross_repo_spec.rb'
+ - 'spec/lib/gitlab/git/diff_collection_spec.rb'
+ - 'spec/lib/gitlab/git/diff_spec.rb'
+ - 'spec/lib/gitlab/git/diff_stats_collection_spec.rb'
+ - 'spec/lib/gitlab/git/gitmodules_parser_spec.rb'
+ - 'spec/lib/gitlab/git/hook_env_spec.rb'
+ - 'spec/lib/gitlab/git/keep_around_spec.rb'
+ - 'spec/lib/gitlab/git/lfs_changes_spec.rb'
+ - 'spec/lib/gitlab/git/lfs_pointer_file_spec.rb'
+ - 'spec/lib/gitlab/git/merge_base_spec.rb'
+ - 'spec/lib/gitlab/git/object_pool_spec.rb'
+ - 'spec/lib/gitlab/git/patches/collection_spec.rb'
+ - 'spec/lib/gitlab/git/patches/commit_patches_spec.rb'
+ - 'spec/lib/gitlab/git/patches/patch_spec.rb'
+ - 'spec/lib/gitlab/git/pre_receive_error_spec.rb'
+ - 'spec/lib/gitlab/git/push_spec.rb'
+ - 'spec/lib/gitlab/git/raw_diff_change_spec.rb'
+ - 'spec/lib/gitlab/git/remote_mirror_spec.rb'
+ - 'spec/lib/gitlab/git/repository_cleaner_spec.rb'
+ - 'spec/lib/gitlab/git/tag_spec.rb'
+ - 'spec/lib/gitlab/git/tree_spec.rb'
+ - 'spec/lib/gitlab/git/user_spec.rb'
+ - 'spec/lib/gitlab/git/util_spec.rb'
+ - 'spec/lib/gitlab/git/wiki_page_version_spec.rb'
+ - 'spec/lib/gitlab/git/wraps_gitaly_errors_spec.rb'
+ - 'spec/lib/gitlab/git_access_design_spec.rb'
+ - 'spec/lib/gitlab/git_access_project_spec.rb'
+ - 'spec/lib/gitlab/git_access_snippet_spec.rb'
+ - 'spec/lib/gitlab/git_access_spec.rb'
+ - 'spec/lib/gitlab/git_access_wiki_spec.rb'
+ - 'spec/lib/gitlab/git_post_receive_spec.rb'
+ - 'spec/lib/gitlab/git_ref_validator_spec.rb'
+ - 'spec/lib/gitlab/git_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/blob_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/blobs_stitcher_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/call_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/cleanup_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/commit_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/conflict_files_stitcher_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/conflicts_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/diff_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/diff_stitcher_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/health_check_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/object_pool_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/operation_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/praefect_info_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/ref_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/remote_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/repository_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/server_service_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/storage_settings_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/util_spec.rb'
+ - 'spec/lib/gitlab/gitaly_client/with_feature_flag_actors_spec.rb'
+ - 'spec/lib/gitlab/github_import/attachments_downloader_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/attachments/base_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/attachments/issues_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/attachments/merge_requests_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/attachments/notes_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/attachments/releases_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/diff_note_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/base_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/changed_assignee_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/changed_label_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/changed_milestone_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/changed_reviewer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/closed_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/cross_referenced_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/renamed_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/events/reopened_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/issue_and_label_links_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/issue_event_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/issue_events_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/issue_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/issues_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/label_links_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/lfs_object_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/lfs_objects_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/note_attachments_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/note_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/notes_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/protected_branch_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/pull_request_merged_by_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/pull_requests/review_request_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/pull_requests_merged_by_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/pull_requests_reviews_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/repository_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/single_endpoint_diff_notes_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/single_endpoint_issue_events_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/importer/single_endpoint_merge_request_notes_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/issuable_finder_spec.rb'
+ - 'spec/lib/gitlab/github_import/label_finder_spec.rb'
+ - 'spec/lib/gitlab/github_import/logger_spec.rb'
+ - 'spec/lib/gitlab/github_import/markdown/attachment_spec.rb'
+ - 'spec/lib/gitlab/github_import/markdown_text_spec.rb'
+ - 'spec/lib/gitlab/github_import/milestone_finder_spec.rb'
+ - 'spec/lib/gitlab/github_import/object_counter_spec.rb'
+ - 'spec/lib/gitlab/github_import/parallel_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/parallel_scheduling_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/diff_note_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/diff_notes/suggestion_formatter_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/expose_attribute_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/issue_event_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/issue_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/lfs_object_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/note_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/note_text_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/protected_branch_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/pull_request_review_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/pull_request_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/pull_requests/review_requests_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/to_hash_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation/user_spec.rb'
+ - 'spec/lib/gitlab/github_import/representation_spec.rb'
+ - 'spec/lib/gitlab/github_import/sequential_importer_spec.rb'
+ - 'spec/lib/gitlab/github_import/settings_spec.rb'
+ - 'spec/lib/gitlab/github_import/single_endpoint_notes_importing_spec.rb'
+ - 'spec/lib/gitlab/github_import/user_finder_spec.rb'
+ - 'spec/lib/gitlab/github_import_spec.rb'
+ - 'spec/lib/gitlab/gitlab_import/client_spec.rb'
+ - 'spec/lib/gitlab/gitlab_import/importer_spec.rb'
+ - 'spec/lib/gitlab/gitlab_import/project_creator_spec.rb'
+ - 'spec/lib/gitlab/gl_repository/identifier_spec.rb'
+ - 'spec/lib/gitlab/gl_repository/repo_type_spec.rb'
+ - 'spec/lib/gitlab/gl_repository_spec.rb'
+ - 'spec/lib/gitlab/global_id/deprecations_spec.rb'
+ - 'spec/lib/gitlab/global_id_spec.rb'
+ - 'spec/lib/gitlab/gon_helper_spec.rb'
+ - 'spec/lib/gitlab/gpg/commit_spec.rb'
+ - 'spec/lib/gitlab/gpg/invalid_gpg_signature_updater_spec.rb'
+ - 'spec/lib/gitlab/gpg_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/formatters/lograge_with_timestamp_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/cloudflare_logger_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/filter_parameters_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/perf_logger_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/queue_duration_logger_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/response_logger_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/token_logger_spec.rb'
+ - 'spec/lib/gitlab/grape_logging/loggers/urgency_logger_spec.rb'
+ - 'spec/lib/gitlab/graphql/authorize/authorize_resource_spec.rb'
+ - 'spec/lib/gitlab/graphql/authorize/object_authorization_spec.rb'
+ - 'spec/lib/gitlab/graphql/batch_key_spec.rb'
+ - 'spec/lib/gitlab/graphql/calls_gitaly/field_extension_spec.rb'
+ - 'spec/lib/gitlab/graphql/copy_field_description_spec.rb'
+ - 'spec/lib/gitlab/graphql/deprecation_spec.rb'
+ - 'spec/lib/gitlab/graphql/generic_tracing_spec.rb'
+ - 'spec/lib/gitlab/graphql/known_operations_spec.rb'
+ - 'spec/lib/gitlab/graphql/lazy_spec.rb'
+ - 'spec/lib/gitlab/graphql/limit/field_call_count_spec.rb'
+ - 'spec/lib/gitlab/graphql/loaders/batch_commit_loader_spec.rb'
+ - 'spec/lib/gitlab/graphql/loaders/batch_lfs_oid_loader_spec.rb'
+ - 'spec/lib/gitlab/graphql/loaders/batch_model_loader_spec.rb'
+ - 'spec/lib/gitlab/graphql/loaders/batch_project_statistics_loader_spec.rb'
+ - 'spec/lib/gitlab/graphql/loaders/batch_root_storage_statistics_loader_spec.rb'
+ - 'spec/lib/gitlab/graphql/loaders/issuable_loader_spec.rb'
+ - 'spec/lib/gitlab/graphql/markdown_field_spec.rb'
+ - 'spec/lib/gitlab/graphql/mount_mutation_spec.rb'
+ - 'spec/lib/gitlab/graphql/negatable_arguments_spec.rb'
+ - 'spec/lib/gitlab/graphql/pagination/active_record_array_connection_spec.rb'
+ - 'spec/lib/gitlab/graphql/pagination/array_connection_spec.rb'
+ - 'spec/lib/gitlab/graphql/pagination/connections_spec.rb'
+ - 'spec/lib/gitlab/graphql/pagination/externally_paginated_array_connection_spec.rb'
+ - 'spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb'
+ - 'spec/lib/gitlab/graphql/pagination/offset_active_record_relation_connection_spec.rb'
+ - 'spec/lib/gitlab/graphql/present/field_extension_spec.rb'
+ - 'spec/lib/gitlab/graphql/queries_spec.rb'
+ - 'spec/lib/gitlab/graphql/query_analyzers/ast/logger_analyzer_spec.rb'
+ - 'spec/lib/gitlab/graphql/query_analyzers/ast/recursion_analyzer_spec.rb'
+ - 'spec/lib/gitlab/graphql/representation/submodule_tree_entry_spec.rb'
+ - 'spec/lib/gitlab/graphql/representation/tree_entry_spec.rb'
+ - 'spec/lib/gitlab/graphql/timeout_spec.rb'
+ - 'spec/lib/gitlab/graphql/tracers/application_context_tracer_spec.rb'
+ - 'spec/lib/gitlab/graphql/tracers/logger_tracer_spec.rb'
+ - 'spec/lib/gitlab/graphql/tracers/metrics_tracer_spec.rb'
+ - 'spec/lib/gitlab/graphql/tracers/timer_tracer_spec.rb'
+ - 'spec/lib/gitlab/graphql/type_name_deprecations_spec.rb'
+ - 'spec/lib/gitlab/graphql_logger_spec.rb'
+ - 'spec/lib/gitlab/graphs/commits_spec.rb'
+ - 'spec/lib/gitlab/group_search_results_spec.rb'
+ - 'spec/lib/gitlab/harbor/client_spec.rb'
+ - 'spec/lib/gitlab/harbor/query_spec.rb'
+ - 'spec/lib/gitlab/hashed_path_spec.rb'
+ - 'spec/lib/gitlab/hashed_storage/migrator_spec.rb'
+ - 'spec/lib/gitlab/health_checks/db_check_spec.rb'
+ - 'spec/lib/gitlab/health_checks/gitaly_check_spec.rb'
+ - 'spec/lib/gitlab/health_checks/master_check_spec.rb'
+ - 'spec/lib/gitlab/health_checks/middleware_spec.rb'
+ - 'spec/lib/gitlab/health_checks/probes/collection_spec.rb'
+ - 'spec/lib/gitlab/health_checks/puma_check_spec.rb'
+ - 'spec/lib/gitlab/health_checks/redis_spec.rb'
+ - 'spec/lib/gitlab/health_checks/server_spec.rb'
+ - 'spec/lib/gitlab/highlight_spec.rb'
+ - 'spec/lib/gitlab/hook_data/base_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/group_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/group_member_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/issue_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/key_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/merge_request_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/project_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/project_member_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/release_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/subgroup_builder_spec.rb'
+ - 'spec/lib/gitlab/hook_data/user_builder_spec.rb'
+ - 'spec/lib/gitlab/hotlinking_detector_spec.rb'
+ - 'spec/lib/gitlab/http_connection_adapter_spec.rb'
+ - 'spec/lib/gitlab/http_io_spec.rb'
+ - 'spec/lib/gitlab/http_spec.rb'
+ - 'spec/lib/gitlab/i18n/metadata_entry_spec.rb'
+ - 'spec/lib/gitlab/i18n/po_linter_spec.rb'
+ - 'spec/lib/gitlab/i18n/translation_entry_spec.rb'
+ - 'spec/lib/gitlab/i18n_spec.rb'
+ - 'spec/lib/gitlab/identifier_spec.rb'
+ - 'spec/lib/gitlab/import/database_helpers_spec.rb'
+ - 'spec/lib/gitlab/import/import_failure_service_spec.rb'
+ - 'spec/lib/gitlab/import/logger_spec.rb'
+ - 'spec/lib/gitlab/import/merge_request_creator_spec.rb'
+ - 'spec/lib/gitlab/import/merge_request_helpers_spec.rb'
+ - 'spec/lib/gitlab/import/metrics_spec.rb'
+ - 'spec/lib/gitlab/import/set_async_jid_spec.rb'
+ - 'spec/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy_spec.rb'
+ - 'spec/lib/gitlab/import_export/after_export_strategies/web_upload_strategy_spec.rb'
+ - 'spec/lib/gitlab/import_export/after_export_strategy_builder_spec.rb'
+ - 'spec/lib/gitlab/import_export/attribute_cleaner_spec.rb'
+ - 'spec/lib/gitlab/import_export/attribute_configuration_spec.rb'
+ - 'spec/lib/gitlab/import_export/attributes_finder_spec.rb'
+ - 'spec/lib/gitlab/import_export/attributes_permitter_spec.rb'
+ - 'spec/lib/gitlab/import_export/avatar_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/avatar_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/base/object_builder_spec.rb'
+ - 'spec/lib/gitlab/import_export/base/relation_factory_spec.rb'
+ - 'spec/lib/gitlab/import_export/command_line_util_spec.rb'
+ - 'spec/lib/gitlab/import_export/config_spec.rb'
+ - 'spec/lib/gitlab/import_export/decompressed_archive_size_validator_spec.rb'
+ - 'spec/lib/gitlab/import_export/design_repo_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/design_repo_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/duration_measuring_spec.rb'
+ - 'spec/lib/gitlab/import_export/error_spec.rb'
+ - 'spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb'
+ - 'spec/lib/gitlab/import_export/file_importer_spec.rb'
+ - 'spec/lib/gitlab/import_export/fork_spec.rb'
+ - 'spec/lib/gitlab/import_export/group/object_builder_spec.rb'
+ - 'spec/lib/gitlab/import_export/group/relation_factory_spec.rb'
+ - 'spec/lib/gitlab/import_export/group/relation_tree_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/group/tree_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/group/tree_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/hash_util_spec.rb'
+ - 'spec/lib/gitlab/import_export/import_export_equivalence_spec.rb'
+ - 'spec/lib/gitlab/import_export/import_export_spec.rb'
+ - 'spec/lib/gitlab/import_export/import_failure_service_spec.rb'
+ - 'spec/lib/gitlab/import_export/import_test_coverage_spec.rb'
+ - 'spec/lib/gitlab/import_export/importer_spec.rb'
+ - 'spec/lib/gitlab/import_export/json/legacy_reader/file_spec.rb'
+ - 'spec/lib/gitlab/import_export/json/legacy_reader/hash_spec.rb'
+ - 'spec/lib/gitlab/import_export/json/legacy_writer_spec.rb'
+ - 'spec/lib/gitlab/import_export/json/ndjson_reader_spec.rb'
+ - 'spec/lib/gitlab/import_export/json/ndjson_writer_spec.rb'
+ - 'spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb'
+ - 'spec/lib/gitlab/import_export/legacy_relation_tree_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/lfs_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/lfs_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/log_util_spec.rb'
+ - 'spec/lib/gitlab/import_export/members_mapper_spec.rb'
+ - 'spec/lib/gitlab/import_export/merge_request_parser_spec.rb'
+ - 'spec/lib/gitlab/import_export/model_configuration_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/export_task_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/exported_relations_merger_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/import_task_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/object_builder_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/relation_factory_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/relation_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/relation_tree_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/sample/date_calculator_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/sample/relation_factory_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/sample/relation_tree_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/project/tree_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/reader_spec.rb'
+ - 'spec/lib/gitlab/import_export/recursive_merge_folders_spec.rb'
+ - 'spec/lib/gitlab/import_export/references_configuration_spec.rb'
+ - 'spec/lib/gitlab/import_export/remote_stream_upload_spec.rb'
+ - 'spec/lib/gitlab/import_export/repo_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/repo_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/shared_spec.rb'
+ - 'spec/lib/gitlab/import_export/snippet_repo_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/snippet_repo_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/snippets_repo_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/uploads_manager_spec.rb'
+ - 'spec/lib/gitlab/import_export/uploads_restorer_spec.rb'
+ - 'spec/lib/gitlab/import_export/uploads_saver_spec.rb'
+ - 'spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb'
+ - 'spec/lib/gitlab/import_formatter_spec.rb'
+ - 'spec/lib/gitlab/import_sources_spec.rb'
+ - 'spec/lib/gitlab/inactive_projects_deletion_warning_tracker_spec.rb'
+ - 'spec/lib/gitlab/incident_management/pager_duty/incident_issue_description_spec.rb'
+ - 'spec/lib/gitlab/incoming_email_spec.rb'
+ - 'spec/lib/gitlab/insecure_key_fingerprint_spec.rb'
+ - 'spec/lib/gitlab/instrumentation/rate_limiting_gates_spec.rb'
+ - 'spec/lib/gitlab/instrumentation/redis_base_spec.rb'
+ - 'spec/lib/gitlab/instrumentation/redis_cluster_validator_spec.rb'
+ - 'spec/lib/gitlab/instrumentation/redis_interceptor_spec.rb'
+ - 'spec/lib/gitlab/instrumentation/redis_spec.rb'
+ - 'spec/lib/gitlab/internal_post_receive/response_spec.rb'
+ - 'spec/lib/gitlab/issuable/clone/attributes_rewriter_spec.rb'
+ - 'spec/lib/gitlab/issuable/clone/copy_resource_events_service_spec.rb'
+ - 'spec/lib/gitlab/issuable_metadata_spec.rb'
+ - 'spec/lib/gitlab/issuable_sorter_spec.rb'
+ - 'spec/lib/gitlab/issuables_count_for_state_spec.rb'
+ - 'spec/lib/gitlab/issues/rebalancing/state_spec.rb'
+ - 'spec/lib/gitlab/jira/dvcs_spec.rb'
+ - 'spec/lib/gitlab/jira/middleware_spec.rb'
+ - 'spec/lib/gitlab/jira_import/base_importer_spec.rb'
+ - 'spec/lib/gitlab/jira_import/handle_labels_service_spec.rb'
+ - 'spec/lib/gitlab/jira_import/issue_serializer_spec.rb'
+ - 'spec/lib/gitlab/jira_import/issues_importer_spec.rb'
+ - 'spec/lib/gitlab/jira_import/labels_importer_spec.rb'
+ - 'spec/lib/gitlab/jira_import/metadata_collector_spec.rb'
+ - 'spec/lib/gitlab/jira_import_spec.rb'
+ - 'spec/lib/gitlab/job_waiter_spec.rb'
+ - 'spec/lib/gitlab/json_cache_spec.rb'
+ - 'spec/lib/gitlab/json_logger_spec.rb'
+ - 'spec/lib/gitlab/json_spec.rb'
+ - 'spec/lib/gitlab/jwt_authenticatable_spec.rb'
+ - 'spec/lib/gitlab/jwt_token_spec.rb'
+ - 'spec/lib/gitlab/kas/client_spec.rb'
+ - 'spec/lib/gitlab/kas_spec.rb'
+ - 'spec/lib/gitlab/kroki_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/cluster_role_binding_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/config_map_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/config_maps/aws_node_auth_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/default_namespace_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/deployment_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/generic_secret_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/api_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/pod_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v2/base_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v2/certificate_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v2/delete_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v2/init_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v2/install_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v2/patch_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v2/reset_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v3/base_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v3/delete_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v3/install_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/helm/v3/patch_command_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/ingress_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/kube_client_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/kubeconfig/entry/cluster_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/kubeconfig/entry/context_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/kubeconfig/entry/user_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/kubeconfig/template_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/namespace_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/node_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/pod_cmd_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/role_binding_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/role_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/rollout_instances_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/rollout_status_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/service_account_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/service_account_token_spec.rb'
+ - 'spec/lib/gitlab/kubernetes/tls_secret_spec.rb'
+ - 'spec/lib/gitlab/kubernetes_spec.rb'
+ - 'spec/lib/gitlab/language_data_spec.rb'
+ - 'spec/lib/gitlab/language_detection_spec.rb'
+ - 'spec/lib/gitlab/lazy_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/branch_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/client_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/comment_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/importer_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/issuable_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/issue_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/label_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/milestone_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/project_creator_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/pull_request_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/release_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/user_formatter_spec.rb'
+ - 'spec/lib/gitlab/legacy_github_import/wiki_formatter_spec.rb'
+ - 'spec/lib/gitlab/lets_encrypt/challenge_spec.rb'
+ - 'spec/lib/gitlab/lets_encrypt/client_spec.rb'
+ - 'spec/lib/gitlab/lets_encrypt/order_spec.rb'
+ - 'spec/lib/gitlab/lets_encrypt_spec.rb'
+ - 'spec/lib/gitlab/lfs/client_spec.rb'
+ - 'spec/lib/gitlab/lfs_token_spec.rb'
+ - 'spec/lib/gitlab/local_and_remote_storage_migration/artifact_migrater_spec.rb'
+ - 'spec/lib/gitlab/local_and_remote_storage_migration/pages_deployment_migrater_spec.rb'
+ - 'spec/lib/gitlab/log_timestamp_formatter_spec.rb'
+ - 'spec/lib/gitlab/logger_spec.rb'
+ - 'spec/lib/gitlab/logging/cloudflare_helper_spec.rb'
+ - 'spec/lib/gitlab/lograge/custom_options_spec.rb'
+ - 'spec/lib/gitlab/loop_helpers_spec.rb'
+ - 'spec/lib/gitlab/mail_room/authenticator_spec.rb'
+ - 'spec/lib/gitlab/mail_room/mail_room_spec.rb'
+ - 'spec/lib/gitlab/mailgun/webhook_processors/failure_logger_spec.rb'
+ - 'spec/lib/gitlab/mailgun/webhook_processors/member_invites_spec.rb'
+ - 'spec/lib/gitlab/manifest_import/manifest_spec.rb'
+ - 'spec/lib/gitlab/manifest_import/metadata_spec.rb'
+ - 'spec/lib/gitlab/manifest_import/project_creator_spec.rb'
+ - 'spec/lib/gitlab/markdown_cache/active_record/extension_spec.rb'
+ - 'spec/lib/gitlab/markdown_cache/field_data_spec.rb'
+ - 'spec/lib/gitlab/markdown_cache/redis/extension_spec.rb'
+ - 'spec/lib/gitlab/markdown_cache/redis/store_spec.rb'
+ - 'spec/lib/gitlab/marker_range_spec.rb'
+ - 'spec/lib/gitlab/markup_helper_spec.rb'
+ - 'spec/lib/gitlab/memory/diagnostic_reports_logger_spec.rb'
+ - 'spec/lib/gitlab/memory/jemalloc_spec.rb'
+ - 'spec/lib/gitlab/memory/reports/jemalloc_stats_spec.rb'
+ - 'spec/lib/gitlab/memory/reports_daemon_spec.rb'
+ - 'spec/lib/gitlab/memory/reports_uploader_spec.rb'
+ - 'spec/lib/gitlab/memory/upload_and_cleanup_reports_spec.rb'
+ - 'spec/lib/gitlab/memory/watchdog/configuration_spec.rb'
+ - 'spec/lib/gitlab/memory/watchdog/configurator_spec.rb'
+ - 'spec/lib/gitlab/memory/watchdog/monitor/heap_fragmentation_spec.rb'
+ - 'spec/lib/gitlab/memory/watchdog/monitor/rss_memory_limit_spec.rb'
+ - 'spec/lib/gitlab/memory/watchdog/monitor/unique_memory_growth_spec.rb'
+ - 'spec/lib/gitlab/memory/watchdog/monitor_state_spec.rb'
+ - 'spec/lib/gitlab/merge_requests/mergeability/check_result_spec.rb'
+ - 'spec/lib/gitlab/merge_requests/mergeability/redis_interface_spec.rb'
+ - 'spec/lib/gitlab/merge_requests/mergeability/results_store_spec.rb'
+ - 'spec/lib/gitlab/metrics/background_transaction_spec.rb'
+ - 'spec/lib/gitlab/metrics/boot_time_tracker_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/cache_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/defaults_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/finder_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/importer_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/importers/prometheus_metrics_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/processor_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/repo_dashboard_finder_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/stages/grafana_formatter_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/stages/metric_endpoint_inserter_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/stages/panel_ids_inserter_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/stages/track_panel_type_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/stages/url_validator_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/stages/variable_endpoint_inserter_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/transformers/yml/v1/prometheus_metrics_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/url_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/validator/client_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/validator/custom_formats_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/validator/errors_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/validator/post_schema_validator_spec.rb'
+ - 'spec/lib/gitlab/metrics/dashboard/validator_spec.rb'
+ - 'spec/lib/gitlab/metrics/delta_spec.rb'
+ - 'spec/lib/gitlab/metrics/elasticsearch_rack_middleware_spec.rb'
+ - 'spec/lib/gitlab/metrics/exporter/gc_request_middleware_spec.rb'
+ - 'spec/lib/gitlab/metrics/exporter/metrics_middleware_spec.rb'
+ - 'spec/lib/gitlab/metrics/global_search_slis_spec.rb'
+ - 'spec/lib/gitlab/metrics/loose_foreign_keys_slis_spec.rb'
+ - 'spec/lib/gitlab/metrics/memory_spec.rb'
+ - 'spec/lib/gitlab/metrics/method_call_spec.rb'
+ - 'spec/lib/gitlab/metrics/methods_spec.rb'
+ - 'spec/lib/gitlab/metrics/prometheus_spec.rb'
+ - 'spec/lib/gitlab/metrics/rack_middleware_spec.rb'
+ - 'spec/lib/gitlab/metrics/rails_slis_spec.rb'
+ - 'spec/lib/gitlab/metrics/samplers/action_cable_sampler_spec.rb'
+ - 'spec/lib/gitlab/metrics/samplers/database_sampler_spec.rb'
+ - 'spec/lib/gitlab/metrics/samplers/puma_sampler_spec.rb'
+ - 'spec/lib/gitlab/metrics/samplers/ruby_sampler_spec.rb'
+ - 'spec/lib/gitlab/metrics/samplers/threads_sampler_spec.rb'
+ - 'spec/lib/gitlab/metrics/sli_spec.rb'
+ - 'spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb'
+ - 'spec/lib/gitlab/metrics/subscribers/action_view_spec.rb'
+ - 'spec/lib/gitlab/metrics/subscribers/active_record_spec.rb'
+ - 'spec/lib/gitlab/metrics/subscribers/external_http_spec.rb'
+ - 'spec/lib/gitlab/metrics/subscribers/load_balancing_spec.rb'
+ - 'spec/lib/gitlab/metrics/subscribers/rack_attack_spec.rb'
+ - 'spec/lib/gitlab/metrics/subscribers/rails_cache_spec.rb'
+ - 'spec/lib/gitlab/metrics/system_spec.rb'
+ - 'spec/lib/gitlab/metrics/transaction_spec.rb'
+ - 'spec/lib/gitlab/metrics/web_transaction_spec.rb'
+ - 'spec/lib/gitlab/metrics_spec.rb'
+ - 'spec/lib/gitlab/middleware/basic_health_check_spec.rb'
+ - 'spec/lib/gitlab/middleware/compressed_json_spec.rb'
+ - 'spec/lib/gitlab/middleware/go_spec.rb'
+ - 'spec/lib/gitlab/middleware/handle_ip_spoof_attack_error_spec.rb'
+ - 'spec/lib/gitlab/middleware/handle_malformed_strings_spec.rb'
+ - 'spec/lib/gitlab/middleware/memory_report_spec.rb'
+ - 'spec/lib/gitlab/middleware/multipart/handler_spec.rb'
+ - 'spec/lib/gitlab/middleware/multipart_spec.rb'
+ - 'spec/lib/gitlab/middleware/query_analyzer_spec.rb'
+ - 'spec/lib/gitlab/middleware/rack_multipart_tempfile_factory_spec.rb'
+ - 'spec/lib/gitlab/middleware/rails_queue_duration_spec.rb'
+ - 'spec/lib/gitlab/middleware/read_only_spec.rb'
+ - 'spec/lib/gitlab/middleware/release_env_spec.rb'
+ - 'spec/lib/gitlab/middleware/request_context_spec.rb'
+ - 'spec/lib/gitlab/middleware/same_site_cookies_spec.rb'
+ - 'spec/lib/gitlab/middleware/sidekiq_web_static_spec.rb'
+ - 'spec/lib/gitlab/middleware/speedscope_spec.rb'
+ - 'spec/lib/gitlab/middleware/webhook_recursion_detection_spec.rb'
+ - 'spec/lib/gitlab/monitor/demo_projects_spec.rb'
+ - 'spec/lib/gitlab/multi_collection_paginator_spec.rb'
+ - 'spec/lib/gitlab/multi_destination_logger_spec.rb'
+ - 'spec/lib/gitlab/namespaced_session_store_spec.rb'
+ - 'spec/lib/gitlab/nav/top_nav_menu_header_spec.rb'
+ - 'spec/lib/gitlab/nav/top_nav_menu_item_spec.rb'
+ - 'spec/lib/gitlab/net_http_adapter_spec.rb'
+ - 'spec/lib/gitlab/no_cache_headers_spec.rb'
+ - 'spec/lib/gitlab/noteable_metadata_spec.rb'
+ - 'spec/lib/gitlab/null_request_store_spec.rb'
+ - 'spec/lib/gitlab/object_hierarchy_spec.rb'
+ - 'spec/lib/gitlab/observability_spec.rb'
+ - 'spec/lib/gitlab/octokit/middleware_spec.rb'
+ - 'spec/lib/gitlab/omniauth_initializer_spec.rb'
+ - 'spec/lib/gitlab/optimistic_locking_spec.rb'
+ - 'spec/lib/gitlab/other_markup_spec.rb'
+ - 'spec/lib/gitlab/otp_key_rotator_spec.rb'
+ - 'spec/lib/gitlab/pages/deployment_update_spec.rb'
+ - 'spec/lib/gitlab/pages/settings_spec.rb'
+ - 'spec/lib/gitlab/pages_spec.rb'
+ - 'spec/lib/gitlab/pagination/cursor_based_keyset_spec.rb'
+ - 'spec/lib/gitlab/pagination/gitaly_keyset_pager_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/column_order_definition_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/cursor_based_request_context_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/cursor_pager_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/array_scope_columns_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/column_data_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/order_by_column_data_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/order_by_columns_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/query_builder_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/strategies/order_values_loader_strategy_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/strategies/record_loader_strategy_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/iterator_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/order_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/page_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/pager_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/paginator_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/request_context_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/simple_order_builder_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset_spec.rb'
+ - 'spec/lib/gitlab/pagination/offset_header_builder_spec.rb'
+ - 'spec/lib/gitlab/pagination/offset_header_builder_with_controller_spec.rb'
+ - 'spec/lib/gitlab/pagination/offset_pagination_spec.rb'
+ - 'spec/lib/gitlab/pagination_delegate_spec.rb'
+ - 'spec/lib/gitlab/patch/action_cable_redis_listener_spec.rb'
+ - 'spec/lib/gitlab/patch/database_config_spec.rb'
+ - 'spec/lib/gitlab/patch/draw_route_spec.rb'
+ - 'spec/lib/gitlab/patch/prependable_spec.rb'
+ - 'spec/lib/gitlab/patch/uri_spec.rb'
+ - 'spec/lib/gitlab/path_regex_spec.rb'
+ - 'spec/lib/gitlab/performance_bar/redis_adapter_when_peek_enabled_spec.rb'
+ - 'spec/lib/gitlab/performance_bar/stats_spec.rb'
+ - 'spec/lib/gitlab/performance_bar/with_top_level_warnings_spec.rb'
+ - 'spec/lib/gitlab/performance_bar_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/cache/map_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/conduit/client_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/conduit/maniphest_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/conduit/response_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/conduit/tasks_response_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/conduit/user_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/conduit/users_response_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/importer_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/issues/importer_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/issues/task_importer_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/project_creator_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/representation/task_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/representation/user_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/user_finder_spec.rb'
+ - 'spec/lib/gitlab/phabricator_import/worker_state_spec.rb'
+ - 'spec/lib/gitlab/pipeline_scope_counts_spec.rb'
+ - 'spec/lib/gitlab/polling_interval_spec.rb'
+ - 'spec/lib/gitlab/popen/runner_spec.rb'
+ - 'spec/lib/gitlab/popen_spec.rb'
+ - 'spec/lib/gitlab/private_commit_email_spec.rb'
+ - 'spec/lib/gitlab/process_management_spec.rb'
+ - 'spec/lib/gitlab/process_memory_cache/helper_spec.rb'
+ - 'spec/lib/gitlab/profiler_spec.rb'
+ - 'spec/lib/gitlab/project_authorizations_spec.rb'
+ - 'spec/lib/gitlab/project_search_results_spec.rb'
+ - 'spec/lib/gitlab/project_stats_refresh_conflicts_logger_spec.rb'
+ - 'spec/lib/gitlab/project_template_spec.rb'
+ - 'spec/lib/gitlab/project_transfer_spec.rb'
+ - 'spec/lib/gitlab/prometheus/adapter_spec.rb'
+ - 'spec/lib/gitlab/prometheus/additional_metrics_parser_spec.rb'
+ - 'spec/lib/gitlab/prometheus/internal_spec.rb'
+ - 'spec/lib/gitlab/prometheus/metric_group_spec.rb'
+ - 'spec/lib/gitlab/prometheus/queries/additional_metrics_deployment_query_spec.rb'
+ - 'spec/lib/gitlab/prometheus/queries/additional_metrics_environment_query_spec.rb'
+ - 'spec/lib/gitlab/prometheus/queries/deployment_query_spec.rb'
+ - 'spec/lib/gitlab/prometheus/queries/knative_invocation_query_spec.rb'
+ - 'spec/lib/gitlab/prometheus/queries/matched_metric_query_spec.rb'
+ - 'spec/lib/gitlab/prometheus/queries/validate_query_spec.rb'
+ - 'spec/lib/gitlab/prometheus/query_variables_spec.rb'
+ - 'spec/lib/gitlab/prometheus_client_spec.rb'
+ - 'spec/lib/gitlab/protocol_access_spec.rb'
+ - 'spec/lib/gitlab/puma_logging/json_formatter_spec.rb'
+ - 'spec/lib/gitlab/push_options_spec.rb'
+ - 'spec/lib/gitlab/qa_spec.rb'
+ - 'spec/lib/gitlab/query_limiting/active_support_subscriber_spec.rb'
+ - 'spec/lib/gitlab/query_limiting/middleware_spec.rb'
+ - 'spec/lib/gitlab/query_limiting/transaction_spec.rb'
+ - 'spec/lib/gitlab/query_limiting_spec.rb'
+ - 'spec/lib/gitlab/quick_actions/command_definition_spec.rb'
+ - 'spec/lib/gitlab/quick_actions/dsl_spec.rb'
+ - 'spec/lib/gitlab/quick_actions/extractor_spec.rb'
+ - 'spec/lib/gitlab/quick_actions/spend_time_and_date_separator_spec.rb'
+ - 'spec/lib/gitlab/quick_actions/substitution_definition_spec.rb'
+ - 'spec/lib/gitlab/quick_actions/timeline_text_and_date_time_separator_spec.rb'
+ - 'spec/lib/gitlab/quick_actions/users_extractor_spec.rb'
+ - 'spec/lib/gitlab/rack_attack/instrumented_cache_store_spec.rb'
+ - 'spec/lib/gitlab/rack_attack/request_spec.rb'
+ - 'spec/lib/gitlab/rack_attack/user_allowlist_spec.rb'
+ - 'spec/lib/gitlab/rack_attack_spec.rb'
+ - 'spec/lib/gitlab/reactive_cache_set_cache_spec.rb'
+ - 'spec/lib/gitlab/redis/boolean_spec.rb'
+ - 'spec/lib/gitlab/redis/cache_spec.rb'
+ - 'spec/lib/gitlab/redis/duplicate_jobs_spec.rb'
+ - 'spec/lib/gitlab/redis/hll_spec.rb'
+ - 'spec/lib/gitlab/redis/queues_spec.rb'
+ - 'spec/lib/gitlab/redis/rate_limiting_spec.rb'
+ - 'spec/lib/gitlab/redis/sessions_spec.rb'
+ - 'spec/lib/gitlab/redis/shared_state_spec.rb'
+ - 'spec/lib/gitlab/redis/sidekiq_status_spec.rb'
+ - 'spec/lib/gitlab/redis/trace_chunks_spec.rb'
+ - 'spec/lib/gitlab/redis/wrapper_spec.rb'
+ - 'spec/lib/gitlab/reference_counter_spec.rb'
+ - 'spec/lib/gitlab/reference_extractor_spec.rb'
+ - 'spec/lib/gitlab/regex_requires_app_spec.rb'
+ - 'spec/lib/gitlab/relative_positioning/item_context_spec.rb'
+ - 'spec/lib/gitlab/relative_positioning/range_spec.rb'
+ - 'spec/lib/gitlab/render_timeout_spec.rb'
+ - 'spec/lib/gitlab/repo_path_spec.rb'
+ - 'spec/lib/gitlab/repository_archive_rate_limiter_spec.rb'
+ - 'spec/lib/gitlab/repository_cache_adapter_spec.rb'
+ - 'spec/lib/gitlab/repository_cache_spec.rb'
+ - 'spec/lib/gitlab/repository_hash_cache_spec.rb'
+ - 'spec/lib/gitlab/repository_set_cache_spec.rb'
+ - 'spec/lib/gitlab/repository_size_checker_spec.rb'
+ - 'spec/lib/gitlab/repository_size_error_message_spec.rb'
+ - 'spec/lib/gitlab/repository_url_builder_spec.rb'
+ - 'spec/lib/gitlab/request_context_spec.rb'
+ - 'spec/lib/gitlab/request_endpoints_spec.rb'
+ - 'spec/lib/gitlab/request_forgery_protection_spec.rb'
+ - 'spec/lib/gitlab/robots_txt/parser_spec.rb'
+ - 'spec/lib/gitlab/route_map_spec.rb'
+ - 'spec/lib/gitlab/routing_spec.rb'
+ - 'spec/lib/gitlab/rugged_instrumentation_spec.rb'
+ - 'spec/lib/gitlab/runtime_spec.rb'
+ - 'spec/lib/gitlab/saas_spec.rb'
+ - 'spec/lib/gitlab/safe_request_loader_spec.rb'
+ - 'spec/lib/gitlab/safe_request_purger_spec.rb'
+ - 'spec/lib/gitlab/safe_request_store_spec.rb'
+ - 'spec/lib/gitlab/sample_data_template_spec.rb'
+ - 'spec/lib/gitlab/sanitizers/exception_message_spec.rb'
+ - 'spec/lib/gitlab/sanitizers/exif_spec.rb'
+ - 'spec/lib/gitlab/sanitizers/svg_spec.rb'
+ - 'spec/lib/gitlab/search/abuse_detection_spec.rb'
+ - 'spec/lib/gitlab/search/abuse_validators/no_abusive_coercion_from_string_validator_spec.rb'
+ - 'spec/lib/gitlab/search/abuse_validators/no_abusive_term_length_validator_spec.rb'
+ - 'spec/lib/gitlab/search/found_blob_spec.rb'
+ - 'spec/lib/gitlab/search/found_wiki_page_spec.rb'
+ - 'spec/lib/gitlab/search/params_spec.rb'
+ - 'spec/lib/gitlab/search/query_spec.rb'
+ - 'spec/lib/gitlab/search/recent_issues_spec.rb'
+ - 'spec/lib/gitlab/search/recent_merge_requests_spec.rb'
+ - 'spec/lib/gitlab/search/sort_options_spec.rb'
+ - 'spec/lib/gitlab/search_context/builder_spec.rb'
+ - 'spec/lib/gitlab/search_context/controller_concern_spec.rb'
+ - 'spec/lib/gitlab/search_results_spec.rb'
+ - 'spec/lib/gitlab/security/scan_configuration_spec.rb'
+ - 'spec/lib/gitlab/seeder_spec.rb'
+ - 'spec/lib/gitlab/seeders/ci/daily_build_group_report_result_spec.rb'
+ - 'spec/lib/gitlab/serializer/ci/variables_spec.rb'
+ - 'spec/lib/gitlab/serializer/pagination_spec.rb'
+ - 'spec/lib/gitlab/serverless/service_spec.rb'
+ - 'spec/lib/gitlab/service_desk_email_spec.rb'
+ - 'spec/lib/gitlab/service_desk_spec.rb'
+ - 'spec/lib/gitlab/session_spec.rb'
+ - 'spec/lib/gitlab/setup_helper/praefect_spec.rb'
+ - 'spec/lib/gitlab/setup_helper/workhorse_spec.rb'
+ - 'spec/lib/gitlab/shard_health_cache_spec.rb'
+ - 'spec/lib/gitlab/shell_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_config/worker_matcher_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_config/worker_router_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_config/worker_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_config_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_death_handler_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_logging/deduplication_logger_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_logging/json_formatter_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/admin_mode/client_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/admin_mode/server_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/client_metrics_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/client_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/server_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/none_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executed_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/extra_done_log_metadata_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/instrumentation_logger_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/query_analyzer_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/size_limiter/client_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/size_limiter/compressor_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/size_limiter/exceed_limit_error_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/size_limiter/server_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/size_limiter/validator_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/worker_context/client_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware/worker_context/server_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_middleware_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_migrate_jobs_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_queue_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_signals_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_status/client_middleware_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_status/server_middleware_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_status_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_versioning/middleware_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_versioning/worker_spec.rb'
+ - 'spec/lib/gitlab/sidekiq_versioning_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/application_help_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/command_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/issue_close_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/issue_comment_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/issue_move_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/issue_new_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/issue_search_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/issue_show_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/access_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/deploy_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/error_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/incident_management/incident_new_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/issue_close_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/issue_comment_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/issue_move_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/issue_new_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/issue_search_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/issue_show_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/presenters/run_spec.rb'
+ - 'spec/lib/gitlab/slash_commands/run_spec.rb'
+ - 'spec/lib/gitlab/slug/environment_spec.rb'
+ - 'spec/lib/gitlab/snippet_search_results_spec.rb'
+ - 'spec/lib/gitlab/sourcegraph_spec.rb'
+ - 'spec/lib/gitlab/spamcheck/client_spec.rb'
+ - 'spec/lib/gitlab/sql/cte_spec.rb'
+ - 'spec/lib/gitlab/sql/except_spec.rb'
+ - 'spec/lib/gitlab/sql/glob_spec.rb'
+ - 'spec/lib/gitlab/sql/intersect_spec.rb'
+ - 'spec/lib/gitlab/sql/pattern_spec.rb'
+ - 'spec/lib/gitlab/sql/recursive_cte_spec.rb'
+ - 'spec/lib/gitlab/sql/union_spec.rb'
+ - 'spec/lib/gitlab/ssh_public_key_spec.rb'
+ - 'spec/lib/gitlab/string_placeholder_replacer_spec.rb'
+ - 'spec/lib/gitlab/string_range_marker_spec.rb'
+ - 'spec/lib/gitlab/string_regex_marker_spec.rb'
+ - 'spec/lib/gitlab/submodule_links_spec.rb'
+ - 'spec/lib/gitlab/subscription_portal_spec.rb'
+ - 'spec/lib/gitlab/suggestions/commit_message_spec.rb'
+ - 'spec/lib/gitlab/suggestions/file_suggestion_spec.rb'
+ - 'spec/lib/gitlab/suggestions/suggestion_set_spec.rb'
+ - 'spec/lib/gitlab/tab_width_spec.rb'
+ - 'spec/lib/gitlab/tcp_checker_spec.rb'
+ - 'spec/lib/gitlab/template/finders/global_template_finder_spec.rb'
+ - 'spec/lib/gitlab/template/finders/repo_template_finders_spec.rb'
+ - 'spec/lib/gitlab/template/gitignore_template_spec.rb'
+ - 'spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb'
+ - 'spec/lib/gitlab/template/issue_template_spec.rb'
+ - 'spec/lib/gitlab/template/merge_request_template_spec.rb'
+ - 'spec/lib/gitlab/template/metrics_dashboard_template_spec.rb'
+ - 'spec/lib/gitlab/template_parser/ast_spec.rb'
+ - 'spec/lib/gitlab/template_parser/parser_spec.rb'
+ - 'spec/lib/gitlab/terraform/state_migration_helper_spec.rb'
+ - 'spec/lib/gitlab/terraform_registry_token_spec.rb'
+ - 'spec/lib/gitlab/themes_spec.rb'
+ - 'spec/lib/gitlab/throttle_spec.rb'
+ - 'spec/lib/gitlab/time_tracking_formatter_spec.rb'
+ - 'spec/lib/gitlab/tracking/destinations/snowplow_micro_spec.rb'
+ - 'spec/lib/gitlab/tracking/destinations/snowplow_spec.rb'
+ - 'spec/lib/gitlab/tracking/event_definition_spec.rb'
+ - 'spec/lib/gitlab/tracking/helpers/weak_password_error_event_spec.rb'
+ - 'spec/lib/gitlab/tracking/incident_management_spec.rb'
+ - 'spec/lib/gitlab/tracking/service_ping_context_spec.rb'
+ - 'spec/lib/gitlab/tracking/snowplow_schema_validation_spec.rb'
+ - 'spec/lib/gitlab/tracking/standard_context_spec.rb'
+ - 'spec/lib/gitlab/tracking_spec.rb'
+ - 'spec/lib/gitlab/tree_summary_spec.rb'
+ - 'spec/lib/gitlab/unicode_spec.rb'
+ - 'spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb'
+ - 'spec/lib/gitlab/untrusted_regexp_spec.rb'
+ - 'spec/lib/gitlab/uploads_transfer_spec.rb'
+ - 'spec/lib/gitlab/url_blocker_spec.rb'
+ - 'spec/lib/gitlab/url_blockers/domain_allowlist_entry_spec.rb'
+ - 'spec/lib/gitlab/url_blockers/ip_allowlist_entry_spec.rb'
+ - 'spec/lib/gitlab/url_blockers/url_allowlist_spec.rb'
+ - 'spec/lib/gitlab/url_builder_spec.rb'
+ - 'spec/lib/gitlab/url_sanitizer_spec.rb'
+ - 'spec/lib/gitlab/usage/metric_definition_spec.rb'
+ - 'spec/lib/gitlab/usage/metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/aggregates/aggregate_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/aggregates/sources/calculations/intersection_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/aggregates/sources/postgres_hll_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/aggregates/sources/redis_hll_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/active_user_count_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/aggregated_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/cert_based_clusters_ff_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/collected_data_categories_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_boards_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_imported_projects_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_issues_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_user_auth_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_users_associating_milestones_to_releases_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/count_users_creating_issues_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/database_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/distinct_count_projects_with_expiration_policy_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_period_setting_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_setting_enabled_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/generic_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/gitlab_for_jira_app_direct_installations_count_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/gitlab_for_jira_app_proxy_installations_count_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/hostname_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/in_product_marketing_email_cta_clicked_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/in_product_marketing_email_sent_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/jira_imports_total_imported_issues_count_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/merge_request_widget_extension_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/numbers_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/redis_hll_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/redis_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/service_ping_features_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/snowplow_configured_to_gitlab_collector_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/snowplow_enabled_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/uuid_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/instrumentations/work_items_activity_aggregated_metric_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/key_path_processor_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/name_suggestion_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/names_suggestions/generator_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/having_constraints_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/joins_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/where_constraints_spec.rb'
+ - 'spec/lib/gitlab/usage/metrics/query_spec.rb'
+ - 'spec/lib/gitlab/usage/service_ping/instrumented_payload_spec.rb'
+ - 'spec/lib/gitlab/usage/service_ping/payload_keys_processor_spec.rb'
+ - 'spec/lib/gitlab/usage/service_ping_report_spec.rb'
+ - 'spec/lib/gitlab/usage_data/topology_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/base_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/ci_template_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/code_review_events_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/cycle_analytics_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/designs_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/editor_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/gitlab_cli_activity_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/ipynb_diff_activity_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/issue_activity_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/jetbrains_plugin_activity_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/kubernetes_agent_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/merge_request_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/merge_request_widget_extension_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/note_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/package_event_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/productivity_analytics_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/quick_action_activity_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/redis_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/search_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/service_usage_data_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/snippet_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/source_code_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/vscode_extension_activity_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/web_ide_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/wiki_page_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters/work_item_activity_unique_counter_spec.rb'
+ - 'spec/lib/gitlab/usage_data_counters_spec.rb'
+ - 'spec/lib/gitlab/usage_data_metrics_spec.rb'
+ - 'spec/lib/gitlab/usage_data_non_sql_metrics_spec.rb'
+ - 'spec/lib/gitlab/usage_data_queries_spec.rb'
+ - 'spec/lib/gitlab/user_access_snippet_spec.rb'
+ - 'spec/lib/gitlab/user_access_spec.rb'
+ - 'spec/lib/gitlab/utils/batch_loader_spec.rb'
+ - 'spec/lib/gitlab/utils/deep_size_spec.rb'
+ - 'spec/lib/gitlab/utils/delegator_override/error_spec.rb'
+ - 'spec/lib/gitlab/utils/delegator_override/validator_spec.rb'
+ - 'spec/lib/gitlab/utils/delegator_override_spec.rb'
+ - 'spec/lib/gitlab/utils/execution_tracker_spec.rb'
+ - 'spec/lib/gitlab/utils/gzip_spec.rb'
+ - 'spec/lib/gitlab/utils/inline_hash_spec.rb'
+ - 'spec/lib/gitlab/utils/json_size_estimator_spec.rb'
+ - 'spec/lib/gitlab/utils/lazy_attributes_spec.rb'
+ - 'spec/lib/gitlab/utils/link_header_parser_spec.rb'
+ - 'spec/lib/gitlab/utils/log_limited_array_spec.rb'
+ - 'spec/lib/gitlab/utils/markdown_spec.rb'
+ - 'spec/lib/gitlab/utils/measuring_spec.rb'
+ - 'spec/lib/gitlab/utils/merge_hash_spec.rb'
+ - 'spec/lib/gitlab/utils/mime_type_spec.rb'
+ - 'spec/lib/gitlab/utils/nokogiri_spec.rb'
+ - 'spec/lib/gitlab/utils/override_spec.rb'
+ - 'spec/lib/gitlab/utils/safe_inline_hash_spec.rb'
+ - 'spec/lib/gitlab/utils/sanitize_node_link_spec.rb'
+ - 'spec/lib/gitlab/utils/usage_data_spec.rb'
+ - 'spec/lib/gitlab/utils_spec.rb'
+ - 'spec/lib/gitlab/uuid_spec.rb'
+ - 'spec/lib/gitlab/verify/job_artifacts_spec.rb'
+ - 'spec/lib/gitlab/verify/lfs_objects_spec.rb'
+ - 'spec/lib/gitlab/verify/uploads_spec.rb'
+ - 'spec/lib/gitlab/version_info_spec.rb'
+ - 'spec/lib/gitlab/view/presenter/base_spec.rb'
+ - 'spec/lib/gitlab/view/presenter/delegated_spec.rb'
+ - 'spec/lib/gitlab/view/presenter/factory_spec.rb'
+ - 'spec/lib/gitlab/view/presenter/simple_spec.rb'
+ - 'spec/lib/gitlab/visibility_level_checker_spec.rb'
+ - 'spec/lib/gitlab/visibility_level_spec.rb'
+ - 'spec/lib/gitlab/web_hooks/rate_limiter_spec.rb'
+ - 'spec/lib/gitlab/web_hooks/recursion_detection_spec.rb'
+ - 'spec/lib/gitlab/web_ide/config/entry/global_spec.rb'
+ - 'spec/lib/gitlab/web_ide/config/entry/terminal_spec.rb'
+ - 'spec/lib/gitlab/web_ide/config_spec.rb'
+ - 'spec/lib/gitlab/webpack/file_loader_spec.rb'
+ - 'spec/lib/gitlab/webpack/graphql_known_operations_spec.rb'
+ - 'spec/lib/gitlab/webpack/manifest_spec.rb'
+ - 'spec/lib/gitlab/wiki_file_finder_spec.rb'
+ - 'spec/lib/gitlab/wiki_pages/front_matter_parser_spec.rb'
+ - 'spec/lib/gitlab/with_request_store_spec.rb'
+ - 'spec/lib/gitlab/word_diff/chunk_collection_spec.rb'
+ - 'spec/lib/gitlab/word_diff/line_processor_spec.rb'
+ - 'spec/lib/gitlab/word_diff/parser_spec.rb'
+ - 'spec/lib/gitlab/word_diff/positions_counter_spec.rb'
+ - 'spec/lib/gitlab/word_diff/segments/chunk_spec.rb'
+ - 'spec/lib/gitlab/word_diff/segments/diff_hunk_spec.rb'
+ - 'spec/lib/gitlab/word_diff/segments/newline_spec.rb'
+ - 'spec/lib/gitlab/workhorse_spec.rb'
+ - 'spec/lib/gitlab/x509/certificate_spec.rb'
+ - 'spec/lib/gitlab/x509/commit_spec.rb'
+ - 'spec/lib/gitlab/x509/signature_spec.rb'
+ - 'spec/lib/gitlab/x509/tag_spec.rb'
+ - 'spec/lib/gitlab/zentao/client_spec.rb'
+ - 'spec/lib/gitlab/zentao/query_spec.rb'
+ - 'spec/lib/gitlab/zoom_link_extractor_spec.rb'
+ - 'spec/lib/gitlab_edition_spec.rb'
+ - 'spec/lib/gitlab_spec.rb'
+ - 'spec/lib/google_api/auth_spec.rb'
+ - 'spec/lib/google_api/cloud_platform/client_spec.rb'
+ - 'spec/lib/grafana/client_spec.rb'
+ - 'spec/lib/grafana/time_window_spec.rb'
+ - 'spec/lib/grafana/validator_spec.rb'
+ - 'spec/lib/initializer_connections_spec.rb'
+ - 'spec/lib/json_web_token/hmac_token_spec.rb'
+ - 'spec/lib/json_web_token/rsa_token_spec.rb'
+ - 'spec/lib/json_web_token/token_spec.rb'
+ - 'spec/lib/kramdown/kramdown_spec.rb'
+ - 'spec/lib/kramdown/parser/atlassian_document_format_spec.rb'
+ - 'spec/lib/marginalia_spec.rb'
+ - 'spec/lib/mattermost/client_spec.rb'
+ - 'spec/lib/mattermost/command_spec.rb'
+ - 'spec/lib/mattermost/session_spec.rb'
+ - 'spec/lib/mattermost/team_spec.rb'
+ - 'spec/lib/microsoft_teams/activity_spec.rb'
+ - 'spec/lib/microsoft_teams/notifier_spec.rb'
+ - 'spec/lib/object_storage/config_spec.rb'
+ - 'spec/lib/object_storage/direct_upload_spec.rb'
+ - 'spec/lib/omni_auth/strategies/bitbucket_spec.rb'
+ - 'spec/lib/omni_auth/strategies/jwt_spec.rb'
+ - 'spec/lib/pager_duty/webhook_payload_parser_spec.rb'
+ - 'spec/lib/peek/views/active_record_spec.rb'
+ - 'spec/lib/peek/views/bullet_detailed_spec.rb'
+ - 'spec/lib/peek/views/detailed_view_spec.rb'
+ - 'spec/lib/peek/views/external_http_spec.rb'
+ - 'spec/lib/peek/views/memory_spec.rb'
+ - 'spec/lib/peek/views/redis_detailed_spec.rb'
+ - 'spec/lib/peek/views/rugged_spec.rb'
+ - 'spec/lib/product_analytics/event_params_spec.rb'
+ - 'spec/lib/product_analytics/tracker_spec.rb'
+ - 'spec/lib/prometheus/cleanup_multiproc_dir_service_spec.rb'
+ - 'spec/lib/prometheus/pid_provider_spec.rb'
+ - 'spec/lib/quality/seeders/issues_spec.rb'
+ - 'spec/lib/release_highlights/validator/entry_spec.rb'
+ - 'spec/lib/release_highlights/validator_spec.rb'
+ - 'spec/lib/rouge/formatters/html_gitlab_spec.rb'
+ - 'spec/lib/safe_zip/entry_spec.rb'
+ - 'spec/lib/safe_zip/extract_params_spec.rb'
+ - 'spec/lib/safe_zip/extract_spec.rb'
+ - 'spec/lib/security/ci_configuration/container_scanning_build_action_spec.rb'
+ - 'spec/lib/security/ci_configuration/sast_build_action_spec.rb'
+ - 'spec/lib/security/ci_configuration/sast_iac_build_action_spec.rb'
+ - 'spec/lib/security/ci_configuration/secret_detection_build_action_spec.rb'
+ - 'spec/lib/security/report_schema_version_matcher_spec.rb'
+ - 'spec/lib/serializers/unsafe_json_spec.rb'
+ - 'spec/lib/service_ping/build_payload_spec.rb'
+ - 'spec/lib/service_ping/devops_report_spec.rb'
+ - 'spec/lib/service_ping/permit_data_categories_spec.rb'
+ - 'spec/lib/service_ping/service_ping_settings_spec.rb'
+ - 'spec/lib/sidebars/concerns/container_with_html_options_spec.rb'
+ - 'spec/lib/sidebars/concerns/link_with_html_options_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/ci_cd_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/group_information_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/invite_team_members_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/issues_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/kubernetes_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/merge_requests_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/observability_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/packages_registries_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/scope_menu_spec.rb'
+ - 'spec/lib/sidebars/groups/menus/settings_menu_spec.rb'
+ - 'spec/lib/sidebars/menu_item_spec.rb'
+ - 'spec/lib/sidebars/menu_spec.rb'
+ - 'spec/lib/sidebars/panel_spec.rb'
+ - 'spec/lib/sidebars/projects/context_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/analytics_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/ci_cd_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/confluence_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/deployments_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/external_issue_tracker_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/external_wiki_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/hidden_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/invite_team_members_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/issues_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/learn_gitlab_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/merge_requests_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/monitor_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/packages_registries_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/project_information_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/scope_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/security_compliance_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/settings_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/shimo_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/snippets_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/wiki_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/menus/zentao_menu_spec.rb'
+ - 'spec/lib/sidebars/projects/panel_spec.rb'
+ - 'spec/lib/system_check/app/authorized_keys_permission_check_spec.rb'
+ - 'spec/lib/system_check/app/git_user_default_ssh_config_check_spec.rb'
+ - 'spec/lib/system_check/app/hashed_storage_all_projects_check_spec.rb'
+ - 'spec/lib/system_check/app/hashed_storage_enabled_check_spec.rb'
+ - 'spec/lib/system_check/base_check_spec.rb'
+ - 'spec/lib/system_check/incoming_email/imap_authentication_check_spec.rb'
+ - 'spec/lib/system_check/incoming_email_check_spec.rb'
+ - 'spec/lib/system_check/orphans/namespace_check_spec.rb'
+ - 'spec/lib/system_check/orphans/repository_check_spec.rb'
+ - 'spec/lib/system_check/sidekiq_check_spec.rb'
+ - 'spec/lib/system_check/simple_executor_spec.rb'
+ - 'spec/lib/system_check_spec.rb'
+ - 'spec/lib/tasks/gitlab/metrics_exporter_task_spec.rb'
+ - 'spec/lib/unnested_in_filters/dsl_spec.rb'
+ - 'spec/lib/unnested_in_filters/rewriter_spec.rb'
+ - 'spec/lib/uploaded_file_spec.rb'
+ - 'spec/lib/version_check_spec.rb'
+ - 'spec/mailers/abuse_report_mailer_spec.rb'
+ - 'spec/mailers/devise_mailer_spec.rb'
+ - 'spec/mailers/email_rejection_mailer_spec.rb'
+ - 'spec/mailers/emails/admin_notification_spec.rb'
+ - 'spec/mailers/emails/auto_devops_spec.rb'
+ - 'spec/mailers/emails/groups_spec.rb'
+ - 'spec/mailers/emails/identity_verification_spec.rb'
+ - 'spec/mailers/emails/in_product_marketing_spec.rb'
+ - 'spec/mailers/emails/issues_spec.rb'
+ - 'spec/mailers/emails/merge_requests_spec.rb'
+ - 'spec/mailers/emails/pages_domains_spec.rb'
+ - 'spec/mailers/emails/pipelines_spec.rb'
+ - 'spec/mailers/emails/profile_spec.rb'
+ - 'spec/mailers/emails/projects_spec.rb'
+ - 'spec/mailers/emails/releases_spec.rb'
+ - 'spec/mailers/emails/service_desk_spec.rb'
+ - 'spec/mailers/notify_spec.rb'
+ - 'spec/mailers/previews_spec.rb'
+ - 'spec/mailers/repository_check_mailer_spec.rb'
+ - 'spec/migrations/20221122132812_schedule_prune_stale_project_export_jobs_spec.rb'
+ - 'spec/migrations/20221205151917_schedule_backfill_environment_tier_spec.rb'
+ - 'spec/models/ability_spec.rb'
+ - 'spec/models/active_session_spec.rb'
+ - 'spec/models/acts_as_taggable_on/tag_spec.rb'
+ - 'spec/models/acts_as_taggable_on/tagging_spec.rb'
+ - 'spec/models/alert_management/alert_assignee_spec.rb'
+ - 'spec/models/alert_management/alert_spec.rb'
+ - 'spec/models/alert_management/alert_user_mention_spec.rb'
+ - 'spec/models/alert_management/http_integration_spec.rb'
+ - 'spec/models/alert_management/metric_image_spec.rb'
+ - 'spec/models/alerting/project_alerting_setting_spec.rb'
+ - 'spec/models/analytics/cycle_analytics/issue_stage_event_spec.rb'
+ - 'spec/models/analytics/cycle_analytics/merge_request_stage_event_spec.rb'
+ - 'spec/models/analytics/cycle_analytics/project_stage_spec.rb'
+ - 'spec/models/analytics/cycle_analytics/project_value_stream_spec.rb'
+ - 'spec/models/analytics/cycle_analytics/stage_event_hash_spec.rb'
+ - 'spec/models/analytics/usage_trends/measurement_spec.rb'
+ - 'spec/models/appearance_spec.rb'
+ - 'spec/models/application_record_spec.rb'
+ - 'spec/models/application_setting/term_spec.rb'
+ - 'spec/models/approval_spec.rb'
+ - 'spec/models/atlassian/identity_spec.rb'
+ - 'spec/models/audit_event_spec.rb'
+ - 'spec/models/authentication_event_spec.rb'
+ - 'spec/models/award_emoji_spec.rb'
+ - 'spec/models/awareness_session_spec.rb'
+ - 'spec/models/aws/role_spec.rb'
+ - 'spec/models/badge_spec.rb'
+ - 'spec/models/badges/group_badge_spec.rb'
+ - 'spec/models/badges/project_badge_spec.rb'
+ - 'spec/models/blob_spec.rb'
+ - 'spec/models/blob_viewer/base_spec.rb'
+ - 'spec/models/blob_viewer/changelog_spec.rb'
+ - 'spec/models/blob_viewer/composer_json_spec.rb'
+ - 'spec/models/blob_viewer/gemspec_spec.rb'
+ - 'spec/models/blob_viewer/gitlab_ci_yml_spec.rb'
+ - 'spec/models/blob_viewer/go_mod_spec.rb'
+ - 'spec/models/blob_viewer/license_spec.rb'
+ - 'spec/models/blob_viewer/markup_spec.rb'
+ - 'spec/models/blob_viewer/metrics_dashboard_yml_spec.rb'
+ - 'spec/models/blob_viewer/package_json_spec.rb'
+ - 'spec/models/blob_viewer/podspec_json_spec.rb'
+ - 'spec/models/blob_viewer/podspec_spec.rb'
+ - 'spec/models/blob_viewer/readme_spec.rb'
+ - 'spec/models/blob_viewer/route_map_spec.rb'
+ - 'spec/models/blob_viewer/server_side_spec.rb'
+ - 'spec/models/board_group_recent_visit_spec.rb'
+ - 'spec/models/board_project_recent_visit_spec.rb'
+ - 'spec/models/board_spec.rb'
+ - 'spec/models/broadcast_message_spec.rb'
+ - 'spec/models/bulk_import_spec.rb'
+ - 'spec/models/bulk_imports/configuration_spec.rb'
+ - 'spec/models/bulk_imports/export_spec.rb'
+ - 'spec/models/bulk_imports/export_status_spec.rb'
+ - 'spec/models/bulk_imports/export_upload_spec.rb'
+ - 'spec/models/bulk_imports/failure_spec.rb'
+ - 'spec/models/bulk_imports/file_transfer/group_config_spec.rb'
+ - 'spec/models/bulk_imports/file_transfer/project_config_spec.rb'
+ - 'spec/models/bulk_imports/file_transfer_spec.rb'
+ - 'spec/models/bulk_imports/tracker_spec.rb'
+ - 'spec/models/chat_team_spec.rb'
+ - 'spec/models/ci/artifact_blob_spec.rb'
+ - 'spec/models/ci/build_dependencies_spec.rb'
+ - 'spec/models/ci/build_metadata_spec.rb'
+ - 'spec/models/ci/build_pending_state_spec.rb'
+ - 'spec/models/ci/build_report_result_spec.rb'
+ - 'spec/models/ci/build_trace_chunk_spec.rb'
+ - 'spec/models/ci/build_trace_chunks/database_spec.rb'
+ - 'spec/models/ci/build_trace_chunks/fog_spec.rb'
+ - 'spec/models/ci/build_trace_chunks/redis_spec.rb'
+ - 'spec/models/ci/build_trace_spec.rb'
+ - 'spec/models/ci/commit_with_pipeline_spec.rb'
+ - 'spec/models/ci/daily_build_group_report_result_spec.rb'
+ - 'spec/models/ci/deleted_object_spec.rb'
+ - 'spec/models/ci/group_spec.rb'
+ - 'spec/models/ci/group_variable_spec.rb'
+ - 'spec/models/ci/instance_variable_spec.rb'
+ - 'spec/models/ci/job_artifact_spec.rb'
+ - 'spec/models/ci/namespace_mirror_spec.rb'
+ - 'spec/models/ci/pending_build_spec.rb'
+ - 'spec/models/ci/persistent_ref_spec.rb'
+ - 'spec/models/ci/pipeline_artifact_spec.rb'
+ - 'spec/models/ci/pipeline_config_spec.rb'
+ - 'spec/models/ci/pipeline_message_spec.rb'
+ - 'spec/models/ci/pipeline_metadata_spec.rb'
+ - 'spec/models/ci/pipeline_schedule_variable_spec.rb'
+ - 'spec/models/ci/pipeline_variable_spec.rb'
+ - 'spec/models/ci/processable_spec.rb'
+ - 'spec/models/ci/project_mirror_spec.rb'
+ - 'spec/models/ci/ref_spec.rb'
+ - 'spec/models/ci/resource_group_spec.rb'
+ - 'spec/models/ci/resource_spec.rb'
+ - 'spec/models/ci/runner_namespace_spec.rb'
+ - 'spec/models/ci/runner_project_spec.rb'
+ - 'spec/models/ci/secure_file_spec.rb'
+ - 'spec/models/ci/stage_spec.rb'
+ - 'spec/models/ci/trigger_request_spec.rb'
+ - 'spec/models/ci/trigger_spec.rb'
+ - 'spec/models/ci/unit_test_failure_spec.rb'
+ - 'spec/models/ci/unit_test_spec.rb'
+ - 'spec/models/ci/variable_spec.rb'
+ - 'spec/models/ci_platform_metric_spec.rb'
+ - 'spec/models/clusters/agent_spec.rb'
+ - 'spec/models/clusters/agent_token_spec.rb'
+ - 'spec/models/clusters/agents/activity_event_spec.rb'
+ - 'spec/models/clusters/agents/group_authorization_spec.rb'
+ - 'spec/models/clusters/agents/implicit_authorization_spec.rb'
+ - 'spec/models/clusters/agents/project_authorization_spec.rb'
+ - 'spec/models/clusters/applications/cert_manager_spec.rb'
+ - 'spec/models/clusters/applications/cilium_spec.rb'
+ - 'spec/models/clusters/applications/crossplane_spec.rb'
+ - 'spec/models/clusters/applications/helm_spec.rb'
+ - 'spec/models/clusters/applications/ingress_spec.rb'
+ - 'spec/models/clusters/applications/jupyter_spec.rb'
+ - 'spec/models/clusters/applications/knative_spec.rb'
+ - 'spec/models/clusters/applications/prometheus_spec.rb'
+ - 'spec/models/clusters/applications/runner_spec.rb'
+ - 'spec/models/clusters/cluster_enabled_grant_spec.rb'
+ - 'spec/models/clusters/cluster_spec.rb'
+ - 'spec/models/clusters/clusters_hierarchy_spec.rb'
+ - 'spec/models/clusters/group_spec.rb'
+ - 'spec/models/clusters/integrations/prometheus_spec.rb'
+ - 'spec/models/clusters/kubernetes_namespace_spec.rb'
+ - 'spec/models/clusters/platforms/kubernetes_spec.rb'
+ - 'spec/models/clusters/project_spec.rb'
+ - 'spec/models/clusters/providers/aws_spec.rb'
+ - 'spec/models/clusters/providers/gcp_spec.rb'
+ - 'spec/models/commit_collection_spec.rb'
+ - 'spec/models/commit_range_spec.rb'
+ - 'spec/models/commit_signatures/gpg_signature_spec.rb'
+ - 'spec/models/commit_signatures/x509_commit_signature_spec.rb'
+ - 'spec/models/commit_spec.rb'
+ - 'spec/models/commit_status_spec.rb'
+ - 'spec/models/compare_spec.rb'
+ - 'spec/models/concerns/access_requestable_spec.rb'
+ - 'spec/models/concerns/after_commit_queue_spec.rb'
+ - 'spec/models/concerns/approvable_spec.rb'
+ - 'spec/models/concerns/as_cte_spec.rb'
+ - 'spec/models/concerns/atomic_internal_id_spec.rb'
+ - 'spec/models/concerns/avatarable_spec.rb'
+ - 'spec/models/concerns/awardable_spec.rb'
+ - 'spec/models/concerns/awareness_spec.rb'
+ - 'spec/models/concerns/batch_destroy_dependent_associations_spec.rb'
+ - 'spec/models/concerns/batch_nullify_dependent_associations_spec.rb'
+ - 'spec/models/concerns/blob_language_from_git_attributes_spec.rb'
+ - 'spec/models/concerns/blocks_unsafe_serialization_spec.rb'
+ - 'spec/models/concerns/bulk_insert_safe_spec.rb'
+ - 'spec/models/concerns/bulk_insertable_associations_spec.rb'
+ - 'spec/models/concerns/cache_markdown_field_spec.rb'
+ - 'spec/models/concerns/cacheable_attributes_spec.rb'
+ - 'spec/models/concerns/case_sensitivity_spec.rb'
+ - 'spec/models/concerns/checksummable_spec.rb'
+ - 'spec/models/concerns/chronic_duration_attribute_spec.rb'
+ - 'spec/models/concerns/ci/artifactable_spec.rb'
+ - 'spec/models/concerns/ci/bulk_insertable_tags_spec.rb'
+ - 'spec/models/concerns/ci/has_ref_spec.rb'
+ - 'spec/models/concerns/ci/has_status_spec.rb'
+ - 'spec/models/concerns/ci/has_variable_spec.rb'
+ - 'spec/models/concerns/ci/maskable_spec.rb'
+ - 'spec/models/concerns/ci/partitionable/switch_spec.rb'
+ - 'spec/models/concerns/ci/partitionable_spec.rb'
+ - 'spec/models/concerns/ci/track_environment_usage_spec.rb'
+ - 'spec/models/concerns/clusters/agents/authorization_config_scopes_spec.rb'
+ - 'spec/models/concerns/commit_signature_spec.rb'
+ - 'spec/models/concerns/counter_attribute_spec.rb'
+ - 'spec/models/concerns/cron_schedulable_spec.rb'
+ - 'spec/models/concerns/cross_database_modification_spec.rb'
+ - 'spec/models/concerns/database_event_tracking_spec.rb'
+ - 'spec/models/concerns/database_reflection_spec.rb'
+ - 'spec/models/concerns/delete_with_limit_spec.rb'
+ - 'spec/models/concerns/deployment_platform_spec.rb'
+ - 'spec/models/concerns/deprecated_assignee_spec.rb'
+ - 'spec/models/concerns/discussion_on_diff_spec.rb'
+ - 'spec/models/concerns/each_batch_spec.rb'
+ - 'spec/models/concerns/editable_spec.rb'
+ - 'spec/models/concerns/encrypted_user_password_spec.rb'
+ - 'spec/models/concerns/expirable_spec.rb'
+ - 'spec/models/concerns/faster_cache_keys_spec.rb'
+ - 'spec/models/concerns/featurable_spec.rb'
+ - 'spec/models/concerns/feature_gate_spec.rb'
+ - 'spec/models/concerns/file_store_mounter_spec.rb'
+ - 'spec/models/concerns/from_except_spec.rb'
+ - 'spec/models/concerns/from_intersect_spec.rb'
+ - 'spec/models/concerns/from_set_operator_spec.rb'
+ - 'spec/models/concerns/from_union_spec.rb'
+ - 'spec/models/concerns/group_descendant_spec.rb'
+ - 'spec/models/concerns/has_environment_scope_spec.rb'
+ - 'spec/models/concerns/has_user_type_spec.rb'
+ - 'spec/models/concerns/id_in_ordered_spec.rb'
+ - 'spec/models/concerns/ignorable_columns_spec.rb'
+ - 'spec/models/concerns/integrations/enable_ssl_verification_spec.rb'
+ - 'spec/models/concerns/integrations/has_data_fields_spec.rb'
+ - 'spec/models/concerns/integrations/has_web_hook_spec.rb'
+ - 'spec/models/concerns/integrations/reset_secret_fields_spec.rb'
+ - 'spec/models/concerns/issuable_link_spec.rb'
+ - 'spec/models/concerns/issuable_spec.rb'
+ - 'spec/models/concerns/legacy_bulk_insert_spec.rb'
+ - 'spec/models/concerns/limitable_spec.rb'
+ - 'spec/models/concerns/loaded_in_group_list_spec.rb'
+ - 'spec/models/concerns/loose_index_scan_spec.rb'
+ - 'spec/models/concerns/manual_inverse_association_spec.rb'
+ - 'spec/models/concerns/mentionable_spec.rb'
+ - 'spec/models/concerns/milestoneable_spec.rb'
+ - 'spec/models/concerns/milestoneish_spec.rb'
+ - 'spec/models/concerns/noteable_spec.rb'
+ - 'spec/models/concerns/nullify_if_blank_spec.rb'
+ - 'spec/models/concerns/optionally_search_spec.rb'
+ - 'spec/models/concerns/participable_spec.rb'
+ - 'spec/models/concerns/partitioned_table_spec.rb'
+ - 'spec/models/concerns/pg_full_text_searchable_spec.rb'
+ - 'spec/models/concerns/presentable_spec.rb'
+ - 'spec/models/concerns/project_api_compatibility_spec.rb'
+ - 'spec/models/concerns/project_features_compatibility_spec.rb'
+ - 'spec/models/concerns/prometheus_adapter_spec.rb'
+ - 'spec/models/concerns/protected_ref_access_spec.rb'
+ - 'spec/models/concerns/reactive_caching_spec.rb'
+ - 'spec/models/concerns/redactable_spec.rb'
+ - 'spec/models/concerns/redis_cacheable_spec.rb'
+ - 'spec/models/concerns/require_email_verification_spec.rb'
+ - 'spec/models/concerns/resolvable_discussion_spec.rb'
+ - 'spec/models/concerns/resolvable_note_spec.rb'
+ - 'spec/models/concerns/routable_spec.rb'
+ - 'spec/models/concerns/runners_token_prefixable_spec.rb'
+ - 'spec/models/concerns/safe_url_spec.rb'
+ - 'spec/models/concerns/sanitizable_spec.rb'
+ - 'spec/models/concerns/schedulable_spec.rb'
+ - 'spec/models/concerns/sensitive_serializable_hash_spec.rb'
+ - 'spec/models/concerns/sha_attribute_spec.rb'
+ - 'spec/models/concerns/signature_type_spec.rb'
+ - 'spec/models/concerns/sortable_spec.rb'
+ - 'spec/models/concerns/spammable_spec.rb'
+ - 'spec/models/concerns/stepable_spec.rb'
+ - 'spec/models/concerns/strip_attribute_spec.rb'
+ - 'spec/models/concerns/subquery_spec.rb'
+ - 'spec/models/concerns/subscribable_spec.rb'
+ - 'spec/models/concerns/taggable_queries_spec.rb'
+ - 'spec/models/concerns/taskable_spec.rb'
+ - 'spec/models/concerns/token_authenticatable_spec.rb'
+ - 'spec/models/concerns/token_authenticatable_strategies/base_spec.rb'
+ - 'spec/models/concerns/token_authenticatable_strategies/digest_spec.rb'
+ - 'spec/models/concerns/token_authenticatable_strategies/encrypted_spec.rb'
+ - 'spec/models/concerns/token_authenticatable_strategies/encryption_helper_spec.rb'
+ - 'spec/models/concerns/transactions_spec.rb'
+ - 'spec/models/concerns/triggerable_hooks_spec.rb'
+ - 'spec/models/concerns/uniquify_spec.rb'
+ - 'spec/models/concerns/usage_statistics_spec.rb'
+ - 'spec/models/concerns/vulnerability_finding_helpers_spec.rb'
+ - 'spec/models/concerns/vulnerability_finding_signature_helpers_spec.rb'
+ - 'spec/models/concerns/where_composite_spec.rb'
+ - 'spec/models/concerns/x509_serial_number_attribute_spec.rb'
+ - 'spec/models/container_expiration_policy_spec.rb'
+ - 'spec/models/container_registry/event_spec.rb'
+ - 'spec/models/container_repository_spec.rb'
+ - 'spec/models/context_commits_diff_spec.rb'
+ - 'spec/models/custom_emoji_spec.rb'
+ - 'spec/models/customer_relations/contact_spec.rb'
+ - 'spec/models/customer_relations/contact_state_counts_spec.rb'
+ - 'spec/models/customer_relations/issue_contact_spec.rb'
+ - 'spec/models/customer_relations/organization_spec.rb'
+ - 'spec/models/cycle_analytics/project_level_stage_adapter_spec.rb'
+ - 'spec/models/data_list_spec.rb'
+ - 'spec/models/dependency_proxy/blob_spec.rb'
+ - 'spec/models/dependency_proxy/group_setting_spec.rb'
+ - 'spec/models/dependency_proxy/image_ttl_group_policy_spec.rb'
+ - 'spec/models/dependency_proxy/manifest_spec.rb'
+ - 'spec/models/dependency_proxy/registry_spec.rb'
+ - 'spec/models/deploy_key_spec.rb'
+ - 'spec/models/deploy_keys_project_spec.rb'
+ - 'spec/models/deployment_cluster_spec.rb'
+ - 'spec/models/deployment_merge_request_spec.rb'
+ - 'spec/models/deployment_metrics_spec.rb'
+ - 'spec/models/deployment_spec.rb'
+ - 'spec/models/description_version_spec.rb'
+ - 'spec/models/design_management/action_spec.rb'
+ - 'spec/models/design_management/design_action_spec.rb'
+ - 'spec/models/design_management/design_at_version_spec.rb'
+ - 'spec/models/design_management/design_collection_spec.rb'
+ - 'spec/models/design_management/design_spec.rb'
+ - 'spec/models/design_management/repository_spec.rb'
+ - 'spec/models/design_management/version_spec.rb'
+ - 'spec/models/design_user_mention_spec.rb'
+ - 'spec/models/dev_ops_report/metric_spec.rb'
+ - 'spec/models/diff_discussion_spec.rb'
+ - 'spec/models/diff_note_position_spec.rb'
+ - 'spec/models/diff_note_spec.rb'
+ - 'spec/models/diff_viewer/base_spec.rb'
+ - 'spec/models/diff_viewer/image_spec.rb'
+ - 'spec/models/diff_viewer/server_side_spec.rb'
+ - 'spec/models/discussion_note_spec.rb'
+ - 'spec/models/discussion_spec.rb'
+ - 'spec/models/draft_note_spec.rb'
+ - 'spec/models/email_spec.rb'
+ - 'spec/models/environment_status_spec.rb'
+ - 'spec/models/error_tracking/client_key_spec.rb'
+ - 'spec/models/error_tracking/error_event_spec.rb'
+ - 'spec/models/error_tracking/error_spec.rb'
+ - 'spec/models/error_tracking/project_error_tracking_setting_spec.rb'
+ - 'spec/models/event_collection_spec.rb'
+ - 'spec/models/exported_protected_branch_spec.rb'
+ - 'spec/models/external_issue_spec.rb'
+ - 'spec/models/external_pull_request_spec.rb'
+ - 'spec/models/fork_network_member_spec.rb'
+ - 'spec/models/fork_network_spec.rb'
+ - 'spec/models/generic_commit_status_spec.rb'
+ - 'spec/models/gpg_key_spec.rb'
+ - 'spec/models/gpg_key_subkey_spec.rb'
+ - 'spec/models/grafana_integration_spec.rb'
+ - 'spec/models/group/crm_settings_spec.rb'
+ - 'spec/models/group_custom_attribute_spec.rb'
+ - 'spec/models/group_deploy_key_spec.rb'
+ - 'spec/models/group_deploy_keys_group_spec.rb'
+ - 'spec/models/group_deploy_token_spec.rb'
+ - 'spec/models/group_group_link_spec.rb'
+ - 'spec/models/group_import_state_spec.rb'
+ - 'spec/models/group_label_spec.rb'
+ - 'spec/models/groups/feature_setting_spec.rb'
+ - 'spec/models/guest_spec.rb'
+ - 'spec/models/hooks/active_hook_filter_spec.rb'
+ - 'spec/models/hooks/project_hook_spec.rb'
+ - 'spec/models/hooks/service_hook_spec.rb'
+ - 'spec/models/hooks/system_hook_spec.rb'
+ - 'spec/models/hooks/web_hook_log_spec.rb'
+ - 'spec/models/identity_spec.rb'
+ - 'spec/models/import_export_upload_spec.rb'
+ - 'spec/models/import_failure_spec.rb'
+ - 'spec/models/incident_management/issuable_escalation_status_spec.rb'
+ - 'spec/models/incident_management/project_incident_management_setting_spec.rb'
+ - 'spec/models/incident_management/timeline_event_spec.rb'
+ - 'spec/models/incident_management/timeline_event_tag_link_spec.rb'
+ - 'spec/models/incident_management/timeline_event_tag_spec.rb'
+ - 'spec/models/instance_configuration_spec.rb'
+ - 'spec/models/instance_metadata/kas_spec.rb'
+ - 'spec/models/instance_metadata_spec.rb'
+ - 'spec/models/integration_spec.rb'
+ - 'spec/models/integrations/asana_spec.rb'
+ - 'spec/models/integrations/assembla_spec.rb'
+ - 'spec/models/integrations/bamboo_spec.rb'
+ - 'spec/models/integrations/base_issue_tracker_spec.rb'
+ - 'spec/models/integrations/base_slack_notification_spec.rb'
+ - 'spec/models/integrations/base_third_party_wiki_spec.rb'
+ - 'spec/models/integrations/bugzilla_spec.rb'
+ - 'spec/models/integrations/buildkite_spec.rb'
+ - 'spec/models/integrations/campfire_spec.rb'
+ - 'spec/models/integrations/chat_message/alert_message_spec.rb'
+ - 'spec/models/integrations/chat_message/base_message_spec.rb'
+ - 'spec/models/integrations/chat_message/deployment_message_spec.rb'
+ - 'spec/models/integrations/chat_message/issue_message_spec.rb'
+ - 'spec/models/integrations/chat_message/merge_message_spec.rb'
+ - 'spec/models/integrations/chat_message/note_message_spec.rb'
+ - 'spec/models/integrations/chat_message/pipeline_message_spec.rb'
+ - 'spec/models/integrations/chat_message/push_message_spec.rb'
+ - 'spec/models/integrations/chat_message/wiki_page_message_spec.rb'
+ - 'spec/models/integrations/confluence_spec.rb'
+ - 'spec/models/integrations/custom_issue_tracker_spec.rb'
+ - 'spec/models/integrations/datadog_spec.rb'
+ - 'spec/models/integrations/discord_spec.rb'
+ - 'spec/models/integrations/drone_ci_spec.rb'
+ - 'spec/models/integrations/emails_on_push_spec.rb'
+ - 'spec/models/integrations/every_integration_spec.rb'
+ - 'spec/models/integrations/ewm_spec.rb'
+ - 'spec/models/integrations/external_wiki_spec.rb'
+ - 'spec/models/integrations/field_spec.rb'
+ - 'spec/models/integrations/hangouts_chat_spec.rb'
+ - 'spec/models/integrations/harbor_spec.rb'
+ - 'spec/models/integrations/irker_spec.rb'
+ - 'spec/models/integrations/issue_tracker_data_spec.rb'
+ - 'spec/models/integrations/jenkins_spec.rb'
+ - 'spec/models/integrations/jira_spec.rb'
+ - 'spec/models/integrations/jira_tracker_data_spec.rb'
+ - 'spec/models/integrations/mattermost_slash_commands_spec.rb'
+ - 'spec/models/integrations/mattermost_spec.rb'
+ - 'spec/models/integrations/microsoft_teams_spec.rb'
+ - 'spec/models/integrations/mock_ci_spec.rb'
+ - 'spec/models/integrations/packagist_spec.rb'
+ - 'spec/models/integrations/pipelines_email_spec.rb'
+ - 'spec/models/integrations/pivotaltracker_spec.rb'
+ - 'spec/models/integrations/prometheus_spec.rb'
+ - 'spec/models/integrations/pumble_spec.rb'
+ - 'spec/models/integrations/pushover_spec.rb'
+ - 'spec/models/integrations/redmine_spec.rb'
+ - 'spec/models/integrations/shimo_spec.rb'
+ - 'spec/models/integrations/slack_slash_commands_spec.rb'
+ - 'spec/models/integrations/slack_spec.rb'
+ - 'spec/models/integrations/teamcity_spec.rb'
+ - 'spec/models/integrations/unify_circuit_spec.rb'
+ - 'spec/models/integrations/webex_teams_spec.rb'
+ - 'spec/models/integrations/youtrack_spec.rb'
+ - 'spec/models/integrations/zentao_spec.rb'
+ - 'spec/models/integrations/zentao_tracker_data_spec.rb'
+ - 'spec/models/internal_id_spec.rb'
+ - 'spec/models/issuable_severity_spec.rb'
+ - 'spec/models/issue/email_spec.rb'
+ - 'spec/models/issue/metrics_spec.rb'
+ - 'spec/models/issue_assignee_spec.rb'
+ - 'spec/models/issue_email_participant_spec.rb'
+ - 'spec/models/issue_link_spec.rb'
+ - 'spec/models/issues/csv_import_spec.rb'
+ - 'spec/models/jira_connect/public_key_spec.rb'
+ - 'spec/models/jira_connect_subscription_spec.rb'
+ - 'spec/models/key_spec.rb'
+ - 'spec/models/label_link_spec.rb'
+ - 'spec/models/label_note_spec.rb'
+ - 'spec/models/label_priority_spec.rb'
+ - 'spec/models/label_spec.rb'
+ - 'spec/models/legacy_diff_discussion_spec.rb'
+ - 'spec/models/legacy_diff_note_spec.rb'
+ - 'spec/models/lfs_download_object_spec.rb'
+ - 'spec/models/lfs_file_lock_spec.rb'
+ - 'spec/models/lfs_object_spec.rb'
+ - 'spec/models/lfs_objects_project_spec.rb'
+ - 'spec/models/license_template_spec.rb'
+ - 'spec/models/list_spec.rb'
+ - 'spec/models/list_user_preference_spec.rb'
+ - 'spec/models/loose_foreign_keys/deleted_record_spec.rb'
+ - 'spec/models/loose_foreign_keys/modification_tracker_spec.rb'
+ - 'spec/models/member_spec.rb'
+ - 'spec/models/members/group_member_spec.rb'
+ - 'spec/models/members/last_group_owner_assigner_spec.rb'
+ - 'spec/models/members/member_task_spec.rb'
+ - 'spec/models/members/project_member_spec.rb'
+ - 'spec/models/merge_request/approval_removal_settings_spec.rb'
+ - 'spec/models/merge_request/cleanup_schedule_spec.rb'
+ - 'spec/models/merge_request/diff_commit_user_spec.rb'
+ - 'spec/models/merge_request/metrics_spec.rb'
+ - 'spec/models/merge_request_assignee_spec.rb'
+ - 'spec/models/merge_request_context_commit_diff_file_spec.rb'
+ - 'spec/models/merge_request_context_commit_spec.rb'
+ - 'spec/models/merge_request_diff_commit_spec.rb'
+ - 'spec/models/merge_request_diff_file_spec.rb'
+ - 'spec/models/merge_request_reviewer_spec.rb'
+ - 'spec/models/metrics/dashboard/annotation_spec.rb'
+ - 'spec/models/metrics/users_starred_dashboard_spec.rb'
+ - 'spec/models/milestone_note_spec.rb'
+ - 'spec/models/milestone_release_spec.rb'
+ - 'spec/models/milestone_spec.rb'
+ - 'spec/models/ml/candidate_metric_spec.rb'
+ - 'spec/models/ml/candidate_param_spec.rb'
+ - 'spec/models/ml/candidate_spec.rb'
+ - 'spec/models/ml/experiment_spec.rb'
+ - 'spec/models/namespace/admin_note_spec.rb'
+ - 'spec/models/namespace/aggregation_schedule_spec.rb'
+ - 'spec/models/namespace/detail_spec.rb'
+ - 'spec/models/namespace/package_setting_spec.rb'
+ - 'spec/models/namespace/root_storage_statistics_spec.rb'
+ - 'spec/models/namespace/traversal_hierarchy_spec.rb'
+ - 'spec/models/namespace_ci_cd_setting_spec.rb'
+ - 'spec/models/namespace_spec.rb'
+ - 'spec/models/namespace_statistics_spec.rb'
+ - 'spec/models/namespaces/project_namespace_spec.rb'
+ - 'spec/models/namespaces/sync_event_spec.rb'
+ - 'spec/models/namespaces/user_namespace_spec.rb'
+ - 'spec/models/network/graph_spec.rb'
+ - 'spec/models/note_diff_file_spec.rb'
+ - 'spec/models/note_spec.rb'
+ - 'spec/models/notification_setting_spec.rb'
+ - 'spec/models/oauth_access_grant_spec.rb'
+ - 'spec/models/oauth_access_token_spec.rb'
+ - 'spec/models/onboarding/completion_spec.rb'
+ - 'spec/models/onboarding/learn_gitlab_spec.rb'
+ - 'spec/models/onboarding/progress_spec.rb'
+ - 'spec/models/operations/feature_flag_spec.rb'
+ - 'spec/models/operations/feature_flags/strategy_spec.rb'
+ - 'spec/models/operations/feature_flags/user_list_spec.rb'
+ - 'spec/models/operations/feature_flags_client_spec.rb'
+ - 'spec/models/packages/build_info_spec.rb'
+ - 'spec/models/packages/cleanup/policy_spec.rb'
+ - 'spec/models/packages/composer/cache_file_spec.rb'
+ - 'spec/models/packages/composer/metadatum_spec.rb'
+ - 'spec/models/packages/conan/file_metadatum_spec.rb'
+ - 'spec/models/packages/conan/metadatum_spec.rb'
+ - 'spec/models/packages/debian/file_entry_spec.rb'
+ - 'spec/models/packages/debian/file_metadatum_spec.rb'
+ - 'spec/models/packages/debian/group_architecture_spec.rb'
+ - 'spec/models/packages/debian/group_component_file_spec.rb'
+ - 'spec/models/packages/debian/group_component_spec.rb'
+ - 'spec/models/packages/debian/group_distribution_key_spec.rb'
+ - 'spec/models/packages/debian/group_distribution_spec.rb'
+ - 'spec/models/packages/debian/project_architecture_spec.rb'
+ - 'spec/models/packages/debian/project_component_file_spec.rb'
+ - 'spec/models/packages/debian/project_component_spec.rb'
+ - 'spec/models/packages/debian/project_distribution_key_spec.rb'
+ - 'spec/models/packages/debian/project_distribution_spec.rb'
+ - 'spec/models/packages/debian/publication_spec.rb'
+ - 'spec/models/packages/dependency_link_spec.rb'
+ - 'spec/models/packages/dependency_spec.rb'
+ - 'spec/models/packages/go/module_spec.rb'
+ - 'spec/models/packages/go/module_version_spec.rb'
+ - 'spec/models/packages/helm/file_metadatum_spec.rb'
+ - 'spec/models/packages/maven/metadatum_spec.rb'
+ - 'spec/models/packages/npm/metadatum_spec.rb'
+ - 'spec/models/packages/npm_spec.rb'
+ - 'spec/models/packages/nuget/dependency_link_metadatum_spec.rb'
+ - 'spec/models/packages/nuget/metadatum_spec.rb'
+ - 'spec/models/packages/package_file_build_info_spec.rb'
+ - 'spec/models/packages/package_file_spec.rb'
+ - 'spec/models/packages/pypi/metadatum_spec.rb'
+ - 'spec/models/packages/rpm/metadatum_spec.rb'
+ - 'spec/models/packages/rubygems/metadatum_spec.rb'
+ - 'spec/models/packages/sem_ver_spec.rb'
+ - 'spec/models/packages/tag_spec.rb'
+ - 'spec/models/pages/virtual_domain_spec.rb'
+ - 'spec/models/pages_domain_acme_order_spec.rb'
+ - 'spec/models/pages_domain_spec.rb'
+ - 'spec/models/performance_monitoring/prometheus_dashboard_spec.rb'
+ - 'spec/models/performance_monitoring/prometheus_metric_spec.rb'
+ - 'spec/models/performance_monitoring/prometheus_panel_group_spec.rb'
+ - 'spec/models/performance_monitoring/prometheus_panel_spec.rb'
+ - 'spec/models/personal_snippet_spec.rb'
+ - 'spec/models/plan_limits_spec.rb'
+ - 'spec/models/plan_spec.rb'
+ - 'spec/models/pool_repository_spec.rb'
+ - 'spec/models/postgresql/detached_partition_spec.rb'
+ - 'spec/models/postgresql/replication_slot_spec.rb'
+ - 'spec/models/preloaders/commit_status_preloader_spec.rb'
+ - 'spec/models/preloaders/environments/deployment_preloader_spec.rb'
+ - 'spec/models/preloaders/group_policy_preloader_spec.rb'
+ - 'spec/models/preloaders/group_root_ancestor_preloader_spec.rb'
+ - 'spec/models/preloaders/labels_preloader_spec.rb'
+ - 'spec/models/preloaders/merge_request_diff_preloader_spec.rb'
+ - 'spec/models/preloaders/project_policy_preloader_spec.rb'
+ - 'spec/models/preloaders/project_root_ancestor_preloader_spec.rb'
+ - 'spec/models/preloaders/user_max_access_level_in_groups_preloader_spec.rb'
+ - 'spec/models/preloaders/user_max_access_level_in_projects_preloader_spec.rb'
+ - 'spec/models/preloaders/users_max_access_level_in_projects_preloader_spec.rb'
+ - 'spec/models/product_analytics_event_spec.rb'
+ - 'spec/models/programming_language_spec.rb'
+ - 'spec/models/project_authorization_spec.rb'
+ - 'spec/models/project_auto_devops_spec.rb'
+ - 'spec/models/project_ci_cd_setting_spec.rb'
+ - 'spec/models/project_custom_attribute_spec.rb'
+ - 'spec/models/project_daily_statistic_spec.rb'
+ - 'spec/models/project_deploy_token_spec.rb'
+ - 'spec/models/project_feature_spec.rb'
+ - 'spec/models/project_feature_usage_spec.rb'
+ - 'spec/models/project_group_link_spec.rb'
+ - 'spec/models/project_import_data_spec.rb'
+ - 'spec/models/project_label_spec.rb'
+ - 'spec/models/project_metrics_setting_spec.rb'
+ - 'spec/models/project_pages_metadatum_spec.rb'
+ - 'spec/models/project_repository_spec.rb'
+ - 'spec/models/project_setting_spec.rb'
+ - 'spec/models/project_snippet_spec.rb'
+ - 'spec/models/project_statistics_spec.rb'
+ - 'spec/models/project_team_spec.rb'
+ - 'spec/models/project_wiki_spec.rb'
+ - 'spec/models/projects/build_artifacts_size_refresh_spec.rb'
+ - 'spec/models/projects/ci_feature_usage_spec.rb'
+ - 'spec/models/projects/import_export/relation_export_spec.rb'
+ - 'spec/models/projects/import_export/relation_export_upload_spec.rb'
+ - 'spec/models/projects/project_topic_spec.rb'
+ - 'spec/models/projects/repository_storage_move_spec.rb'
+ - 'spec/models/projects/topic_spec.rb'
+ - 'spec/models/projects/triggered_hooks_spec.rb'
+ - 'spec/models/projects/wiki_repository_spec.rb'
+ - 'spec/models/prometheus_alert_event_spec.rb'
+ - 'spec/models/prometheus_alert_spec.rb'
+ - 'spec/models/prometheus_metric_spec.rb'
+ - 'spec/models/protectable_dropdown_spec.rb'
+ - 'spec/models/protected_branch/merge_access_level_spec.rb'
+ - 'spec/models/protected_branch/push_access_level_spec.rb'
+ - 'spec/models/protected_branch_spec.rb'
+ - 'spec/models/protected_tag_spec.rb'
+ - 'spec/models/push_event_payload_spec.rb'
+ - 'spec/models/push_event_spec.rb'
+ - 'spec/models/raw_usage_data_spec.rb'
+ - 'spec/models/redirect_route_spec.rb'
+ - 'spec/models/ref_matcher_spec.rb'
+ - 'spec/models/release_spec.rb'
+ - 'spec/models/releases/evidence_spec.rb'
+ - 'spec/models/releases/link_spec.rb'
+ - 'spec/models/releases/source_spec.rb'
+ - 'spec/models/remote_mirror_spec.rb'
+ - 'spec/models/repository_language_spec.rb'
+ - 'spec/models/review_spec.rb'
+ - 'spec/models/route_spec.rb'
+ - 'spec/models/sent_notification_spec.rb'
+ - 'spec/models/sentry_issue_spec.rb'
+ - 'spec/models/serverless/domain_cluster_spec.rb'
+ - 'spec/models/serverless/domain_spec.rb'
+ - 'spec/models/serverless/function_spec.rb'
+ - 'spec/models/service_desk_setting_spec.rb'
+ - 'spec/models/shard_spec.rb'
+ - 'spec/models/snippet_blob_spec.rb'
+ - 'spec/models/snippet_input_action_collection_spec.rb'
+ - 'spec/models/snippet_input_action_spec.rb'
+ - 'spec/models/snippet_repository_spec.rb'
+ - 'spec/models/snippet_spec.rb'
+ - 'spec/models/snippet_statistics_spec.rb'
+ - 'spec/models/snippets/repository_storage_move_spec.rb'
+ - 'spec/models/spam_log_spec.rb'
+ - 'spec/models/ssh_host_key_spec.rb'
+ - 'spec/models/state_note_spec.rb'
+ - 'spec/models/subscription_spec.rb'
+ - 'spec/models/suggestion_spec.rb'
+ - 'spec/models/synthetic_note_spec.rb'
+ - 'spec/models/system_note_metadata_spec.rb'
+ - 'spec/models/term_agreement_spec.rb'
+ - 'spec/models/terraform/state_spec.rb'
+ - 'spec/models/terraform/state_version_spec.rb'
+ - 'spec/models/time_tracking/timelog_category_spec.rb'
+ - 'spec/models/todo_spec.rb'
+ - 'spec/models/token_with_iv_spec.rb'
+ - 'spec/models/tree_spec.rb'
+ - 'spec/models/trending_project_spec.rb'
+ - 'spec/models/u2f_registration_spec.rb'
+ - 'spec/models/upload_spec.rb'
+ - 'spec/models/uploads/fog_spec.rb'
+ - 'spec/models/uploads/local_spec.rb'
+ - 'spec/models/user_agent_detail_spec.rb'
+ - 'spec/models/user_canonical_email_spec.rb'
+ - 'spec/models/user_custom_attribute_spec.rb'
+ - 'spec/models/user_detail_spec.rb'
+ - 'spec/models/user_highest_role_spec.rb'
+ - 'spec/models/user_interacted_project_spec.rb'
+ - 'spec/models/user_mentions/commit_user_mention_spec.rb'
+ - 'spec/models/user_mentions/issue_user_mention_spec.rb'
+ - 'spec/models/user_mentions/merge_request_user_mention_spec.rb'
+ - 'spec/models/user_mentions/snippet_user_mention_spec.rb'
+ - 'spec/models/user_preference_spec.rb'
+ - 'spec/models/user_status_spec.rb'
+ - 'spec/models/users/banned_user_spec.rb'
+ - 'spec/models/users/callout_spec.rb'
+ - 'spec/models/users/calloutable_spec.rb'
+ - 'spec/models/users/credit_card_validation_spec.rb'
+ - 'spec/models/users/ghost_user_migration_spec.rb'
+ - 'spec/models/users/group_callout_spec.rb'
+ - 'spec/models/users/in_product_marketing_email_spec.rb'
+ - 'spec/models/users/merge_request_interaction_spec.rb'
+ - 'spec/models/users/phone_number_validation_spec.rb'
+ - 'spec/models/users/project_callout_spec.rb'
+ - 'spec/models/users/saved_reply_spec.rb'
+ - 'spec/models/users_star_project_spec.rb'
+ - 'spec/models/users_statistics_spec.rb'
+ - 'spec/models/web_ide_terminal_spec.rb'
+ - 'spec/models/webauthn_registration_spec.rb'
+ - 'spec/models/wiki_directory_spec.rb'
+ - 'spec/models/wiki_page/meta_spec.rb'
+ - 'spec/models/wiki_page/slug_spec.rb'
+ - 'spec/models/wiki_page_spec.rb'
+ - 'spec/models/work_items/hierarchy_restriction_spec.rb'
+ - 'spec/models/work_items/type_spec.rb'
+ - 'spec/models/work_items/widgets/assignees_spec.rb'
+ - 'spec/models/work_items/widgets/base_spec.rb'
+ - 'spec/models/work_items/widgets/description_spec.rb'
+ - 'spec/models/work_items/widgets/labels_spec.rb'
+ - 'spec/models/work_items/widgets/milestone_spec.rb'
+ - 'spec/models/work_items/widgets/start_and_due_date_spec.rb'
+ - 'spec/models/x509_certificate_spec.rb'
+ - 'spec/models/x509_issuer_spec.rb'
+ - 'spec/models/zoom_meeting_spec.rb'
+ - 'spec/policies/alert_management/alert_policy_spec.rb'
+ - 'spec/policies/alert_management/http_integration_policy_spec.rb'
+ - 'spec/policies/application_setting/term_policy_spec.rb'
+ - 'spec/policies/application_setting_policy_spec.rb'
+ - 'spec/policies/award_emoji_policy_spec.rb'
+ - 'spec/policies/base_policy_spec.rb'
+ - 'spec/policies/blob_policy_spec.rb'
+ - 'spec/policies/board_policy_spec.rb'
+ - 'spec/policies/ci/bridge_policy_spec.rb'
+ - 'spec/policies/ci/build_policy_spec.rb'
+ - 'spec/policies/ci/pipeline_policy_spec.rb'
+ - 'spec/policies/ci/pipeline_schedule_policy_spec.rb'
+ - 'spec/policies/ci/trigger_policy_spec.rb'
+ - 'spec/policies/clusters/agent_policy_spec.rb'
+ - 'spec/policies/clusters/agent_token_policy_spec.rb'
+ - 'spec/policies/clusters/agents/activity_event_policy_spec.rb'
+ - 'spec/policies/clusters/cluster_policy_spec.rb'
+ - 'spec/policies/clusters/instance_policy_spec.rb'
+ - 'spec/policies/commit_policy_spec.rb'
+ - 'spec/policies/concerns/crud_policy_helpers_spec.rb'
+ - 'spec/policies/concerns/policy_actor_spec.rb'
+ - 'spec/policies/container_expiration_policy_policy_spec.rb'
+ - 'spec/policies/custom_emoji_policy_spec.rb'
+ - 'spec/policies/deploy_key_policy_spec.rb'
+ - 'spec/policies/deploy_keys_project_policy_spec.rb'
+ - 'spec/policies/deploy_token_policy_spec.rb'
+ - 'spec/policies/design_management/design_policy_spec.rb'
+ - 'spec/policies/environment_policy_spec.rb'
+ - 'spec/policies/group_deploy_key_policy_spec.rb'
+ - 'spec/policies/group_deploy_keys_group_policy_spec.rb'
+ - 'spec/policies/group_member_policy_spec.rb'
+ - 'spec/policies/group_policy_spec.rb'
+ - 'spec/policies/identity_provider_policy_spec.rb'
+ - 'spec/policies/incident_management/timeline_event_policy_spec.rb'
+ - 'spec/policies/instance_metadata_policy_spec.rb'
+ - 'spec/policies/integration_policy_spec.rb'
+ - 'spec/policies/issuable_policy_spec.rb'
+ - 'spec/policies/merge_request_policy_spec.rb'
+ - 'spec/policies/metrics/dashboard/annotation_policy_spec.rb'
+ - 'spec/policies/namespace/root_storage_statistics_policy_spec.rb'
+ - 'spec/policies/namespaces/project_namespace_policy_spec.rb'
+ - 'spec/policies/namespaces/user_namespace_policy_spec.rb'
+ - 'spec/policies/packages/package_policy_spec.rb'
+ - 'spec/policies/packages/policies/group_policy_spec.rb'
+ - 'spec/policies/packages/policies/project_policy_spec.rb'
+ - 'spec/policies/personal_access_token_policy_spec.rb'
+ - 'spec/policies/personal_snippet_policy_spec.rb'
+ - 'spec/policies/project_hook_policy_spec.rb'
+ - 'spec/policies/project_member_policy_spec.rb'
+ - 'spec/policies/project_snippet_policy_spec.rb'
+ - 'spec/policies/project_statistics_policy_spec.rb'
+ - 'spec/policies/protected_branch_access_policy_spec.rb'
+ - 'spec/policies/protected_branch_policy_spec.rb'
+ - 'spec/policies/release_policy_spec.rb'
+ - 'spec/policies/system_hook_policy_spec.rb'
+ - 'spec/policies/terraform/state_policy_spec.rb'
+ - 'spec/policies/terraform/state_version_policy_spec.rb'
+ - 'spec/policies/timelog_policy_spec.rb'
+ - 'spec/policies/upload_policy_spec.rb'
+ - 'spec/policies/user_policy_spec.rb'
+ - 'spec/policies/wiki_page_policy_spec.rb'
+ - 'spec/policies/work_item_policy_spec.rb'
+ - 'spec/presenters/alert_management/alert_presenter_spec.rb'
+ - 'spec/presenters/award_emoji_presenter_spec.rb'
+ - 'spec/presenters/blob_presenter_spec.rb'
+ - 'spec/presenters/blobs/notebook_presenter_spec.rb'
+ - 'spec/presenters/blobs/unfold_presenter_spec.rb'
+ - 'spec/presenters/ci/bridge_presenter_spec.rb'
+ - 'spec/presenters/ci/build_presenter_spec.rb'
+ - 'spec/presenters/ci/build_runner_presenter_spec.rb'
+ - 'spec/presenters/ci/group_variable_presenter_spec.rb'
+ - 'spec/presenters/ci/pipeline_artifacts/code_coverage_presenter_spec.rb'
+ - 'spec/presenters/ci/pipeline_artifacts/code_quality_mr_diff_presenter_spec.rb'
+ - 'spec/presenters/ci/pipeline_presenter_spec.rb'
+ - 'spec/presenters/ci/stage_presenter_spec.rb'
+ - 'spec/presenters/ci/trigger_presenter_spec.rb'
+ - 'spec/presenters/ci/variable_presenter_spec.rb'
+ - 'spec/presenters/clusterable_presenter_spec.rb'
+ - 'spec/presenters/clusters/cluster_presenter_spec.rb'
+ - 'spec/presenters/commit_presenter_spec.rb'
+ - 'spec/presenters/commit_status_presenter_spec.rb'
+ - 'spec/presenters/deploy_key_presenter_spec.rb'
+ - 'spec/presenters/deployments/deployment_presenter_spec.rb'
+ - 'spec/presenters/dev_ops_report/metric_presenter_spec.rb'
+ - 'spec/presenters/event_presenter_spec.rb'
+ - 'spec/presenters/gitlab/blame_presenter_spec.rb'
+ - 'spec/presenters/group_clusterable_presenter_spec.rb'
+ - 'spec/presenters/group_member_presenter_spec.rb'
+ - 'spec/presenters/instance_clusterable_presenter_spec.rb'
+ - 'spec/presenters/issue_presenter_spec.rb'
+ - 'spec/presenters/key_presenter_spec.rb'
+ - 'spec/presenters/label_presenter_spec.rb'
+ - 'spec/presenters/merge_request_presenter_spec.rb'
+ - 'spec/presenters/milestone_presenter_spec.rb'
+ - 'spec/presenters/packages/composer/packages_presenter_spec.rb'
+ - 'spec/presenters/packages/conan/package_presenter_spec.rb'
+ - 'spec/presenters/packages/detail/package_presenter_spec.rb'
+ - 'spec/presenters/packages/helm/index_presenter_spec.rb'
+ - 'spec/presenters/packages/npm/package_presenter_spec.rb'
+ - 'spec/presenters/packages/nuget/package_metadata_presenter_spec.rb'
+ - 'spec/presenters/packages/nuget/packages_versions_presenter_spec.rb'
+ - 'spec/presenters/packages/nuget/search_results_presenter_spec.rb'
+ - 'spec/presenters/packages/nuget/service_index_presenter_spec.rb'
+ - 'spec/presenters/packages/pypi/simple_index_presenter_spec.rb'
+ - 'spec/presenters/packages/pypi/simple_package_versions_presenter_spec.rb'
+ - 'spec/presenters/pages_domain_presenter_spec.rb'
+ - 'spec/presenters/project_clusterable_presenter_spec.rb'
+ - 'spec/presenters/project_hook_presenter_spec.rb'
+ - 'spec/presenters/project_member_presenter_spec.rb'
+ - 'spec/presenters/project_presenter_spec.rb'
+ - 'spec/presenters/projects/import_export/project_export_presenter_spec.rb'
+ - 'spec/presenters/projects/security/configuration_presenter_spec.rb'
+ - 'spec/presenters/projects/settings/deploy_keys_presenter_spec.rb'
+ - 'spec/presenters/prometheus_alert_presenter_spec.rb'
+ - 'spec/presenters/release_presenter_spec.rb'
+ - 'spec/presenters/releases/link_presenter_spec.rb'
+ - 'spec/presenters/sentry_error_presenter_spec.rb'
+ - 'spec/presenters/service_hook_presenter_spec.rb'
+ - 'spec/presenters/snippet_blob_presenter_spec.rb'
+ - 'spec/presenters/snippet_presenter_spec.rb'
+ - 'spec/presenters/terraform/modules_presenter_spec.rb'
+ - 'spec/presenters/tree_entry_presenter_spec.rb'
+ - 'spec/presenters/user_presenter_spec.rb'
+ - 'spec/presenters/web_hook_log_presenter_spec.rb'
+ - 'spec/rack_servers/puma_spec.rb'
+ - 'spec/requests/api/admin/ci/variables_spec.rb'
+ - 'spec/requests/api/graphql/ci/runners_spec.rb'
+ - 'spec/requests/api/graphql/mutations/ci/pipeline_schedule_create_spec.rb'
+ - 'spec/requests/api/graphql/mutations/merge_requests/accept_spec.rb'
+ - 'spec/requests/api/graphql/mutations/merge_requests/set_labels_spec.rb'
+ - 'spec/requests/api/projects_spec.rb'
+ - 'spec/requests/api/resource_state_events_spec.rb'
+ - 'spec/requests/api/task_completion_status_spec.rb'
+ - 'spec/requests/groups/clusters/integrations_controller_spec.rb'
+ - 'spec/routing/admin_routing_spec.rb'
+ - 'spec/routing/environments_spec.rb'
+ - 'spec/routing/git_http_routing_spec.rb'
+ - 'spec/routing/group_routing_spec.rb'
+ - 'spec/routing/import_routing_spec.rb'
+ - 'spec/routing/notifications_routing_spec.rb'
+ - 'spec/routing/openid_connect_spec.rb'
+ - 'spec/routing/project_routing_spec.rb'
+ - 'spec/routing/projects/security/configuration_controller_routing_spec.rb'
+ - 'spec/routing/routing_spec.rb'
+ - 'spec/routing/uploads_routing_spec.rb'
+ - 'spec/rubocop/check_graceful_task_spec.rb'
+ - 'spec/rubocop/code_reuse_helpers_spec.rb'
+ - 'spec/rubocop/cop/active_model_errors_direct_manipulation_spec.rb'
+ - 'spec/rubocop/cop/active_record_association_reload_spec.rb'
+ - 'spec/rubocop/cop/api/base_spec.rb'
+ - 'spec/rubocop/cop/api/ensure_string_detail_spec.rb'
+ - 'spec/rubocop/cop/api/grape_array_missing_coerce_spec.rb'
+ - 'spec/rubocop/cop/avoid_becomes_spec.rb'
+ - 'spec/rubocop/cop/avoid_break_from_strong_memoize_spec.rb'
+ - 'spec/rubocop/cop/avoid_keyword_arguments_in_sidekiq_workers_spec.rb'
+ - 'spec/rubocop/cop/avoid_return_from_blocks_spec.rb'
+ - 'spec/rubocop/cop/avoid_route_redirect_leading_slash_spec.rb'
+ - 'spec/rubocop/cop/ban_catch_throw_spec.rb'
+ - 'spec/rubocop/cop/code_reuse/finder_spec.rb'
+ - 'spec/rubocop/cop/code_reuse/presenter_spec.rb'
+ - 'spec/rubocop/cop/code_reuse/serializer_spec.rb'
+ - 'spec/rubocop/cop/code_reuse/service_class_spec.rb'
+ - 'spec/rubocop/cop/code_reuse/worker_spec.rb'
+ - 'spec/rubocop/cop/database/disable_referential_integrity_spec.rb'
+ - 'spec/rubocop/cop/database/establish_connection_spec.rb'
+ - 'spec/rubocop/cop/database/multiple_databases_spec.rb'
+ - 'spec/rubocop/cop/database/rescue_query_canceled_spec.rb'
+ - 'spec/rubocop/cop/database/rescue_statement_timeout_spec.rb'
+ - 'spec/rubocop/cop/default_scope_spec.rb'
+ - 'spec/rubocop/cop/destroy_all_spec.rb'
+ - 'spec/rubocop/cop/file_decompression_spec.rb'
+ - 'spec/rubocop/cop/filename_length_spec.rb'
+ - 'spec/rubocop/cop/gemspec/avoid_executing_git_spec.rb'
+ - 'spec/rubocop/cop/gitlab/avoid_feature_category_not_owned_spec.rb'
+ - 'spec/rubocop/cop/gitlab/avoid_feature_get_spec.rb'
+ - 'spec/rubocop/cop/gitlab/avoid_uploaded_file_from_params_spec.rb'
+ - 'spec/rubocop/cop/gitlab/bulk_insert_spec.rb'
+ - 'spec/rubocop/cop/gitlab/change_timezone_spec.rb'
+ - 'spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb'
+ - 'spec/rubocop/cop/gitlab/delegate_predicate_methods_spec.rb'
+ - 'spec/rubocop/cop/gitlab/deprecate_track_redis_hll_event_spec.rb'
+ - 'spec/rubocop/cop/gitlab/event_store_subscriber_spec.rb'
+ - 'spec/rubocop/cop/gitlab/except_spec.rb'
+ - 'spec/rubocop/cop/gitlab/feature_available_usage_spec.rb'
+ - 'spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb'
+ - 'spec/rubocop/cop/gitlab/httparty_spec.rb'
+ - 'spec/rubocop/cop/gitlab/intersect_spec.rb'
+ - 'spec/rubocop/cop/gitlab/json_spec.rb'
+ - 'spec/rubocop/cop/gitlab/keys_first_and_values_first_spec.rb'
+ - 'spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb'
+ - 'spec/rubocop/cop/gitlab/module_with_instance_variables_spec.rb'
+ - 'spec/rubocop/cop/gitlab/namespaced_class_spec.rb'
+ - 'spec/rubocop/cop/gitlab/no_code_coverage_comment_spec.rb'
+ - 'spec/rubocop/cop/gitlab/policy_rule_boolean_spec.rb'
+ - 'spec/rubocop/cop/gitlab/predicate_memoization_spec.rb'
+ - 'spec/rubocop/cop/gitlab/rails_logger_spec.rb'
+ - 'spec/rubocop/cop/gitlab/rspec/avoid_setup_spec.rb'
+ - 'spec/rubocop/cop/gitlab/service_response_spec.rb'
+ - 'spec/rubocop/cop/gitlab/strong_memoize_attr_spec.rb'
+ - 'spec/rubocop/cop/gitlab/union_spec.rb'
+ - 'spec/rubocop/cop/graphql/authorize_types_spec.rb'
+ - 'spec/rubocop/cop/graphql/descriptions_spec.rb'
+ - 'spec/rubocop/cop/graphql/enum_names_spec.rb'
+ - 'spec/rubocop/cop/graphql/enum_values_spec.rb'
+ - 'spec/rubocop/cop/graphql/gid_expected_type_spec.rb'
+ - 'spec/rubocop/cop/graphql/graphql_name_position_spec.rb'
+ - 'spec/rubocop/cop/graphql/id_type_spec.rb'
+ - 'spec/rubocop/cop/graphql/json_type_spec.rb'
+ - 'spec/rubocop/cop/graphql/old_types_spec.rb'
+ - 'spec/rubocop/cop/graphql/resolver_type_spec.rb'
+ - 'spec/rubocop/cop/group_public_or_visible_to_user_spec.rb'
+ - 'spec/rubocop/cop/ignored_columns_spec.rb'
+ - 'spec/rubocop/cop/include_sidekiq_worker_spec.rb'
+ - 'spec/rubocop/cop/inject_enterprise_edition_module_spec.rb'
+ - 'spec/rubocop/cop/migration/add_columns_to_wide_tables_spec.rb'
+ - 'spec/rubocop/cop/migration/add_concurrent_foreign_key_spec.rb'
+ - 'spec/rubocop/cop/migration/add_concurrent_index_spec.rb'
+ - 'spec/rubocop/cop/migration/add_index_spec.rb'
+ - 'spec/rubocop/cop/migration/add_limit_to_text_columns_spec.rb'
+ - 'spec/rubocop/cop/migration/add_reference_spec.rb'
+ - 'spec/rubocop/cop/migration/add_timestamps_spec.rb'
+ - 'spec/rubocop/cop/migration/background_migration_base_class_spec.rb'
+ - 'spec/rubocop/cop/migration/background_migration_missing_active_concern_spec.rb'
+ - 'spec/rubocop/cop/migration/background_migration_record_spec.rb'
+ - 'spec/rubocop/cop/migration/background_migrations_spec.rb'
+ - 'spec/rubocop/cop/migration/batch_migrations_post_only_spec.rb'
+ - 'spec/rubocop/cop/migration/complex_indexes_require_name_spec.rb'
+ - 'spec/rubocop/cop/migration/create_table_with_foreign_keys_spec.rb'
+ - 'spec/rubocop/cop/migration/datetime_spec.rb'
+ - 'spec/rubocop/cop/migration/drop_table_spec.rb'
+ - 'spec/rubocop/cop/migration/migration_record_spec.rb'
+ - 'spec/rubocop/cop/migration/prevent_global_enable_lock_retries_with_disable_ddl_transaction_spec.rb'
+ - 'spec/rubocop/cop/migration/prevent_index_creation_spec.rb'
+ - 'spec/rubocop/cop/migration/prevent_strings_spec.rb'
+ - 'spec/rubocop/cop/migration/refer_to_index_by_name_spec.rb'
+ - 'spec/rubocop/cop/migration/remove_column_spec.rb'
+ - 'spec/rubocop/cop/migration/remove_concurrent_index_spec.rb'
+ - 'spec/rubocop/cop/migration/remove_index_spec.rb'
+ - 'spec/rubocop/cop/migration/safer_boolean_column_spec.rb'
+ - 'spec/rubocop/cop/migration/schedule_async_spec.rb'
+ - 'spec/rubocop/cop/migration/schema_addition_methods_no_post_spec.rb'
+ - 'spec/rubocop/cop/migration/sidekiq_queue_migrate_spec.rb'
+ - 'spec/rubocop/cop/migration/timestamps_spec.rb'
+ - 'spec/rubocop/cop/migration/update_column_in_batches_spec.rb'
+ - 'spec/rubocop/cop/migration/with_lock_retries_disallowed_method_spec.rb'
+ - 'spec/rubocop/cop/migration/with_lock_retries_with_change_spec.rb'
+ - 'spec/rubocop/cop/performance/active_record_subtransaction_methods_spec.rb'
+ - 'spec/rubocop/cop/performance/active_record_subtransactions_spec.rb'
+ - 'spec/rubocop/cop/performance/ar_count_each_spec.rb'
+ - 'spec/rubocop/cop/performance/ar_exists_and_present_blank_spec.rb'
+ - 'spec/rubocop/cop/performance/readlines_each_spec.rb'
+ - 'spec/rubocop/cop/prefer_class_methods_over_module_spec.rb'
+ - 'spec/rubocop/cop/project_path_helper_spec.rb'
+ - 'spec/rubocop/cop/put_group_routes_under_scope_spec.rb'
+ - 'spec/rubocop/cop/put_project_routes_under_scope_spec.rb'
+ - 'spec/rubocop/cop/qa/ambiguous_page_object_name_spec.rb'
+ - 'spec/rubocop/cop/qa/element_with_pattern_spec.rb'
+ - 'spec/rubocop/cop/qa/selector_usage_spec.rb'
+ - 'spec/rubocop/cop/rake/require_spec.rb'
+ - 'spec/rubocop/cop/redis_queue_usage_spec.rb'
+ - 'spec/rubocop/cop/rspec/any_instance_of_spec.rb'
+ - 'spec/rubocop/cop/rspec/be_success_matcher_spec.rb'
+ - 'spec/rubocop/cop/rspec/duplicate_spec_location_spec.rb'
+ - 'spec/rubocop/cop/rspec/env_assignment_spec.rb'
+ - 'spec/rubocop/cop/rspec/expect_gitlab_tracking_spec.rb'
+ - 'spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb'
+ - 'spec/rubocop/cop/rspec/factory_bot/avoid_create_spec.rb'
+ - 'spec/rubocop/cop/rspec/factory_bot/inline_association_spec.rb'
+ - 'spec/rubocop/cop/rspec/factory_bot/strategy_in_callback_spec.rb'
+ - 'spec/rubocop/cop/rspec/have_gitlab_http_status_spec.rb'
+ - 'spec/rubocop/cop/rspec/htt_party_basic_auth_spec.rb'
+ - 'spec/rubocop/cop/rspec/modify_sidekiq_middleware_spec.rb'
+ - 'spec/rubocop/cop/rspec/top_level_describe_path_spec.rb'
+ - 'spec/rubocop/cop/rspec/web_mock_enable_spec.rb'
+ - 'spec/rubocop/cop/ruby_interpolation_in_translation_spec.rb'
+ - 'spec/rubocop/cop/safe_params_spec.rb'
+ - 'spec/rubocop/cop/scalability/bulk_perform_with_context_spec.rb'
+ - 'spec/rubocop/cop/scalability/cron_worker_context_spec.rb'
+ - 'spec/rubocop/cop/scalability/file_uploads_spec.rb'
+ - 'spec/rubocop/cop/scalability/idempotent_worker_spec.rb'
+ - 'spec/rubocop/cop/sidekiq_api_usage_spec.rb'
+ - 'spec/rubocop/cop/sidekiq_load_balancing/worker_data_consistency_spec.rb'
+ - 'spec/rubocop/cop/sidekiq_options_queue_spec.rb'
+ - 'spec/rubocop/cop/sidekiq_redis_call_spec.rb'
+ - 'spec/rubocop/cop/static_translation_definition_spec.rb'
+ - 'spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb'
+ - 'spec/rubocop/cop/usage_data/distinct_count_by_large_foreign_key_spec.rb'
+ - 'spec/rubocop/cop/usage_data/histogram_with_large_table_spec.rb'
+ - 'spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb'
+ - 'spec/rubocop/cop/usage_data/large_table_spec.rb'
+ - 'spec/rubocop/cop/user_admin_spec.rb'
+ - 'spec/rubocop/cop_todo_spec.rb'
+ - 'spec/rubocop/formatter/graceful_formatter_spec.rb'
+ - 'spec/rubocop/formatter/todo_formatter_spec.rb'
+ - 'spec/rubocop/migration_helpers_spec.rb'
+ - 'spec/rubocop/qa_helpers_spec.rb'
+ - 'spec/rubocop/todo_dir_spec.rb'
+ - 'spec/scripts/changed-feature-flags_spec.rb'
+ - 'spec/scripts/failed_tests_spec.rb'
+ - 'spec/scripts/lib/glfm/parse_examples_spec.rb'
+ - 'spec/scripts/lib/glfm/shared_spec.rb'
+ - 'spec/scripts/lib/glfm/update_example_snapshots_spec.rb'
+ - 'spec/scripts/lib/glfm/update_specification_spec.rb'
+ - 'spec/scripts/lib/glfm/verify_all_generated_files_are_up_to_date_spec.rb'
+ - 'spec/scripts/pipeline_test_report_builder_spec.rb'
+ - 'spec/scripts/setup/find_jh_branch_spec.rb'
+ - 'spec/serializers/access_token_entity_base_spec.rb'
+ - 'spec/serializers/accessibility_error_entity_spec.rb'
+ - 'spec/serializers/accessibility_reports_comparer_entity_spec.rb'
+ - 'spec/serializers/accessibility_reports_comparer_serializer_spec.rb'
+ - 'spec/serializers/admin/user_entity_spec.rb'
+ - 'spec/serializers/admin/user_serializer_spec.rb'
+ - 'spec/serializers/analytics/cycle_analytics/stage_entity_spec.rb'
+ - 'spec/serializers/analytics_build_entity_spec.rb'
+ - 'spec/serializers/analytics_build_serializer_spec.rb'
+ - 'spec/serializers/analytics_issue_entity_spec.rb'
+ - 'spec/serializers/analytics_issue_serializer_spec.rb'
+ - 'spec/serializers/analytics_merge_request_serializer_spec.rb'
+ - 'spec/serializers/analytics_summary_serializer_spec.rb'
+ - 'spec/serializers/base_discussion_entity_spec.rb'
+ - 'spec/serializers/blob_entity_spec.rb'
+ - 'spec/serializers/build_action_entity_spec.rb'
+ - 'spec/serializers/build_artifact_entity_spec.rb'
+ - 'spec/serializers/build_details_entity_spec.rb'
+ - 'spec/serializers/build_trace_entity_spec.rb'
+ - 'spec/serializers/ci/codequality_mr_diff_entity_spec.rb'
+ - 'spec/serializers/ci/codequality_mr_diff_report_serializer_spec.rb'
+ - 'spec/serializers/ci/dag_job_entity_spec.rb'
+ - 'spec/serializers/ci/dag_job_group_entity_spec.rb'
+ - 'spec/serializers/ci/dag_pipeline_entity_spec.rb'
+ - 'spec/serializers/ci/dag_pipeline_serializer_spec.rb'
+ - 'spec/serializers/ci/dag_stage_entity_spec.rb'
+ - 'spec/serializers/ci/daily_build_group_report_result_entity_spec.rb'
+ - 'spec/serializers/ci/daily_build_group_report_result_serializer_spec.rb'
+ - 'spec/serializers/ci/downloadable_artifact_entity_spec.rb'
+ - 'spec/serializers/ci/downloadable_artifact_serializer_spec.rb'
+ - 'spec/serializers/ci/group_variable_entity_spec.rb'
+ - 'spec/serializers/ci/job_entity_spec.rb'
+ - 'spec/serializers/ci/job_serializer_spec.rb'
+ - 'spec/serializers/ci/lint/job_entity_spec.rb'
+ - 'spec/serializers/ci/lint/result_entity_spec.rb'
+ - 'spec/serializers/ci/lint/result_serializer_spec.rb'
+ - 'spec/serializers/ci/pipeline_entity_spec.rb'
+ - 'spec/serializers/ci/trigger_entity_spec.rb'
+ - 'spec/serializers/ci/trigger_serializer_spec.rb'
+ - 'spec/serializers/ci/variable_entity_spec.rb'
+ - 'spec/serializers/cluster_application_entity_spec.rb'
+ - 'spec/serializers/cluster_entity_spec.rb'
+ - 'spec/serializers/cluster_serializer_spec.rb'
+ - 'spec/serializers/clusters/kubernetes_error_entity_spec.rb'
+ - 'spec/serializers/codequality_degradation_entity_spec.rb'
+ - 'spec/serializers/codequality_reports_comparer_entity_spec.rb'
+ - 'spec/serializers/codequality_reports_comparer_serializer_spec.rb'
+ - 'spec/serializers/commit_entity_spec.rb'
+ - 'spec/serializers/container_repositories_serializer_spec.rb'
+ - 'spec/serializers/container_repository_entity_spec.rb'
+ - 'spec/serializers/container_tag_entity_spec.rb'
+ - 'spec/serializers/context_commits_diff_entity_spec.rb'
+ - 'spec/serializers/deploy_keys/basic_deploy_key_entity_spec.rb'
+ - 'spec/serializers/deploy_keys/deploy_key_entity_spec.rb'
+ - 'spec/serializers/deployment_cluster_entity_spec.rb'
+ - 'spec/serializers/deployment_entity_spec.rb'
+ - 'spec/serializers/deployment_serializer_spec.rb'
+ - 'spec/serializers/detailed_status_entity_spec.rb'
+ - 'spec/serializers/diff_file_base_entity_spec.rb'
+ - 'spec/serializers/diff_file_entity_spec.rb'
+ - 'spec/serializers/diff_file_metadata_entity_spec.rb'
+ - 'spec/serializers/diff_line_entity_spec.rb'
+ - 'spec/serializers/diff_line_serializer_spec.rb'
+ - 'spec/serializers/diff_viewer_entity_spec.rb'
+ - 'spec/serializers/diffs_entity_spec.rb'
+ - 'spec/serializers/diffs_metadata_entity_spec.rb'
+ - 'spec/serializers/discussion_diff_file_entity_spec.rb'
+ - 'spec/serializers/discussion_entity_spec.rb'
+ - 'spec/serializers/entity_date_helper_spec.rb'
+ - 'spec/serializers/entity_request_spec.rb'
+ - 'spec/serializers/environment_entity_spec.rb'
+ - 'spec/serializers/environment_serializer_spec.rb'
+ - 'spec/serializers/environment_status_entity_spec.rb'
+ - 'spec/serializers/evidences/evidence_entity_spec.rb'
+ - 'spec/serializers/evidences/evidence_serializer_spec.rb'
+ - 'spec/serializers/evidences/issue_entity_spec.rb'
+ - 'spec/serializers/evidences/milestone_entity_spec.rb'
+ - 'spec/serializers/evidences/project_entity_spec.rb'
+ - 'spec/serializers/evidences/release_entity_spec.rb'
+ - 'spec/serializers/evidences/release_serializer_spec.rb'
+ - 'spec/serializers/feature_flag_entity_spec.rb'
+ - 'spec/serializers/feature_flag_serializer_spec.rb'
+ - 'spec/serializers/feature_flag_summary_entity_spec.rb'
+ - 'spec/serializers/feature_flag_summary_serializer_spec.rb'
+ - 'spec/serializers/feature_flags_client_serializer_spec.rb'
+ - 'spec/serializers/fork_namespace_entity_spec.rb'
+ - 'spec/serializers/fork_namespace_serializer_spec.rb'
+ - 'spec/serializers/group_access_token_entity_spec.rb'
+ - 'spec/serializers/group_access_token_serializer_spec.rb'
+ - 'spec/serializers/group_child_entity_spec.rb'
+ - 'spec/serializers/group_child_serializer_spec.rb'
+ - 'spec/serializers/group_deploy_key_entity_spec.rb'
+ - 'spec/serializers/group_issuable_autocomplete_entity_spec.rb'
+ - 'spec/serializers/group_link/group_group_link_entity_spec.rb'
+ - 'spec/serializers/group_link/group_group_link_serializer_spec.rb'
+ - 'spec/serializers/group_link/group_link_entity_spec.rb'
+ - 'spec/serializers/group_link/project_group_link_entity_spec.rb'
+ - 'spec/serializers/group_link/project_group_link_serializer_spec.rb'
+ - 'spec/serializers/impersonation_access_token_entity_spec.rb'
+ - 'spec/serializers/impersonation_access_token_serializer_spec.rb'
+ - 'spec/serializers/import/bitbucket_provider_repo_entity_spec.rb'
+ - 'spec/serializers/import/bitbucket_server_provider_repo_entity_spec.rb'
+ - 'spec/serializers/import/bulk_import_entity_spec.rb'
+ - 'spec/serializers/import/fogbugz_provider_repo_entity_spec.rb'
+ - 'spec/serializers/import/github_org_entity_spec.rb'
+ - 'spec/serializers/import/github_org_serializer_spec.rb'
+ - 'spec/serializers/import/githubish_provider_repo_entity_spec.rb'
+ - 'spec/serializers/import/gitlab_provider_repo_entity_spec.rb'
+ - 'spec/serializers/import/manifest_provider_repo_entity_spec.rb'
+ - 'spec/serializers/import/provider_repo_serializer_spec.rb'
+ - 'spec/serializers/integrations/event_entity_spec.rb'
+ - 'spec/serializers/integrations/field_entity_spec.rb'
+ - 'spec/serializers/integrations/harbor_serializers/artifact_entity_spec.rb'
+ - 'spec/serializers/integrations/harbor_serializers/artifact_serializer_spec.rb'
+ - 'spec/serializers/integrations/harbor_serializers/repository_entity_spec.rb'
+ - 'spec/serializers/integrations/harbor_serializers/repository_serializer_spec.rb'
+ - 'spec/serializers/integrations/harbor_serializers/tag_entity_spec.rb'
+ - 'spec/serializers/integrations/harbor_serializers/tag_serializer_spec.rb'
+ - 'spec/serializers/integrations/project_entity_spec.rb'
+ - 'spec/serializers/integrations/project_serializer_spec.rb'
+ - 'spec/serializers/issuable_sidebar_extras_entity_spec.rb'
+ - 'spec/serializers/issue_board_entity_spec.rb'
+ - 'spec/serializers/issue_entity_spec.rb'
+ - 'spec/serializers/issue_serializer_spec.rb'
+ - 'spec/serializers/issue_sidebar_basic_entity_spec.rb'
+ - 'spec/serializers/jira_connect/app_data_serializer_spec.rb'
+ - 'spec/serializers/jira_connect/group_entity_spec.rb'
+ - 'spec/serializers/jira_connect/subscription_entity_spec.rb'
+ - 'spec/serializers/job_artifact_report_entity_spec.rb'
+ - 'spec/serializers/label_serializer_spec.rb'
+ - 'spec/serializers/lfs_file_lock_entity_spec.rb'
+ - 'spec/serializers/linked_project_issue_entity_spec.rb'
+ - 'spec/serializers/member_entity_spec.rb'
+ - 'spec/serializers/member_serializer_spec.rb'
+ - 'spec/serializers/member_user_entity_spec.rb'
+ - 'spec/serializers/merge_request_basic_entity_spec.rb'
+ - 'spec/serializers/merge_request_current_user_entity_spec.rb'
+ - 'spec/serializers/merge_request_diff_entity_spec.rb'
+ - 'spec/serializers/merge_request_for_pipeline_entity_spec.rb'
+ - 'spec/serializers/merge_request_metrics_helper_spec.rb'
+ - 'spec/serializers/merge_request_poll_cached_widget_entity_spec.rb'
+ - 'spec/serializers/merge_request_poll_widget_entity_spec.rb'
+ - 'spec/serializers/merge_request_serializer_spec.rb'
+ - 'spec/serializers/merge_request_sidebar_basic_entity_spec.rb'
+ - 'spec/serializers/merge_request_sidebar_extras_entity_spec.rb'
+ - 'spec/serializers/merge_request_user_entity_spec.rb'
+ - 'spec/serializers/merge_request_widget_commit_entity_spec.rb'
+ - 'spec/serializers/merge_request_widget_entity_spec.rb'
+ - 'spec/serializers/merge_requests/pipeline_entity_spec.rb'
+ - 'spec/serializers/move_to_project_entity_spec.rb'
+ - 'spec/serializers/move_to_project_serializer_spec.rb'
+ - 'spec/serializers/namespace_basic_entity_spec.rb'
+ - 'spec/serializers/namespace_serializer_spec.rb'
+ - 'spec/serializers/note_entity_spec.rb'
+ - 'spec/serializers/paginated_diff_entity_spec.rb'
+ - 'spec/serializers/personal_access_token_entity_spec.rb'
+ - 'spec/serializers/personal_access_token_serializer_spec.rb'
+ - 'spec/serializers/pipeline_details_entity_spec.rb'
+ - 'spec/serializers/pipeline_serializer_spec.rb'
+ - 'spec/serializers/project_access_token_entity_spec.rb'
+ - 'spec/serializers/project_access_token_serializer_spec.rb'
+ - 'spec/serializers/project_import_entity_spec.rb'
+ - 'spec/serializers/project_mirror_serializer_spec.rb'
+ - 'spec/serializers/project_note_entity_spec.rb'
+ - 'spec/serializers/project_serializer_spec.rb'
+ - 'spec/serializers/prometheus_alert_entity_spec.rb'
+ - 'spec/serializers/release_serializer_spec.rb'
+ - 'spec/serializers/remote_mirror_entity_spec.rb'
+ - 'spec/serializers/request_aware_entity_spec.rb'
+ - 'spec/serializers/review_app_setup_entity_spec.rb'
+ - 'spec/serializers/rollout_status_entity_spec.rb'
+ - 'spec/serializers/rollout_statuses/ingress_entity_spec.rb'
+ - 'spec/serializers/runner_entity_spec.rb'
+ - 'spec/serializers/serverless/domain_entity_spec.rb'
+ - 'spec/serializers/stage_entity_spec.rb'
+ - 'spec/serializers/stage_serializer_spec.rb'
+ - 'spec/serializers/suggestion_entity_spec.rb'
+ - 'spec/serializers/test_case_entity_spec.rb'
+ - 'spec/serializers/test_report_entity_spec.rb'
+ - 'spec/serializers/test_report_summary_entity_spec.rb'
+ - 'spec/serializers/test_reports_comparer_entity_spec.rb'
+ - 'spec/serializers/test_reports_comparer_serializer_spec.rb'
+ - 'spec/serializers/test_suite_comparer_entity_spec.rb'
+ - 'spec/serializers/test_suite_entity_spec.rb'
+ - 'spec/serializers/test_suite_summary_entity_spec.rb'
+ - 'spec/serializers/trigger_variable_entity_spec.rb'
+ - 'spec/serializers/user_entity_spec.rb'
+ - 'spec/serializers/user_serializer_spec.rb'
+ - 'spec/serializers/web_ide_terminal_entity_spec.rb'
+ - 'spec/serializers/web_ide_terminal_serializer_spec.rb'
+ - 'spec/services/access_token_validation_service_spec.rb'
+ - 'spec/services/admin/set_feature_flag_service_spec.rb'
+ - 'spec/services/alert_management/alerts/todo/create_service_spec.rb'
+ - 'spec/services/alert_management/alerts/update_service_spec.rb'
+ - 'spec/services/alert_management/create_alert_issue_service_spec.rb'
+ - 'spec/services/alert_management/http_integrations/create_service_spec.rb'
+ - 'spec/services/alert_management/http_integrations/destroy_service_spec.rb'
+ - 'spec/services/alert_management/http_integrations/update_service_spec.rb'
+ - 'spec/services/alert_management/metric_images/upload_service_spec.rb'
+ - 'spec/services/alert_management/process_prometheus_alert_service_spec.rb'
+ - 'spec/services/analytics/cycle_analytics/stages/list_service_spec.rb'
+ - 'spec/services/application_settings/update_service_spec.rb'
+ - 'spec/services/applications/create_service_spec.rb'
+ - 'spec/services/audit_event_service_spec.rb'
+ - 'spec/services/audit_events/build_service_spec.rb'
+ - 'spec/services/auth/container_registry_authentication_service_spec.rb'
+ - 'spec/services/auth/dependency_proxy_authentication_service_spec.rb'
+ - 'spec/services/authorized_project_update/find_records_due_for_refresh_service_spec.rb'
+ - 'spec/services/authorized_project_update/periodic_recalculate_service_spec.rb'
+ - 'spec/services/authorized_project_update/project_access_changed_service_spec.rb'
+ - 'spec/services/authorized_project_update/project_recalculate_per_user_service_spec.rb'
+ - 'spec/services/authorized_project_update/project_recalculate_service_spec.rb'
+ - 'spec/services/auto_merge/base_service_spec.rb'
+ - 'spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb'
+ - 'spec/services/auto_merge_service_spec.rb'
+ - 'spec/services/award_emojis/add_service_spec.rb'
+ - 'spec/services/award_emojis/base_service_spec.rb'
+ - 'spec/services/award_emojis/collect_user_emoji_service_spec.rb'
+ - 'spec/services/award_emojis/copy_service_spec.rb'
+ - 'spec/services/award_emojis/destroy_service_spec.rb'
+ - 'spec/services/award_emojis/toggle_service_spec.rb'
+ - 'spec/services/base_container_service_spec.rb'
+ - 'spec/services/base_count_service_spec.rb'
+ - 'spec/services/boards/create_service_spec.rb'
+ - 'spec/services/boards/destroy_service_spec.rb'
+ - 'spec/services/boards/issues/create_service_spec.rb'
+ - 'spec/services/boards/issues/list_service_spec.rb'
+ - 'spec/services/boards/issues/move_service_spec.rb'
+ - 'spec/services/boards/lists/create_service_spec.rb'
+ - 'spec/services/boards/lists/destroy_service_spec.rb'
+ - 'spec/services/boards/lists/list_service_spec.rb'
+ - 'spec/services/boards/lists/move_service_spec.rb'
+ - 'spec/services/boards/lists/update_service_spec.rb'
+ - 'spec/services/boards/visits/create_service_spec.rb'
+ - 'spec/services/branches/create_service_spec.rb'
+ - 'spec/services/branches/delete_merged_service_spec.rb'
+ - 'spec/services/branches/delete_service_spec.rb'
+ - 'spec/services/branches/diverging_commit_counts_service_spec.rb'
+ - 'spec/services/branches/validate_new_service_spec.rb'
+ - 'spec/services/bulk_create_integration_service_spec.rb'
+ - 'spec/services/bulk_imports/archive_extraction_service_spec.rb'
+ - 'spec/services/bulk_imports/export_service_spec.rb'
+ - 'spec/services/bulk_imports/file_decompression_service_spec.rb'
+ - 'spec/services/bulk_imports/file_download_service_spec.rb'
+ - 'spec/services/bulk_imports/file_export_service_spec.rb'
+ - 'spec/services/bulk_imports/lfs_objects_export_service_spec.rb'
+ - 'spec/services/bulk_imports/relation_export_service_spec.rb'
+ - 'spec/services/bulk_imports/repository_bundle_export_service_spec.rb'
+ - 'spec/services/bulk_imports/tree_export_service_spec.rb'
+ - 'spec/services/bulk_imports/uploads_export_service_spec.rb'
+ - 'spec/services/bulk_push_event_payload_service_spec.rb'
+ - 'spec/services/bulk_update_integration_service_spec.rb'
+ - 'spec/services/captcha/captcha_verification_service_spec.rb'
+ - 'spec/services/chat_names/find_user_service_spec.rb'
+ - 'spec/services/ci/abort_pipelines_service_spec.rb'
+ - 'spec/services/ci/append_build_trace_service_spec.rb'
+ - 'spec/services/ci/archive_trace_service_spec.rb'
+ - 'spec/services/ci/build_cancel_service_spec.rb'
+ - 'spec/services/ci/build_erase_service_spec.rb'
+ - 'spec/services/ci/build_report_result_service_spec.rb'
+ - 'spec/services/ci/build_unschedule_service_spec.rb'
+ - 'spec/services/ci/change_variable_service_spec.rb'
+ - 'spec/services/ci/change_variables_service_spec.rb'
+ - 'spec/services/ci/compare_accessibility_reports_service_spec.rb'
+ - 'spec/services/ci/compare_codequality_reports_service_spec.rb'
+ - 'spec/services/ci/compare_reports_base_service_spec.rb'
+ - 'spec/services/ci/compare_test_reports_service_spec.rb'
+ - 'spec/services/ci/copy_cross_database_associations_service_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/artifacts_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/cache_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/creation_errors_and_warnings_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/cross_project_pipeline_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/custom_config_content_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/custom_yaml_tags_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/dry_run_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/environment_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/evaluate_runner_tags_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/limit_active_jobs_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/merge_requests_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/needs_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/parallel_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/parameter_content_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/parent_child_pipeline_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/pre_post_stages_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/rate_limit_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/scripts_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/tags_spec.rb'
+ - 'spec/services/ci/create_pipeline_service/variables_spec.rb'
+ - 'spec/services/ci/create_web_ide_terminal_service_spec.rb'
+ - 'spec/services/ci/daily_build_group_report_result_service_spec.rb'
+ - 'spec/services/ci/delete_objects_service_spec.rb'
+ - 'spec/services/ci/delete_unit_tests_service_spec.rb'
+ - 'spec/services/ci/deployments/destroy_service_spec.rb'
+ - 'spec/services/ci/destroy_pipeline_service_spec.rb'
+ - 'spec/services/ci/destroy_secure_file_service_spec.rb'
+ - 'spec/services/ci/disable_user_pipeline_schedules_service_spec.rb'
+ - 'spec/services/ci/drop_pipeline_service_spec.rb'
+ - 'spec/services/ci/ensure_stage_service_spec.rb'
+ - 'spec/services/ci/expire_pipeline_cache_service_spec.rb'
+ - 'spec/services/ci/external_pull_requests/create_pipeline_service_spec.rb'
+ - 'spec/services/ci/find_exposed_artifacts_service_spec.rb'
+ - 'spec/services/ci/generate_codequality_mr_diff_report_service_spec.rb'
+ - 'spec/services/ci/generate_coverage_reports_service_spec.rb'
+ - 'spec/services/ci/generate_kubeconfig_service_spec.rb'
+ - 'spec/services/ci/generate_terraform_reports_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/create_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/delete_project_artifacts_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/delete_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/destroy_all_expired_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/destroy_associations_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/destroy_batch_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/expire_project_build_artifacts_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/track_artifact_report_service_spec.rb'
+ - 'spec/services/ci/job_artifacts/update_unknown_locked_status_service_spec.rb'
+ - 'spec/services/ci/job_token_scope/add_project_service_spec.rb'
+ - 'spec/services/ci/job_token_scope/remove_project_service_spec.rb'
+ - 'spec/services/ci/list_config_variables_service_spec.rb'
+ - 'spec/services/ci/parse_dotenv_artifact_service_spec.rb'
+ - 'spec/services/ci/pipeline_artifacts/coverage_report_service_spec.rb'
+ - 'spec/services/ci/pipeline_artifacts/create_code_quality_mr_diff_report_service_spec.rb'
+ - 'spec/services/ci/pipeline_artifacts/destroy_all_expired_service_spec.rb'
+ - 'spec/services/ci/pipeline_bridge_status_service_spec.rb'
+ - 'spec/services/ci/pipeline_creation/start_pipeline_service_spec.rb'
+ - 'spec/services/ci/pipeline_processing/atomic_processing_service/status_collection_spec.rb'
+ - 'spec/services/ci/pipeline_schedule_service_spec.rb'
+ - 'spec/services/ci/pipeline_schedules/take_ownership_service_spec.rb'
+ - 'spec/services/ci/pipeline_trigger_service_spec.rb'
+ - 'spec/services/ci/pipelines/add_job_service_spec.rb'
+ - 'spec/services/ci/pipelines/hook_service_spec.rb'
+ - 'spec/services/ci/play_bridge_service_spec.rb'
+ - 'spec/services/ci/play_build_service_spec.rb'
+ - 'spec/services/ci/play_manual_stage_service_spec.rb'
+ - 'spec/services/ci/prepare_build_service_spec.rb'
+ - 'spec/services/ci/process_build_service_spec.rb'
+ - 'spec/services/ci/process_pipeline_service_spec.rb'
+ - 'spec/services/ci/process_sync_events_service_spec.rb'
+ - 'spec/services/ci/prometheus_metrics/observe_histograms_service_spec.rb'
+ - 'spec/services/ci/queue/pending_builds_strategy_spec.rb'
+ - 'spec/services/ci/resource_groups/assign_resource_from_resource_group_service_spec.rb'
+ - 'spec/services/ci/retry_job_service_spec.rb'
+ - 'spec/services/ci/retry_pipeline_service_spec.rb'
+ - 'spec/services/ci/run_scheduled_build_service_spec.rb'
+ - 'spec/services/ci/stuck_builds/drop_pending_service_spec.rb'
+ - 'spec/services/ci/stuck_builds/drop_running_service_spec.rb'
+ - 'spec/services/ci/stuck_builds/drop_scheduled_service_spec.rb'
+ - 'spec/services/ci/test_failure_history_service_spec.rb'
+ - 'spec/services/ci/track_failed_build_service_spec.rb'
+ - 'spec/services/ci/unlock_artifacts_service_spec.rb'
+ - 'spec/services/ci/update_build_queue_service_spec.rb'
+ - 'spec/services/ci/update_build_state_service_spec.rb'
+ - 'spec/services/ci/update_instance_variables_service_spec.rb'
+ - 'spec/services/ci/update_pending_build_service_spec.rb'
+ - 'spec/services/clusters/agent_tokens/create_service_spec.rb'
+ - 'spec/services/clusters/agent_tokens/track_usage_service_spec.rb'
+ - 'spec/services/clusters/agents/create_activity_event_service_spec.rb'
+ - 'spec/services/clusters/agents/create_service_spec.rb'
+ - 'spec/services/clusters/agents/delete_expired_events_service_spec.rb'
+ - 'spec/services/clusters/agents/delete_service_spec.rb'
+ - 'spec/services/clusters/agents/refresh_authorization_service_spec.rb'
+ - 'spec/services/clusters/build_kubernetes_namespace_service_spec.rb'
+ - 'spec/services/clusters/build_service_spec.rb'
+ - 'spec/services/clusters/cleanup/project_namespace_service_spec.rb'
+ - 'spec/services/clusters/cleanup/service_account_service_spec.rb'
+ - 'spec/services/clusters/create_service_spec.rb'
+ - 'spec/services/clusters/destroy_service_spec.rb'
+ - 'spec/services/clusters/integrations/create_service_spec.rb'
+ - 'spec/services/clusters/integrations/prometheus_health_check_service_spec.rb'
+ - 'spec/services/clusters/kubernetes/create_or_update_namespace_service_spec.rb'
+ - 'spec/services/clusters/kubernetes/create_or_update_service_account_service_spec.rb'
+ - 'spec/services/clusters/kubernetes/fetch_kubernetes_token_service_spec.rb'
+ - 'spec/services/clusters/kubernetes_spec.rb'
+ - 'spec/services/clusters/management/validate_management_project_permissions_service_spec.rb'
+ - 'spec/services/clusters/update_service_spec.rb'
+ - 'spec/services/cohorts_service_spec.rb'
+ - 'spec/services/commits/cherry_pick_service_spec.rb'
+ - 'spec/services/commits/commit_patch_service_spec.rb'
+ - 'spec/services/commits/tag_service_spec.rb'
+ - 'spec/services/compare_service_spec.rb'
+ - 'spec/services/concerns/audit_event_save_type_spec.rb'
+ - 'spec/services/concerns/exclusive_lease_guard_spec.rb'
+ - 'spec/services/concerns/merge_requests/assigns_merge_params_spec.rb'
+ - 'spec/services/concerns/rate_limited_service_spec.rb'
+ - 'spec/services/container_expiration_policies/cleanup_service_spec.rb'
+ - 'spec/services/container_expiration_policies/update_service_spec.rb'
+ - 'spec/services/customer_relations/contacts/create_service_spec.rb'
+ - 'spec/services/customer_relations/contacts/update_service_spec.rb'
+ - 'spec/services/customer_relations/organizations/create_service_spec.rb'
+ - 'spec/services/customer_relations/organizations/update_service_spec.rb'
+ - 'spec/services/database/consistency_fix_service_spec.rb'
+ - 'spec/services/dependency_proxy/auth_token_service_spec.rb'
+ - 'spec/services/dependency_proxy/find_cached_manifest_service_spec.rb'
+ - 'spec/services/dependency_proxy/group_settings/update_service_spec.rb'
+ - 'spec/services/dependency_proxy/head_manifest_service_spec.rb'
+ - 'spec/services/dependency_proxy/image_ttl_group_policies/update_service_spec.rb'
+ - 'spec/services/dependency_proxy/request_token_service_spec.rb'
+ - 'spec/services/deploy_keys/create_service_spec.rb'
+ - 'spec/services/deployments/archive_in_project_service_spec.rb'
+ - 'spec/services/deployments/create_for_build_service_spec.rb'
+ - 'spec/services/deployments/create_service_spec.rb'
+ - 'spec/services/deployments/link_merge_requests_service_spec.rb'
+ - 'spec/services/deployments/older_deployments_drop_service_spec.rb'
+ - 'spec/services/deployments/update_environment_service_spec.rb'
+ - 'spec/services/deployments/update_service_spec.rb'
+ - 'spec/services/design_management/copy_design_collection/copy_service_spec.rb'
+ - 'spec/services/design_management/copy_design_collection/queue_service_spec.rb'
+ - 'spec/services/design_management/delete_designs_service_spec.rb'
+ - 'spec/services/design_management/design_user_notes_count_service_spec.rb'
+ - 'spec/services/design_management/generate_image_versions_service_spec.rb'
+ - 'spec/services/design_management/move_designs_service_spec.rb'
+ - 'spec/services/discussions/capture_diff_note_position_service_spec.rb'
+ - 'spec/services/discussions/capture_diff_note_positions_service_spec.rb'
+ - 'spec/services/discussions/update_diff_position_service_spec.rb'
+ - 'spec/services/draft_notes/create_service_spec.rb'
+ - 'spec/services/draft_notes/destroy_service_spec.rb'
+ - 'spec/services/draft_notes/publish_service_spec.rb'
+ - 'spec/services/emails/confirm_service_spec.rb'
+ - 'spec/services/emails/create_service_spec.rb'
+ - 'spec/services/emails/destroy_service_spec.rb'
+ - 'spec/services/environments/auto_stop_service_spec.rb'
+ - 'spec/services/environments/canary_ingress/update_service_spec.rb'
+ - 'spec/services/environments/create_for_build_service_spec.rb'
+ - 'spec/services/environments/reset_auto_stop_service_spec.rb'
+ - 'spec/services/environments/schedule_to_delete_review_apps_service_spec.rb'
+ - 'spec/services/environments/stop_service_spec.rb'
+ - 'spec/services/error_tracking/base_service_spec.rb'
+ - 'spec/services/error_tracking/collect_error_service_spec.rb'
+ - 'spec/services/error_tracking/issue_details_service_spec.rb'
+ - 'spec/services/error_tracking/issue_latest_event_service_spec.rb'
+ - 'spec/services/error_tracking/issue_update_service_spec.rb'
+ - 'spec/services/error_tracking/list_issues_service_spec.rb'
+ - 'spec/services/event_create_service_spec.rb'
+ - 'spec/services/events/destroy_service_spec.rb'
+ - 'spec/services/events/render_service_spec.rb'
+ - 'spec/services/feature_flags/create_service_spec.rb'
+ - 'spec/services/feature_flags/destroy_service_spec.rb'
+ - 'spec/services/feature_flags/hook_service_spec.rb'
+ - 'spec/services/feature_flags/update_service_spec.rb'
+ - 'spec/services/files/create_service_spec.rb'
+ - 'spec/services/files/delete_service_spec.rb'
+ - 'spec/services/files/multi_service_spec.rb'
+ - 'spec/services/files/update_service_spec.rb'
+ - 'spec/services/git/base_hooks_service_spec.rb'
+ - 'spec/services/git/branch_hooks_service_spec.rb'
+ - 'spec/services/git/branch_push_service_spec.rb'
+ - 'spec/services/git/process_ref_changes_service_spec.rb'
+ - 'spec/services/git/tag_hooks_service_spec.rb'
+ - 'spec/services/git/tag_push_service_spec.rb'
+ - 'spec/services/git/wiki_push_service/change_spec.rb'
+ - 'spec/services/git/wiki_push_service_spec.rb'
+ - 'spec/services/google_cloud/create_cloudsql_instance_service_spec.rb'
+ - 'spec/services/google_cloud/create_service_accounts_service_spec.rb'
+ - 'spec/services/google_cloud/enable_cloud_run_service_spec.rb'
+ - 'spec/services/google_cloud/enable_cloudsql_service_spec.rb'
+ - 'spec/services/google_cloud/gcp_region_add_or_replace_service_spec.rb'
+ - 'spec/services/google_cloud/generate_pipeline_service_spec.rb'
+ - 'spec/services/google_cloud/get_cloudsql_instances_service_spec.rb'
+ - 'spec/services/google_cloud/service_accounts_service_spec.rb'
+ - 'spec/services/google_cloud/setup_cloudsql_instance_service_spec.rb'
+ - 'spec/services/gpg_keys/create_service_spec.rb'
+ - 'spec/services/gpg_keys/destroy_service_spec.rb'
+ - 'spec/services/grafana/proxy_service_spec.rb'
+ - 'spec/services/gravatar_service_spec.rb'
+ - 'spec/services/groups/auto_devops_service_spec.rb'
+ - 'spec/services/groups/autocomplete_service_spec.rb'
+ - 'spec/services/groups/create_service_spec.rb'
+ - 'spec/services/groups/deploy_tokens/create_service_spec.rb'
+ - 'spec/services/groups/deploy_tokens/destroy_service_spec.rb'
+ - 'spec/services/groups/deploy_tokens/revoke_service_spec.rb'
+ - 'spec/services/groups/destroy_service_spec.rb'
+ - 'spec/services/groups/group_links/create_service_spec.rb'
+ - 'spec/services/groups/group_links/destroy_service_spec.rb'
+ - 'spec/services/groups/group_links/update_service_spec.rb'
+ - 'spec/services/groups/import_export/export_service_spec.rb'
+ - 'spec/services/groups/import_export/import_service_spec.rb'
+ - 'spec/services/groups/merge_requests_count_service_spec.rb'
+ - 'spec/services/groups/nested_create_service_spec.rb'
+ - 'spec/services/groups/open_issues_count_service_spec.rb'
+ - 'spec/services/groups/participants_service_spec.rb'
+ - 'spec/services/groups/update_service_spec.rb'
+ - 'spec/services/groups/update_shared_runners_service_spec.rb'
+ - 'spec/services/groups/update_statistics_service_spec.rb'
+ - 'spec/services/ide/base_config_service_spec.rb'
+ - 'spec/services/ide/schemas_config_service_spec.rb'
+ - 'spec/services/ide/terminal_config_service_spec.rb'
+ - 'spec/services/import/bitbucket_server_service_spec.rb'
+ - 'spec/services/import/fogbugz_service_spec.rb'
+ - 'spec/services/import/github/cancel_project_import_service_spec.rb'
+ - 'spec/services/import/github/notes/create_service_spec.rb'
+ - 'spec/services/import/github_service_spec.rb'
+ - 'spec/services/import/gitlab_projects/create_project_service_spec.rb'
+ - 'spec/services/import/gitlab_projects/file_acquisition_strategies/file_upload_spec.rb'
+ - 'spec/services/import/gitlab_projects/file_acquisition_strategies/remote_file_s3_spec.rb'
+ - 'spec/services/import/gitlab_projects/file_acquisition_strategies/remote_file_spec.rb'
+ - 'spec/services/import/prepare_service_spec.rb'
+ - 'spec/services/import/validate_remote_git_endpoint_service_spec.rb'
+ - 'spec/services/import_export_clean_up_service_spec.rb'
+ - 'spec/services/incident_management/incidents/create_service_spec.rb'
+ - 'spec/services/incident_management/issuable_escalation_statuses/after_update_service_spec.rb'
+ - 'spec/services/incident_management/issuable_escalation_statuses/build_service_spec.rb'
+ - 'spec/services/incident_management/issuable_escalation_statuses/create_service_spec.rb'
+ - 'spec/services/incident_management/issuable_escalation_statuses/prepare_update_service_spec.rb'
+ - 'spec/services/incident_management/pager_duty/create_incident_issue_service_spec.rb'
+ - 'spec/services/incident_management/pager_duty/process_webhook_service_spec.rb'
+ - 'spec/services/incident_management/timeline_event_tags/create_service_spec.rb'
+ - 'spec/services/incident_management/timeline_events/create_service_spec.rb'
+ - 'spec/services/incident_management/timeline_events/destroy_service_spec.rb'
+ - 'spec/services/integrations/propagate_service_spec.rb'
+ - 'spec/services/integrations/test/project_service_spec.rb'
+ - 'spec/services/issuable/bulk_update_service_spec.rb'
+ - 'spec/services/issuable/common_system_notes_service_spec.rb'
+ - 'spec/services/issuable/destroy_label_links_service_spec.rb'
+ - 'spec/services/issuable/destroy_service_spec.rb'
+ - 'spec/services/issuable/discussions_list_service_spec.rb'
+ - 'spec/services/issuable/process_assignees_spec.rb'
+ - 'spec/services/issue_links/create_service_spec.rb'
+ - 'spec/services/issue_links/destroy_service_spec.rb'
+ - 'spec/services/issue_links/list_service_spec.rb'
+ - 'spec/services/issues/after_create_service_spec.rb'
+ - 'spec/services/issues/build_service_spec.rb'
+ - 'spec/services/issues/clone_service_spec.rb'
+ - 'spec/services/issues/close_service_spec.rb'
+ - 'spec/services/issues/create_service_spec.rb'
+ - 'spec/services/issues/duplicate_service_spec.rb'
+ - 'spec/services/issues/export_csv_service_spec.rb'
+ - 'spec/services/issues/import_csv_service_spec.rb'
+ - 'spec/services/issues/move_service_spec.rb'
+ - 'spec/services/issues/prepare_import_csv_service_spec.rb'
+ - 'spec/services/issues/referenced_merge_requests_service_spec.rb'
+ - 'spec/services/issues/related_branches_service_spec.rb'
+ - 'spec/services/issues/relative_position_rebalancing_service_spec.rb'
+ - 'spec/services/issues/reopen_service_spec.rb'
+ - 'spec/services/issues/reorder_service_spec.rb'
+ - 'spec/services/issues/resolve_discussions_spec.rb'
+ - 'spec/services/issues/set_crm_contacts_service_spec.rb'
+ - 'spec/services/issues/update_service_spec.rb'
+ - 'spec/services/issues/zoom_link_service_spec.rb'
+ - 'spec/services/jira/requests/projects/list_service_spec.rb'
+ - 'spec/services/jira_connect/sync_service_spec.rb'
+ - 'spec/services/jira_connect_installations/destroy_service_spec.rb'
+ - 'spec/services/jira_connect_subscriptions/create_service_spec.rb'
+ - 'spec/services/jira_import/cloud_users_mapper_service_spec.rb'
+ - 'spec/services/jira_import/server_users_mapper_service_spec.rb'
+ - 'spec/services/jira_import/start_import_service_spec.rb'
+ - 'spec/services/jira_import/users_importer_spec.rb'
+ - 'spec/services/keys/create_service_spec.rb'
+ - 'spec/services/keys/destroy_service_spec.rb'
+ - 'spec/services/keys/expiry_notification_service_spec.rb'
+ - 'spec/services/keys/last_used_service_spec.rb'
+ - 'spec/services/labels/available_labels_service_spec.rb'
+ - 'spec/services/labels/create_service_spec.rb'
+ - 'spec/services/labels/find_or_create_service_spec.rb'
+ - 'spec/services/labels/promote_service_spec.rb'
+ - 'spec/services/labels/transfer_service_spec.rb'
+ - 'spec/services/labels/update_service_spec.rb'
+ - 'spec/services/lfs/lock_file_service_spec.rb'
+ - 'spec/services/lfs/locks_finder_service_spec.rb'
+ - 'spec/services/lfs/push_service_spec.rb'
+ - 'spec/services/lfs/unlock_file_service_spec.rb'
+ - 'spec/services/loose_foreign_keys/batch_cleaner_service_spec.rb'
+ - 'spec/services/loose_foreign_keys/cleaner_service_spec.rb'
+ - 'spec/services/loose_foreign_keys/process_deleted_records_service_spec.rb'
+ - 'spec/services/markdown_content_rewriter_service_spec.rb'
+ - 'spec/services/markup/rendering_service_spec.rb'
+ - 'spec/services/members/approve_access_request_service_spec.rb'
+ - 'spec/services/members/create_service_spec.rb'
+ - 'spec/services/members/creator_service_spec.rb'
+ - 'spec/services/members/groups/creator_service_spec.rb'
+ - 'spec/services/members/import_project_team_service_spec.rb'
+ - 'spec/services/members/invitation_reminder_email_service_spec.rb'
+ - 'spec/services/members/invite_member_builder_spec.rb'
+ - 'spec/services/members/invite_service_spec.rb'
+ - 'spec/services/members/projects/creator_service_spec.rb'
+ - 'spec/services/members/request_access_service_spec.rb'
+ - 'spec/services/members/standard_member_builder_spec.rb'
+ - 'spec/services/members/unassign_issuables_service_spec.rb'
+ - 'spec/services/members/update_service_spec.rb'
+ - 'spec/services/merge_requests/add_context_service_spec.rb'
+ - 'spec/services/merge_requests/add_spent_time_service_spec.rb'
+ - 'spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb'
+ - 'spec/services/merge_requests/after_create_service_spec.rb'
+ - 'spec/services/merge_requests/approval_service_spec.rb'
+ - 'spec/services/merge_requests/assign_issues_service_spec.rb'
+ - 'spec/services/merge_requests/build_service_spec.rb'
+ - 'spec/services/merge_requests/cleanup_refs_service_spec.rb'
+ - 'spec/services/merge_requests/close_service_spec.rb'
+ - 'spec/services/merge_requests/conflicts/list_service_spec.rb'
+ - 'spec/services/merge_requests/conflicts/resolve_service_spec.rb'
+ - 'spec/services/merge_requests/create_approval_event_service_spec.rb'
+ - 'spec/services/merge_requests/create_from_issue_service_spec.rb'
+ - 'spec/services/merge_requests/create_pipeline_service_spec.rb'
+ - 'spec/services/merge_requests/create_service_spec.rb'
+ - 'spec/services/merge_requests/delete_non_latest_diffs_service_spec.rb'
+ - 'spec/services/merge_requests/execute_approval_hooks_service_spec.rb'
+ - 'spec/services/merge_requests/export_csv_service_spec.rb'
+ - 'spec/services/merge_requests/ff_merge_service_spec.rb'
+ - 'spec/services/merge_requests/get_urls_service_spec.rb'
+ - 'spec/services/merge_requests/handle_assignees_change_service_spec.rb'
+ - 'spec/services/merge_requests/link_lfs_objects_service_spec.rb'
+ - 'spec/services/merge_requests/mark_reviewer_reviewed_service_spec.rb'
+ - 'spec/services/merge_requests/merge_orchestration_service_spec.rb'
+ - 'spec/services/merge_requests/merge_service_spec.rb'
+ - 'spec/services/merge_requests/merge_to_ref_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/check_base_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/check_broken_status_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/check_ci_status_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/check_discussions_status_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/check_draft_status_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/check_open_status_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability/logger_spec.rb'
+ - 'spec/services/merge_requests/mergeability/run_checks_service_spec.rb'
+ - 'spec/services/merge_requests/mergeability_check_service_spec.rb'
+ - 'spec/services/merge_requests/migrate_external_diffs_service_spec.rb'
+ - 'spec/services/merge_requests/post_merge_service_spec.rb'
+ - 'spec/services/merge_requests/push_options_handler_service_spec.rb'
+ - 'spec/services/merge_requests/pushed_branches_service_spec.rb'
+ - 'spec/services/merge_requests/rebase_service_spec.rb'
+ - 'spec/services/merge_requests/reload_diffs_service_spec.rb'
+ - 'spec/services/merge_requests/reload_merge_head_diff_service_spec.rb'
+ - 'spec/services/merge_requests/remove_approval_service_spec.rb'
+ - 'spec/services/merge_requests/reopen_service_spec.rb'
+ - 'spec/services/merge_requests/request_review_service_spec.rb'
+ - 'spec/services/merge_requests/resolve_todos_service_spec.rb'
+ - 'spec/services/merge_requests/resolved_discussion_notification_service_spec.rb'
+ - 'spec/services/merge_requests/retarget_chain_service_spec.rb'
+ - 'spec/services/merge_requests/squash_service_spec.rb'
+ - 'spec/services/merge_requests/update_assignees_service_spec.rb'
+ - 'spec/services/merge_requests/update_reviewers_service_spec.rb'
+ - 'spec/services/metrics/dashboard/annotations/create_service_spec.rb'
+ - 'spec/services/metrics/dashboard/annotations/delete_service_spec.rb'
+ - 'spec/services/metrics/dashboard/clone_dashboard_service_spec.rb'
+ - 'spec/services/metrics/dashboard/cluster_dashboard_service_spec.rb'
+ - 'spec/services/metrics/dashboard/cluster_metrics_embed_service_spec.rb'
+ - 'spec/services/metrics/dashboard/custom_dashboard_service_spec.rb'
+ - 'spec/services/metrics/dashboard/custom_metric_embed_service_spec.rb'
+ - 'spec/services/metrics/dashboard/default_embed_service_spec.rb'
+ - 'spec/services/metrics/dashboard/dynamic_embed_service_spec.rb'
+ - 'spec/services/metrics/dashboard/gitlab_alert_embed_service_spec.rb'
+ - 'spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb'
+ - 'spec/services/metrics/dashboard/panel_preview_service_spec.rb'
+ - 'spec/services/metrics/dashboard/pod_dashboard_service_spec.rb'
+ - 'spec/services/metrics/dashboard/self_monitoring_dashboard_service_spec.rb'
+ - 'spec/services/metrics/dashboard/system_dashboard_service_spec.rb'
+ - 'spec/services/metrics/dashboard/transient_embed_service_spec.rb'
+ - 'spec/services/metrics/dashboard/update_dashboard_service_spec.rb'
+ - 'spec/services/metrics/sample_metrics_service_spec.rb'
+ - 'spec/services/metrics/users_starred_dashboards/create_service_spec.rb'
+ - 'spec/services/metrics/users_starred_dashboards/delete_service_spec.rb'
+ - 'spec/services/milestones/close_service_spec.rb'
+ - 'spec/services/milestones/closed_issues_count_service_spec.rb'
+ - 'spec/services/milestones/create_service_spec.rb'
+ - 'spec/services/milestones/destroy_service_spec.rb'
+ - 'spec/services/milestones/find_or_create_service_spec.rb'
+ - 'spec/services/milestones/issues_count_service_spec.rb'
+ - 'spec/services/milestones/merge_requests_count_service_spec.rb'
+ - 'spec/services/milestones/promote_service_spec.rb'
+ - 'spec/services/milestones/transfer_service_spec.rb'
+ - 'spec/services/milestones/update_service_spec.rb'
+ - 'spec/services/ml/experiment_tracking/candidate_repository_spec.rb'
+ - 'spec/services/ml/experiment_tracking/experiment_repository_spec.rb'
+ - 'spec/services/namespace_settings/update_service_spec.rb'
+ - 'spec/services/namespaces/in_product_marketing_emails_service_spec.rb'
+ - 'spec/services/namespaces/package_settings/update_service_spec.rb'
+ - 'spec/services/namespaces/statistics_refresher_service_spec.rb'
+ - 'spec/services/note_summary_spec.rb'
+ - 'spec/services/notes/build_service_spec.rb'
+ - 'spec/services/notes/copy_service_spec.rb'
+ - 'spec/services/notes/create_service_spec.rb'
+ - 'spec/services/notes/destroy_service_spec.rb'
+ - 'spec/services/notes/post_process_service_spec.rb'
+ - 'spec/services/notes/quick_actions_service_spec.rb'
+ - 'spec/services/notes/render_service_spec.rb'
+ - 'spec/services/notes/resolve_service_spec.rb'
+ - 'spec/services/notes/update_service_spec.rb'
+ - 'spec/services/notification_recipients/build_service_spec.rb'
+ - 'spec/services/notification_recipients/builder/default_spec.rb'
+ - 'spec/services/notification_recipients/builder/new_note_spec.rb'
+ - 'spec/services/onboarding/progress_service_spec.rb'
+ - 'spec/services/packages/cleanup/execute_policy_service_spec.rb'
+ - 'spec/services/packages/cleanup/update_policy_service_spec.rb'
+ - 'spec/services/packages/composer/composer_json_service_spec.rb'
+ - 'spec/services/packages/composer/create_package_service_spec.rb'
+ - 'spec/services/packages/composer/version_parser_service_spec.rb'
+ - 'spec/services/packages/conan/create_package_file_service_spec.rb'
+ - 'spec/services/packages/conan/create_package_service_spec.rb'
+ - 'spec/services/packages/create_dependency_service_spec.rb'
+ - 'spec/services/packages/create_event_service_spec.rb'
+ - 'spec/services/packages/create_package_file_service_spec.rb'
+ - 'spec/services/packages/create_temporary_package_service_spec.rb'
+ - 'spec/services/packages/debian/create_distribution_service_spec.rb'
+ - 'spec/services/packages/debian/create_package_file_service_spec.rb'
+ - 'spec/services/packages/debian/extract_changes_metadata_service_spec.rb'
+ - 'spec/services/packages/debian/extract_deb_metadata_service_spec.rb'
+ - 'spec/services/packages/debian/extract_metadata_service_spec.rb'
+ - 'spec/services/packages/debian/find_or_create_incoming_service_spec.rb'
+ - 'spec/services/packages/debian/find_or_create_package_service_spec.rb'
+ - 'spec/services/packages/debian/generate_distribution_key_service_spec.rb'
+ - 'spec/services/packages/debian/generate_distribution_service_spec.rb'
+ - 'spec/services/packages/debian/parse_debian822_service_spec.rb'
+ - 'spec/services/packages/debian/process_changes_service_spec.rb'
+ - 'spec/services/packages/debian/process_package_file_service_spec.rb'
+ - 'spec/services/packages/debian/sign_distribution_service_spec.rb'
+ - 'spec/services/packages/debian/update_distribution_service_spec.rb'
+ - 'spec/services/packages/generic/create_package_file_service_spec.rb'
+ - 'spec/services/packages/generic/find_or_create_package_service_spec.rb'
+ - 'spec/services/packages/go/create_package_service_spec.rb'
+ - 'spec/services/packages/go/sync_packages_service_spec.rb'
+ - 'spec/services/packages/helm/extract_file_metadata_service_spec.rb'
+ - 'spec/services/packages/helm/process_file_service_spec.rb'
+ - 'spec/services/packages/mark_package_files_for_destruction_service_spec.rb'
+ - 'spec/services/packages/mark_package_for_destruction_service_spec.rb'
+ - 'spec/services/packages/mark_packages_for_destruction_service_spec.rb'
+ - 'spec/services/packages/maven/create_package_service_spec.rb'
+ - 'spec/services/packages/maven/find_or_create_package_service_spec.rb'
+ - 'spec/services/packages/maven/metadata/append_package_file_service_spec.rb'
+ - 'spec/services/packages/maven/metadata/create_plugins_xml_service_spec.rb'
+ - 'spec/services/packages/maven/metadata/create_versions_xml_service_spec.rb'
+ - 'spec/services/packages/maven/metadata/sync_service_spec.rb'
+ - 'spec/services/packages/npm/create_package_service_spec.rb'
+ - 'spec/services/packages/npm/create_tag_service_spec.rb'
+ - 'spec/services/packages/nuget/create_dependency_service_spec.rb'
+ - 'spec/services/packages/nuget/metadata_extraction_service_spec.rb'
+ - 'spec/services/packages/nuget/search_service_spec.rb'
+ - 'spec/services/packages/nuget/sync_metadatum_service_spec.rb'
+ - 'spec/services/packages/nuget/update_package_from_metadata_service_spec.rb'
+ - 'spec/services/packages/pypi/create_package_service_spec.rb'
+ - 'spec/services/packages/remove_tag_service_spec.rb'
+ - 'spec/services/packages/rpm/parse_package_service_spec.rb'
+ - 'spec/services/packages/rpm/repository_metadata/build_filelist_xml_service_spec.rb'
+ - 'spec/services/packages/rpm/repository_metadata/build_other_xml_service_spec.rb'
+ - 'spec/services/packages/rpm/repository_metadata/build_primary_xml_service_spec.rb'
+ - 'spec/services/packages/rpm/repository_metadata/build_repomd_xml_service_spec.rb'
+ - 'spec/services/packages/rpm/repository_metadata/update_xml_service_spec.rb'
+ - 'spec/services/packages/rubygems/create_dependencies_service_spec.rb'
+ - 'spec/services/packages/rubygems/create_gemspec_service_spec.rb'
+ - 'spec/services/packages/rubygems/dependency_resolver_service_spec.rb'
+ - 'spec/services/packages/rubygems/metadata_extraction_service_spec.rb'
+ - 'spec/services/packages/rubygems/process_gem_service_spec.rb'
+ - 'spec/services/packages/terraform_module/create_package_service_spec.rb'
+ - 'spec/services/packages/update_package_file_service_spec.rb'
+ - 'spec/services/packages/update_tags_service_spec.rb'
+ - 'spec/services/pages/delete_service_spec.rb'
+ - 'spec/services/pages/destroy_deployments_service_spec.rb'
+ - 'spec/services/pages/migrate_from_legacy_storage_service_spec.rb'
+ - 'spec/services/pages/migrate_legacy_storage_to_deployment_service_spec.rb'
+ - 'spec/services/pages/zip_directory_service_spec.rb'
+ - 'spec/services/pages_domains/create_acme_order_service_spec.rb'
+ - 'spec/services/pages_domains/obtain_lets_encrypt_certificate_service_spec.rb'
+ - 'spec/services/personal_access_tokens/create_service_spec.rb'
+ - 'spec/services/personal_access_tokens/last_used_service_spec.rb'
+ - 'spec/services/personal_access_tokens/revoke_service_spec.rb'
+ - 'spec/services/post_receive_service_spec.rb'
+ - 'spec/services/preview_markdown_service_spec.rb'
+ - 'spec/services/product_analytics/build_activity_graph_service_spec.rb'
+ - 'spec/services/product_analytics/build_graph_service_spec.rb'
+ - 'spec/services/projects/after_rename_service_spec.rb'
+ - 'spec/services/projects/alerting/notify_service_spec.rb'
+ - 'spec/services/projects/all_issues_count_service_spec.rb'
+ - 'spec/services/projects/all_merge_requests_count_service_spec.rb'
+ - 'spec/services/projects/android_target_platform_detector_service_spec.rb'
+ - 'spec/services/projects/apple_target_platform_detector_service_spec.rb'
+ - 'spec/services/projects/auto_devops/disable_service_spec.rb'
+ - 'spec/services/projects/autocomplete_service_spec.rb'
+ - 'spec/services/projects/batch_open_issues_count_service_spec.rb'
+ - 'spec/services/projects/blame_service_spec.rb'
+ - 'spec/services/projects/branches_by_mode_service_spec.rb'
+ - 'spec/services/projects/cleanup_service_spec.rb'
+ - 'spec/services/projects/container_repository/cleanup_tags_service_spec.rb'
+ - 'spec/services/projects/container_repository/delete_tags_service_spec.rb'
+ - 'spec/services/projects/container_repository/destroy_service_spec.rb'
+ - 'spec/services/projects/container_repository/gitlab/cleanup_tags_service_spec.rb'
+ - 'spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb'
+ - 'spec/services/projects/container_repository/third_party/cleanup_tags_service_spec.rb'
+ - 'spec/services/projects/container_repository/third_party/delete_tags_service_spec.rb'
+ - 'spec/services/projects/count_service_spec.rb'
+ - 'spec/services/projects/create_from_template_service_spec.rb'
+ - 'spec/services/projects/deploy_tokens/create_service_spec.rb'
+ - 'spec/services/projects/deploy_tokens/destroy_service_spec.rb'
+ - 'spec/services/projects/destroy_service_spec.rb'
+ - 'spec/services/projects/detect_repository_languages_service_spec.rb'
+ - 'spec/services/projects/download_service_spec.rb'
+ - 'spec/services/projects/enable_deploy_key_service_spec.rb'
+ - 'spec/services/projects/fork_service_spec.rb'
+ - 'spec/services/projects/forks_count_service_spec.rb'
+ - 'spec/services/projects/git_deduplication_service_spec.rb'
+ - 'spec/services/projects/gitlab_projects_import_service_spec.rb'
+ - 'spec/services/projects/group_links/create_service_spec.rb'
+ - 'spec/services/projects/group_links/destroy_service_spec.rb'
+ - 'spec/services/projects/group_links/update_service_spec.rb'
+ - 'spec/services/projects/hashed_storage/base_attachment_service_spec.rb'
+ - 'spec/services/projects/hashed_storage/migrate_attachments_service_spec.rb'
+ - 'spec/services/projects/hashed_storage/migrate_repository_service_spec.rb'
+ - 'spec/services/projects/hashed_storage/migration_service_spec.rb'
+ - 'spec/services/projects/hashed_storage/rollback_attachments_service_spec.rb'
+ - 'spec/services/projects/hashed_storage/rollback_repository_service_spec.rb'
+ - 'spec/services/projects/hashed_storage/rollback_service_spec.rb'
+ - 'spec/services/projects/import_error_filter_spec.rb'
+ - 'spec/services/projects/import_export/export_service_spec.rb'
+ - 'spec/services/projects/import_export/relation_export_service_spec.rb'
+ - 'spec/services/projects/import_service_spec.rb'
+ - 'spec/services/projects/in_product_marketing_campaign_emails_service_spec.rb'
+ - 'spec/services/projects/lfs_pointers/lfs_download_link_list_service_spec.rb'
+ - 'spec/services/projects/lfs_pointers/lfs_download_service_spec.rb'
+ - 'spec/services/projects/lfs_pointers/lfs_import_service_spec.rb'
+ - 'spec/services/projects/lfs_pointers/lfs_link_service_spec.rb'
+ - 'spec/services/projects/lfs_pointers/lfs_object_download_list_service_spec.rb'
+ - 'spec/services/projects/move_access_service_spec.rb'
+ - 'spec/services/projects/move_deploy_keys_projects_service_spec.rb'
+ - 'spec/services/projects/move_forks_service_spec.rb'
+ - 'spec/services/projects/move_lfs_objects_projects_service_spec.rb'
+ - 'spec/services/projects/move_notification_settings_service_spec.rb'
+ - 'spec/services/projects/move_project_authorizations_service_spec.rb'
+ - 'spec/services/projects/move_project_group_links_service_spec.rb'
+ - 'spec/services/projects/move_project_members_service_spec.rb'
+ - 'spec/services/projects/move_users_star_projects_service_spec.rb'
+ - 'spec/services/projects/open_issues_count_service_spec.rb'
+ - 'spec/services/projects/open_merge_requests_count_service_spec.rb'
+ - 'spec/services/projects/operations/update_service_spec.rb'
+ - 'spec/services/projects/overwrite_project_service_spec.rb'
+ - 'spec/services/projects/participants_service_spec.rb'
+ - 'spec/services/projects/prometheus/alerts/notify_service_spec.rb'
+ - 'spec/services/projects/prometheus/metrics/destroy_service_spec.rb'
+ - 'spec/services/projects/protect_default_branch_service_spec.rb'
+ - 'spec/services/projects/readme_renderer_service_spec.rb'
+ - 'spec/services/projects/record_target_platforms_service_spec.rb'
+ - 'spec/services/projects/refresh_build_artifacts_size_statistics_service_spec.rb'
+ - 'spec/services/projects/repository_languages_service_spec.rb'
+ - 'spec/services/projects/schedule_bulk_repository_shard_moves_service_spec.rb'
+ - 'spec/services/projects/transfer_service_spec.rb'
+ - 'spec/services/projects/unlink_fork_service_spec.rb'
+ - 'spec/services/projects/update_pages_service_spec.rb'
+ - 'spec/services/projects/update_remote_mirror_service_spec.rb'
+ - 'spec/services/projects/update_repository_storage_service_spec.rb'
+ - 'spec/services/projects/update_service_spec.rb'
+ - 'spec/services/projects/update_statistics_service_spec.rb'
+ - 'spec/services/prometheus/proxy_service_spec.rb'
+ - 'spec/services/prometheus/proxy_variable_substitution_service_spec.rb'
+ - 'spec/services/protected_branches/api_service_spec.rb'
+ - 'spec/services/protected_branches/cache_service_spec.rb'
+ - 'spec/services/protected_branches/create_service_spec.rb'
+ - 'spec/services/protected_branches/destroy_service_spec.rb'
+ - 'spec/services/protected_branches/update_service_spec.rb'
+ - 'spec/services/protected_tags/create_service_spec.rb'
+ - 'spec/services/protected_tags/destroy_service_spec.rb'
+ - 'spec/services/protected_tags/update_service_spec.rb'
+ - 'spec/services/push_event_payload_service_spec.rb'
+ - 'spec/services/quick_actions/interpret_service_spec.rb'
+ - 'spec/services/quick_actions/target_service_spec.rb'
+ - 'spec/services/releases/create_evidence_service_spec.rb'
+ - 'spec/services/releases/create_service_spec.rb'
+ - 'spec/services/releases/destroy_service_spec.rb'
+ - 'spec/services/releases/update_service_spec.rb'
+ - 'spec/services/repositories/changelog_service_spec.rb'
+ - 'spec/services/repositories/destroy_service_spec.rb'
+ - 'spec/services/repository_archive_clean_up_service_spec.rb'
+ - 'spec/services/reset_project_cache_service_spec.rb'
+ - 'spec/services/resource_access_tokens/create_service_spec.rb'
+ - 'spec/services/resource_access_tokens/revoke_service_spec.rb'
+ - 'spec/services/resource_events/change_labels_service_spec.rb'
+ - 'spec/services/resource_events/change_milestone_service_spec.rb'
+ - 'spec/services/resource_events/change_state_service_spec.rb'
+ - 'spec/services/resource_events/merge_into_notes_service_spec.rb'
+ - 'spec/services/resource_events/synthetic_label_notes_builder_service_spec.rb'
+ - 'spec/services/resource_events/synthetic_milestone_notes_builder_service_spec.rb'
+ - 'spec/services/resource_events/synthetic_state_notes_builder_service_spec.rb'
+ - 'spec/services/search/global_service_spec.rb'
+ - 'spec/services/search/group_service_spec.rb'
+ - 'spec/services/search/snippet_service_spec.rb'
+ - 'spec/services/security/ci_configuration/container_scanning_create_service_spec.rb'
+ - 'spec/services/security/ci_configuration/sast_iac_create_service_spec.rb'
+ - 'spec/services/security/ci_configuration/sast_parser_service_spec.rb'
+ - 'spec/services/security/ci_configuration/secret_detection_create_service_spec.rb'
+ - 'spec/services/security/merge_reports_service_spec.rb'
+ - 'spec/services/serverless/associate_domain_service_spec.rb'
+ - 'spec/services/service_desk_settings/update_service_spec.rb'
+ - 'spec/services/service_ping/submit_service_ping_service_spec.rb'
+ - 'spec/services/service_response_spec.rb'
+ - 'spec/services/snippets/bulk_destroy_service_spec.rb'
+ - 'spec/services/snippets/count_service_spec.rb'
+ - 'spec/services/snippets/create_service_spec.rb'
+ - 'spec/services/snippets/destroy_service_spec.rb'
+ - 'spec/services/snippets/repository_validation_service_spec.rb'
+ - 'spec/services/snippets/schedule_bulk_repository_shard_moves_service_spec.rb'
+ - 'spec/services/snippets/update_repository_storage_service_spec.rb'
+ - 'spec/services/snippets/update_service_spec.rb'
+ - 'spec/services/snippets/update_statistics_service_spec.rb'
+ - 'spec/services/spam/akismet_mark_as_spam_service_spec.rb'
+ - 'spec/services/spam/akismet_service_spec.rb'
+ - 'spec/services/spam/ham_service_spec.rb'
+ - 'spec/services/spam/spam_action_service_spec.rb'
+ - 'spec/services/spam/spam_params_spec.rb'
+ - 'spec/services/spam/spam_verdict_service_spec.rb'
+ - 'spec/services/submodules/update_service_spec.rb'
+ - 'spec/services/suggestions/apply_service_spec.rb'
+ - 'spec/services/suggestions/create_service_spec.rb'
+ - 'spec/services/suggestions/outdate_service_spec.rb'
+ - 'spec/services/system_hooks_service_spec.rb'
+ - 'spec/services/system_note_service_spec.rb'
+ - 'spec/services/system_notes/alert_management_service_spec.rb'
+ - 'spec/services/system_notes/base_service_spec.rb'
+ - 'spec/services/system_notes/commit_service_spec.rb'
+ - 'spec/services/system_notes/design_management_service_spec.rb'
+ - 'spec/services/system_notes/incident_service_spec.rb'
+ - 'spec/services/system_notes/incidents_service_spec.rb'
+ - 'spec/services/system_notes/issuables_service_spec.rb'
+ - 'spec/services/system_notes/merge_requests_service_spec.rb'
+ - 'spec/services/system_notes/time_tracking_service_spec.rb'
+ - 'spec/services/system_notes/zoom_service_spec.rb'
+ - 'spec/services/tags/create_service_spec.rb'
+ - 'spec/services/tags/destroy_service_spec.rb'
+ - 'spec/services/task_list_toggle_service_spec.rb'
+ - 'spec/services/tasks_to_be_done/base_service_spec.rb'
+ - 'spec/services/terraform/remote_state_handler_spec.rb'
+ - 'spec/services/terraform/states/destroy_service_spec.rb'
+ - 'spec/services/terraform/states/trigger_destroy_service_spec.rb'
+ - 'spec/services/test_hooks/project_service_spec.rb'
+ - 'spec/services/test_hooks/system_service_spec.rb'
+ - 'spec/services/timelogs/delete_service_spec.rb'
+ - 'spec/services/todo_service_spec.rb'
+ - 'spec/services/todos/allowed_target_filter_service_spec.rb'
+ - 'spec/services/todos/destroy/confidential_issue_service_spec.rb'
+ - 'spec/services/todos/destroy/design_service_spec.rb'
+ - 'spec/services/todos/destroy/destroyed_issuable_service_spec.rb'
+ - 'spec/services/todos/destroy/entity_leave_service_spec.rb'
+ - 'spec/services/todos/destroy/group_private_service_spec.rb'
+ - 'spec/services/todos/destroy/project_private_service_spec.rb'
+ - 'spec/services/todos/destroy/unauthorized_features_service_spec.rb'
+ - 'spec/services/topics/merge_service_spec.rb'
+ - 'spec/services/two_factor/destroy_service_spec.rb'
+ - 'spec/services/update_container_registry_info_service_spec.rb'
+ - 'spec/services/update_merge_request_metrics_service_spec.rb'
+ - 'spec/services/upload_service_spec.rb'
+ - 'spec/services/uploads/destroy_service_spec.rb'
+ - 'spec/services/user_preferences/update_service_spec.rb'
+ - 'spec/services/user_project_access_changed_service_spec.rb'
+ - 'spec/services/users/activity_service_spec.rb'
+ - 'spec/services/users/approve_service_spec.rb'
+ - 'spec/services/users/authorized_build_service_spec.rb'
+ - 'spec/services/users/ban_service_spec.rb'
+ - 'spec/services/users/banned_user_base_service_spec.rb'
+ - 'spec/services/users/batch_status_cleaner_service_spec.rb'
+ - 'spec/services/users/block_service_spec.rb'
+ - 'spec/services/users/build_service_spec.rb'
+ - 'spec/services/users/create_service_spec.rb'
+ - 'spec/services/users/destroy_service_spec.rb'
+ - 'spec/services/users/dismiss_callout_service_spec.rb'
+ - 'spec/services/users/dismiss_group_callout_service_spec.rb'
+ - 'spec/services/users/dismiss_project_callout_service_spec.rb'
+ - 'spec/services/users/email_verification/generate_token_service_spec.rb'
+ - 'spec/services/users/email_verification/validate_token_service_spec.rb'
+ - 'spec/services/users/in_product_marketing_email_records_spec.rb'
+ - 'spec/services/users/keys_count_service_spec.rb'
+ - 'spec/services/users/last_push_event_service_spec.rb'
+ - 'spec/services/users/migrate_records_to_ghost_user_in_batches_service_spec.rb'
+ - 'spec/services/users/migrate_records_to_ghost_user_service_spec.rb'
+ - 'spec/services/users/refresh_authorized_projects_service_spec.rb'
+ - 'spec/services/users/registrations_build_service_spec.rb'
+ - 'spec/services/users/reject_service_spec.rb'
+ - 'spec/services/users/repair_ldap_blocked_service_spec.rb'
+ - 'spec/services/users/respond_to_terms_service_spec.rb'
+ - 'spec/services/users/saved_replies/create_service_spec.rb'
+ - 'spec/services/users/saved_replies/destroy_service_spec.rb'
+ - 'spec/services/users/saved_replies/update_service_spec.rb'
+ - 'spec/services/users/set_status_service_spec.rb'
+ - 'spec/services/users/signup_service_spec.rb'
+ - 'spec/services/users/unban_service_spec.rb'
+ - 'spec/services/users/unblock_service_spec.rb'
+ - 'spec/services/users/update_canonical_email_service_spec.rb'
+ - 'spec/services/users/update_highest_member_role_service_spec.rb'
+ - 'spec/services/users/update_service_spec.rb'
+ - 'spec/services/users/update_todo_count_cache_service_spec.rb'
+ - 'spec/services/users/upsert_credit_card_validation_service_spec.rb'
+ - 'spec/services/users/validate_manual_otp_service_spec.rb'
+ - 'spec/services/users/validate_push_otp_service_spec.rb'
+ - 'spec/services/verify_pages_domain_service_spec.rb'
+ - 'spec/services/web_hook_service_spec.rb'
+ - 'spec/services/web_hooks/destroy_service_spec.rb'
+ - 'spec/services/web_hooks/log_destroy_service_spec.rb'
+ - 'spec/services/web_hooks/log_execution_service_spec.rb'
+ - 'spec/services/webauthn/authenticate_service_spec.rb'
+ - 'spec/services/webauthn/register_service_spec.rb'
+ - 'spec/services/wiki_pages/base_service_spec.rb'
+ - 'spec/services/wiki_pages/create_service_spec.rb'
+ - 'spec/services/wiki_pages/destroy_service_spec.rb'
+ - 'spec/services/wiki_pages/event_create_service_spec.rb'
+ - 'spec/services/wiki_pages/update_service_spec.rb'
+ - 'spec/services/wikis/create_attachment_service_spec.rb'
+ - 'spec/services/work_items/build_service_spec.rb'
+ - 'spec/services/work_items/create_from_task_service_spec.rb'
+ - 'spec/services/work_items/create_service_spec.rb'
+ - 'spec/services/work_items/delete_service_spec.rb'
+ - 'spec/services/work_items/delete_task_service_spec.rb'
+ - 'spec/services/work_items/parent_links/destroy_service_spec.rb'
+ - 'spec/services/work_items/task_list_reference_removal_service_spec.rb'
+ - 'spec/services/work_items/task_list_reference_replacement_service_spec.rb'
+ - 'spec/services/work_items/update_service_spec.rb'
+ - 'spec/services/work_items/widgets/assignees_service/update_service_spec.rb'
+ - 'spec/services/work_items/widgets/description_service/update_service_spec.rb'
+ - 'spec/services/work_items/widgets/milestone_service/create_service_spec.rb'
+ - 'spec/services/work_items/widgets/milestone_service/update_service_spec.rb'
+ - 'spec/services/work_items/widgets/start_and_due_date_service/update_service_spec.rb'
+ - 'spec/services/x509_certificate_revoke_service_spec.rb'
+ - 'spec/sidekiq/cron/job_gem_dependency_spec.rb'
+ - 'spec/sidekiq_cluster/sidekiq_cluster_spec.rb'
+ - 'spec/spam/concerns/has_spam_action_response_fields_spec.rb'
+ - 'spec/support_specs/capybara_slow_finder_spec.rb'
+ - 'spec/support_specs/database/multiple_databases_helpers_spec.rb'
+ - 'spec/support_specs/database/prevent_cross_joins_spec.rb'
+ - 'spec/support_specs/database/without_check_constraint_spec.rb'
+ - 'spec/support_specs/graphql/arguments_spec.rb'
+ - 'spec/support_specs/graphql/field_selection_spec.rb'
+ - 'spec/support_specs/graphql/var_spec.rb'
+ - 'spec/support_specs/helpers/active_record/query_recorder_spec.rb'
+ - 'spec/support_specs/helpers/graphql_helpers_spec.rb'
+ - 'spec/support_specs/helpers/html_escaped_helpers_spec.rb'
+ - 'spec/support_specs/helpers/migrations_helpers_spec.rb'
+ - 'spec/support_specs/helpers/redis_commands/recorder_spec.rb'
+ - 'spec/support_specs/helpers/stub_feature_flags_spec.rb'
+ - 'spec/support_specs/helpers/stub_method_calls_spec.rb'
+ - 'spec/support_specs/matchers/be_sorted_spec.rb'
+ - 'spec/support_specs/matchers/event_store_spec.rb'
+ - 'spec/support_specs/matchers/exceed_query_limit_helpers_spec.rb'
+ - 'spec/support_specs/time_travel_spec.rb'
+ - 'spec/tasks/admin_mode_spec.rb'
+ - 'spec/tasks/config_lint_spec.rb'
+ - 'spec/tasks/dev_rake_spec.rb'
+ - 'spec/tasks/gettext_rake_spec.rb'
+ - 'spec/tasks/gitlab/artifacts/check_rake_spec.rb'
+ - 'spec/tasks/gitlab/artifacts/migrate_rake_spec.rb'
+ - 'spec/tasks/gitlab/background_migrations_rake_spec.rb'
+ - 'spec/tasks/gitlab/check_rake_spec.rb'
+ - 'spec/tasks/gitlab/cleanup_rake_spec.rb'
+ - 'spec/tasks/gitlab/container_registry_rake_spec.rb'
+ - 'spec/tasks/gitlab/db/validate_config_rake_spec.rb'
+ - 'spec/tasks/gitlab/db_rake_spec.rb'
+ - 'spec/tasks/gitlab/dependency_proxy/migrate_rake_spec.rb'
+ - 'spec/tasks/gitlab/external_diffs_rake_spec.rb'
+ - 'spec/tasks/gitlab/generate_sample_prometheus_data_spec.rb'
+ - 'spec/tasks/gitlab/git_rake_spec.rb'
+ - 'spec/tasks/gitlab/gitaly_rake_spec.rb'
+ - 'spec/tasks/gitlab/ldap_rake_spec.rb'
+ - 'spec/tasks/gitlab/lfs/check_rake_spec.rb'
+ - 'spec/tasks/gitlab/lfs/migrate_rake_spec.rb'
+ - 'spec/tasks/gitlab/packages/events_rake_spec.rb'
+ - 'spec/tasks/gitlab/packages/migrate_rake_spec.rb'
+ - 'spec/tasks/gitlab/pages_rake_spec.rb'
+ - 'spec/tasks/gitlab/password_rake_spec.rb'
+ - 'spec/tasks/gitlab/praefect_rake_spec.rb'
+ - 'spec/tasks/gitlab/refresh_project_statistics_build_artifacts_size_rake_spec.rb'
+ - 'spec/tasks/gitlab/seed/group_seed_rake_spec.rb'
+ - 'spec/tasks/gitlab/setup_rake_spec.rb'
+ - 'spec/tasks/gitlab/shell_rake_spec.rb'
+ - 'spec/tasks/gitlab/sidekiq_rake_spec.rb'
+ - 'spec/tasks/gitlab/smtp_rake_spec.rb'
+ - 'spec/tasks/gitlab/snippets_rake_spec.rb'
+ - 'spec/tasks/gitlab/storage_rake_spec.rb'
+ - 'spec/tasks/gitlab/task_helpers_spec.rb'
+ - 'spec/tasks/gitlab/terraform/migrate_rake_spec.rb'
+ - 'spec/tasks/gitlab/uploads/check_rake_spec.rb'
+ - 'spec/tasks/gitlab/uploads/migrate_rake_spec.rb'
+ - 'spec/tasks/gitlab/usage_data_rake_spec.rb'
+ - 'spec/tasks/gitlab/user_management_rake_spec.rb'
+ - 'spec/tasks/gitlab/web_hook_rake_spec.rb'
+ - 'spec/tasks/gitlab/workhorse_rake_spec.rb'
+ - 'spec/tasks/gitlab/x509/update_rake_spec.rb'
+ - 'spec/tasks/migrate/schema_check_rake_spec.rb'
+ - 'spec/tasks/rubocop_rake_spec.rb'
+ - 'spec/tasks/tokens_spec.rb'
+ - 'spec/tooling/danger/config_files_spec.rb'
+ - 'spec/tooling/danger/customer_success_spec.rb'
+ - 'spec/tooling/danger/datateam_spec.rb'
+ - 'spec/tooling/danger/feature_flag_spec.rb'
+ - 'spec/tooling/danger/product_intelligence_spec.rb'
+ - 'spec/tooling/danger/project_helper_spec.rb'
+ - 'spec/tooling/danger/sidekiq_queues_spec.rb'
+ - 'spec/tooling/docs/deprecation_handling_spec.rb'
+ - 'spec/tooling/graphql/docs/renderer_spec.rb'
+ - 'spec/tooling/lib/tooling/crystalball/coverage_lines_execution_detector_spec.rb'
+ - 'spec/tooling/lib/tooling/crystalball/coverage_lines_strategy_spec.rb'
+ - 'spec/tooling/lib/tooling/find_codeowners_spec.rb'
+ - 'spec/tooling/lib/tooling/helm3_client_spec.rb'
+ - 'spec/tooling/lib/tooling/kubernetes_client_spec.rb'
+ - 'spec/tooling/lib/tooling/parallel_rspec_runner_spec.rb'
+ - 'spec/tooling/lib/tooling/test_map_generator_spec.rb'
+ - 'spec/tooling/lib/tooling/test_map_packer_spec.rb'
+ - 'spec/tooling/merge_request_spec.rb'
+ - 'spec/tooling/rspec_flaky/config_spec.rb'
+ - 'spec/tooling/rspec_flaky/example_spec.rb'
+ - 'spec/tooling/rspec_flaky/flaky_example_spec.rb'
+ - 'spec/tooling/rspec_flaky/flaky_examples_collection_spec.rb'
+ - 'spec/tooling/rspec_flaky/listener_spec.rb'
+ - 'spec/tooling/rspec_flaky/report_spec.rb'
+ - 'spec/uploaders/attachment_uploader_spec.rb'
+ - 'spec/uploaders/avatar_uploader_spec.rb'
+ - 'spec/uploaders/ci/pipeline_artifact_uploader_spec.rb'
+ - 'spec/uploaders/ci/secure_file_uploader_spec.rb'
+ - 'spec/uploaders/content_type_whitelist_spec.rb'
+ - 'spec/uploaders/dependency_proxy/file_uploader_spec.rb'
+ - 'spec/uploaders/design_management/design_v432x230_uploader_spec.rb'
+ - 'spec/uploaders/external_diff_uploader_spec.rb'
+ - 'spec/uploaders/favicon_uploader_spec.rb'
+ - 'spec/uploaders/file_mover_spec.rb'
+ - 'spec/uploaders/file_uploader_spec.rb'
+ - 'spec/uploaders/gitlab_uploader_spec.rb'
+ - 'spec/uploaders/import_export_uploader_spec.rb'
+ - 'spec/uploaders/job_artifact_uploader_spec.rb'
+ - 'spec/uploaders/lfs_object_uploader_spec.rb'
+ - 'spec/uploaders/metric_image_uploader_spec.rb'
+ - 'spec/uploaders/namespace_file_uploader_spec.rb'
+ - 'spec/uploaders/object_storage/cdn/google_cdn_spec.rb'
+ - 'spec/uploaders/object_storage/cdn/google_ip_cache_spec.rb'
+ - 'spec/uploaders/object_storage/cdn_spec.rb'
+ - 'spec/uploaders/object_storage_spec.rb'
+ - 'spec/uploaders/packages/composer/cache_uploader_spec.rb'
+ - 'spec/uploaders/packages/debian/component_file_uploader_spec.rb'
+ - 'spec/uploaders/packages/debian/distribution_release_file_uploader_spec.rb'
+ - 'spec/uploaders/packages/package_file_uploader_spec.rb'
+ - 'spec/uploaders/packages/rpm/repository_file_uploader_spec.rb'
+ - 'spec/uploaders/pages/deployment_uploader_spec.rb'
+ - 'spec/uploaders/personal_file_uploader_spec.rb'
+ - 'spec/uploaders/records_uploads_spec.rb'
+ - 'spec/uploaders/terraform/state_uploader_spec.rb'
+ - 'spec/uploaders/uploader_helper_spec.rb'
+ - 'spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb'
+ - 'spec/validators/addressable_url_validator_spec.rb'
+ - 'spec/validators/any_field_validator_spec.rb'
+ - 'spec/validators/array_members_validator_spec.rb'
+ - 'spec/validators/bytesize_validator_spec.rb'
+ - 'spec/validators/color_validator_spec.rb'
+ - 'spec/validators/cron_freeze_period_timezone_validator_spec.rb'
+ - 'spec/validators/cron_validator_spec.rb'
+ - 'spec/validators/devise_email_validator_spec.rb'
+ - 'spec/validators/future_date_validator_spec.rb'
+ - 'spec/validators/gitlab/zoom_url_validator_spec.rb'
+ - 'spec/validators/html_safety_validator_spec.rb'
+ - 'spec/validators/import/gitlab_projects/remote_file_validator_spec.rb'
+ - 'spec/validators/ip_address_validator_spec.rb'
+ - 'spec/validators/iso8601_date_validator_spec.rb'
+ - 'spec/validators/js_regex_validator_spec.rb'
+ - 'spec/validators/json_schema_validator_spec.rb'
+ - 'spec/validators/named_ecdsa_key_validator_spec.rb'
+ - 'spec/validators/namespace_path_validator_spec.rb'
+ - 'spec/validators/nested_attributes_duplicates_validator_spec.rb'
+ - 'spec/validators/project_path_validator_spec.rb'
+ - 'spec/validators/public_url_validator_spec.rb'
+ - 'spec/validators/qualified_domain_array_validator_spec.rb'
+ - 'spec/validators/rsa_key_validator_spec.rb'
+ - 'spec/validators/sha_validator_spec.rb'
+ - 'spec/validators/system_hook_url_validator_spec.rb'
+ - 'spec/validators/web_hooks/wildcard_branch_filter_validator_spec.rb'
+ - 'spec/validators/x509_certificate_credentials_validator_spec.rb'
+ - 'spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb'
+ - 'spec/views/admin/application_settings/_eks.html.haml_spec.rb'
+ - 'spec/views/admin/application_settings/_jira_connect.html.haml_spec.rb'
+ - 'spec/views/admin/application_settings/_package_registry.html.haml_spec.rb'
+ - 'spec/views/admin/application_settings/_repository_storage.html.haml_spec.rb'
+ - 'spec/views/admin/application_settings/ci_cd.html.haml_spec.rb'
+ - 'spec/views/admin/application_settings/general.html.haml_spec.rb'
+ - 'spec/views/admin/application_settings/repository.html.haml_spec.rb'
+ - 'spec/views/admin/dashboard/index.html.haml_spec.rb'
+ - 'spec/views/admin/identities/index.html.haml_spec.rb'
+ - 'spec/views/admin/sessions/new.html.haml_spec.rb'
+ - 'spec/views/admin/sessions/two_factor.html.haml_spec.rb'
+ - 'spec/views/ci/status/_badge.html.haml_spec.rb'
+ - 'spec/views/ci/status/_icon.html.haml_spec.rb'
+ - 'spec/views/dashboard/milestones/index.html.haml_spec.rb'
+ - 'spec/views/dashboard/projects/_blank_state_admin_welcome.haml_spec.rb'
+ - 'spec/views/dashboard/projects/_blank_state_welcome.html.haml_spec.rb'
+ - 'spec/views/dashboard/projects/_nav.html.haml_spec.rb'
+ - 'spec/views/dashboard/projects/index.html.haml_spec.rb'
+ - 'spec/views/devise/confirmations/almost_there.html.haml_spec.rb'
+ - 'spec/views/devise/sessions/new.html.haml_spec.rb'
+ - 'spec/views/devise/shared/_signin_box.html.haml_spec.rb'
+ - 'spec/views/devise/shared/_signup_box.html.haml_spec.rb'
+ - 'spec/views/errors/access_denied.html.haml_spec.rb'
+ - 'spec/views/errors/omniauth_error.html.haml_spec.rb'
+ - 'spec/views/events/event/_common.html.haml_spec.rb'
+ - 'spec/views/events/event/_push.html.haml_spec.rb'
+ - 'spec/views/groups/_home_panel.html.haml_spec.rb'
+ - 'spec/views/groups/edit.html.haml_spec.rb'
+ - 'spec/views/groups/group_members/index.html.haml_spec.rb'
+ - 'spec/views/groups/milestones/index.html.haml_spec.rb'
+ - 'spec/views/groups/new.html.haml_spec.rb'
+ - 'spec/views/groups/observability/observability.html.haml_spec.rb'
+ - 'spec/views/groups/settings/_remove.html.haml_spec.rb'
+ - 'spec/views/help/drawers.html.haml_spec.rb'
+ - 'spec/views/help/index.html.haml_spec.rb'
+ - 'spec/views/help/instance_configuration.html.haml_spec.rb'
+ - 'spec/views/help/show.html.haml_spec.rb'
+ - 'spec/views/import/gitlab_projects/new.html.haml_spec.rb'
+ - 'spec/views/layouts/_flash.html.haml_spec.rb'
+ - 'spec/views/layouts/_head.html.haml_spec.rb'
+ - 'spec/views/layouts/_header_search.html.haml_spec.rb'
+ - 'spec/views/layouts/_published_experiments.html.haml_spec.rb'
+ - 'spec/views/layouts/_search.html.haml_spec.rb'
+ - 'spec/views/layouts/application.html.haml_spec.rb'
+ - 'spec/views/layouts/devise.html.haml_spec.rb'
+ - 'spec/views/layouts/devise_empty.html.haml_spec.rb'
+ - 'spec/views/layouts/fullscreen.html.haml_spec.rb'
+ - 'spec/views/layouts/header/_gitlab_version.html.haml_spec.rb'
+ - 'spec/views/layouts/header/_new_dropdown.haml_spec.rb'
+ - 'spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb'
+ - 'spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb'
+ - 'spec/views/layouts/nav/sidebar/_profile.html.haml_spec.rb'
+ - 'spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb'
+ - 'spec/views/layouts/profile.html.haml_spec.rb'
+ - 'spec/views/layouts/signup_onboarding.html.haml_spec.rb'
+ - 'spec/views/layouts/simple_registration.html.haml_spec.rb'
+ - 'spec/views/layouts/terms.html.haml_spec.rb'
+ - 'spec/views/notify/approved_merge_request_email.html.haml_spec.rb'
+ - 'spec/views/notify/autodevops_disabled_email.text.erb_spec.rb'
+ - 'spec/views/notify/change_in_merge_request_draft_status_email.html.haml_spec.rb'
+ - 'spec/views/notify/change_in_merge_request_draft_status_email.text.erb_spec.rb'
+ - 'spec/views/notify/changed_milestone_email.html.haml_spec.rb'
+ - 'spec/views/notify/import_issues_csv_email.html.haml_spec.rb'
+ - 'spec/views/notify/pipeline_failed_email.html.haml_spec.rb'
+ - 'spec/views/notify/pipeline_failed_email.text.erb_spec.rb'
+ - 'spec/views/notify/pipeline_fixed_email.html.haml_spec.rb'
+ - 'spec/views/notify/pipeline_fixed_email.text.erb_spec.rb'
+ - 'spec/views/notify/pipeline_success_email.html.haml_spec.rb'
+ - 'spec/views/notify/pipeline_success_email.text.erb_spec.rb'
+ - 'spec/views/notify/push_to_merge_request_email.text.haml_spec.rb'
+ - 'spec/views/profiles/audit_log.html.haml_spec.rb'
+ - 'spec/views/profiles/keys/_form.html.haml_spec.rb'
+ - 'spec/views/profiles/keys/_key.html.haml_spec.rb'
+ - 'spec/views/profiles/keys/_key_details.html.haml_spec.rb'
+ - 'spec/views/profiles/notifications/show.html.haml_spec.rb'
+ - 'spec/views/profiles/preferences/show.html.haml_spec.rb'
+ - 'spec/views/profiles/show.html.haml_spec.rb'
+ - 'spec/views/projects/_flash_messages.html.haml_spec.rb'
+ - 'spec/views/projects/_home_panel.html.haml_spec.rb'
+ - 'spec/views/projects/blob/_viewer.html.haml_spec.rb'
+ - 'spec/views/projects/branches/index.html.haml_spec.rb'
+ - 'spec/views/projects/commit/_commit_box.html.haml_spec.rb'
+ - 'spec/views/projects/commit/branches.html.haml_spec.rb'
+ - 'spec/views/projects/commits/_commit.html.haml_spec.rb'
+ - 'spec/views/projects/commits/show.html.haml_spec.rb'
+ - 'spec/views/projects/diffs/_viewer.html.haml_spec.rb'
+ - 'spec/views/projects/edit.html.haml_spec.rb'
+ - 'spec/views/projects/empty.html.haml_spec.rb'
+ - 'spec/views/projects/environments/terminal.html.haml_spec.rb'
+ - 'spec/views/projects/hooks/edit.html.haml_spec.rb'
+ - 'spec/views/projects/hooks/index.html.haml_spec.rb'
+ - 'spec/views/projects/imports/new.html.haml_spec.rb'
+ - 'spec/views/projects/issues/_issue.html.haml_spec.rb'
+ - 'spec/views/projects/issues/_related_branches.html.haml_spec.rb'
+ - 'spec/views/projects/issues/_service_desk_info_content.html.haml_spec.rb'
+ - 'spec/views/projects/issues/show.html.haml_spec.rb'
+ - 'spec/views/projects/jobs/_build.html.haml_spec.rb'
+ - 'spec/views/projects/jobs/_generic_commit_status.html.haml_spec.rb'
+ - 'spec/views/projects/jobs/show.html.haml_spec.rb'
+ - 'spec/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml_spec.rb'
+ - 'spec/views/projects/merge_requests/_commits.html.haml_spec.rb'
+ - 'spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb'
+ - 'spec/views/projects/merge_requests/edit.html.haml_spec.rb'
+ - 'spec/views/projects/merge_requests/show.html.haml_spec.rb'
+ - 'spec/views/projects/milestones/index.html.haml_spec.rb'
+ - 'spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb'
+ - 'spec/views/projects/pages/new.html.haml_spec.rb'
+ - 'spec/views/projects/pages/show.html.haml_spec.rb'
+ - 'spec/views/projects/pages_domains/show.html.haml_spec.rb'
+ - 'spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb'
+ - 'spec/views/projects/project_members/index.html.haml_spec.rb'
+ - 'spec/views/projects/runners/_specific_runners.html.haml_spec.rb'
+ - 'spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb'
+ - 'spec/views/projects/settings/integrations/edit.html.haml_spec.rb'
+ - 'spec/views/projects/settings/merge_requests/show.html.haml_spec.rb'
+ - 'spec/views/projects/settings/operations/show.html.haml_spec.rb'
+ - 'spec/views/projects/tags/index.html.haml_spec.rb'
+ - 'spec/views/projects/tree/show.html.haml_spec.rb'
+ - 'spec/views/registrations/welcome/show.html.haml_spec.rb'
+ - 'spec/views/shared/_label_row.html.haml_spec.rb'
+ - 'spec/views/shared/_milestones_sort_dropdown.html.haml_spec.rb'
+ - 'spec/views/shared/gitlab_version/_security_patch_upgrade_alert.html.haml_spec.rb'
+ - 'spec/views/shared/groups/_dropdown.html.haml_spec.rb'
+ - 'spec/views/shared/issuable/_sidebar.html.haml_spec.rb'
+ - 'spec/views/shared/milestones/_issuable.html.haml_spec.rb'
+ - 'spec/views/shared/milestones/_issuables.html.haml_spec.rb'
+ - 'spec/views/shared/milestones/_top.html.haml_spec.rb'
+ - 'spec/views/shared/nav/_sidebar.html.haml_spec.rb'
+ - 'spec/views/shared/notes/_form.html.haml_spec.rb'
+ - 'spec/views/shared/projects/_inactive_project_deletion_alert.html.haml_spec.rb'
+ - 'spec/views/shared/projects/_list.html.haml_spec.rb'
+ - 'spec/views/shared/projects/_project.html.haml_spec.rb'
+ - 'spec/views/shared/runners/_runner_details.html.haml_spec.rb'
+ - 'spec/views/shared/snippets/_snippet.html.haml_spec.rb'
+ - 'spec/views/shared/ssh_keys/_key_delete.html.haml_spec.rb'
+ - 'spec/views/shared/web_hooks/_web_hook_disabled_alert.html.haml_spec.rb'
+ - 'spec/views/shared/wikis/_sidebar.html.haml_spec.rb'
+ - 'spec/workers/admin_email_worker_spec.rb'
+ - 'spec/workers/analytics/usage_trends/count_job_trigger_worker_spec.rb'
+ - 'spec/workers/analytics/usage_trends/counter_job_worker_spec.rb'
+ - 'spec/workers/approve_blocked_pending_approval_users_worker_spec.rb'
+ - 'spec/workers/authorized_keys_worker_spec.rb'
+ - 'spec/workers/authorized_project_update/periodic_recalculate_worker_spec.rb'
+ - 'spec/workers/authorized_project_update/project_recalculate_per_user_worker_spec.rb'
+ - 'spec/workers/authorized_project_update/project_recalculate_worker_spec.rb'
+ - 'spec/workers/authorized_project_update/user_refresh_from_replica_worker_spec.rb'
+ - 'spec/workers/authorized_project_update/user_refresh_over_user_range_worker_spec.rb'
+ - 'spec/workers/authorized_project_update/user_refresh_with_low_urgency_worker_spec.rb'
+ - 'spec/workers/authorized_projects_worker_spec.rb'
+ - 'spec/workers/auto_devops/disable_worker_spec.rb'
+ - 'spec/workers/auto_merge_process_worker_spec.rb'
+ - 'spec/workers/background_migration/ci_database_worker_spec.rb'
+ - 'spec/workers/background_migration_worker_spec.rb'
+ - 'spec/workers/build_hooks_worker_spec.rb'
+ - 'spec/workers/build_queue_worker_spec.rb'
+ - 'spec/workers/build_success_worker_spec.rb'
+ - 'spec/workers/bulk_import_worker_spec.rb'
+ - 'spec/workers/bulk_imports/entity_worker_spec.rb'
+ - 'spec/workers/bulk_imports/relation_export_worker_spec.rb'
+ - 'spec/workers/bulk_imports/stuck_import_worker_spec.rb'
+ - 'spec/workers/chat_notification_worker_spec.rb'
+ - 'spec/workers/ci/archive_trace_worker_spec.rb'
+ - 'spec/workers/ci/archive_traces_cron_worker_spec.rb'
+ - 'spec/workers/ci/build_finished_worker_spec.rb'
+ - 'spec/workers/ci/build_prepare_worker_spec.rb'
+ - 'spec/workers/ci/build_schedule_worker_spec.rb'
+ - 'spec/workers/ci/build_trace_chunk_flush_worker_spec.rb'
+ - 'spec/workers/ci/cancel_pipeline_worker_spec.rb'
+ - 'spec/workers/ci/create_cross_project_pipeline_worker_spec.rb'
+ - 'spec/workers/ci/create_downstream_pipeline_worker_spec.rb'
+ - 'spec/workers/ci/daily_build_group_report_results_worker_spec.rb'
+ - 'spec/workers/ci/delete_objects_worker_spec.rb'
+ - 'spec/workers/ci/delete_unit_tests_worker_spec.rb'
+ - 'spec/workers/ci/drop_pipeline_worker_spec.rb'
+ - 'spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb'
+ - 'spec/workers/ci/job_artifacts/expire_project_build_artifacts_worker_spec.rb'
+ - 'spec/workers/ci/job_artifacts/track_artifact_report_worker_spec.rb'
+ - 'spec/workers/ci/merge_requests/add_todo_when_build_fails_worker_spec.rb'
+ - 'spec/workers/ci/parse_secure_file_metadata_worker_spec.rb'
+ - 'spec/workers/ci/pending_builds/update_group_worker_spec.rb'
+ - 'spec/workers/ci/pending_builds/update_project_worker_spec.rb'
+ - 'spec/workers/ci/pipeline_artifacts/coverage_report_worker_spec.rb'
+ - 'spec/workers/ci/pipeline_artifacts/create_quality_report_worker_spec.rb'
+ - 'spec/workers/ci/pipeline_artifacts/expire_artifacts_worker_spec.rb'
+ - 'spec/workers/ci/pipeline_bridge_status_worker_spec.rb'
+ - 'spec/workers/ci/pipeline_success_unlock_artifacts_worker_spec.rb'
+ - 'spec/workers/ci/ref_delete_unlock_artifacts_worker_spec.rb'
+ - 'spec/workers/ci/resource_groups/assign_resource_from_resource_group_worker_spec.rb'
+ - 'spec/workers/ci/retry_pipeline_worker_spec.rb'
+ - 'spec/workers/ci/schedule_delete_objects_cron_worker_spec.rb'
+ - 'spec/workers/ci/stuck_builds/drop_running_worker_spec.rb'
+ - 'spec/workers/ci/stuck_builds/drop_scheduled_worker_spec.rb'
+ - 'spec/workers/ci/test_failure_history_worker_spec.rb'
+ - 'spec/workers/ci/track_failed_build_worker_spec.rb'
+ - 'spec/workers/ci/update_locked_unknown_artifacts_worker_spec.rb'
+ - 'spec/workers/ci_platform_metrics_update_cron_worker_spec.rb'
+ - 'spec/workers/cleanup_container_repository_worker_spec.rb'
+ - 'spec/workers/clusters/agents/delete_expired_events_worker_spec.rb'
+ - 'spec/workers/clusters/applications/activate_integration_worker_spec.rb'
+ - 'spec/workers/clusters/applications/deactivate_integration_worker_spec.rb'
+ - 'spec/workers/clusters/cleanup/project_namespace_worker_spec.rb'
+ - 'spec/workers/clusters/cleanup/service_account_worker_spec.rb'
+ - 'spec/workers/clusters/integrations/check_prometheus_health_worker_spec.rb'
+ - 'spec/workers/concerns/application_worker_spec.rb'
+ - 'spec/workers/concerns/cluster_agent_queue_spec.rb'
+ - 'spec/workers/concerns/cluster_queue_spec.rb'
+ - 'spec/workers/concerns/cronjob_queue_spec.rb'
+ - 'spec/workers/concerns/gitlab/github_import/object_importer_spec.rb'
+ - 'spec/workers/concerns/gitlab/github_import/queue_spec.rb'
+ - 'spec/workers/concerns/gitlab/github_import/rescheduling_methods_spec.rb'
+ - 'spec/workers/concerns/gitlab/github_import/stage_methods_spec.rb'
+ - 'spec/workers/concerns/gitlab/notify_upon_death_spec.rb'
+ - 'spec/workers/concerns/limited_capacity/job_tracker_spec.rb'
+ - 'spec/workers/concerns/limited_capacity/worker_spec.rb'
+ - 'spec/workers/concerns/packages/cleanup_artifact_worker_spec.rb'
+ - 'spec/workers/concerns/pipeline_background_queue_spec.rb'
+ - 'spec/workers/concerns/pipeline_queue_spec.rb'
+ - 'spec/workers/concerns/project_import_options_spec.rb'
+ - 'spec/workers/concerns/reenqueuer_spec.rb'
+ - 'spec/workers/concerns/repository_check_queue_spec.rb'
+ - 'spec/workers/concerns/waitable_worker_spec.rb'
+ - 'spec/workers/concerns/worker_attributes_spec.rb'
+ - 'spec/workers/concerns/worker_context_spec.rb'
+ - 'spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb'
+ - 'spec/workers/container_expiration_policy_worker_spec.rb'
+ - 'spec/workers/container_registry/cleanup_worker_spec.rb'
+ - 'spec/workers/container_registry/delete_container_repository_worker_spec.rb'
+ - 'spec/workers/container_registry/migration/enqueuer_worker_spec.rb'
+ - 'spec/workers/container_registry/migration/guard_worker_spec.rb'
+ - 'spec/workers/container_registry/migration/observer_worker_spec.rb'
+ - 'spec/workers/counters/cleanup_refresh_worker_spec.rb'
+ - 'spec/workers/create_commit_signature_worker_spec.rb'
+ - 'spec/workers/create_note_diff_file_worker_spec.rb'
+ - 'spec/workers/create_pipeline_worker_spec.rb'
+ - 'spec/workers/database/batched_background_migration/ci_database_worker_spec.rb'
+ - 'spec/workers/database/batched_background_migration_worker_spec.rb'
+ - 'spec/workers/database/ci_namespace_mirrors_consistency_check_worker_spec.rb'
+ - 'spec/workers/database/ci_project_mirrors_consistency_check_worker_spec.rb'
+ - 'spec/workers/database/drop_detached_partitions_worker_spec.rb'
+ - 'spec/workers/database/partition_management_worker_spec.rb'
+ - 'spec/workers/delete_container_repository_worker_spec.rb'
+ - 'spec/workers/delete_diff_files_worker_spec.rb'
+ - 'spec/workers/delete_merged_branches_worker_spec.rb'
+ - 'spec/workers/delete_user_worker_spec.rb'
+ - 'spec/workers/dependency_proxy/cleanup_blob_worker_spec.rb'
+ - 'spec/workers/dependency_proxy/cleanup_dependency_proxy_worker_spec.rb'
+ - 'spec/workers/dependency_proxy/cleanup_manifest_worker_spec.rb'
+ - 'spec/workers/dependency_proxy/image_ttl_group_policy_worker_spec.rb'
+ - 'spec/workers/deployments/archive_in_project_worker_spec.rb'
+ - 'spec/workers/deployments/drop_older_deployments_worker_spec.rb'
+ - 'spec/workers/deployments/hooks_worker_spec.rb'
+ - 'spec/workers/deployments/link_merge_request_worker_spec.rb'
+ - 'spec/workers/deployments/update_environment_worker_spec.rb'
+ - 'spec/workers/design_management/copy_design_collection_worker_spec.rb'
+ - 'spec/workers/design_management/new_version_worker_spec.rb'
+ - 'spec/workers/destroy_pages_deployments_worker_spec.rb'
+ - 'spec/workers/detect_repository_languages_worker_spec.rb'
+ - 'spec/workers/disallow_two_factor_for_group_worker_spec.rb'
+ - 'spec/workers/disallow_two_factor_for_subgroups_worker_spec.rb'
+ - 'spec/workers/email_receiver_worker_spec.rb'
+ - 'spec/workers/emails_on_push_worker_spec.rb'
+ - 'spec/workers/environments/auto_delete_cron_worker_spec.rb'
+ - 'spec/workers/environments/auto_stop_cron_worker_spec.rb'
+ - 'spec/workers/environments/auto_stop_worker_spec.rb'
+ - 'spec/workers/environments/canary_ingress/update_worker_spec.rb'
+ - 'spec/workers/error_tracking_issue_link_worker_spec.rb'
+ - 'spec/workers/every_sidekiq_worker_spec.rb'
+ - 'spec/workers/expire_build_artifacts_worker_spec.rb'
+ - 'spec/workers/export_csv_worker_spec.rb'
+ - 'spec/workers/external_service_reactive_caching_worker_spec.rb'
+ - 'spec/workers/file_hook_worker_spec.rb'
+ - 'spec/workers/flush_counter_increments_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/advance_stage_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/attachments/import_issue_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/attachments/import_merge_request_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/attachments/import_note_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/attachments/import_release_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_diff_note_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_issue_event_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_issue_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_note_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_protected_branch_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_pull_request_merged_by_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_pull_request_review_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_pull_request_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/import_release_attachments_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/pull_requests/import_review_request_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/refresh_import_jid_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/finish_import_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_attachments_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_base_data_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_issue_events_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_lfs_objects_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_notes_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_protected_branches_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_pull_requests_merged_by_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_pull_requests_review_requests_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_pull_requests_reviews_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_pull_requests_worker_spec.rb'
+ - 'spec/workers/gitlab/github_import/stage/import_repository_worker_spec.rb'
+ - 'spec/workers/gitlab/import/stuck_import_job_spec.rb'
+ - 'spec/workers/gitlab/import/stuck_project_import_jobs_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/import_issue_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/stage/finish_import_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/stage/import_attachments_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/stage/import_issues_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/stage/import_labels_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/stage/import_notes_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/stage/start_import_worker_spec.rb'
+ - 'spec/workers/gitlab/jira_import/stuck_jira_import_jobs_worker_spec.rb'
+ - 'spec/workers/gitlab/phabricator_import/base_worker_spec.rb'
+ - 'spec/workers/gitlab/phabricator_import/import_tasks_worker_spec.rb'
+ - 'spec/workers/gitlab_performance_bar_stats_worker_spec.rb'
+ - 'spec/workers/gitlab_service_ping_worker_spec.rb'
+ - 'spec/workers/gitlab_shell_worker_spec.rb'
+ - 'spec/workers/google_cloud/create_cloudsql_instance_worker_spec.rb'
+ - 'spec/workers/google_cloud/fetch_google_ip_list_worker_spec.rb'
+ - 'spec/workers/group_destroy_worker_spec.rb'
+ - 'spec/workers/group_export_worker_spec.rb'
+ - 'spec/workers/group_import_worker_spec.rb'
+ - 'spec/workers/groups/update_statistics_worker_spec.rb'
+ - 'spec/workers/groups/update_two_factor_requirement_for_members_worker_spec.rb'
+ - 'spec/workers/hashed_storage/migrator_worker_spec.rb'
+ - 'spec/workers/hashed_storage/project_migrate_worker_spec.rb'
+ - 'spec/workers/hashed_storage/project_rollback_worker_spec.rb'
+ - 'spec/workers/hashed_storage/rollbacker_worker_spec.rb'
+ - 'spec/workers/import_issues_csv_worker_spec.rb'
+ - 'spec/workers/incident_management/add_severity_system_note_worker_spec.rb'
+ - 'spec/workers/incident_management/close_incident_worker_spec.rb'
+ - 'spec/workers/incident_management/pager_duty/process_incident_worker_spec.rb'
+ - 'spec/workers/incident_management/process_alert_worker_v2_spec.rb'
+ - 'spec/workers/integrations/create_external_cross_reference_worker_spec.rb'
+ - 'spec/workers/integrations/execute_worker_spec.rb'
+ - 'spec/workers/integrations/irker_worker_spec.rb'
+ - 'spec/workers/invalid_gpg_signature_update_worker_spec.rb'
+ - 'spec/workers/issuable/label_links_destroy_worker_spec.rb'
+ - 'spec/workers/issuable_export_csv_worker_spec.rb'
+ - 'spec/workers/issuables/clear_groups_issue_counter_worker_spec.rb'
+ - 'spec/workers/issue_due_scheduler_worker_spec.rb'
+ - 'spec/workers/issues/close_worker_spec.rb'
+ - 'spec/workers/issues/placement_worker_spec.rb'
+ - 'spec/workers/issues/rebalancing_worker_spec.rb'
+ - 'spec/workers/issues/reschedule_stuck_issue_rebalances_worker_spec.rb'
+ - 'spec/workers/jira_connect/forward_event_worker_spec.rb'
+ - 'spec/workers/jira_connect/retry_request_worker_spec.rb'
+ - 'spec/workers/jira_connect/sync_branch_worker_spec.rb'
+ - 'spec/workers/jira_connect/sync_builds_worker_spec.rb'
+ - 'spec/workers/jira_connect/sync_deployments_worker_spec.rb'
+ - 'spec/workers/jira_connect/sync_feature_flags_worker_spec.rb'
+ - 'spec/workers/jira_connect/sync_merge_request_worker_spec.rb'
+ - 'spec/workers/jira_connect/sync_project_worker_spec.rb'
+ - 'spec/workers/loose_foreign_keys/cleanup_worker_spec.rb'
+ - 'spec/workers/mail_scheduler/issue_due_worker_spec.rb'
+ - 'spec/workers/mail_scheduler/notification_service_worker_spec.rb'
+ - 'spec/workers/member_invitation_reminder_emails_worker_spec.rb'
+ - 'spec/workers/members_destroyer/unassign_issuables_worker_spec.rb'
+ - 'spec/workers/merge_request_cleanup_refs_worker_spec.rb'
+ - 'spec/workers/merge_request_mergeability_check_worker_spec.rb'
+ - 'spec/workers/merge_requests/close_issue_worker_spec.rb'
+ - 'spec/workers/merge_requests/create_approval_event_worker_spec.rb'
+ - 'spec/workers/merge_requests/create_approval_note_worker_spec.rb'
+ - 'spec/workers/merge_requests/delete_source_branch_worker_spec.rb'
+ - 'spec/workers/merge_requests/execute_approval_hooks_worker_spec.rb'
+ - 'spec/workers/merge_requests/handle_assignees_change_worker_spec.rb'
+ - 'spec/workers/merge_requests/resolve_todos_after_approval_worker_spec.rb'
+ - 'spec/workers/merge_requests/resolve_todos_worker_spec.rb'
+ - 'spec/workers/merge_requests/update_head_pipeline_worker_spec.rb'
+ - 'spec/workers/merge_worker_spec.rb'
+ - 'spec/workers/metrics/dashboard/prune_old_annotations_worker_spec.rb'
+ - 'spec/workers/metrics/dashboard/schedule_annotations_prune_worker_spec.rb'
+ - 'spec/workers/metrics/dashboard/sync_dashboards_worker_spec.rb'
+ - 'spec/workers/migrate_external_diffs_worker_spec.rb'
+ - 'spec/workers/namespaces/in_product_marketing_emails_worker_spec.rb'
+ - 'spec/workers/namespaces/process_sync_events_worker_spec.rb'
+ - 'spec/workers/namespaces/prune_aggregation_schedules_worker_spec.rb'
+ - 'spec/workers/namespaces/root_statistics_worker_spec.rb'
+ - 'spec/workers/namespaces/schedule_aggregation_worker_spec.rb'
+ - 'spec/workers/namespaces/update_root_statistics_worker_spec.rb'
+ - 'spec/workers/new_issue_worker_spec.rb'
+ - 'spec/workers/new_merge_request_worker_spec.rb'
+ - 'spec/workers/new_note_worker_spec.rb'
+ - 'spec/workers/object_pool/create_worker_spec.rb'
+ - 'spec/workers/object_pool/destroy_worker_spec.rb'
+ - 'spec/workers/object_pool/join_worker_spec.rb'
+ - 'spec/workers/onboarding/issue_created_worker_spec.rb'
+ - 'spec/workers/onboarding/pipeline_created_worker_spec.rb'
+ - 'spec/workers/onboarding/progress_worker_spec.rb'
+ - 'spec/workers/onboarding/user_added_worker_spec.rb'
+ - 'spec/workers/packages/cleanup/execute_policy_worker_spec.rb'
+ - 'spec/workers/packages/cleanup_package_file_worker_spec.rb'
+ - 'spec/workers/packages/cleanup_package_registry_worker_spec.rb'
+ - 'spec/workers/packages/composer/cache_cleanup_worker_spec.rb'
+ - 'spec/workers/packages/composer/cache_update_worker_spec.rb'
+ - 'spec/workers/packages/debian/generate_distribution_worker_spec.rb'
+ - 'spec/workers/packages/debian/process_changes_worker_spec.rb'
+ - 'spec/workers/packages/go/sync_packages_worker_spec.rb'
+ - 'spec/workers/packages/helm/extraction_worker_spec.rb'
+ - 'spec/workers/packages/mark_package_files_for_destruction_worker_spec.rb'
+ - 'spec/workers/packages/maven/metadata/sync_worker_spec.rb'
+ - 'spec/workers/packages/nuget/extraction_worker_spec.rb'
+ - 'spec/workers/packages/rubygems/extraction_worker_spec.rb'
+ - 'spec/workers/pages_domain_removal_cron_worker_spec.rb'
+ - 'spec/workers/pages_domain_ssl_renewal_cron_worker_spec.rb'
+ - 'spec/workers/pages_domain_ssl_renewal_worker_spec.rb'
+ - 'spec/workers/pages_domain_verification_cron_worker_spec.rb'
+ - 'spec/workers/pages_domain_verification_worker_spec.rb'
+ - 'spec/workers/pages_worker_spec.rb'
+ - 'spec/workers/partition_creation_worker_spec.rb'
+ - 'spec/workers/personal_access_tokens/expired_notification_worker_spec.rb'
+ - 'spec/workers/personal_access_tokens/expiring_worker_spec.rb'
+ - 'spec/workers/pipeline_hooks_worker_spec.rb'
+ - 'spec/workers/pipeline_metrics_worker_spec.rb'
+ - 'spec/workers/pipeline_notification_worker_spec.rb'
+ - 'spec/workers/pipeline_process_worker_spec.rb'
+ - 'spec/workers/post_receive_spec.rb'
+ - 'spec/workers/process_commit_worker_spec.rb'
+ - 'spec/workers/project_cache_worker_spec.rb'
+ - 'spec/workers/project_destroy_worker_spec.rb'
+ - 'spec/workers/project_export_worker_spec.rb'
+ - 'spec/workers/projects/after_import_worker_spec.rb'
+ - 'spec/workers/projects/finalize_project_statistics_refresh_worker_spec.rb'
+ - 'spec/workers/projects/import_export/relation_export_worker_spec.rb'
+ - 'spec/workers/projects/inactive_projects_deletion_cron_worker_spec.rb'
+ - 'spec/workers/projects/inactive_projects_deletion_notification_worker_spec.rb'
+ - 'spec/workers/projects/post_creation_worker_spec.rb'
+ - 'spec/workers/projects/process_sync_events_worker_spec.rb'
+ - 'spec/workers/projects/record_target_platforms_worker_spec.rb'
+ - 'spec/workers/projects/refresh_build_artifacts_size_statistics_worker_spec.rb'
+ - 'spec/workers/projects/schedule_bulk_repository_shard_moves_worker_spec.rb'
+ - 'spec/workers/projects/schedule_refresh_build_artifacts_size_statistics_worker_spec.rb'
+ - 'spec/workers/projects/update_repository_storage_worker_spec.rb'
+ - 'spec/workers/propagate_integration_group_worker_spec.rb'
+ - 'spec/workers/propagate_integration_inherit_descendant_worker_spec.rb'
+ - 'spec/workers/propagate_integration_inherit_worker_spec.rb'
+ - 'spec/workers/propagate_integration_project_worker_spec.rb'
+ - 'spec/workers/propagate_integration_worker_spec.rb'
+ - 'spec/workers/prune_old_events_worker_spec.rb'
+ - 'spec/workers/purge_dependency_proxy_cache_worker_spec.rb'
+ - 'spec/workers/reactive_caching_worker_spec.rb'
+ - 'spec/workers/rebase_worker_spec.rb'
+ - 'spec/workers/releases/create_evidence_worker_spec.rb'
+ - 'spec/workers/releases/manage_evidence_worker_spec.rb'
+ - 'spec/workers/remote_mirror_notification_worker_spec.rb'
+ - 'spec/workers/remove_expired_group_links_worker_spec.rb'
+ - 'spec/workers/remove_expired_members_worker_spec.rb'
+ - 'spec/workers/remove_unaccepted_member_invites_worker_spec.rb'
+ - 'spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb'
+ - 'spec/workers/repository_check/batch_worker_spec.rb'
+ - 'spec/workers/repository_check/clear_worker_spec.rb'
+ - 'spec/workers/repository_check/dispatch_worker_spec.rb'
+ - 'spec/workers/repository_check/single_repository_worker_spec.rb'
+ - 'spec/workers/repository_cleanup_worker_spec.rb'
+ - 'spec/workers/repository_fork_worker_spec.rb'
+ - 'spec/workers/repository_update_remote_mirror_worker_spec.rb'
+ - 'spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb'
+ - 'spec/workers/schedule_migrate_external_diffs_worker_spec.rb'
+ - 'spec/workers/self_monitoring_project_create_worker_spec.rb'
+ - 'spec/workers/self_monitoring_project_delete_worker_spec.rb'
+ - 'spec/workers/service_desk_email_receiver_worker_spec.rb'
+ - 'spec/workers/snippets/schedule_bulk_repository_shard_moves_worker_spec.rb'
+ - 'spec/workers/snippets/update_repository_storage_worker_spec.rb'
+ - 'spec/workers/ssh_keys/expired_notification_worker_spec.rb'
+ - 'spec/workers/ssh_keys/expiring_soon_notification_worker_spec.rb'
+ - 'spec/workers/stage_update_worker_spec.rb'
+ - 'spec/workers/stuck_ci_jobs_worker_spec.rb'
+ - 'spec/workers/stuck_export_jobs_worker_spec.rb'
+ - 'spec/workers/stuck_merge_jobs_worker_spec.rb'
+ - 'spec/workers/system_hook_push_worker_spec.rb'
+ - 'spec/workers/tasks_to_be_done/create_worker_spec.rb'
+ - 'spec/workers/terraform/states/destroy_worker_spec.rb'
+ - 'spec/workers/todos_destroyer/confidential_issue_worker_spec.rb'
+ - 'spec/workers/todos_destroyer/destroyed_designs_worker_spec.rb'
+ - 'spec/workers/todos_destroyer/destroyed_issuable_worker_spec.rb'
+ - 'spec/workers/todos_destroyer/entity_leave_worker_spec.rb'
+ - 'spec/workers/todos_destroyer/group_private_worker_spec.rb'
+ - 'spec/workers/todos_destroyer/private_features_worker_spec.rb'
+ - 'spec/workers/todos_destroyer/project_private_worker_spec.rb'
+ - 'spec/workers/trending_projects_worker_spec.rb'
+ - 'spec/workers/update_container_registry_info_worker_spec.rb'
+ - 'spec/workers/update_external_pull_requests_worker_spec.rb'
+ - 'spec/workers/update_head_pipeline_for_merge_request_worker_spec.rb'
+ - 'spec/workers/update_highest_role_worker_spec.rb'
+ - 'spec/workers/update_merge_requests_worker_spec.rb'
+ - 'spec/workers/update_project_statistics_worker_spec.rb'
+ - 'spec/workers/upload_checksum_worker_spec.rb'
+ - 'spec/workers/user_status_cleanup/batch_worker_spec.rb'
+ - 'spec/workers/users/create_statistics_worker_spec.rb'
+ - 'spec/workers/users/deactivate_dormant_users_worker_spec.rb'
+ - 'spec/workers/users/migrate_records_to_ghost_user_in_batches_worker_spec.rb'
+ - 'spec/workers/web_hook_worker_spec.rb'
+ - 'spec/workers/web_hooks/log_destroy_worker_spec.rb'
+ - 'spec/workers/x509_certificate_revoke_worker_spec.rb'
+ - 'spec/workers/x509_issuer_crl_check_worker_spec.rb'
diff --git a/app/assets/javascripts/ci/runner/admin_runner_show/admin_runner_show_app.vue b/app/assets/javascripts/ci/runner/admin_runner_show/admin_runner_show_app.vue
index 66d790acb00..75c3c4e23f1 100644
--- a/app/assets/javascripts/ci/runner/admin_runner_show/admin_runner_show_app.vue
+++ b/app/assets/javascripts/ci/runner/admin_runner_show/admin_runner_show_app.vue
@@ -1,53 +1,29 @@
<script>
-import { GlBadge, GlTabs, GlTab } from '@gitlab/ui';
-import VueRouter from 'vue-router';
import { createAlert, VARIANT_SUCCESS } from '~/flash';
import { TYPE_CI_RUNNER } from '~/graphql_shared/constants';
import { convertToGraphQLId } from '~/graphql_shared/utils';
import { redirectTo } from '~/lib/utils/url_utility';
-import { formatJobCount } from '../utils';
+
import RunnerDeleteButton from '../components/runner_delete_button.vue';
import RunnerEditButton from '../components/runner_edit_button.vue';
import RunnerPauseButton from '../components/runner_pause_button.vue';
import RunnerHeader from '../components/runner_header.vue';
-import RunnerDetails from '../components/runner_details.vue';
-import RunnerJobs from '../components/runner_jobs.vue';
-import { I18N_DETAILS, I18N_JOBS, I18N_FETCH_ERROR } from '../constants';
+import RunnerDetailsTabs from '../components/runner_details_tabs.vue';
+
+import { I18N_FETCH_ERROR } from '../constants';
import runnerQuery from '../graphql/show/runner.query.graphql';
import { captureException } from '../sentry_utils';
import { saveAlertToLocalStorage } from '../local_storage_alert/save_alert_to_local_storage';
-const ROUTE_DETAILS = 'details';
-const ROUTE_JOBS = 'jobs';
-
-const routes = [
- {
- path: '/',
- name: ROUTE_DETAILS,
- component: RunnerDetails,
- },
- {
- path: '/jobs',
- name: ROUTE_JOBS,
- component: RunnerJobs,
- },
- { path: '*', redirect: { name: ROUTE_DETAILS } },
-];
-
export default {
name: 'AdminRunnerShowApp',
components: {
- GlBadge,
- GlTabs,
- GlTab,
RunnerDeleteButton,
RunnerEditButton,
RunnerPauseButton,
RunnerHeader,
+ RunnerDetailsTabs,
},
- router: new VueRouter({
- routes,
- }),
props: {
runnerId: {
type: String,
@@ -85,20 +61,11 @@ export default {
canDelete() {
return this.runner.userPermissions?.deleteRunner;
},
- jobCount() {
- return formatJobCount(this.runner?.jobCount);
- },
- tabIndex() {
- return routes.findIndex(({ name }) => name === this.$route.name);
- },
},
errorCaptured(error) {
this.reportToSentry(error);
},
methods: {
- goTo(name) {
- this.$router.push({ name });
- },
reportToSentry(error) {
captureException({ error, component: this.$options.name });
},
@@ -107,10 +74,6 @@ export default {
redirectTo(this.runnersPath);
},
},
- ROUTE_DETAILS,
- ROUTE_JOBS,
- I18N_DETAILS,
- I18N_JOBS,
};
</script>
<template>
@@ -122,26 +85,6 @@ export default {
<runner-delete-button v-if="canDelete" :runner="runner" @deleted="onDeleted" />
</template>
</runner-header>
-
- <gl-tabs :value="tabIndex">
- <gl-tab @click="goTo($options.ROUTE_DETAILS)">
- <template #title>{{ $options.I18N_DETAILS }}</template>
- </gl-tab>
- <gl-tab @click="goTo($options.ROUTE_JOBS)">
- <template #title>
- {{ $options.I18N_JOBS }}
- <gl-badge
- v-if="jobCount"
- data-testid="job-count-badge"
- class="gl-tab-counter-badge"
- size="sm"
- >
- {{ jobCount }}
- </gl-badge>
- </template>
- </gl-tab>
-
- <router-view v-if="runner" :runner="runner" />
- </gl-tabs>
+ <runner-details-tabs v-if="runner" :runner="runner" />
</div>
</template>
diff --git a/app/assets/javascripts/ci/runner/components/runner_details_tabs.vue b/app/assets/javascripts/ci/runner/components/runner_details_tabs.vue
new file mode 100644
index 00000000000..23076915001
--- /dev/null
+++ b/app/assets/javascripts/ci/runner/components/runner_details_tabs.vue
@@ -0,0 +1,95 @@
+<script>
+import { GlBadge, GlTabs, GlTab } from '@gitlab/ui';
+import VueRouter from 'vue-router';
+import HelpPopover from '~/vue_shared/components/help_popover.vue';
+import { I18N_DETAILS, I18N_JOBS } from '../constants';
+import { formatJobCount } from '../utils';
+import RunnerDetails from './runner_details.vue';
+import RunnerJobs from './runner_jobs.vue';
+
+const ROUTE_DETAILS = 'details';
+const ROUTE_JOBS = 'jobs';
+
+const routes = [
+ {
+ path: '/',
+ name: ROUTE_DETAILS,
+ component: RunnerDetails,
+ },
+ {
+ path: '/jobs',
+ name: ROUTE_JOBS,
+ component: RunnerJobs,
+ },
+ { path: '*', redirect: { name: ROUTE_DETAILS } },
+];
+
+export default {
+ name: 'RunnerDetailsTabs',
+ components: {
+ GlBadge,
+ GlTabs,
+ GlTab,
+ HelpPopover,
+ },
+ router: new VueRouter({
+ routes,
+ }),
+ props: {
+ runner: {
+ type: Object,
+ required: false,
+ default: null,
+ },
+ showAccessHelp: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
+ },
+ computed: {
+ jobCount() {
+ return formatJobCount(this.runner?.jobCount);
+ },
+ tabIndex() {
+ return routes.findIndex(({ name }) => name === this.$route.name);
+ },
+ },
+ methods: {
+ goTo(name) {
+ if (this.$route.name !== name) {
+ this.$router.push({ name });
+ }
+ },
+ },
+ ROUTE_DETAILS,
+ ROUTE_JOBS,
+ I18N_DETAILS,
+ I18N_JOBS,
+};
+</script>
+<template>
+ <gl-tabs :value="tabIndex">
+ <gl-tab @click="goTo($options.ROUTE_DETAILS)">
+ <template #title>{{ $options.I18N_DETAILS }}</template>
+ </gl-tab>
+ <gl-tab @click="goTo($options.ROUTE_JOBS)">
+ <template #title>
+ {{ $options.I18N_JOBS }}
+ <gl-badge
+ v-if="jobCount"
+ data-testid="job-count-badge"
+ class="gl-tab-counter-badge"
+ size="sm"
+ >
+ {{ jobCount }}
+ </gl-badge>
+ <help-popover v-if="showAccessHelp" class="gl-ml-3">
+ {{ s__('Runners|Jobs in projects you have access to.') }}
+ </help-popover>
+ </template>
+ </gl-tab>
+
+ <router-view v-if="runner" :runner="runner" />
+ </gl-tabs>
+</template>
diff --git a/app/assets/javascripts/ci/runner/group_runner_show/group_runner_show_app.vue b/app/assets/javascripts/ci/runner/group_runner_show/group_runner_show_app.vue
index 75138b1bd81..872c9926935 100644
--- a/app/assets/javascripts/ci/runner/group_runner_show/group_runner_show_app.vue
+++ b/app/assets/javascripts/ci/runner/group_runner_show/group_runner_show_app.vue
@@ -3,11 +3,13 @@ import { createAlert, VARIANT_SUCCESS } from '~/flash';
import { TYPE_CI_RUNNER } from '~/graphql_shared/constants';
import { convertToGraphQLId } from '~/graphql_shared/utils';
import { redirectTo } from '~/lib/utils/url_utility';
+
import RunnerDeleteButton from '../components/runner_delete_button.vue';
import RunnerEditButton from '../components/runner_edit_button.vue';
import RunnerPauseButton from '../components/runner_pause_button.vue';
import RunnerHeader from '../components/runner_header.vue';
-import RunnerDetails from '../components/runner_details.vue';
+import RunnerDetailsTabs from '../components/runner_details_tabs.vue';
+
import { I18N_FETCH_ERROR } from '../constants';
import runnerQuery from '../graphql/show/runner.query.graphql';
import { captureException } from '../sentry_utils';
@@ -20,7 +22,7 @@ export default {
RunnerEditButton,
RunnerPauseButton,
RunnerHeader,
- RunnerDetails,
+ RunnerDetailsTabs,
},
props: {
runnerId: {
@@ -89,6 +91,6 @@ export default {
</template>
</runner-header>
- <runner-details v-if="runner" :runner="runner" />
+ <runner-details-tabs :runner="runner" :show-access-help="true" />
</div>
</template>
diff --git a/app/assets/javascripts/ci/runner/group_runner_show/index.js b/app/assets/javascripts/ci/runner/group_runner_show/index.js
index e75f337b38e..a6c1ee1d232 100644
--- a/app/assets/javascripts/ci/runner/group_runner_show/index.js
+++ b/app/assets/javascripts/ci/runner/group_runner_show/index.js
@@ -1,10 +1,12 @@
import Vue from 'vue';
import VueApollo from 'vue-apollo';
+import VueRouter from 'vue-router';
import createDefaultClient from '~/lib/graphql';
import { showAlertFromLocalStorage } from '../local_storage_alert/show_alert_from_local_storage';
import GroupRunnerShowApp from './group_runner_show_app.vue';
Vue.use(VueApollo);
+Vue.use(VueRouter);
export const initGroupRunnerShow = (selector = '#js-group-runner-show') => {
showAlertFromLocalStorage();
diff --git a/app/assets/javascripts/ide/stores/actions.js b/app/assets/javascripts/ide/stores/actions.js
index dc0f3a1d7e9..b7445d3ad0a 100644
--- a/app/assets/javascripts/ide/stores/actions.js
+++ b/app/assets/javascripts/ide/stores/actions.js
@@ -1,6 +1,7 @@
import { escape } from 'lodash';
import Vue from 'vue';
import { createAlert } from '~/flash';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import { visitUrl } from '~/lib/utils/url_utility';
import { __, sprintf } from '~/locale';
import {
@@ -278,7 +279,7 @@ export const getBranchData = ({ commit, state }, { projectId, branchId, force =
resolve(data);
})
.catch((e) => {
- if (e.response.status === 404) {
+ if (e.response.status === HTTP_STATUS_NOT_FOUND) {
reject(e);
} else {
createAlert({
diff --git a/app/assets/javascripts/invite_members/components/invite_members_modal.vue b/app/assets/javascripts/invite_members/components/invite_members_modal.vue
index fa1aa6b0d88..d510e382e05 100644
--- a/app/assets/javascripts/invite_members/components/invite_members_modal.vue
+++ b/app/assets/javascripts/invite_members/components/invite_members_modal.vue
@@ -401,6 +401,7 @@ export default {
:form-group-description="formGroupDescription"
:invalid-feedback-message="invalidFeedbackMessage"
:is-loading="isLoading"
+ :is-celebration="isCelebration"
:new-users-to-invite="newUsersToInvite"
:root-group-id="rootId"
:users-limit-dataset="usersLimitDataset"
diff --git a/app/assets/javascripts/invite_members/components/invite_modal_base.vue b/app/assets/javascripts/invite_members/components/invite_modal_base.vue
index 2cbd681c67d..08cdad4a773 100644
--- a/app/assets/javascripts/invite_members/components/invite_modal_base.vue
+++ b/app/assets/javascripts/invite_members/components/invite_modal_base.vue
@@ -85,6 +85,11 @@ export default {
required: false,
default: false,
},
+ isCelebration: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
invalidFeedbackMessage: {
type: String,
required: false,
@@ -202,11 +207,19 @@ export default {
this.$emit('reset');
},
onShowModal() {
+ if (this.isCelebration) {
+ this.track('render');
+ }
+
if (this.usersLimitDataset.reachedLimit) {
this.track('render', { category: 'default', label: ON_SHOW_TRACK_LABEL });
}
},
- onCloseModal(e) {
+ onCancel(e) {
+ if (this.isCelebration) {
+ this.track('click_cancel');
+ }
+
if (this.preventCancelDefault) {
e.preventDefault();
} else {
@@ -217,6 +230,10 @@ export default {
this.$emit('cancel');
},
onSubmit(e) {
+ if (this.isCelebration) {
+ this.track('click_invite');
+ }
+
// We never want to hide when submitting
e.preventDefault();
@@ -225,6 +242,11 @@ export default {
expiresAt: this.selectedDate,
});
},
+ onClose() {
+ if (this.isCelebration) {
+ this.track('click_x');
+ }
+ },
},
HEADER_CLOSE_LABEL,
ACCESS_EXPIRE_DATE,
@@ -249,7 +271,8 @@ export default {
:action-cancel="actionCancel"
@shown="onShowModal"
@primary="onSubmit"
- @cancel="onCloseModal"
+ @cancel="onCancel"
+ @close="onClose"
@hidden="onReset"
>
<content-transition
diff --git a/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue b/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue
index 8edc9a08c9e..93970ce5193 100644
--- a/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue
+++ b/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue
@@ -7,6 +7,7 @@ import IssueCardTimeInfo from 'ee_else_ce/issues/list/components/issue_card_time
import { IssuableStatus } from '~/issues/constants';
import {
CREATED_DESC,
+ i18n,
PAGE_SIZE,
PARAM_STATE,
UPDATED_DESC,
@@ -26,7 +27,6 @@ import {
import axios from '~/lib/utils/axios_utils';
import { scrollUp } from '~/lib/utils/scroll_utils';
import { getParameterByName } from '~/lib/utils/url_utility';
-import { __ } from '~/locale';
import {
TOKEN_TITLE_ASSIGNEE,
TOKEN_TITLE_AUTHOR,
@@ -41,6 +41,7 @@ import {
} from '~/vue_shared/components/filtered_search_bar/constants';
import IssuableList from '~/vue_shared/issuable/list/components/issuable_list_root.vue';
import { IssuableListTabs, IssuableStates } from '~/vue_shared/issuable/list/constants';
+import getIssuesCountsQuery from '../queries/get_issues_counts.query.graphql';
import { AutocompleteCache } from '../utils';
const UserToken = () => import('~/vue_shared/components/filtered_search_bar/tokens/user_token.vue');
@@ -52,17 +53,7 @@ const MilestoneToken = () =>
import('~/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue');
export default {
- i18n: {
- calendarButtonText: __('Subscribe to calendar'),
- closed: __('CLOSED'),
- closedMoved: __('CLOSED (MOVED)'),
- emptyStateWithFilterTitle: __('Sorry, your filter produced no results'),
- emptyStateWithFilterDescription: __('To widen your search, change or remove filters above'),
- emptyStateWithoutFilterTitle: __('Please select at least one filter to see results'),
- errorFetchingIssues: __('An error occurred while loading issues'),
- rssButtonText: __('Subscribe to RSS feed'),
- searchInputPlaceholder: __('Search or filter results...'),
- },
+ i18n,
IssuableListTabs,
components: {
GlButton,
@@ -105,6 +96,7 @@ export default {
return {
filterTokens: getFilterTokens(window.location.search),
issues: [],
+ issuesCounts: {},
issuesError: null,
pageInfo: {},
pageParams: getInitialPageParams(),
@@ -116,15 +108,7 @@ export default {
issues: {
query: getIssuesQuery,
variables() {
- return {
- hideUsers: this.isPublicVisibilityRestricted && !this.isSignedIn,
- isSignedIn: this.isSignedIn,
- search: this.searchQuery,
- sort: this.sortKey,
- state: this.state,
- ...this.pageParams,
- ...this.apiFilterParams,
- };
+ return this.queryVariables;
},
update(data) {
return data.issues.nodes ?? [];
@@ -141,13 +125,33 @@ export default {
},
debounce: 200,
},
+ issuesCounts: {
+ query: getIssuesCountsQuery,
+ variables() {
+ return this.queryVariables;
+ },
+ update(data) {
+ return data ?? {};
+ },
+ error(error) {
+ this.issuesError = this.$options.i18n.errorFetchingCounts;
+ Sentry.captureException(error);
+ },
+ skip() {
+ return !this.hasSearch;
+ },
+ debounce: 200,
+ context: {
+ isSingleRequest: true,
+ },
+ },
},
computed: {
apiFilterParams() {
return convertToApiParams(this.filterTokens);
},
emptyStateDescription() {
- return this.hasSearch ? this.$options.i18n.emptyStateWithFilterDescription : undefined;
+ return this.hasSearch ? this.$options.i18n.noSearchResultsDescription : undefined;
},
emptyStateSvgPath() {
return this.hasSearch
@@ -156,12 +160,23 @@ export default {
},
emptyStateTitle() {
return this.hasSearch
- ? this.$options.i18n.emptyStateWithFilterTitle
- : this.$options.i18n.emptyStateWithoutFilterTitle;
+ ? this.$options.i18n.noSearchResultsTitle
+ : this.$options.i18n.noSearchNoFilterTitle;
},
hasSearch() {
return Boolean(this.searchQuery || Object.keys(this.urlFilterParams).length);
},
+ queryVariables() {
+ return {
+ hideUsers: this.isPublicVisibilityRestricted && !this.isSignedIn,
+ isSignedIn: this.isSignedIn,
+ search: this.searchQuery,
+ sort: this.sortKey,
+ state: this.state,
+ ...this.pageParams,
+ ...this.apiFilterParams,
+ };
+ },
renderedIssues() {
return this.hasSearch ? this.issues : [];
},
@@ -248,6 +263,14 @@ export default {
hasIssueWeightsFeature: this.hasIssueWeightsFeature,
});
},
+ tabCounts() {
+ const { openedIssues, closedIssues, allIssues } = this.issuesCounts;
+ return {
+ [IssuableStates.Opened]: openedIssues?.count,
+ [IssuableStates.Closed]: closedIssues?.count,
+ [IssuableStates.All]: allIssues?.count,
+ };
+ },
urlFilterParams() {
return convertToUrlParams(this.filterTokens);
},
@@ -372,12 +395,14 @@ export default {
:issuables-loading="$apollo.queries.issues.loading"
namespace="dashboard"
recent-searches-storage-key="issues"
- :search-input-placeholder="$options.i18n.searchInputPlaceholder"
+ :search-input-placeholder="$options.i18n.searchPlaceholder"
:search-tokens="searchTokens"
:show-pagination-controls="showPaginationControls"
show-work-item-type-icon
:sort-options="sortOptions"
+ :tab-counts="tabCounts"
:tabs="$options.IssuableListTabs"
+ truncate-counts
:url-params="urlParams"
use-keyset-pagination
@click-tab="handleClickTab"
@@ -389,10 +414,10 @@ export default {
>
<template #nav-actions>
<gl-button :href="rssPath" icon="rss">
- {{ $options.i18n.rssButtonText }}
+ {{ $options.i18n.rssLabel }}
</gl-button>
<gl-button :href="calendarPath" icon="calendar">
- {{ $options.i18n.calendarButtonText }}
+ {{ $options.i18n.calendarLabel }}
</gl-button>
</template>
diff --git a/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql b/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql
index 43b8804108c..c9fae7cc05d 100644
--- a/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql
+++ b/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql
@@ -1,5 +1,5 @@
#import "~/graphql_shared/fragments/page_info.fragment.graphql"
-#import "~/issues/list/queries/issue.fragment.graphql"
+#import "./issue.fragment.graphql"
query getDashboardIssues(
$hideUsers: Boolean = false
diff --git a/app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql b/app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql
new file mode 100644
index 00000000000..00a2b8a2407
--- /dev/null
+++ b/app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql
@@ -0,0 +1,54 @@
+query getDashboardIssuesCount(
+ $search: String
+ $assigneeId: String
+ $assigneeUsernames: [String!]
+ $authorUsername: String
+ $labelName: [String]
+ $milestoneTitle: [String]
+ $milestoneWildcardId: MilestoneWildcardId
+ $myReactionEmoji: String
+ $not: NegatedIssueFilterInput
+) {
+ openedIssues: issues(
+ state: opened
+ search: $search
+ assigneeId: $assigneeId
+ assigneeUsernames: $assigneeUsernames
+ authorUsername: $authorUsername
+ labelName: $labelName
+ milestoneTitle: $milestoneTitle
+ milestoneWildcardId: $milestoneWildcardId
+ myReactionEmoji: $myReactionEmoji
+ not: $not
+ ) {
+ count
+ }
+ closedIssues: issues(
+ state: closed
+ search: $search
+ assigneeId: $assigneeId
+ assigneeUsernames: $assigneeUsernames
+ authorUsername: $authorUsername
+ labelName: $labelName
+ milestoneTitle: $milestoneTitle
+ milestoneWildcardId: $milestoneWildcardId
+ myReactionEmoji: $myReactionEmoji
+ not: $not
+ ) {
+ count
+ }
+ allIssues: issues(
+ state: all
+ search: $search
+ assigneeId: $assigneeId
+ assigneeUsernames: $assigneeUsernames
+ authorUsername: $authorUsername
+ labelName: $labelName
+ milestoneTitle: $milestoneTitle
+ milestoneWildcardId: $milestoneWildcardId
+ myReactionEmoji: $myReactionEmoji
+ not: $not
+ ) {
+ count
+ }
+}
diff --git a/app/assets/javascripts/issues/dashboard/queries/issue.fragment.graphql b/app/assets/javascripts/issues/dashboard/queries/issue.fragment.graphql
new file mode 100644
index 00000000000..040763f2ba4
--- /dev/null
+++ b/app/assets/javascripts/issues/dashboard/queries/issue.fragment.graphql
@@ -0,0 +1,56 @@
+fragment IssueFragment on Issue {
+ id
+ iid
+ confidential
+ createdAt
+ downvotes
+ dueDate
+ hidden
+ humanTimeEstimate
+ mergeRequestsCount
+ moved
+ state
+ title
+ updatedAt
+ closedAt
+ upvotes
+ userDiscussionsCount @include(if: $isSignedIn)
+ webPath
+ webUrl
+ type
+ assignees @skip(if: $hideUsers) {
+ nodes {
+ id
+ avatarUrl
+ name
+ username
+ webUrl
+ }
+ }
+ author @skip(if: $hideUsers) {
+ id
+ avatarUrl
+ name
+ username
+ webUrl
+ }
+ labels {
+ nodes {
+ id
+ color
+ title
+ description
+ }
+ }
+ milestone {
+ id
+ dueDate
+ startDate
+ webPath
+ title
+ }
+ taskCompletionStatus {
+ completedCount
+ count
+ }
+}
diff --git a/app/assets/javascripts/issues/list/constants.js b/app/assets/javascripts/issues/list/constants.js
index 87184799d5f..514060eaea9 100644
--- a/app/assets/javascripts/issues/list/constants.js
+++ b/app/assets/javascripts/issues/list/constants.js
@@ -105,6 +105,7 @@ export const i18n = {
noIssuesDescription: __('Learn more about issues.'),
noIssuesTitle: __('Use issues to collaborate on ideas, solve problems, and plan work'),
noIssuesSignedOutButtonText: __('Register / Sign In'),
+ noSearchNoFilterTitle: __('Please select at least one filter to see results'),
noSearchResultsDescription: __('To widen your search, change or remove filters above'),
noSearchResultsTitle: __('Sorry, your filter produced no results'),
relatedMergeRequests: __('Related merge requests'),
diff --git a/app/assets/javascripts/milestones/components/delete_milestone_modal.vue b/app/assets/javascripts/milestones/components/delete_milestone_modal.vue
index 3a13c123d77..4b3c1bd7d10 100644
--- a/app/assets/javascripts/milestones/components/delete_milestone_modal.vue
+++ b/app/assets/javascripts/milestones/components/delete_milestone_modal.vue
@@ -2,7 +2,7 @@
import { GlSprintf, GlModal } from '@gitlab/ui';
import { createAlert } from '~/flash';
import axios from '~/lib/utils/axios_utils';
-
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import { redirectTo } from '~/lib/utils/url_utility';
import { __, n__, s__, sprintf } from '~/locale';
import eventHub from '../event_hub';
@@ -84,7 +84,7 @@ Once deleted, it cannot be undone or recovered.`),
successful: false,
});
- if (error.response && error.response.status === 404) {
+ if (error.response && error.response.status === HTTP_STATUS_NOT_FOUND) {
createAlert({
message: sprintf(s__('Milestones|Milestone %{milestoneTitle} was not found'), {
milestoneTitle: this.milestoneTitle,
diff --git a/app/assets/javascripts/related_issues/components/related_issues_root.vue b/app/assets/javascripts/related_issues/components/related_issues_root.vue
index 795eb3b0083..16d1fb9a95c 100644
--- a/app/assets/javascripts/related_issues/components/related_issues_root.vue
+++ b/app/assets/javascripts/related_issues/components/related_issues_root.vue
@@ -25,6 +25,7 @@ Your caret can stop touching a `rawReference` can happen in a variety of ways:
*/
import { createAlert } from '~/flash';
import { getIdFromGraphQLId, isGid } from '~/graphql_shared/utils';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import { __ } from '~/locale';
import {
relatedIssuesRemoveErrorMap,
@@ -142,7 +143,7 @@ export default {
this.store.setRelatedIssues(data.issuables);
})
.catch((res) => {
- if (res && res.status !== 404) {
+ if (res && res.status !== HTTP_STATUS_NOT_FOUND) {
createAlert({ message: relatedIssuesRemoveErrorMap[this.issuableType] });
}
});
diff --git a/app/assets/javascripts/token_access/components/opt_in_jwt.vue b/app/assets/javascripts/token_access/components/opt_in_jwt.vue
new file mode 100644
index 00000000000..2daab124b4d
--- /dev/null
+++ b/app/assets/javascripts/token_access/components/opt_in_jwt.vue
@@ -0,0 +1,125 @@
+<script>
+import { GlLoadingIcon, GlSprintf, GlToggle } from '@gitlab/ui';
+import CodeInstruction from '~/vue_shared/components/registry/code_instruction.vue';
+import { createAlert } from '~/flash';
+import { __, s__ } from '~/locale';
+import updateOptInJwtMutation from '../graphql/mutations/update_opt_in_jwt.mutation.graphql';
+import getOptInJwtSettingQuery from '../graphql/queries/get_opt_in_jwt_setting.query.graphql';
+
+const LIMIT_JWT_ACCESS_SNIPPET = `job_name:
+ id_tokens:
+ ID_TOKEN_1: # or any other name
+ aud: "..." # sub-keyword to configure the token's audience
+ secrets:
+ TEST_SECRET:
+ vault: db/prod
+`;
+
+export default {
+ i18n: {
+ labelText: s__('CICD|Limit JSON Web Token (JWT) access'),
+ helpText: s__(
+ `CICD|The JWT must be manually declared in each job that needs it. When disabled, the token is always available in all jobs in the pipeline.`,
+ ),
+ expandedText: s__(
+ 'CICD|Use the %{codeStart}secrets%{codeEnd} keyword to configure a job with a JWT.',
+ ),
+ copyToClipboard: __('Copy to clipboard'),
+ fetchError: s__('CICD|There was a problem fetching the token access settings.'),
+ updateError: s__('CICD|An error occurred while update the setting. Please try again.'),
+ },
+ components: {
+ CodeInstruction,
+ GlLoadingIcon,
+ GlSprintf,
+ GlToggle,
+ },
+ inject: ['fullPath'],
+ apollo: {
+ optInJwt: {
+ query: getOptInJwtSettingQuery,
+ variables() {
+ return {
+ fullPath: this.fullPath,
+ };
+ },
+ update({
+ project: {
+ ciCdSettings: { optInJwt },
+ },
+ }) {
+ return optInJwt;
+ },
+ error() {
+ createAlert({ message: this.$options.i18n.fetchError });
+ },
+ },
+ },
+ data() {
+ return {
+ optInJwt: null,
+ };
+ },
+ computed: {
+ isLoading() {
+ return this.$apollo.queries.optInJwt.loading;
+ },
+ },
+ methods: {
+ async updateOptInJwt() {
+ try {
+ const {
+ data: {
+ ciCdSettingsUpdate: { errors },
+ },
+ } = await this.$apollo.mutate({
+ mutation: updateOptInJwtMutation,
+ variables: {
+ input: {
+ fullPath: this.fullPath,
+ optInJwt: this.optInJwt,
+ },
+ },
+ });
+
+ if (errors.length) {
+ throw new Error(errors[0]);
+ }
+ } catch (error) {
+ createAlert({ message: this.$options.i18n.updateError });
+ }
+ },
+ },
+ LIMIT_JWT_ACCESS_SNIPPET,
+};
+</script>
+<template>
+ <div>
+ <gl-loading-icon v-if="isLoading" size="lg" class="gl-mt-5" />
+ <template v-else>
+ <gl-toggle
+ v-model="optInJwt"
+ class="gl-mt-5"
+ :label="$options.i18n.labelText"
+ @change="updateOptInJwt"
+ >
+ <template #help>
+ {{ $options.i18n.helpText }}
+ </template>
+ </gl-toggle>
+ <div v-if="optInJwt" class="gl-mt-5" data-testid="opt-in-jwt-expanded-section">
+ <gl-sprintf :message="$options.i18n.expandedText">
+ <template #code="{ content }">
+ <code>{{ content }}</code>
+ </template>
+ </gl-sprintf>
+ <code-instruction
+ class="gl-mt-3"
+ :instruction="$options.LIMIT_JWT_ACCESS_SNIPPET"
+ :copy-text="$options.i18n.copyToClipboard"
+ multiline
+ />
+ </div>
+ </template>
+ </div>
+</template>
diff --git a/app/assets/javascripts/token_access/components/token_access.vue b/app/assets/javascripts/token_access/components/token_access.vue
index fe99f3e1fdd..527f01f0a6f 100644
--- a/app/assets/javascripts/token_access/components/token_access.vue
+++ b/app/assets/javascripts/token_access/components/token_access.vue
@@ -17,6 +17,7 @@ import removeProjectCIJobTokenScopeMutation from '../graphql/mutations/remove_pr
import updateCIJobTokenScopeMutation from '../graphql/mutations/update_ci_job_token_scope.mutation.graphql';
import getCIJobTokenScopeQuery from '../graphql/queries/get_ci_job_token_scope.query.graphql';
import getProjectsWithCIJobTokenScopeQuery from '../graphql/queries/get_projects_with_ci_job_token_scope.query.graphql';
+import OptInJwt from './opt_in_jwt.vue';
import TokenProjectsTable from './token_projects_table.vue';
export default {
@@ -44,6 +45,7 @@ export default {
GlLoadingIcon,
GlSprintf,
GlToggle,
+ OptInJwt,
TokenProjectsTable,
},
inject: {
@@ -230,6 +232,7 @@ export default {
</gl-alert>
<token-projects-table :projects="projects" @removeProject="removeProject" />
</div>
+ <opt-in-jwt />
</template>
</div>
</template>
diff --git a/app/assets/javascripts/token_access/graphql/mutations/update_opt_in_jwt.mutation.graphql b/app/assets/javascripts/token_access/graphql/mutations/update_opt_in_jwt.mutation.graphql
new file mode 100644
index 00000000000..c12b5646423
--- /dev/null
+++ b/app/assets/javascripts/token_access/graphql/mutations/update_opt_in_jwt.mutation.graphql
@@ -0,0 +1,8 @@
+mutation updateOptInJwt($input: CiCdSettingsUpdateInput!) {
+ ciCdSettingsUpdate(input: $input) {
+ ciCdSettings {
+ optInJwt
+ }
+ errors
+ }
+}
diff --git a/app/assets/javascripts/token_access/graphql/queries/get_opt_in_jwt_setting.query.graphql b/app/assets/javascripts/token_access/graphql/queries/get_opt_in_jwt_setting.query.graphql
new file mode 100644
index 00000000000..a1a216b7dc3
--- /dev/null
+++ b/app/assets/javascripts/token_access/graphql/queries/get_opt_in_jwt_setting.query.graphql
@@ -0,0 +1,8 @@
+query getOptInJwtSetting($fullPath: ID!) {
+ project(fullPath: $fullPath) {
+ id
+ ciCdSettings {
+ optInJwt
+ }
+ }
+}
diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue
index 427df3d1925..d64d76d10c3 100644
--- a/app/assets/javascripts/work_items/components/work_item_detail.vue
+++ b/app/assets/javascripts/work_items/components/work_item_detail.vue
@@ -455,7 +455,7 @@ export default {
return;
}
- if (this.event) {
+ if (event) {
event.preventDefault();
this.updateUrl(modalWorkItem);
diff --git a/app/controllers/autocomplete_controller.rb b/app/controllers/autocomplete_controller.rb
index 668b2ebaf9e..01cc1ef21c6 100644
--- a/app/controllers/autocomplete_controller.rb
+++ b/app/controllers/autocomplete_controller.rb
@@ -6,7 +6,7 @@ class AutocompleteController < ApplicationController
skip_before_action :authenticate_user!, only: [:users, :award_emojis, :merge_request_target_branches]
before_action :check_search_rate_limit!, only: [:users, :projects]
- feature_category :users, [:users, :user]
+ feature_category :user_profile, [:users, :user]
feature_category :projects, [:projects]
feature_category :team_planning, [:award_emojis]
feature_category :code_review_workflow, [:merge_request_target_branches]
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 3d9184979d7..35f295630f7 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -14,7 +14,7 @@ class DashboardController < Dashboard::ApplicationController
respond_to :html
- feature_category :users, [:activity]
+ feature_category :user_profile, [:activity]
feature_category :team_planning, [:issues, :issues_calendar]
feature_category :code_review_workflow, [:merge_requests]
diff --git a/app/controllers/profiles/avatars_controller.rb b/app/controllers/profiles/avatars_controller.rb
index 55a2904ce83..829a87b7d0a 100644
--- a/app/controllers/profiles/avatars_controller.rb
+++ b/app/controllers/profiles/avatars_controller.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class Profiles::AvatarsController < Profiles::ApplicationController
- feature_category :users
+ feature_category :user_profile
def destroy
@user = current_user
diff --git a/app/controllers/profiles/emails_controller.rb b/app/controllers/profiles/emails_controller.rb
index 7e332d9a498..c88616b6d6c 100644
--- a/app/controllers/profiles/emails_controller.rb
+++ b/app/controllers/profiles/emails_controller.rb
@@ -7,7 +7,7 @@ class Profiles::EmailsController < Profiles::ApplicationController
before_action -> { check_rate_limit!(:profile_resend_email_confirmation, scope: current_user, redirect_back: true) },
only: [:resend_confirmation_instructions]
- feature_category :users
+ feature_category :user_profile
urgency :low, [:index]
def index
diff --git a/app/controllers/profiles/groups_controller.rb b/app/controllers/profiles/groups_controller.rb
index 5962b10c44b..fdd76a7f7be 100644
--- a/app/controllers/profiles/groups_controller.rb
+++ b/app/controllers/profiles/groups_controller.rb
@@ -3,7 +3,7 @@
class Profiles::GroupsController < Profiles::ApplicationController
include RoutableActions
- feature_category :users
+ feature_category :user_profile
def update
group = find_routable!(Group, params[:id], request.fullpath)
diff --git a/app/controllers/profiles/keys_controller.rb b/app/controllers/profiles/keys_controller.rb
index 39e8f6c500d..d0c2dc26fa6 100644
--- a/app/controllers/profiles/keys_controller.rb
+++ b/app/controllers/profiles/keys_controller.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class Profiles::KeysController < Profiles::ApplicationController
- feature_category :users
+ feature_category :user_profile
urgency :low, [:create, :index]
def index
diff --git a/app/controllers/profiles/preferences_controller.rb b/app/controllers/profiles/preferences_controller.rb
index 974e7104c07..7786bad4251 100644
--- a/app/controllers/profiles/preferences_controller.rb
+++ b/app/controllers/profiles/preferences_controller.rb
@@ -3,7 +3,7 @@
class Profiles::PreferencesController < Profiles::ApplicationController
before_action :user
- feature_category :users
+ feature_category :user_profile
urgency :low, [:show]
urgency :medium, [:update]
diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb
index e3704b77adc..93b131369b8 100644
--- a/app/controllers/profiles_controller.rb
+++ b/app/controllers/profiles_controller.rb
@@ -14,7 +14,7 @@ class ProfilesController < Profiles::ApplicationController
push_frontend_feature_flag(:webauthn)
end
- feature_category :users, [:show, :update, :reset_incoming_email_token, :reset_feed_token,
+ feature_category :user_profile, [:show, :update, :reset_incoming_email_token, :reset_feed_token,
:reset_static_object_token, :update_username]
feature_category :authentication_and_authorization, [:audit_log]
diff --git a/app/controllers/projects/autocomplete_sources_controller.rb b/app/controllers/projects/autocomplete_sources_controller.rb
index c63e5bd7a92..ffe6071ab3c 100644
--- a/app/controllers/projects/autocomplete_sources_controller.rb
+++ b/app/controllers/projects/autocomplete_sources_controller.rb
@@ -6,7 +6,7 @@ class Projects::AutocompleteSourcesController < Projects::ApplicationController
feature_category :team_planning, [:issues, :labels, :milestones, :commands, :contacts]
feature_category :code_review_workflow, [:merge_requests]
- feature_category :users, [:members]
+ feature_category :user_profile, [:members]
feature_category :source_code_management, [:snippets]
urgency :low, [:merge_requests, :members]
diff --git a/app/controllers/projects/learn_gitlab_controller.rb b/app/controllers/projects/learn_gitlab_controller.rb
index 9ed156d9049..0193fcc7be6 100644
--- a/app/controllers/projects/learn_gitlab_controller.rb
+++ b/app/controllers/projects/learn_gitlab_controller.rb
@@ -7,7 +7,7 @@ module Projects
before_action :enable_invite_for_help_continuous_onboarding_experiment
before_action :enable_video_tutorials_continuous_onboarding_experiment
- feature_category :users
+ feature_category :user_profile
urgency :low, [:index]
def index; end
diff --git a/app/controllers/users/unsubscribes_controller.rb b/app/controllers/users/unsubscribes_controller.rb
index 9ac07083cd5..73388b16006 100644
--- a/app/controllers/users/unsubscribes_controller.rb
+++ b/app/controllers/users/unsubscribes_controller.rb
@@ -4,7 +4,7 @@ module Users
class UnsubscribesController < ApplicationController
skip_before_action :authenticate_user!
- feature_category :users
+ feature_category :user_profile
def show
@user = get_user
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index f23e513e419..327d05681f4 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -27,7 +27,7 @@ class UsersController < ApplicationController
check_rate_limit!(:username_exists, scope: request.ip)
end
- feature_category :users, [:show, :activity, :groups, :projects, :contributed, :starred,
+ feature_category :user_profile, [:show, :activity, :groups, :projects, :contributed, :starred,
:followers, :following, :calendar, :calendar_activities,
:exists, :activity, :follow, :unfollow, :ssh_keys]
diff --git a/app/models/analytics/cycle_analytics/project_stage.rb b/app/models/analytics/cycle_analytics/project_stage.rb
index 8a80514333f..7e121399b1e 100644
--- a/app/models/analytics/cycle_analytics/project_stage.rb
+++ b/app/models/analytics/cycle_analytics/project_stage.rb
@@ -8,23 +8,14 @@ module Analytics
belongs_to :project, optional: false
belongs_to :value_stream, class_name: 'Analytics::CycleAnalytics::ProjectValueStream', foreign_key: :project_value_stream_id
- alias_attribute :parent, :project
- alias_attribute :parent_id, :project_id
-
alias_attribute :value_stream_id, :project_value_stream_id
delegate :group, to: :project
+ alias_attribute :parent, :project
+ alias_attribute :parent_id, :project_id
validate :validate_project_group_for_label_events, if: -> { start_event_label_based? || end_event_label_based? }
- def self.relative_positioning_query_base(stage)
- where(project_id: stage.project_id)
- end
-
- def self.relative_positioning_parent_column
- :project_id
- end
-
def self.distinct_stages_within_hierarchy(group)
with_preloaded_labels
.where(project_id: group.all_projects.select(:id))
diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb
index 8c23c819804..ebf8e3d54bf 100644
--- a/app/models/application_setting.rb
+++ b/app/models/application_setting.rb
@@ -680,6 +680,7 @@ class ApplicationSetting < ApplicationRecord
attr_encrypted :jitsu_administrator_password, encryption_options_base_32_aes_256_gcm
attr_encrypted :telesign_customer_xid, encryption_options_base_32_aes_256_gcm.merge(encode: false, encode_iv: false)
attr_encrypted :telesign_api_key, encryption_options_base_32_aes_256_gcm.merge(encode: false, encode_iv: false)
+ attr_encrypted :product_analytics_clickhouse_connection_string, encryption_options_base_32_aes_256_gcm.merge(encode: false, encode_iv: false)
validates :disable_feed_token,
inclusion: { in: [true, false], message: N_('must be a boolean value') }
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index eab2ab69e44..7a606c0b417 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -498,6 +498,10 @@ module Ci
100
end
+ def self.object_hierarchy(relation, options = {})
+ ::Gitlab::Ci::PipelineObjectHierarchy.new(relation, options: options)
+ end
+
def uses_needs?
processables.where(scheduling_type: :dag).any?
end
diff --git a/app/models/concerns/analytics/cycle_analytics/stageable.rb b/app/models/concerns/analytics/cycle_analytics/stageable.rb
index d1f948d1366..caac4f31e1a 100644
--- a/app/models/concerns/analytics/cycle_analytics/stageable.rb
+++ b/app/models/concerns/analytics/cycle_analytics/stageable.rb
@@ -4,7 +4,6 @@ module Analytics
module CycleAnalytics
module Stageable
extend ActiveSupport::Concern
- include RelativePositioning
include Gitlab::Utils::StrongMemoize
included do
@@ -92,10 +91,6 @@ module Analytics
end_event_identifier.to_s.eql?(stage_params[:end_event_identifier].to_s)
end
- def find_with_same_parent!(id)
- parent.cycle_analytics_stages.find(id)
- end
-
private
def validate_stage_event_pairs
diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index 1ae7d9925a5..438bc9f959d 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -105,7 +105,13 @@ class Deployment < ApplicationRecord
after_transition any => :running do |deployment, transition|
deployment.run_after_commit do
- Deployments::HooksWorker.perform_async(deployment_id: id, status: transition.to, status_changed_at: Time.current)
+ perform_params = { deployment_id: id, status: transition.to, status_changed_at: Time.current }
+
+ if Feature.enabled?(:improve_deployment_hooksworker_serialization, deployment.project)
+ serialize_params_for_sidekiq!(perform_params)
+ end
+
+ Deployments::HooksWorker.perform_async(perform_params)
end
end
@@ -119,7 +125,13 @@ class Deployment < ApplicationRecord
after_transition any => FINISHED_STATUSES do |deployment, transition|
deployment.run_after_commit do
- Deployments::HooksWorker.perform_async(deployment_id: id, status: transition.to, status_changed_at: Time.current)
+ perform_params = { deployment_id: id, status: transition.to, status_changed_at: Time.current }
+
+ if Feature.enabled?(:improve_deployment_hooksworker_serialization, deployment.project)
+ serialize_params_for_sidekiq!(perform_params)
+ end
+
+ Deployments::HooksWorker.perform_async(perform_params)
end
end
@@ -464,6 +476,11 @@ class Deployment < ApplicationRecord
end
end
+ def serialize_params_for_sidekiq!(perform_params)
+ perform_params[:status_changed_at] = perform_params[:status_changed_at].to_s
+ perform_params.stringify_keys!
+ end
+
def self.last_deployment_group_associations
{
deployable: {
diff --git a/app/models/project_authorization.rb b/app/models/project_authorization.rb
index 3623b3be20d..a87d3aafa1c 100644
--- a/app/models/project_authorization.rb
+++ b/app/models/project_authorization.rb
@@ -31,7 +31,7 @@ class ProjectAuthorization < ApplicationRecord
def self.insert_all_in_batches(attributes, per_batch = BATCH_SIZE)
add_delay = add_delay_between_batches?(entire_size: attributes.size, batch_size: per_batch)
- log_details(entire_size: attributes.size) if add_delay
+ log_details(entire_size: attributes.size, batch_size: per_batch) if add_delay
attributes.each_slice(per_batch) do |attributes_batch|
insert_all(attributes_batch)
@@ -41,7 +41,7 @@ class ProjectAuthorization < ApplicationRecord
def self.delete_all_in_batches_for_project(project:, user_ids:, per_batch: BATCH_SIZE)
add_delay = add_delay_between_batches?(entire_size: user_ids.size, batch_size: per_batch)
- log_details(entire_size: user_ids.size) if add_delay
+ log_details(entire_size: user_ids.size, batch_size: per_batch) if add_delay
user_ids.each_slice(per_batch) do |user_ids_batch|
project.project_authorizations.where(user_id: user_ids_batch).delete_all
@@ -51,7 +51,7 @@ class ProjectAuthorization < ApplicationRecord
def self.delete_all_in_batches_for_user(user:, project_ids:, per_batch: BATCH_SIZE)
add_delay = add_delay_between_batches?(entire_size: project_ids.size, batch_size: per_batch)
- log_details(entire_size: project_ids.size) if add_delay
+ log_details(entire_size: project_ids.size, batch_size: per_batch) if add_delay
project_ids.each_slice(per_batch) do |project_ids_batch|
user.project_authorizations.where(project_id: project_ids_batch).delete_all
@@ -68,10 +68,12 @@ class ProjectAuthorization < ApplicationRecord
Feature.enabled?(:enable_minor_delay_during_project_authorizations_refresh)
end
- private_class_method def self.log_details(entire_size:)
+ private_class_method def self.log_details(entire_size:, batch_size:)
Gitlab::AppLogger.info(
entire_size: entire_size,
- message: 'Project authorizations refresh performed with delay'
+ total_delay: (entire_size / batch_size.to_f).ceil * SLEEP_DELAY,
+ message: 'Project authorizations refresh performed with delay',
+ **Gitlab::ApplicationContext.current
)
end
diff --git a/app/models/user.rb b/app/models/user.rb
index da6e1abad07..1e49ad2e6b2 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -406,6 +406,15 @@ class User < ApplicationRecord
transition deactivated: :ldap_blocked
end
+ # aliasing system_block to set ldap_blocked statuses
+ # ldap_blocked is used for LDAP, SAML, and SCIM blocked users
+ # Issue for improving this naming:
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/388487
+ event :system_block do
+ transition active: :ldap_blocked
+ transition deactivated: :ldap_blocked
+ end
+
event :activate do
transition deactivated: :active
transition blocked: :active
diff --git a/app/services/ci/pipeline_creation/cancel_redundant_pipelines_service.rb b/app/services/ci/pipeline_creation/cancel_redundant_pipelines_service.rb
new file mode 100644
index 00000000000..06cd3d71097
--- /dev/null
+++ b/app/services/ci/pipeline_creation/cancel_redundant_pipelines_service.rb
@@ -0,0 +1,88 @@
+# frozen_string_literal: true
+
+module Ci
+ module PipelineCreation
+ class CancelRedundantPipelinesService
+ include Gitlab::Utils::StrongMemoize
+
+ BATCH_SIZE = 25
+
+ def initialize(pipeline)
+ @pipeline = pipeline
+ @project = @pipeline.project
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def execute
+ return if pipeline.parent_pipeline? # skip if child pipeline
+ return unless project.auto_cancel_pending_pipelines?
+
+ pipelines = move_service_to_async? ? parent_and_child_pipelines : all_auto_cancelable_pipelines
+
+ Gitlab::OptimisticLocking
+ .retry_lock(pipelines, name: 'cancel_pending_pipelines') do |cancelables|
+ cancelables.select(:id).each_batch(of: BATCH_SIZE) do |cancelables_batch|
+ auto_cancel_interruptible_pipelines(cancelables_batch.ids)
+ end
+ end
+ end
+
+ private
+
+ attr_reader :pipeline, :project
+
+ def all_auto_cancelable_pipelines
+ same_ref_pipelines
+ .id_not_in(pipeline.id)
+ .ci_and_parent_sources
+ .alive_or_scheduled
+ end
+
+ def parent_auto_cancelable_pipelines
+ same_ref_pipelines
+ .where("created_at < ?", pipeline.created_at)
+ .ci_sources
+ end
+
+ def parent_and_child_pipelines
+ Ci::Pipeline.object_hierarchy(parent_auto_cancelable_pipelines, project_condition: :same)
+ .base_and_descendants
+ .alive_or_scheduled
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+
+ def auto_cancel_interruptible_pipelines(pipeline_ids)
+ ::Ci::Pipeline
+ .id_in(pipeline_ids)
+ .with_only_interruptible_builds
+ .each do |cancelable_pipeline|
+ Gitlab::AppLogger.info(
+ class: self.class.name,
+ message: "Pipeline #{pipeline.id} auto-canceling pipeline #{cancelable_pipeline.id}",
+ canceled_pipeline_id: cancelable_pipeline.id,
+ canceled_by_pipeline_id: pipeline.id,
+ canceled_by_pipeline_source: pipeline.source
+ )
+
+ # cascade_to_children not needed because we iterate through descendants here
+ cancelable_pipeline.cancel_running(
+ auto_canceled_by_pipeline_id: pipeline.id,
+ cascade_to_children: false
+ )
+ end
+ end
+
+ def same_ref_pipelines
+ project.all_pipelines
+ .created_after(1.week.ago)
+ .for_ref(pipeline.ref)
+ .where_not_sha(project.commit(pipeline.ref).try(:id))
+ end
+
+ def move_service_to_async?
+ Feature.enabled?(:move_cancel_pending_pipelines_to_async, project)
+ end
+ strong_memoize_attr :move_service_to_async?
+ end
+ end
+end
diff --git a/app/services/search/project_service.rb b/app/services/search/project_service.rb
index 3e93346bfdf..6acc32ea0a8 100644
--- a/app/services/search/project_service.rb
+++ b/app/services/search/project_service.rb
@@ -8,9 +8,9 @@ module Search
attr_accessor :project, :current_user, :params
- def initialize(project_or_projects, user, params)
- @project = project_or_projects
+ def initialize(user, project_or_projects, params)
@current_user = user
+ @project = project_or_projects
@params = params.dup
end
diff --git a/app/services/search_service.rb b/app/services/search_service.rb
index b4344a009b2..7fca6ed7a20 100644
--- a/app/services/search_service.rb
+++ b/app/services/search_service.rb
@@ -187,7 +187,7 @@ class SearchService
def search_service
@search_service ||=
if project
- Search::ProjectService.new(project, current_user, params)
+ Search::ProjectService.new(current_user, project, params)
elsif show_snippets?
Search::SnippetService.new(current_user, params)
elsif group
diff --git a/app/views/groups/runners/show.html.haml b/app/views/groups/runners/show.html.haml
index 2fc314cc37f..43673d54478 100644
--- a/app/views/groups/runners/show.html.haml
+++ b/app/views/groups/runners/show.html.haml
@@ -1,8 +1,9 @@
+- add_page_specific_style 'page_bundles/ci_status'
- add_page_specific_style 'page_bundles/runner_details'
-- add_to_breadcrumbs _('Runners'), group_runners_path(@group)
- title = "##{@runner.id} (#{@runner.short_sha})"
- breadcrumb_title title
- page_title title
+- add_to_breadcrumbs _('Runners'), group_runners_path(@group)
#js-group-runner-show{ data: {runner_id: @runner.id, runners_path: group_runners_path(@group), edit_group_runner_path: edit_group_runner_path(@group, @runner)} }
diff --git a/app/views/shared/doorkeeper/applications/_delete_form.html.haml b/app/views/shared/doorkeeper/applications/_delete_form.html.haml
index b30ec2e7b3a..512daf7b96b 100644
--- a/app/views/shared/doorkeeper/applications/_delete_form.html.haml
+++ b/app/views/shared/doorkeeper/applications/_delete_form.html.haml
@@ -1,10 +1,10 @@
-- submit_btn_css ||= 'gl-button btn btn-danger btn-sm'
+- submit_btn_css ||= 'btn btn-danger btn-md gl-button btn-danger-secondary'
= form_tag path do
%input{ :name => "_method", :type => "hidden", :value => "delete" }
- if defined? small
- = render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm, icon: 'remove', button_options: { data: { confirm: _("Are you sure?"), confirm_btn_variant: "danger" } }) do
+ = render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm, icon: 'remove', button_options: { class: submit_btn_css, data: { confirm: _("Are you sure?"), confirm_btn_variant: "danger" } }) do
%span.sr-only
= _('Destroy')
- else
- = render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm, button_options: { aria: { label: _('Destroy') }, class: submit_btn_css, data: { confirm: _("Are you sure?"), confirm_btn_variant: "danger" } }) do
+ = render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm, button_options: { class: submit_btn_css, aria: { label: _('Destroy') }, data: { confirm: _("Are you sure?"), confirm_btn_variant: "danger" } }) do
= _('Destroy')
diff --git a/app/views/shared/doorkeeper/applications/_show.html.haml b/app/views/shared/doorkeeper/applications/_show.html.haml
index 562b1aee4ca..5b0cff2c1c0 100644
--- a/app/views/shared/doorkeeper/applications/_show.html.haml
+++ b/app/views/shared/doorkeeper/applications/_show.html.haml
@@ -51,4 +51,4 @@
- if @created
= link_to _('Continue'), index_path, class: 'btn btn-confirm btn-md gl-button gl-mr-3'
= link_to _('Edit'), edit_path, class: 'btn btn-default btn-md gl-button'
- = render 'shared/doorkeeper/applications/delete_form', path: delete_path, submit_btn_css: 'btn btn-danger btn-md gl-button btn-danger-secondary'
+ = render 'shared/doorkeeper/applications/delete_form', path: delete_path
diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml
index 693afdea43a..208d878ebc5 100644
--- a/app/workers/all_queues.yml
+++ b/app/workers/all_queues.yml
@@ -653,7 +653,7 @@
:tags: []
- :name: cronjob:prune_old_events
:worker_name: PruneOldEventsWorker
- :feature_category: :users
+ :feature_category: :user_profile
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@@ -806,7 +806,7 @@
:tags: []
- :name: cronjob:user_status_cleanup_batch
:worker_name: UserStatusCleanup::BatchWorker
- :feature_category: :users
+ :feature_category: :user_profile
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@@ -815,7 +815,7 @@
:tags: []
- :name: cronjob:users_create_statistics
:worker_name: Users::CreateStatisticsWorker
- :feature_category: :users
+ :feature_category: :user_profile
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@@ -833,7 +833,7 @@
:tags: []
- :name: cronjob:users_migrate_records_to_ghost_user_in_batches
:worker_name: Users::MigrateRecordsToGhostUserInBatchesWorker
- :feature_category: :users
+ :feature_category: :user_profile
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@@ -2192,7 +2192,7 @@
:tags: []
- :name: approve_blocked_pending_approval_users
:worker_name: ApproveBlockedPendingApprovalUsersWorker
- :feature_category: :users
+ :feature_category: :user_profile
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@@ -2298,6 +2298,15 @@
:weight: 1
:idempotent: true
:tags: []
+- :name: ci_cancel_redundant_pipelines
+ :worker_name: Ci::CancelRedundantPipelinesWorker
+ :feature_category: :continuous_integration
+ :has_external_dependencies: false
+ :urgency: :high
+ :resource_boundary: :unknown
+ :weight: 1
+ :idempotent: true
+ :tags: []
- :name: ci_delete_objects
:worker_name: Ci::DeleteObjectsWorker
:feature_category: :continuous_integration
diff --git a/app/workers/approve_blocked_pending_approval_users_worker.rb b/app/workers/approve_blocked_pending_approval_users_worker.rb
index 661ec87c1dd..13ce2454cf5 100644
--- a/app/workers/approve_blocked_pending_approval_users_worker.rb
+++ b/app/workers/approve_blocked_pending_approval_users_worker.rb
@@ -9,7 +9,7 @@ class ApproveBlockedPendingApprovalUsersWorker
idempotent!
- feature_category :users
+ feature_category :user_profile
def perform(current_user_id)
current_user = User.find(current_user_id)
diff --git a/app/workers/ci/cancel_redundant_pipelines_worker.rb b/app/workers/ci/cancel_redundant_pipelines_worker.rb
new file mode 100644
index 00000000000..8ae8b2df952
--- /dev/null
+++ b/app/workers/ci/cancel_redundant_pipelines_worker.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module Ci
+ class CancelRedundantPipelinesWorker
+ include ApplicationWorker
+
+ data_consistency :always
+ feature_category :continuous_integration
+ idempotent!
+ deduplicate :until_executed
+ urgency :high
+
+ def perform(pipeline_id)
+ Ci::Pipeline.find_by_id(pipeline_id).try do |pipeline|
+ Ci::PipelineCreation::CancelRedundantPipelinesService
+ .new(pipeline)
+ .execute
+ end
+ end
+ end
+end
diff --git a/app/workers/prune_old_events_worker.rb b/app/workers/prune_old_events_worker.rb
index 2d74c271ddc..c8dfb2ade0a 100644
--- a/app/workers/prune_old_events_worker.rb
+++ b/app/workers/prune_old_events_worker.rb
@@ -10,7 +10,7 @@ class PruneOldEventsWorker # rubocop:disable Scalability/IdempotentWorker
include CronjobQueue
# rubocop:enable Scalability/CronWorkerContext
- feature_category :users
+ feature_category :user_profile
DELETE_LIMIT = 10_000
diff --git a/app/workers/user_status_cleanup/batch_worker.rb b/app/workers/user_status_cleanup/batch_worker.rb
index f3d73b2e6e9..95a8bf6fe90 100644
--- a/app/workers/user_status_cleanup/batch_worker.rb
+++ b/app/workers/user_status_cleanup/batch_worker.rb
@@ -11,7 +11,7 @@ module UserStatusCleanup
include CronjobQueue
# rubocop:enable Scalability/CronWorkerContext
- feature_category :users
+ feature_category :user_profile
idempotent!
diff --git a/app/workers/users/create_statistics_worker.rb b/app/workers/users/create_statistics_worker.rb
index 0c27d165ded..e258fb92907 100644
--- a/app/workers/users/create_statistics_worker.rb
+++ b/app/workers/users/create_statistics_worker.rb
@@ -11,7 +11,7 @@ module Users
include CronjobQueue
# rubocop:enable Scalability/CronWorkerContext
- feature_category :users
+ feature_category :user_profile
def perform
UsersStatistics.create_current_stats!
diff --git a/app/workers/users/migrate_records_to_ghost_user_in_batches_worker.rb b/app/workers/users/migrate_records_to_ghost_user_in_batches_worker.rb
index d9a80b6e899..cfb463241d3 100644
--- a/app/workers/users/migrate_records_to_ghost_user_in_batches_worker.rb
+++ b/app/workers/users/migrate_records_to_ghost_user_in_batches_worker.rb
@@ -7,7 +7,7 @@ module Users
include CronjobQueue # rubocop: disable Scalability/CronWorkerContext
sidekiq_options retry: false
- feature_category :users
+ feature_category :user_profile
data_consistency :always
idempotent!
diff --git a/config/feature_categories.yml b/config/feature_categories.yml
index 4282fa32a1b..2d279c7506c 100644
--- a/config/feature_categories.yml
+++ b/config/feature_categories.yml
@@ -133,7 +133,7 @@
- team_planning
- tracing
- user_management
-- users
+- user_profile
- value_stream_management
- vulnerability_management
- web_ide
diff --git a/config/feature_flags/development/improve_deployment_hooksworker_serialization.yml b/config/feature_flags/development/improve_deployment_hooksworker_serialization.yml
new file mode 100644
index 00000000000..8392484b540
--- /dev/null
+++ b/config/feature_flags/development/improve_deployment_hooksworker_serialization.yml
@@ -0,0 +1,8 @@
+---
+name: improve_deployment_hooksworker_serialization
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/108988
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/388126
+milestone: '15.8'
+type: development
+group: group::release
+default_enabled: false
diff --git a/config/feature_flags/development/improved_spread_parallel_import.yml b/config/feature_flags/development/improved_spread_parallel_import.yml
new file mode 100644
index 00000000000..803af69344f
--- /dev/null
+++ b/config/feature_flags/development/improved_spread_parallel_import.yml
@@ -0,0 +1,8 @@
+---
+name: improved_spread_parallel_import
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/109264
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/388665
+milestone: '15.9'
+type: development
+group: group::import
+default_enabled: false
diff --git a/config/feature_flags/development/move_cancel_pending_pipelines_to_async.yml b/config/feature_flags/development/move_cancel_pending_pipelines_to_async.yml
new file mode 100644
index 00000000000..08009c7372a
--- /dev/null
+++ b/config/feature_flags/development/move_cancel_pending_pipelines_to_async.yml
@@ -0,0 +1,8 @@
+---
+name: move_cancel_pending_pipelines_to_async
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106347
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/385099
+milestone: '15.9'
+type: development
+group: group::pipeline execution
+default_enabled: false
diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml
index b542ba45aa8..de6e159921c 100644
--- a/config/sidekiq_queues.yml
+++ b/config/sidekiq_queues.yml
@@ -91,6 +91,8 @@
- 1
- - ci_cancel_pipeline
- 1
+- - ci_cancel_redundant_pipelines
+ - 1
- - ci_delete_objects
- 1
- - ci_job_artifacts_expire_project_build_artifacts
diff --git a/danger/qa_selector/Dangerfile b/danger/qa_selector/Dangerfile
index a20e626c694..b781f390a1a 100644
--- a/danger/qa_selector/Dangerfile
+++ b/danger/qa_selector/Dangerfile
@@ -1,9 +1,13 @@
# frozen_string_literal: true
-def filter_changed_lines(files)
+data_qa_selectors = /qa_selector|data-qa-selector/
+
+deprecated_qa_selectors = /(?!.*\bdata-qa-)(?=class=.*qa-.*|class: .*qa-.*)/
+
+def filter_changed_lines(files, pattern)
lines = []
files.each do |file|
- qa_selector_changed_lines = helper.changed_lines(file).select { |line| line =~ /qa_selector|data-qa-selector/ }
+ qa_selector_changed_lines = helper.changed_lines(file).select { |line| line =~ pattern }
next unless qa_selector_changed_lines.any?
lines += ["file `#{file}`:", qa_selector_changed_lines]
@@ -15,9 +19,11 @@ changed_code_files = helper.changed_files(/\.(vue|haml|js|rb)$/)
return if changed_code_files.empty?
-lines_with_qa_selectors = filter_changed_lines(changed_code_files)
+lines_with_qa_selectors = filter_changed_lines(changed_code_files, data_qa_selectors)
+
+deprecated_qa_class = filter_changed_lines(changed_code_files, deprecated_qa_selectors)
-return if lines_with_qa_selectors.empty?
+return if (lines_with_qa_selectors + deprecated_qa_class).empty?
markdown(<<~MARKDOWN)
## QA Selectors
@@ -40,3 +46,18 @@ if lines_with_qa_selectors.any?
warn "This merge request contains lines with QA selectors. Please ensure `e2e:package-and-test` job is run."
end
+
+if deprecated_qa_class.any?
+ markdown(<<~MARKDOWN)
+ ### Deprecated .qa-selector class
+
+ The following lines in this MR contain deprecated qa class selectors:
+
+ * #{deprecated_qa_class.join("\n* ")}
+
+ Please ensure all deprecated qa class selectors are replaced with data-qa-selectors in accordance with our [Testing Guide](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/page_objects.html#data-qa-selector-vs-qa-selector).
+
+ MARKDOWN
+
+ warn "This merge request contains deprecated .qa-selector CSS class. Please use data-qa-selector attribute instead."
+end
diff --git a/db/docs/achievements.yml b/db/docs/achievements.yml
index 04d17defa06..6f471929aea 100644
--- a/db/docs/achievements.yml
+++ b/db/docs/achievements.yml
@@ -3,7 +3,7 @@ table_name: achievements
classes:
- Achievements::Achievement
feature_categories:
-- users
+- user_profile
description: Achievements which can be created by namespaces to award them to users
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105871
milestone: '15.7'
diff --git a/db/docs/emails.yml b/db/docs/emails.yml
index 8b107994d7d..0a6dad02aac 100644
--- a/db/docs/emails.yml
+++ b/db/docs/emails.yml
@@ -3,7 +3,7 @@ table_name: emails
classes:
- Email
feature_categories:
-- users
+- user_profile
description: Stores users email records
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/29cfd33d949d21d67f3892473c24d4f0a127dfe6
milestone: '6.6'
diff --git a/db/docs/events.yml b/db/docs/events.yml
index 45e3d49fd94..ab4fb314456 100644
--- a/db/docs/events.yml
+++ b/db/docs/events.yml
@@ -4,7 +4,7 @@ classes:
- Event
- PushEvent
feature_categories:
-- users
+- user_profile
description: Stores user generated events.
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/a847501fd2ffc1c4becc7d0d352d80168d9b3568
milestone: "<6.0"
diff --git a/db/docs/ghost_user_migrations.yml b/db/docs/ghost_user_migrations.yml
index 245e6735cd6..9d5c9617917 100644
--- a/db/docs/ghost_user_migrations.yml
+++ b/db/docs/ghost_user_migrations.yml
@@ -3,7 +3,7 @@ table_name: ghost_user_migrations
classes:
- Users::GhostUserMigration
feature_categories:
-- users
+- user_profile
description: Users records awaiting for their associated records to be migrated to ghost user
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/95473
milestone: '15.4'
diff --git a/db/docs/push_event_payloads.yml b/db/docs/push_event_payloads.yml
index d0f1bdeb060..35d8e657480 100644
--- a/db/docs/push_event_payloads.yml
+++ b/db/docs/push_event_payloads.yml
@@ -3,7 +3,7 @@ table_name: push_event_payloads
classes:
- PushEventPayload
feature_categories:
-- users
+- user_profile
description: Stores log of push events
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/12463
milestone: '9.5'
diff --git a/db/docs/routes.yml b/db/docs/routes.yml
index c54f976d91a..4c078bc8558 100644
--- a/db/docs/routes.yml
+++ b/db/docs/routes.yml
@@ -6,7 +6,7 @@ classes:
feature_categories:
- projects
- subgroups
-- users
+- user_profile
description: Stores routes per namespaces and projects
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/7121
milestone: '9.0'
diff --git a/db/docs/user_achievements.yml b/db/docs/user_achievements.yml
index e60631de630..a7a20f77fb4 100644
--- a/db/docs/user_achievements.yml
+++ b/db/docs/user_achievements.yml
@@ -3,7 +3,7 @@ table_name: user_achievements
classes:
- Achievements::UserAchievement
feature_categories:
-- users
+- user_profile
description: Achievements awarded to and revoked from users
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/107027
milestone: '15.8'
diff --git a/db/docs/user_custom_attributes.yml b/db/docs/user_custom_attributes.yml
index 992f790cf24..8db43b2777d 100644
--- a/db/docs/user_custom_attributes.yml
+++ b/db/docs/user_custom_attributes.yml
@@ -3,7 +3,7 @@ table_name: user_custom_attributes
classes:
- UserCustomAttribute
feature_categories:
-- users
+- user_profile
description: Storing custom attributes per user
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/13038
milestone: '10.1'
diff --git a/db/docs/user_details.yml b/db/docs/user_details.yml
index 7001c22289d..f633ca8b863 100644
--- a/db/docs/user_details.yml
+++ b/db/docs/user_details.yml
@@ -3,7 +3,7 @@ table_name: user_details
classes:
- UserDetail
feature_categories:
-- users
+- user_profile
description: Stores user details
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/25483
milestone: '12.9'
diff --git a/db/docs/user_follow_users.yml b/db/docs/user_follow_users.yml
index 12d64b01a1d..63a7a639a06 100644
--- a/db/docs/user_follow_users.yml
+++ b/db/docs/user_follow_users.yml
@@ -3,7 +3,7 @@ table_name: user_follow_users
classes:
- Users::UserFollowUser
feature_categories:
-- users
+- user_profile
description: Stores which users follow each other
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/45451
milestone: '13.9'
diff --git a/db/docs/user_preferences.yml b/db/docs/user_preferences.yml
index 7bc1ab27ccb..3763997fc63 100644
--- a/db/docs/user_preferences.yml
+++ b/db/docs/user_preferences.yml
@@ -3,7 +3,7 @@ table_name: user_preferences
classes:
- UserPreference
feature_categories:
-- users
+- user_profile
description: Stores users' preferences
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/7816
milestone: '11.5'
diff --git a/db/docs/user_statuses.yml b/db/docs/user_statuses.yml
index e5f4d4ee72f..b37b3e259d6 100644
--- a/db/docs/user_statuses.yml
+++ b/db/docs/user_statuses.yml
@@ -3,7 +3,7 @@ table_name: user_statuses
classes:
- UserStatus
feature_categories:
-- users
+- user_profile
description: Stores users' statuses
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/20614
milestone: '11.2'
diff --git a/db/docs/users.yml b/db/docs/users.yml
index 324d81850a1..265e1553fa1 100644
--- a/db/docs/users.yml
+++ b/db/docs/users.yml
@@ -5,7 +5,7 @@ classes:
- TmpUser
- User
feature_categories:
-- users
+- user_profile
description: TODO
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/9ba1224867665844b117fa037e1465bb706b3685
milestone: "<6.0"
diff --git a/db/migrate/20221216145659_add_pa_clickhouse_connection_string_to_application_settings.rb b/db/migrate/20221216145659_add_pa_clickhouse_connection_string_to_application_settings.rb
new file mode 100644
index 00000000000..8774ee8b964
--- /dev/null
+++ b/db/migrate/20221216145659_add_pa_clickhouse_connection_string_to_application_settings.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+class AddPaClickhouseConnectionStringToApplicationSettings < Gitlab::Database::Migration[2.1]
+ def change
+ add_column :application_settings, :encrypted_product_analytics_clickhouse_connection_string, :binary
+ add_column :application_settings, :encrypted_product_analytics_clickhouse_connection_string_iv, :binary
+ end
+end
diff --git a/db/migrate/20221219122320_copy_clickhouse_connection_string_to_encrypted_var.rb b/db/migrate/20221219122320_copy_clickhouse_connection_string_to_encrypted_var.rb
new file mode 100644
index 00000000000..feaa2dab170
--- /dev/null
+++ b/db/migrate/20221219122320_copy_clickhouse_connection_string_to_encrypted_var.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+class CopyClickhouseConnectionStringToEncryptedVar < Gitlab::Database::Migration[2.1]
+ restrict_gitlab_migration gitlab_schema: :gitlab_main
+
+ class ApplicationSetting < MigrationRecord
+ self.table_name = 'application_settings'
+
+ attr_encrypted :product_analytics_clickhouse_connection_string, {
+ mode: :per_attribute_iv,
+ key: Settings.attr_encrypted_db_key_base_32,
+ algorithm: 'aes-256-gcm',
+ encode: true
+ }.merge(encode: false, encode_iv: false)
+ end
+
+ def up
+ setting = ApplicationSetting.first
+
+ setting.update!(product_analytics_clickhouse_connection_string: setting.clickhouse_connection_string) if setting
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/schema_migrations/20221216145659 b/db/schema_migrations/20221216145659
new file mode 100644
index 00000000000..9ff23376bd9
--- /dev/null
+++ b/db/schema_migrations/20221216145659
@@ -0,0 +1 @@
+aacb19ddcf902b9f0ad07f113b2fbd1c9d408b707ad62880ef058ff5b129b456 \ No newline at end of file
diff --git a/db/schema_migrations/20221219122320 b/db/schema_migrations/20221219122320
new file mode 100644
index 00000000000..bac9b8181c4
--- /dev/null
+++ b/db/schema_migrations/20221219122320
@@ -0,0 +1 @@
+8c4a83a223ae23e3d56665a584af192311459d18af228d71b868775c368086a7 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index eb3c8b02972..e6450762ce1 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -11592,6 +11592,8 @@ CREATE TABLE application_settings (
allow_runner_registration_token boolean DEFAULT true NOT NULL,
user_defaults_to_private_profile boolean DEFAULT false NOT NULL,
allow_possible_spam boolean DEFAULT false NOT NULL,
+ encrypted_product_analytics_clickhouse_connection_string bytea,
+ encrypted_product_analytics_clickhouse_connection_string_iv bytea,
CONSTRAINT app_settings_container_reg_cleanup_tags_max_list_size_positive CHECK ((container_registry_cleanup_tags_service_max_list_size >= 0)),
CONSTRAINT app_settings_container_registry_pre_import_tags_rate_positive CHECK ((container_registry_pre_import_tags_rate >= (0)::numeric)),
CONSTRAINT app_settings_dep_proxy_ttl_policies_worker_capacity_positive CHECK ((dependency_proxy_ttl_group_policy_worker_capacity >= 0)),
diff --git a/doc/api/bulk_imports.md b/doc/api/bulk_imports.md
index a438bc13818..6a33bd1bc95 100644
--- a/doc/api/bulk_imports.md
+++ b/doc/api/bulk_imports.md
@@ -4,14 +4,14 @@ group: Import
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# GitLab Migrations (Bulk Imports) API **(FREE)**
+# Group migration by direct transfer API **(FREE)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64335) in GitLab 14.1.
-With the GitLab Migrations API, you can view the progress of migrations initiated with
-[GitLab Group Migration](../user/group/import/index.md).
+With the group migration by direct transfer API, you can start and view the progress of migrations initiated with
+[group migration by direct transfer](../user/group/import/index.md#migrate-groups-by-direct-transfer-recommended).
-## Start a new GitLab migration
+## Start a new group migration
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66353) in GitLab 14.2.
@@ -54,7 +54,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitla
{ "id": 1, "status": "created", "source_type": "gitlab", "created_at": "2021-06-18T09:45:55.358Z", "updated_at": "2021-06-18T09:46:27.003Z" }
```
-## List all GitLab migrations
+## List all group migrations
```plaintext
GET /bulk_imports
@@ -97,7 +97,7 @@ curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
]
```
-## List all GitLab migrations' entities
+## List all group migrations' entities
```plaintext
GET /bulk_imports/entities
@@ -165,7 +165,7 @@ curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
]
```
-## Get GitLab migration details
+## Get group migration details
```plaintext
GET /bulk_imports/:id
@@ -185,7 +185,7 @@ curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
}
```
-## List GitLab migration entities
+## List group migration entities
```plaintext
GET /bulk_imports/:id/entities
@@ -221,7 +221,7 @@ curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
]
```
-## Get GitLab migration entity details
+## Get group migration entity details
```plaintext
GET /bulk_imports/:id/entities/:entity_id
diff --git a/doc/api/settings.md b/doc/api/settings.md
index 1fa491ef41c..6ca94f840a2 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -282,7 +282,7 @@ listed in the descriptions of the relevant settings.
| `auto_devops_domain` | string | no | Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages. |
| `auto_devops_enabled` | boolean | no | Enable Auto DevOps for projects by default. It automatically builds, tests, and deploys applications based on a predefined CI/CD configuration. |
| `automatic_purchased_storage_allocation` | boolean | no | Enabling this permits automatic allocation of purchased storage in a namespace. |
-| `bulk_import_enabled` | boolean | no | Enable migrating GitLab groups by direct transfer. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/383268) in GitLab 15.8. Requires [`bulk_import_projects` feature flag](../user/group/import/index.md#migrate-groups-by-direct-transfer-recommended) to also migrate projects. |
+| `bulk_import_enabled` | boolean | no | Enable migrating GitLab groups by direct transfer. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/383268) in GitLab 15.8. Requires [`bulk_import_projects` feature flag](../user/group/import/index.md#migrate-groups-by-direct-transfer-recommended) to also migrate projects. Setting also [available](../user/admin_area/settings/visibility_and_access_controls.md#enable-migration-of-groups-and-projects-by-direct-transfer) in the Admin Area. |
| `can_create_group` | boolean | no | Indicates whether users can create top-level groups. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/367754) in GitLab 15.5. Defaults to `true`. |
| `check_namespace_plan` **(PREMIUM)** | boolean | no | Enabling this makes only licensed EE features available to projects if the project namespace's plan includes the feature or if the project is public. |
| `commit_email_hostname` | string | no | Custom hostname (for private commit emails). |
diff --git a/doc/development/bulk_import.md b/doc/development/bulk_import.md
index a80efb40ecc..68709329c27 100644
--- a/doc/development/bulk_import.md
+++ b/doc/development/bulk_import.md
@@ -4,16 +4,16 @@ group: Import
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# GitLab Group Migration
+# Group migration by direct transfer
[Introduced](https://gitlab.com/groups/gitlab-org/-/epics/2771) in GitLab 13.7.
WARNING:
This feature is [under construction](https://gitlab.com/groups/gitlab-org/-/epics/2771) and its API/Architecture might change in the future.
-GitLab Group Migration is the evolution of Project and Group Import functionality. The
-goal is to have an easier way to the user migrate a whole Group, including
-Projects, from one GitLab instance to another.
+[Group migration by direct transfer](../user/group/import/index.md#migrate-groups-by-direct-transfer-recommended) is the
+evolution of migrating groups and projects using file exports. The goal is to have an easier way for the user to migrate a whole group,
+including projects, from one GitLab instance to another.
## Design decisions
diff --git a/doc/development/feature_categorization/index.md b/doc/development/feature_categorization/index.md
index 383ada972a8..e0c6d4cfa9f 100644
--- a/doc/development/feature_categorization/index.md
+++ b/doc/development/feature_categorization/index.md
@@ -166,7 +166,7 @@ specific routes:
```ruby
module API
class Users < ::API::Base
- feature_category :users, ['/users/:id/custom_attributes', '/users/:id/custom_attributes/:key']
+ feature_category :user_profile, ['/users/:id/custom_attributes', '/users/:id/custom_attributes/:key']
end
end
```
@@ -208,12 +208,14 @@ Example:
For examples that don't have a `feature_category` set we add a warning when running them in local environment.
-In order to disable the warning use `RSPEC_WARN_MISSING_FEATURE_CATEGORY=false` when running RSpec tests:
+To disable the warning use `RSPEC_WARN_MISSING_FEATURE_CATEGORY=false` when running RSpec tests:
```shell
RSPEC_WARN_MISSING_FEATURE_CATEGORY=false bin/rspec spec/<test_file>
```
+Additionally, we flag the offenses via `RSpec/MissingFeatureCategory` RuboCop rule.
+
### Tooling feature category
For Engineering Productivity internal tooling we use `feature_category: :tooling`.
diff --git a/doc/development/internal_api/index.md b/doc/development/internal_api/index.md
index 162ce4d3eb9..b19e431ebc6 100644
--- a/doc/development/internal_api/index.md
+++ b/doc/development/internal_api/index.md
@@ -1377,7 +1377,8 @@ Returns an empty response with a `204` status code if successful.
### Remove a single SCIM provisioned user
-Removes the user's SSO identity.
+The user is placed in an `ldap_blocked` status and signed out. This means
+the user cannot sign in or push or pull code.
```plaintext
DELETE /api/scim/v2/application/Users/:id
diff --git a/doc/user/admin_area/settings/visibility_and_access_controls.md b/doc/user/admin_area/settings/visibility_and_access_controls.md
index 5ca942a42bb..0410f2589f7 100644
--- a/doc/user/admin_area/settings/visibility_and_access_controls.md
+++ b/doc/user/admin_area/settings/visibility_and_access_controls.md
@@ -200,7 +200,9 @@ To enable the export of
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/383268) in GitLab 15.8.
-You can enable migration of groups by direct transfer. To also migrate projects with the groups, you must enable the
+You can enable migration of groups by direct transfer using the UI.
+
+To also migrate projects with the groups, you must enable the
[`bulk_import_projects` feature flag](../../group/import/index.md#migrate-groups-by-direct-transfer-recommended).
To enable migration of groups by direct transfer:
@@ -213,6 +215,10 @@ To enable migration of groups by direct transfer:
1. Select the **Enabled** checkbox.
1. Select **Save changes**.
+The same setting
+[is available](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls) in the API as the
+`bulk_import_enabled` attribute.
+
## Configure enabled Git access protocols
With GitLab access restrictions, you can select the protocols users can use to
diff --git a/doc/user/analytics/merge_request_analytics.md b/doc/user/analytics/merge_request_analytics.md
index 1d1127c3d9f..69ba5a67197 100644
--- a/doc/user/analytics/merge_request_analytics.md
+++ b/doc/user/analytics/merge_request_analytics.md
@@ -13,18 +13,19 @@ info: To determine the technical writer assigned to the Stage/Group associated w
Use merge request analytics to view:
- The number of merge requests your organization merged per month.
-- The average time between merge request creation and merge.
-- Information about each merged merge request.
+- The average time between merge request creation and merge event.
+- Information about each merged merge request (such as milestone, commits, line changes, and assignees).
You can use merge request analytics to identify:
- Low or high productivity months.
-- Efficiency and productivity of your merge request process.
-- Efficiency of your code review process.
+- The efficiency and productivity of your merge request and code review processes.
## View merge request analytics
-You must have at least the Reporter role to view merge request analytics.
+Prerequisite:
+
+- You must have at least the Reporter role.
To view merge request analytics:
@@ -52,17 +53,26 @@ The **Throughput** chart shows issues closed or merge requests merged (not close
time.
The table shows up to 20 merge requests per page, and includes
-information about each merge request.
+the following information about each merge request:
+
+- Merge request name
+- Date merged
+- Time to merge
+- Milestone
+- Commits
+- Pipelines
+- Line changes
+- Assignees
## View average time between merge request creation and merge
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229389) in GitLab 13.9.
-Use the number in **Mean time to merge** to view the average time between when a merge request is
-created and when it's merged. Closed and un-merged merge requests are not included.
+The number in **Mean time to merge** shows the average time between when a merge request is
+created and when it's merged. Closed and not yet merged merge requests are not included.
To view **Mean time to merge**:
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Merge request**. The **Mean time to merge** number
-is shown on the dashboard.
+is displayed on the dashboard.
diff --git a/doc/user/group/import/index.md b/doc/user/group/import/index.md
index dcd91171401..c31840a233d 100644
--- a/doc/user/group/import/index.md
+++ b/doc/user/group/import/index.md
@@ -38,7 +38,8 @@ this feature, ask an administrator to [enable the feature flag](../../../adminis
Prerequisites:
- Network connection between instances or GitLab.com. Must support HTTPS.
-- Both GitLab instances have [migration enabled in application settings](../../admin_area/settings/visibility_and_access_controls.md#enable-migration-of-groups-and-projects-by-direct-transfer)
+- Both GitLab instances have group migration by direct transfer
+ [enabled in application settings](../../admin_area/settings/visibility_and_access_controls.md#enable-migration-of-groups-and-projects-by-direct-transfer)
by an instance administrator.
- Owner role on the source group to migrate from.
- At least the Maintainer role on the destination group to migrate to. Using the Developer role for this purpose was
@@ -270,7 +271,7 @@ entities.where(status: [-1]).pluck(:destination_name, :destination_namespace, :s
```
You can also see all migrated entities with any failures related to them using an
-[API endpoint](../../../api/bulk_imports.md#list-all-gitlab-migrations-entities).
+[API endpoint](../../../api/bulk_imports.md#list-all-group-migrations-entities).
#### Stale imports
diff --git a/lib/api/avatar.rb b/lib/api/avatar.rb
index 0fb7a4cd435..addea780eb0 100644
--- a/lib/api/avatar.rb
+++ b/lib/api/avatar.rb
@@ -2,7 +2,7 @@
module API
class Avatar < ::API::Base
- feature_category :users
+ feature_category :user_profile
urgency :medium
resource :avatar do
diff --git a/lib/api/events.rb b/lib/api/events.rb
index d3e8892f3bc..5428692e3ec 100644
--- a/lib/api/events.rb
+++ b/lib/api/events.rb
@@ -8,7 +8,7 @@ module API
allow_access_with_scope :read_user, if: -> (request) { request.get? || request.head? }
- feature_category :users
+ feature_category :user_profile
urgency :low
resource :events do
diff --git a/lib/api/invitations.rb b/lib/api/invitations.rb
index 872dab26469..ec563e6a5c5 100644
--- a/lib/api/invitations.rb
+++ b/lib/api/invitations.rb
@@ -4,7 +4,7 @@ module API
class Invitations < ::API::Base
include PaginationParams
- feature_category :users
+ feature_category :user_profile
before { authenticate! }
diff --git a/lib/api/project_events.rb b/lib/api/project_events.rb
index d90ce32c354..3e651cdda44 100644
--- a/lib/api/project_events.rb
+++ b/lib/api/project_events.rb
@@ -6,7 +6,7 @@ module API
include APIGuard
helpers ::API::Helpers::EventsHelpers
- feature_category :users
+ feature_category :user_profile
# TODO: Set higher urgency after resolving https://gitlab.com/gitlab-org/gitlab/-/issues/357839
urgency :low
diff --git a/lib/api/users.rb b/lib/api/users.rb
index a9b09596728..6e9dc22cf86 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -8,7 +8,7 @@ module API
allow_access_with_scope :read_user, if: -> (request) { request.get? || request.head? }
- feature_category :users,
+ feature_category :user_profile,
%w[
/users/:id/custom_attributes
/users/:id/custom_attributes/:key
@@ -131,7 +131,7 @@ module API
use :optional_index_params_ee
end
# rubocop: disable CodeReuse/ActiveRecord
- get feature_category: :users, urgency: :low do
+ get feature_category: :user_profile, urgency: :low do
authenticated_as_admin! if params[:extern_uid].present? && params[:provider].present?
unless current_user&.can_read_all_resources?
@@ -175,7 +175,7 @@ module API
use :with_custom_attributes
end
# rubocop: disable CodeReuse/ActiveRecord
- get ":id", feature_category: :users, urgency: :low do
+ get ":id", feature_category: :user_profile, urgency: :low do
forbidden!('Not authorized!') unless current_user
unless current_user.can_read_all_resources?
@@ -200,7 +200,7 @@ module API
params do
requires :user_id, type: String, desc: 'The ID or username of the user'
end
- get ":user_id/status", requirements: API::USER_REQUIREMENTS, feature_category: :users, urgency: :default do
+ get ":user_id/status", requirements: API::USER_REQUIREMENTS, feature_category: :user_profile, urgency: :default do
user = find_user(params[:user_id])
not_found!('User') unless user && can?(current_user, :read_user, user)
@@ -214,7 +214,7 @@ module API
params do
requires :id, type: Integer, desc: 'The ID of the user'
end
- post ':id/follow', feature_category: :users do
+ post ':id/follow', feature_category: :user_profile do
user = find_user(params[:id])
not_found!('User') unless user
@@ -234,7 +234,7 @@ module API
params do
requires :id, type: Integer, desc: 'The ID of the user'
end
- post ':id/unfollow', feature_category: :users do
+ post ':id/unfollow', feature_category: :user_profile do
user = find_user(params[:id])
not_found!('User') unless user
@@ -252,7 +252,7 @@ module API
requires :id, type: Integer, desc: 'The ID of the user'
use :pagination
end
- get ':id/following', feature_category: :users do
+ get ':id/following', feature_category: :user_profile do
forbidden!('Not authorized!') unless current_user
user = find_user(params[:id])
@@ -268,7 +268,7 @@ module API
requires :id, type: Integer, desc: 'The ID of the user'
use :pagination
end
- get ':id/followers', feature_category: :users do
+ get ':id/followers', feature_category: :user_profile do
forbidden!('Not authorized!') unless current_user
user = find_user(params[:id])
@@ -291,7 +291,7 @@ module API
optional :force_random_password, type: Boolean, desc: 'Flag indicating a random password will be set'
use :optional_attributes
end
- post feature_category: :users do
+ post feature_category: :user_profile do
authenticated_as_admin!
params = declared_params(include_missing: false)
@@ -333,7 +333,7 @@ module API
use :optional_attributes
end
# rubocop: disable CodeReuse/ActiveRecord
- put ":id", feature_category: :users do
+ put ":id", feature_category: :user_profile do
authenticated_as_admin!
user = User.find_by(id: params.delete(:id))
@@ -644,7 +644,7 @@ module API
optional :skip_confirmation, type: Boolean, desc: 'Skip confirmation of email and assume it is verified'
end
# rubocop: disable CodeReuse/ActiveRecord
- post ":id/emails", feature_category: :users do
+ post ":id/emails", feature_category: :user_profile do
authenticated_as_admin!
user = User.find_by(id: params.delete(:id))
@@ -668,7 +668,7 @@ module API
use :pagination
end
# rubocop: disable CodeReuse/ActiveRecord
- get ':id/emails', feature_category: :users do
+ get ':id/emails', feature_category: :user_profile do
authenticated_as_admin!
user = User.find_by(id: params[:id])
not_found!('User') unless user
@@ -685,7 +685,7 @@ module API
requires :email_id, type: Integer, desc: 'The ID of the email'
end
# rubocop: disable CodeReuse/ActiveRecord
- delete ':id/emails/:email_id', feature_category: :users do
+ delete ':id/emails/:email_id', feature_category: :user_profile do
authenticated_as_admin!
user = User.find_by(id: params[:id])
not_found!('User') unless user
@@ -707,7 +707,7 @@ module API
optional :hard_delete, type: Boolean, desc: "Whether to remove a user's contributions"
end
# rubocop: disable CodeReuse/ActiveRecord
- delete ":id", feature_category: :users do
+ delete ":id", feature_category: :user_profile do
authenticated_as_admin!
user = User.find_by(id: params[:id])
@@ -883,7 +883,7 @@ module API
optional :type, type: String, values: %w[Project Namespace]
use :pagination
end
- get ":user_id/memberships", feature_category: :users, urgency: :high do
+ get ":user_id/memberships", feature_category: :user_profile, urgency: :high do
authenticated_as_admin!
user = find_user_by_id(params)
@@ -1021,7 +1021,7 @@ module API
desc 'Get the currently authenticated user' do
success Entities::UserPublic
end
- get feature_category: :users, urgency: :low do
+ get feature_category: :user_profile, urgency: :low do
entity =
# We're disabling Cop/UserAdmin because it checks if the given user is an admin.
if current_user.admin? # rubocop:disable Cop/UserAdmin
@@ -1202,7 +1202,7 @@ module API
params do
use :pagination
end
- get "emails", feature_category: :users, urgency: :high do
+ get "emails", feature_category: :user_profile, urgency: :high do
present paginate(current_user.emails), with: Entities::Email
end
@@ -1244,7 +1244,7 @@ module API
optional :show_whitespace_in_diffs, type: Boolean, desc: 'Flag indicating the user sees whitespace changes in diffs'
at_least_one_of :view_diffs_file_by_file, :show_whitespace_in_diffs
end
- put "preferences", feature_category: :users, urgency: :high do
+ put "preferences", feature_category: :user_profile, urgency: :high do
authenticate!
preferences = current_user.user_preference
@@ -1263,7 +1263,7 @@ module API
success Entities::UserPreferences
detail 'This feature was introduced in GitLab 14.0.'
end
- get "preferences", feature_category: :users do
+ get "preferences", feature_category: :user_profile do
present current_user.user_preference, with: Entities::UserPreferences
end
@@ -1274,7 +1274,7 @@ module API
requires :email_id, type: Integer, desc: 'The ID of the email'
end
# rubocop: disable CodeReuse/ActiveRecord
- get "emails/:email_id", feature_category: :users do
+ get "emails/:email_id", feature_category: :user_profile do
email = current_user.emails.find_by(id: params[:email_id])
not_found!('Email') unless email
@@ -1288,7 +1288,7 @@ module API
params do
requires :email, type: String, desc: 'The new email'
end
- post "emails", feature_category: :users do
+ post "emails", feature_category: :user_profile do
email = Emails::CreateService.new(current_user, declared_params.merge(user: current_user)).execute
if email.errors.blank?
@@ -1303,7 +1303,7 @@ module API
requires :email_id, type: Integer, desc: 'The ID of the email'
end
# rubocop: disable CodeReuse/ActiveRecord
- delete "emails/:email_id", feature_category: :users do
+ delete "emails/:email_id", feature_category: :user_profile do
email = current_user.emails.find_by(id: params[:email_id])
not_found!('Email') unless email
@@ -1319,7 +1319,7 @@ module API
use :pagination
end
# rubocop: disable CodeReuse/ActiveRecord
- get "activities", feature_category: :users do
+ get "activities", feature_category: :user_profile do
authenticated_as_admin!
activities = User
@@ -1337,7 +1337,7 @@ module API
params do
use :set_user_status_params
end
- put "status", feature_category: :users do
+ put "status", feature_category: :user_profile do
set_user_status(include_missing_params: true)
end
@@ -1348,7 +1348,7 @@ module API
params do
use :set_user_status_params
end
- patch "status", feature_category: :users do
+ patch "status", feature_category: :user_profile do
if declared_params(include_missing: false).empty?
status :ok
@@ -1361,7 +1361,7 @@ module API
desc 'get the status of the current user' do
success Entities::UserStatus
end
- get 'status', feature_category: :users do
+ get 'status', feature_category: :user_profile do
present current_user.status || {}, with: Entities::UserStatus
end
end
diff --git a/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb b/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb
index 53c8a7ac122..72040740190 100644
--- a/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb
+++ b/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb
@@ -9,55 +9,17 @@ module Gitlab
BATCH_SIZE = 25
- # rubocop: disable CodeReuse/ActiveRecord
def perform!
- return if pipeline.parent_pipeline? # skip if child pipeline
- return unless project.auto_cancel_pending_pipelines?
-
- Gitlab::OptimisticLocking.retry_lock(auto_cancelable_pipelines, name: 'cancel_pending_pipelines') do |cancelables|
- cancelables.select(:id).each_batch(of: BATCH_SIZE) do |cancelables_batch|
- auto_cancel_interruptible_pipelines(cancelables_batch.ids)
- end
+ if Feature.enabled?(:move_cancel_pending_pipelines_to_async, project)
+ ::Ci::CancelRedundantPipelinesWorker.perform_async(pipeline.id)
+ else
+ ::Ci::PipelineCreation::CancelRedundantPipelinesService.new(pipeline).execute
end
end
- # rubocop: enable CodeReuse/ActiveRecord
def break?
false
end
-
- private
-
- def auto_cancelable_pipelines
- project.all_pipelines
- .created_after(1.week.ago)
- .ci_and_parent_sources
- .for_ref(pipeline.ref)
- .where_not_sha(project.commit(pipeline.ref).try(:id))
- .alive_or_scheduled
- .id_not_in(pipeline.id)
- end
-
- def auto_cancel_interruptible_pipelines(pipeline_ids)
- ::Ci::Pipeline
- .id_in(pipeline_ids)
- .with_only_interruptible_builds
- .each do |cancelable_pipeline|
- Gitlab::AppLogger.info(
- class: self.class.name,
- message: "Pipeline #{pipeline.id} auto-canceling pipeline #{cancelable_pipeline.id}",
- canceled_pipeline_id: cancelable_pipeline.id,
- canceled_by_pipeline_id: pipeline.id,
- canceled_by_pipeline_source: pipeline.source
- )
-
- # cascade_to_children not needed because we iterate through descendants here
- cancelable_pipeline.cancel_running(
- auto_canceled_by_pipeline_id: pipeline.id,
- cascade_to_children: false
- )
- end
- end
end
end
end
diff --git a/lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb b/lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb
index 4090555c85e..e0a7e6479f5 100644
--- a/lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb
+++ b/lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb
@@ -16,6 +16,10 @@ module Gitlab
@parallel = parallel
@already_imported_cache_key = ALREADY_IMPORTED_CACHE_KEY %
{ project: project.id, collection: collection_method }
+ @job_waiter_cache_key = JOB_WAITER_CACHE_KEY %
+ { project: project.id, collection: collection_method }
+ @job_waiter_remaining_cache_key = JOB_WAITER_REMAINING_CACHE_KEY %
+ { project: project.id, collection: collection_method }
end
# In single endpoint there is no issue info to which associated related
diff --git a/lib/gitlab/github_import/parallel_scheduling.rb b/lib/gitlab/github_import/parallel_scheduling.rb
index 03aa02fb659..6ecf2a8511f 100644
--- a/lib/gitlab/github_import/parallel_scheduling.rb
+++ b/lib/gitlab/github_import/parallel_scheduling.rb
@@ -3,11 +3,18 @@
module Gitlab
module GithubImport
module ParallelScheduling
- attr_reader :project, :client, :page_counter, :already_imported_cache_key
+ attr_reader :project, :client, :page_counter, :already_imported_cache_key,
+ :job_waiter_cache_key, :job_waiter_remaining_cache_key
# The base cache key to use for tracking already imported objects.
ALREADY_IMPORTED_CACHE_KEY =
'github-importer/already-imported/%{project}/%{collection}'
+ # The base cache key to use for storing job waiter key
+ JOB_WAITER_CACHE_KEY =
+ 'github-importer/job-waiter/%{project}/%{collection}'
+ # The base cache key to use for storing job waiter remaining jobs
+ JOB_WAITER_REMAINING_CACHE_KEY =
+ 'github-importer/job-waiter-remaining/%{project}/%{collection}'
# project - An instance of `Project`.
# client - An instance of `Gitlab::GithubImport::Client`.
@@ -19,6 +26,10 @@ module Gitlab
@page_counter = PageCounter.new(project, collection_method)
@already_imported_cache_key = ALREADY_IMPORTED_CACHE_KEY %
{ project: project.id, collection: collection_method }
+ @job_waiter_cache_key = JOB_WAITER_CACHE_KEY %
+ { project: project.id, collection: collection_method }
+ @job_waiter_remaining_cache_key = JOB_WAITER_REMAINING_CACHE_KEY %
+ { project: project.id, collection: collection_method }
end
def parallel?
@@ -74,7 +85,27 @@ module Gitlab
def parallel_import
raise 'Batch settings must be defined for parallel import' if parallel_import_batch.blank?
- spread_parallel_import
+ if Feature.enabled?(:improved_spread_parallel_import)
+ improved_spread_parallel_import
+ else
+ spread_parallel_import
+ end
+ end
+
+ def improved_spread_parallel_import
+ enqueued_job_counter = 0
+
+ each_object_to_import do |object|
+ repr = object_representation(object)
+
+ job_delay = calculate_job_delay(enqueued_job_counter)
+ sidekiq_worker_class.perform_in(job_delay, project.id, repr.to_hash, job_waiter.key)
+ enqueued_job_counter += 1
+
+ job_waiter.jobs_remaining = Gitlab::Cache::Import::Caching.increment(job_waiter_remaining_cache_key)
+ end
+
+ job_waiter
end
def spread_parallel_import
@@ -233,6 +264,22 @@ module Gitlab
parallel: parallel?
)
end
+
+ def job_waiter
+ @job_waiter ||= begin
+ key = Gitlab::Cache::Import::Caching.read(job_waiter_cache_key)
+ key ||= Gitlab::Cache::Import::Caching.write(job_waiter_cache_key, JobWaiter.generate_key)
+ jobs_remaining = Gitlab::Cache::Import::Caching.read(job_waiter_remaining_cache_key).to_i || 0
+
+ JobWaiter.new(jobs_remaining, key)
+ end
+ end
+
+ def calculate_job_delay(job_index)
+ multiplier = (job_index / parallel_import_batch[:size]) + 1
+
+ multiplier * parallel_import_batch[:delay]
+ end
end
end
end
diff --git a/lib/gitlab/job_waiter.rb b/lib/gitlab/job_waiter.rb
index 52234b50a1f..880b112d815 100644
--- a/lib/gitlab/job_waiter.rb
+++ b/lib/gitlab/job_waiter.rb
@@ -38,6 +38,10 @@ module Gitlab
key.is_a?(String) && key =~ /\A#{KEY_PREFIX}:\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/o
end
+ def self.generate_key
+ "#{KEY_PREFIX}:#{SecureRandom.uuid}"
+ end
+
attr_reader :key, :finished, :worker_label
attr_accessor :jobs_remaining
diff --git a/lib/gitlab/memory/reporter.rb b/lib/gitlab/memory/reporter.rb
index 5effafc9f5b..db0fd24983b 100644
--- a/lib/gitlab/memory/reporter.rb
+++ b/lib/gitlab/memory/reporter.rb
@@ -69,14 +69,14 @@ module Gitlab
report_file = file_name(report)
tmp_file_path = File.join(tmp_dir, report_file)
- write_heap_dump_file(report, tmp_file_path)
+ write_compressed_file(report, tmp_file_path)
File.join(@reports_path, report_file).tap do |report_file_path|
FileUtils.mv(tmp_file_path, report_file_path)
end
end
- def write_heap_dump_file(report, path)
+ def write_compressed_file(report, path)
io_r, io_w = IO.pipe
err_r, err_w = IO.pipe
pid = nil
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index e979ba51096..96b50bf19e3 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -7685,6 +7685,9 @@ msgstr ""
msgid "CICD|Add an existing project to the scope"
msgstr ""
+msgid "CICD|An error occurred while update the setting. Please try again."
+msgstr ""
+
msgid "CICD|Auto DevOps"
msgstr ""
@@ -7718,6 +7721,9 @@ msgstr ""
msgid "CICD|Limit CI_JOB_TOKEN access"
msgstr ""
+msgid "CICD|Limit JSON Web Token (JWT) access"
+msgstr ""
+
msgid "CICD|Select the projects that can be accessed by API requests authenticated with this project's CI_JOB_TOKEN CI/CD variable. It is a security risk to disable this feature, because unauthorized projects might attempt to retrieve an active token and access the API. %{linkStart}Learn more.%{linkEnd}"
msgstr ""
@@ -7727,15 +7733,24 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline runs if no alternative CI configuration file is found."
msgstr ""
+msgid "CICD|The JWT must be manually declared in each job that needs it. When disabled, the token is always available in all jobs in the pipeline."
+msgstr ""
+
msgid "CICD|There are several CI/CD limits in place."
msgstr ""
+msgid "CICD|There was a problem fetching the token access settings."
+msgstr ""
+
msgid "CICD|Unprotected branches will not have access to the cache from protected branches."
msgstr ""
msgid "CICD|Use separate caches for protected branches"
msgstr ""
+msgid "CICD|Use the %{codeStart}secrets%{codeEnd} keyword to configure a job with a JWT."
+msgstr ""
+
msgid "CICD|group enabled"
msgstr ""
@@ -36385,6 +36400,9 @@ msgstr ""
msgid "Runners|Jobs"
msgstr ""
+msgid "Runners|Jobs in projects you have access to."
+msgstr ""
+
msgid "Runners|Last contact"
msgstr ""
diff --git a/rubocop/cop/rspec/missing_feature_category.rb b/rubocop/cop/rspec/missing_feature_category.rb
new file mode 100644
index 00000000000..314250af5ee
--- /dev/null
+++ b/rubocop/cop/rspec/missing_feature_category.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'rubocop/cop/rspec/base'
+require 'rubocop/cop/rspec/mixin/top_level_group'
+
+module RuboCop
+ module Cop
+ module RSpec
+ # Ensures that top level example group contains a feature category.
+ #
+ # @example
+ #
+ # # bad
+ # RSpec.describe 'foo' do
+ # end
+ #
+ # # good
+ # RSpec.describe 'foo', feature_category: :wiki do
+ # end
+ class MissingFeatureCategory < RuboCop::Cop::RSpec::Base
+ include RuboCop::Cop::RSpec::TopLevelGroup
+
+ MSG = 'Please add missing feature category. ' \
+ 'See https://docs.gitlab.com/ee/development/feature_categorization/#rspec-examples.'
+
+ # @!method feature_category?(node)
+ def_node_matcher :feature_category?, <<~PATTERN
+ (block
+ (send ...
+ (hash <(pair (sym :feature_category) _) ...>)
+ )
+ ...
+ )
+ PATTERN
+
+ def on_top_level_example_group(node)
+ return if feature_category?(node)
+
+ add_offense(node)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/features/admin/admin_runners_spec.rb b/spec/features/admin/admin_runners_spec.rb
index 30fd04b1c3e..32248ac1af2 100644
--- a/spec/features/admin/admin_runners_spec.rb
+++ b/spec/features/admin/admin_runners_spec.rb
@@ -491,6 +491,8 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
)
end
+ let_it_be(:runner_job) { create(:ci_build, runner: runner) }
+
before do
visit admin_runner_path(runner)
end
@@ -517,6 +519,11 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
end
end
+ it_behaves_like 'shows runner jobs tab' do
+ let(:job_count) { '1' }
+ let(:job) { runner_job }
+ end
+
describe 'when a runner is deleted' do
before do
click_on 'Delete runner'
diff --git a/spec/features/groups/group_runners_spec.rb b/spec/features/groups/group_runners_spec.rb
index ab53ef7c470..ae757e04716 100644
--- a/spec/features/groups/group_runners_spec.rb
+++ b/spec/features/groups/group_runners_spec.rb
@@ -203,15 +203,24 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
end
describe "Group runner show page", :js do
- let!(:group_runner) do
+ let_it_be(:group_runner) do
create(:ci_runner, :group, groups: [group], description: 'runner-foo')
end
- it 'user views runner details' do
+ let_it_be(:group_runner_job) { create(:ci_build, runner: group_runner) }
+
+ before do
visit group_runner_path(group, group_runner)
+ end
+ it 'user views runner details' do
expect(page).to have_content "#{s_('Runners|Description')} runner-foo"
end
+
+ it_behaves_like 'shows runner jobs tab' do
+ let(:job_count) { '1' }
+ let(:job) { group_runner_job }
+ end
end
describe "Group runner edit page", :js do
diff --git a/spec/frontend/captcha/captcha_modal_axios_interceptor_spec.js b/spec/frontend/captcha/captcha_modal_axios_interceptor_spec.js
index 002fe7c6e71..a7a639e8728 100644
--- a/spec/frontend/captcha/captcha_modal_axios_interceptor_spec.js
+++ b/spec/frontend/captcha/captcha_modal_axios_interceptor_spec.js
@@ -35,7 +35,7 @@ describe('registerCaptchaModalInterceptor', () => {
mock = new MockAdapter(axios);
mock.onAny('/endpoint-without-captcha').reply(200, AXIOS_RESPONSE);
- mock.onAny('/endpoint-with-unrelated-error').reply(404, AXIOS_RESPONSE);
+ mock.onAny('/endpoint-with-unrelated-error').reply(HTTP_STATUS_NOT_FOUND, AXIOS_RESPONSE);
mock.onAny('/endpoint-with-captcha').reply((config) => {
if (!supportedMethods.includes(config.method)) {
return [HTTP_STATUS_METHOD_NOT_ALLOWED, { method: config.method }];
diff --git a/spec/frontend/ci/runner/admin_runner_show/admin_runner_show_app_spec.js b/spec/frontend/ci/runner/admin_runner_show/admin_runner_show_app_spec.js
index e233268b756..ed4f43c12d8 100644
--- a/spec/frontend/ci/runner/admin_runner_show/admin_runner_show_app_spec.js
+++ b/spec/frontend/ci/runner/admin_runner_show/admin_runner_show_app_spec.js
@@ -1,8 +1,6 @@
import Vue from 'vue';
-import { GlTab, GlTabs } from '@gitlab/ui';
import VueRouter from 'vue-router';
import VueApollo from 'vue-apollo';
-import setWindowLocation from 'helpers/set_window_location_helper';
import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper';
import createMockApollo from 'helpers/mock_apollo_helper';
import waitForPromises from 'helpers/wait_for_promises';
@@ -15,6 +13,7 @@ import RunnerDetails from '~/ci/runner/components/runner_details.vue';
import RunnerPauseButton from '~/ci/runner/components/runner_pause_button.vue';
import RunnerDeleteButton from '~/ci/runner/components/runner_delete_button.vue';
import RunnerEditButton from '~/ci/runner/components/runner_edit_button.vue';
+import RunnerDetailsTabs from '~/ci/runner/components/runner_details_tabs.vue';
import RunnersJobs from '~/ci/runner/components/runner_jobs.vue';
import runnerQuery from '~/ci/runner/graphql/show/runner.query.graphql';
@@ -42,14 +41,12 @@ describe('AdminRunnerShowApp', () => {
let mockRunnerQuery;
const findRunnerHeader = () => wrapper.findComponent(RunnerHeader);
- const findTabs = () => wrapper.findComponent(GlTabs);
- const findTabAt = (i) => wrapper.findAllComponents(GlTab).at(i);
const findRunnerDetails = () => wrapper.findComponent(RunnerDetails);
const findRunnerDeleteButton = () => wrapper.findComponent(RunnerDeleteButton);
const findRunnerEditButton = () => wrapper.findComponent(RunnerEditButton);
const findRunnerPauseButton = () => wrapper.findComponent(RunnerPauseButton);
+ const findRunnerDetailsTabs = () => wrapper.findComponent(RunnerDetailsTabs);
const findRunnersJobs = () => wrapper.findComponent(RunnersJobs);
- const findJobCountBadge = () => wrapper.findByTestId('job-count-badge');
const mockRunnerQueryResult = (runner = {}) => {
mockRunnerQuery = jest.fn().mockResolvedValue({
@@ -89,16 +86,20 @@ describe('AdminRunnerShowApp', () => {
expect(mockRunnerQuery).toHaveBeenCalledWith({ id: mockRunnerGraphqlId });
});
- it('displays the runner header', async () => {
+ it('displays the runner header', () => {
expect(findRunnerHeader().text()).toContain(`Runner #${mockRunnerId}`);
});
it('displays the runner edit and pause buttons', async () => {
- expect(findRunnerEditButton().exists()).toBe(true);
+ expect(findRunnerEditButton().attributes('href')).toBe(mockRunner.editAdminUrl);
expect(findRunnerPauseButton().exists()).toBe(true);
expect(findRunnerDeleteButton().exists()).toBe(true);
});
+ it('shows runner details', () => {
+ expect(findRunnerDetailsTabs().props('runner')).toEqual(mockRunner);
+ });
+
it('shows basic runner details', async () => {
const expected = `Description My Runner
Last contact Never contacted
@@ -118,20 +119,11 @@ describe('AdminRunnerShowApp', () => {
expect(wrapper.text().replace(/\s+/g, ' ')).toContain(expected);
});
- it.each(['#/', '#/unknown-tab'])('shows details when location hash is `%s`', async (hash) => {
- setWindowLocation(hash);
-
- await createComponent({ mountFn: mountExtended });
-
- expect(findTabs().props('value')).toBe(0);
- expect(findRunnerDetails().exists()).toBe(true);
- expect(findRunnersJobs().exists()).toBe(false);
- });
-
describe('when runner cannot be updated', () => {
beforeEach(async () => {
mockRunnerQueryResult({
userPermissions: {
+ ...mockRunner.userPermissions,
updateRunner: false,
},
});
@@ -145,12 +137,17 @@ describe('AdminRunnerShowApp', () => {
expect(findRunnerEditButton().exists()).toBe(false);
expect(findRunnerPauseButton().exists()).toBe(false);
});
+
+ it('displays delete button', () => {
+ expect(findRunnerDeleteButton().exists()).toBe(true);
+ });
});
describe('when runner cannot be deleted', () => {
beforeEach(async () => {
mockRunnerQueryResult({
userPermissions: {
+ ...mockRunner.userPermissions,
deleteRunner: false,
},
});
@@ -160,9 +157,14 @@ describe('AdminRunnerShowApp', () => {
});
});
- it('does not display the runner edit and pause buttons', () => {
+ it('does not display the delete button', () => {
expect(findRunnerDeleteButton().exists()).toBe(false);
});
+
+ it('displays edit and pause buttons', () => {
+ expect(findRunnerEditButton().exists()).toBe(true);
+ expect(findRunnerPauseButton().exists()).toBe(true);
+ });
});
describe('when runner is deleted', () => {
@@ -240,74 +242,4 @@ describe('AdminRunnerShowApp', () => {
expect(createAlert).toHaveBeenCalled();
});
});
-
- describe('When showing jobs', () => {
- const stubs = {
- GlTab,
- GlTabs,
- };
-
- it('without a runner, shows no jobs', () => {
- mockRunnerQuery = jest.fn().mockResolvedValue({
- data: {
- runner: null,
- },
- });
-
- createComponent({ stubs });
-
- expect(findJobCountBadge().exists()).toBe(false);
- expect(findRunnersJobs().exists()).toBe(false);
- });
-
- it('when URL hash links to jobs tab', async () => {
- mockRunnerQueryResult();
- setWindowLocation('#/jobs');
-
- await createComponent({ mountFn: mountExtended });
-
- expect(findTabs().props('value')).toBe(1);
- expect(findRunnerDetails().exists()).toBe(false);
- expect(findRunnersJobs().exists()).toBe(true);
- });
-
- it('without a job count, shows no jobs count', async () => {
- mockRunnerQueryResult({ jobCount: null });
-
- await createComponent({ stubs });
-
- expect(findJobCountBadge().exists()).toBe(false);
- });
-
- it('with a job count, shows jobs count', async () => {
- const runner = { jobCount: 3 };
- mockRunnerQueryResult(runner);
-
- await createComponent({ stubs });
-
- expect(findJobCountBadge().text()).toBe('3');
- });
- });
-
- describe('When navigating to another tab', () => {
- let routerPush;
-
- beforeEach(async () => {
- mockRunnerQueryResult();
-
- await createComponent({ mountFn: mountExtended });
-
- routerPush = jest.spyOn(wrapper.vm.$router, 'push').mockImplementation(() => {});
- });
-
- it('navigates to details', () => {
- findTabAt(0).vm.$emit('click');
- expect(routerPush).toHaveBeenLastCalledWith({ name: 'details' });
- });
-
- it('navigates to job', () => {
- findTabAt(1).vm.$emit('click');
- expect(routerPush).toHaveBeenLastCalledWith({ name: 'jobs' });
- });
- });
});
diff --git a/spec/frontend/ci/runner/components/runner_details_tabs_spec.js b/spec/frontend/ci/runner/components/runner_details_tabs_spec.js
new file mode 100644
index 00000000000..a9a7dfd4e8f
--- /dev/null
+++ b/spec/frontend/ci/runner/components/runner_details_tabs_spec.js
@@ -0,0 +1,127 @@
+import Vue from 'vue';
+import { GlTab, GlTabs } from '@gitlab/ui';
+import VueRouter from 'vue-router';
+import VueApollo from 'vue-apollo';
+import setWindowLocation from 'helpers/set_window_location_helper';
+import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import waitForPromises from 'helpers/wait_for_promises';
+import { I18N_DETAILS, I18N_JOBS } from '~/ci/runner/constants';
+
+import RunnerDetailsTabs from '~/ci/runner/components/runner_details_tabs.vue';
+import RunnerDetails from '~/ci/runner/components/runner_details.vue';
+import RunnerJobs from '~/ci/runner/components/runner_jobs.vue';
+
+import { runnerData } from '../mock_data';
+
+// Vue Test Utils `stubs` option does not stub components mounted
+// in <router-view>. Use mocking instead:
+jest.mock('~/ci/runner/components/runner_jobs.vue', () => {
+ const ActualRunnerJobs = jest.requireActual('~/ci/runner/components/runner_jobs.vue').default;
+ return {
+ props: ActualRunnerJobs.props,
+ render() {},
+ };
+});
+
+const mockRunner = runnerData.data.runner;
+
+Vue.use(VueApollo);
+Vue.use(VueRouter);
+
+describe('RunnerDetailsTabs', () => {
+ let wrapper;
+ let routerPush;
+
+ const findTabs = () => wrapper.findComponent(GlTabs);
+ const findRunnerDetails = () => wrapper.findComponent(RunnerDetails);
+ const findRunnerJobs = () => wrapper.findComponent(RunnerJobs);
+ const findJobCountBadge = () => wrapper.findByTestId('job-count-badge');
+
+ const createComponent = ({ props = {}, mountFn = shallowMountExtended, ...options } = {}) => {
+ wrapper = mountFn(RunnerDetailsTabs, {
+ propsData: {
+ runner: mockRunner,
+ ...props,
+ },
+ ...options,
+ });
+
+ routerPush = jest.spyOn(wrapper.vm.$router, 'push').mockImplementation(() => {});
+
+ return waitForPromises();
+ };
+
+ it('shows basic runner details', async () => {
+ await createComponent({ mountFn: mountExtended });
+
+ expect(findRunnerDetails().props('runner')).toBe(mockRunner);
+ expect(findRunnerJobs().exists()).toBe(false);
+ });
+
+ it('shows runner jobs', async () => {
+ setWindowLocation('#/jobs');
+
+ await createComponent({ mountFn: mountExtended });
+
+ expect(findRunnerDetails().exists()).toBe(false);
+ expect(findRunnerJobs().props('runner')).toBe(mockRunner);
+ });
+
+ it.each`
+ jobCount | badgeText
+ ${null} | ${null}
+ ${1} | ${'1'}
+ ${1000} | ${'1,000'}
+ ${1001} | ${'1,000+'}
+ `('shows runner jobs count', async ({ jobCount, badgeText }) => {
+ await createComponent({
+ stubs: {
+ GlTab,
+ },
+ props: {
+ runner: {
+ ...mockRunner,
+ jobCount,
+ },
+ },
+ });
+
+ if (!badgeText) {
+ expect(findJobCountBadge().exists()).toBe(false);
+ } else {
+ expect(findJobCountBadge().text()).toBe(badgeText);
+ }
+ });
+
+ it.each(['#/', '#/unknown-tab'])('shows details when location hash is `%s`', async (hash) => {
+ setWindowLocation(hash);
+
+ await createComponent({ mountFn: mountExtended });
+
+ expect(findTabs().props('value')).toBe(0);
+ expect(findRunnerDetails().exists()).toBe(true);
+ expect(findRunnerJobs().exists()).toBe(false);
+ });
+
+ describe.each`
+ location | tab | navigatedTo
+ ${'#/details'} | ${I18N_DETAILS} | ${[]}
+ ${'#/details'} | ${I18N_JOBS} | ${[[{ name: 'jobs' }]]}
+ ${'#/jobs'} | ${I18N_JOBS} | ${[]}
+ ${'#/jobs'} | ${I18N_DETAILS} | ${[[{ name: 'details' }]]}
+ `('When at $location', ({ location, tab, navigatedTo }) => {
+ beforeEach(async () => {
+ setWindowLocation(location);
+
+ await createComponent({
+ mountFn: mountExtended,
+ });
+ });
+
+ it(`on click on ${tab}, navigates to ${JSON.stringify(navigatedTo)}`, () => {
+ wrapper.findByText(tab).trigger('click');
+
+ expect(routerPush.mock.calls).toEqual(navigatedTo);
+ });
+ });
+});
diff --git a/spec/frontend/ci/runner/group_runner_show/group_runner_show_app_spec.js b/spec/frontend/ci/runner/group_runner_show/group_runner_show_app_spec.js
index c6c3f3b7040..2ad31dea774 100644
--- a/spec/frontend/ci/runner/group_runner_show/group_runner_show_app_spec.js
+++ b/spec/frontend/ci/runner/group_runner_show/group_runner_show_app_spec.js
@@ -1,4 +1,5 @@
import Vue from 'vue';
+import VueRouter from 'vue-router';
import VueApollo from 'vue-apollo';
import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper';
import createMockApollo from 'helpers/mock_apollo_helper';
@@ -12,6 +13,9 @@ import RunnerDetails from '~/ci/runner/components/runner_details.vue';
import RunnerPauseButton from '~/ci/runner/components/runner_pause_button.vue';
import RunnerDeleteButton from '~/ci/runner/components/runner_delete_button.vue';
import RunnerEditButton from '~/ci/runner/components/runner_edit_button.vue';
+import RunnerDetailsTabs from '~/ci/runner/components/runner_details_tabs.vue';
+import RunnersJobs from '~/ci/runner/components/runner_jobs.vue';
+
import runnerQuery from '~/ci/runner/graphql/show/runner.query.graphql';
import GroupRunnerShowApp from '~/ci/runner/group_runner_show/group_runner_show_app.vue';
import { captureException } from '~/ci/runner/sentry_utils';
@@ -31,6 +35,7 @@ const mockRunnersPath = '/groups/group1/-/runners';
const mockEditGroupRunnerPath = `/groups/group1/-/runners/${mockRunnerId}/edit`;
Vue.use(VueApollo);
+Vue.use(VueRouter);
describe('GroupRunnerShowApp', () => {
let wrapper;
@@ -41,6 +46,8 @@ describe('GroupRunnerShowApp', () => {
const findRunnerDeleteButton = () => wrapper.findComponent(RunnerDeleteButton);
const findRunnerEditButton = () => wrapper.findComponent(RunnerEditButton);
const findRunnerPauseButton = () => wrapper.findComponent(RunnerPauseButton);
+ const findRunnerDetailsTabs = () => wrapper.findComponent(RunnerDetailsTabs);
+ const findRunnersJobs = () => wrapper.findComponent(RunnersJobs);
const mockRunnerQueryResult = (runner = {}) => {
mockRunnerQuery = jest.fn().mockResolvedValue({
@@ -81,16 +88,23 @@ describe('GroupRunnerShowApp', () => {
expect(mockRunnerQuery).toHaveBeenCalledWith({ id: mockRunnerGraphqlId });
});
- it('displays the header', async () => {
+ it('displays the runner header', () => {
expect(findRunnerHeader().text()).toContain(`Runner #${mockRunnerId}`);
});
- it('displays edit, pause, delete buttons', async () => {
- expect(findRunnerEditButton().exists()).toBe(true);
+ it('displays the runner edit and pause buttons', async () => {
+ expect(findRunnerEditButton().attributes('href')).toBe(mockEditGroupRunnerPath);
expect(findRunnerPauseButton().exists()).toBe(true);
expect(findRunnerDeleteButton().exists()).toBe(true);
});
+ it('shows runner details', () => {
+ expect(findRunnerDetailsTabs().props()).toEqual({
+ runner: mockRunner,
+ showAccessHelp: true,
+ });
+ });
+
it('shows basic runner details', () => {
const expected = `Description My Runner
Last contact Never contacted
@@ -104,17 +118,12 @@ describe('GroupRunnerShowApp', () => {
Token expiry
Runner authentication token expiration
Runner authentication tokens will expire based on a set interval.
- They will automatically rotate once expired. Learn more
- Never expires
+ They will automatically rotate once expired. Learn more Never expires
Tags None`.replace(/\s+/g, ' ');
expect(wrapper.text().replace(/\s+/g, ' ')).toContain(expected);
});
- it('renders runner details component', () => {
- expect(findRunnerDetails().props('runner')).toEqual(mockRunner);
- });
-
describe('when runner cannot be updated', () => {
beforeEach(async () => {
mockRunnerQueryResult({
@@ -129,7 +138,7 @@ describe('GroupRunnerShowApp', () => {
});
});
- it('does not display edit and pause buttons', () => {
+ it('does not display the runner edit and pause buttons', () => {
expect(findRunnerEditButton().exists()).toBe(false);
expect(findRunnerPauseButton().exists()).toBe(false);
});
@@ -153,7 +162,7 @@ describe('GroupRunnerShowApp', () => {
});
});
- it('does not display delete button', () => {
+ it('does not display the delete button', () => {
expect(findRunnerDeleteButton().exists()).toBe(false);
});
@@ -187,8 +196,17 @@ describe('GroupRunnerShowApp', () => {
mockRunnerQueryResult();
createComponent();
+
expect(findRunnerDetails().exists()).toBe(false);
});
+
+ it('does not show runner jobs', () => {
+ mockRunnerQueryResult();
+
+ createComponent();
+
+ expect(findRunnersJobs().exists()).toBe(false);
+ });
});
describe('When there is an error', () => {
diff --git a/spec/frontend/diffs/store/actions_spec.js b/spec/frontend/diffs/store/actions_spec.js
index d8e49c7f57f..9cb7fa4fb4b 100644
--- a/spec/frontend/diffs/store/actions_spec.js
+++ b/spec/frontend/diffs/store/actions_spec.js
@@ -16,7 +16,7 @@ import * as treeWorkerUtils from '~/diffs/utils/tree_worker_utils';
import { createAlert } from '~/flash';
import axios from '~/lib/utils/axios_utils';
import * as commonUtils from '~/lib/utils/common_utils';
-import { HTTP_STATUS_INTERNAL_SERVER_ERROR } from '~/lib/utils/http_status';
+import { HTTP_STATUS_INTERNAL_SERVER_ERROR, HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import { mergeUrlParams } from '~/lib/utils/url_utility';
import eventHub from '~/notes/event_hub';
import { diffMetadata } from '../mock_data/diff_metadata';
@@ -209,7 +209,7 @@ describe('DiffsStoreActions', () => {
});
it('should show a warning on 404 reponse', async () => {
- mock.onGet(endpointMetadata).reply(404);
+ mock.onGet(endpointMetadata).reply(HTTP_STATUS_NOT_FOUND);
await testAction(
diffActions.fetchDiffFilesMeta,
diff --git a/spec/frontend/ide/stores/actions_spec.js b/spec/frontend/ide/stores/actions_spec.js
index 7b5561bf35e..1c90c0f943a 100644
--- a/spec/frontend/ide/stores/actions_spec.js
+++ b/spec/frontend/ide/stores/actions_spec.js
@@ -23,7 +23,7 @@ import {
} from '~/ide/stores/actions';
import * as types from '~/ide/stores/mutation_types';
import axios from '~/lib/utils/axios_utils';
-import { HTTP_STATUS_IM_A_TEAPOT } from '~/lib/utils/http_status';
+import { HTTP_STATUS_IM_A_TEAPOT, HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import { visitUrl } from '~/lib/utils/url_utility';
import { file, createTriggerRenameAction, createTriggerChangeAction } from '../helpers';
@@ -918,7 +918,7 @@ describe('Multi-file store actions', () => {
});
it('passes the error further unchanged without dispatching any action when response is 404', async () => {
- mock.onGet(/(.*)/).replyOnce(404);
+ mock.onGet(/(.*)/).replyOnce(HTTP_STATUS_NOT_FOUND);
await expect(getBranchData(...callParams)).rejects.toEqual(
new Error('Request failed with status code 404'),
diff --git a/spec/frontend/ide/stores/modules/pipelines/actions_spec.js b/spec/frontend/ide/stores/modules/pipelines/actions_spec.js
index f8108b955d0..00403809504 100644
--- a/spec/frontend/ide/stores/modules/pipelines/actions_spec.js
+++ b/spec/frontend/ide/stores/modules/pipelines/actions_spec.js
@@ -25,7 +25,7 @@ import {
import * as types from '~/ide/stores/modules/pipelines/mutation_types';
import state from '~/ide/stores/modules/pipelines/state';
import axios from '~/lib/utils/axios_utils';
-import { HTTP_STATUS_INTERNAL_SERVER_ERROR } from '~/lib/utils/http_status';
+import { HTTP_STATUS_INTERNAL_SERVER_ERROR, HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import waitForPromises from 'helpers/wait_for_promises';
import { pipelines, jobs } from '../../../mock_data';
@@ -61,7 +61,7 @@ describe('IDE pipelines actions', () => {
it('commits error', () => {
return testAction(
receiveLatestPipelineError,
- { status: 404 },
+ { status: HTTP_STATUS_NOT_FOUND },
mockedState,
[{ type: types.RECEIVE_LASTEST_PIPELINE_ERROR }],
[{ type: 'stopPipelinePolling' }],
diff --git a/spec/frontend/invite_members/components/invite_modal_base_spec.js b/spec/frontend/invite_members/components/invite_modal_base_spec.js
index db2afbbd141..e1b90332f6c 100644
--- a/spec/frontend/invite_members/components/invite_modal_base_spec.js
+++ b/spec/frontend/invite_members/components/invite_modal_base_spec.js
@@ -70,6 +70,11 @@ describe('InviteModalBase', () => {
const findActionButton = () => wrapper.find('.js-modal-action-primary');
describe('rendering the modal', () => {
+ let trackingSpy;
+
+ const expectTracking = (action, label = undefined, category = undefined) =>
+ expect(trackingSpy).toHaveBeenCalledWith(category, action, { label, category });
+
beforeEach(() => {
createComponent();
});
@@ -151,14 +156,6 @@ describe('InviteModalBase', () => {
});
describe('when users limit is reached', () => {
- let trackingSpy;
-
- const expectTracking = (action, label) =>
- expect(trackingSpy).toHaveBeenCalledWith('default', action, {
- label,
- category: 'default',
- });
-
beforeEach(() => {
createComponent(
{ props: { usersLimitDataset: { membersPath, purchasePath, reachedLimit: true } } },
@@ -176,7 +173,7 @@ describe('InviteModalBase', () => {
const modal = wrapper.findComponent(GlModal);
modal.vm.$emit('shown');
- expectTracking('render', ON_SHOW_TRACK_LABEL);
+ expectTracking('render', ON_SHOW_TRACK_LABEL, 'default');
unmockTracking();
});
@@ -229,6 +226,31 @@ describe('InviteModalBase', () => {
expect(findActionButton().text()).toBe(INVITE_BUTTON_TEXT);
});
});
+
+ describe('when isCelebration', () => {
+ it('tracks actions', () => {
+ createComponent({ props: { isCelebration: true, preventCancelDefault: true } });
+
+ trackingSpy = mockTracking(undefined, wrapper.element, jest.spyOn);
+
+ const modal = wrapper.findComponent(GlModal);
+ const mockEvent = { preventDefault: jest.fn() };
+
+ modal.vm.$emit('shown');
+ expectTracking('render');
+
+ modal.vm.$emit('primary', mockEvent);
+ expectTracking('click_invite');
+
+ modal.vm.$emit('cancel', mockEvent);
+ expectTracking('click_cancel');
+
+ modal.vm.$emit('close');
+ expectTracking('click_x');
+
+ unmockTracking();
+ });
+ });
});
it('with isLoading, shows loading for invite button', () => {
diff --git a/spec/frontend/issues/dashboard/components/issues_dashboard_app_spec.js b/spec/frontend/issues/dashboard/components/issues_dashboard_app_spec.js
index 841cea28ffc..aea90a26d7f 100644
--- a/spec/frontend/issues/dashboard/components/issues_dashboard_app_spec.js
+++ b/spec/frontend/issues/dashboard/components/issues_dashboard_app_spec.js
@@ -19,6 +19,7 @@ import {
setSortPreferenceMutationResponseWithErrors,
} from 'jest/issues/list/mock_data';
import IssuesDashboardApp from '~/issues/dashboard/components/issues_dashboard_app.vue';
+import getIssuesCountsQuery from '~/issues/dashboard/queries/get_issues_counts.query.graphql';
import { CREATED_DESC, i18n, UPDATED_DESC, urlSortParams } from '~/issues/list/constants';
import setSortPreferenceMutation from '~/issues/list/queries/set_sort_preference.mutation.graphql';
import { getSortKey, getSortOptions } from '~/issues/list/utils';
@@ -33,7 +34,11 @@ import {
} from '~/vue_shared/components/filtered_search_bar/constants';
import IssuableList from '~/vue_shared/issuable/list/components/issuable_list_root.vue';
import { IssuableStates } from '~/vue_shared/issuable/list/constants';
-import { emptyIssuesQueryResponse, issuesQueryResponse } from '../mock_data';
+import {
+ emptyIssuesQueryResponse,
+ issuesCountsQueryResponse,
+ issuesQueryResponse,
+} from '../mock_data';
jest.mock('@sentry/browser');
jest.mock('~/lib/utils/scroll_utils', () => ({ scrollUp: jest.fn() }));
@@ -69,24 +74,24 @@ describe('IssuesDashboardApp component', () => {
defaultQueryResponse.data.issues.nodes[0].weight = 5;
}
- const findCalendarButton = () =>
- wrapper.findByRole('link', { name: IssuesDashboardApp.i18n.calendarButtonText });
+ const findCalendarButton = () => wrapper.findByRole('link', { name: i18n.calendarLabel });
const findEmptyState = () => wrapper.findComponent(GlEmptyState);
const findIssuableList = () => wrapper.findComponent(IssuableList);
const findIssueCardStatistics = () => wrapper.findComponent(IssueCardStatistics);
const findIssueCardTimeInfo = () => wrapper.findComponent(IssueCardTimeInfo);
- const findRssButton = () =>
- wrapper.findByRole('link', { name: IssuesDashboardApp.i18n.rssButtonText });
+ const findRssButton = () => wrapper.findByRole('link', { name: i18n.rssLabel });
const mountComponent = ({
provide = {},
issuesQueryHandler = jest.fn().mockResolvedValue(defaultQueryResponse),
- sortPreferenceMutationResponse = jest.fn().mockResolvedValue(setSortPreferenceMutationResponse),
+ issuesCountsQueryHandler = jest.fn().mockResolvedValue(issuesCountsQueryResponse),
+ sortPreferenceMutationHandler = jest.fn().mockResolvedValue(setSortPreferenceMutationResponse),
} = {}) => {
wrapper = mountExtended(IssuesDashboardApp, {
apolloProvider: createMockApollo([
[getIssuesQuery, issuesQueryHandler],
- [setSortPreferenceMutation, sortPreferenceMutationResponse],
+ [getIssuesCountsQuery, issuesCountsQueryHandler],
+ [setSortPreferenceMutation, sortPreferenceMutationHandler],
]),
provide: {
...defaultProvide,
@@ -123,13 +128,18 @@ describe('IssuesDashboardApp component', () => {
issuablesLoading: false,
namespace: 'dashboard',
recentSearchesStorageKey: 'issues',
- searchInputPlaceholder: IssuesDashboardApp.i18n.searchInputPlaceholder,
+ searchInputPlaceholder: i18n.searchPlaceholder,
showPaginationControls: true,
sortOptions: getSortOptions({
hasBlockedIssuesFeature: defaultProvide.hasBlockedIssuesFeature,
hasIssuableHealthStatusFeature: defaultProvide.hasIssuableHealthStatusFeature,
hasIssueWeightsFeature: defaultProvide.hasIssueWeightsFeature,
}),
+ tabCounts: {
+ opened: 1,
+ closed: 2,
+ all: 3,
+ },
tabs: IssuesDashboardApp.IssuableListTabs,
urlParams: {
sort: urlSortParams[CREATED_DESC],
@@ -192,9 +202,9 @@ describe('IssuesDashboardApp component', () => {
it('renders empty state', () => {
expect(findEmptyState().props()).toMatchObject({
- description: IssuesDashboardApp.i18n.emptyStateWithFilterDescription,
+ description: i18n.noSearchResultsDescription,
svgPath: defaultProvide.emptyStateWithFilterSvgPath,
- title: IssuesDashboardApp.i18n.emptyStateWithFilterTitle,
+ title: i18n.noSearchResultsTitle,
});
});
});
@@ -217,7 +227,7 @@ describe('IssuesDashboardApp component', () => {
expect(findEmptyState().props()).toMatchObject({
description: null,
svgPath: defaultProvide.emptyStateWithoutFilterSvgPath,
- title: IssuesDashboardApp.i18n.emptyStateWithoutFilterTitle,
+ title: i18n.noSearchNoFilterTitle,
});
});
});
@@ -286,20 +296,28 @@ describe('IssuesDashboardApp component', () => {
});
});
- describe('when there is an error fetching issues', () => {
- beforeEach(() => {
- setWindowLocation(locationSearch);
- mountComponent({ issuesQueryHandler: jest.fn().mockRejectedValue(new Error('ERROR')) });
- jest.runOnlyPendingTimers();
- return waitForPromises();
- });
+ describe('errors', () => {
+ describe.each`
+ error | mountOption | message
+ ${'fetching issues'} | ${'issuesQueryHandler'} | ${i18n.errorFetchingIssues}
+ ${'fetching issue counts'} | ${'issuesCountsQueryHandler'} | ${i18n.errorFetchingCounts}
+ `('when there is an error $error', ({ mountOption, message }) => {
+ beforeEach(() => {
+ setWindowLocation(locationSearch);
+ mountComponent({ [mountOption]: jest.fn().mockRejectedValue(new Error('ERROR')) });
+ jest.runOnlyPendingTimers();
+ return waitForPromises();
+ });
- it('shows an error message', () => {
- expect(findIssuableList().props('error')).toBe(i18n.errorFetchingIssues);
- expect(Sentry.captureException).toHaveBeenCalledWith(new Error('ERROR'));
+ it('shows an error message', () => {
+ expect(findIssuableList().props('error')).toBe(message);
+ expect(Sentry.captureException).toHaveBeenCalledWith(new Error('ERROR'));
+ });
});
it('clears error message when "dismiss-alert" event is emitted from IssuableList', async () => {
+ mountComponent({ issuesQueryHandler: jest.fn().mockRejectedValue(new Error()) });
+
findIssuableList().vm.$emit('dismiss-alert');
await nextTick();
@@ -401,7 +419,7 @@ describe('IssuesDashboardApp component', () => {
describe('when user is signed in', () => {
it('calls mutation to save sort preference', () => {
const mutationMock = jest.fn().mockResolvedValue(setSortPreferenceMutationResponse);
- mountComponent({ sortPreferenceMutationResponse: mutationMock });
+ mountComponent({ sortPreferenceMutationHandler: mutationMock });
findIssuableList().vm.$emit('sort', UPDATED_DESC);
@@ -412,7 +430,7 @@ describe('IssuesDashboardApp component', () => {
const mutationMock = jest
.fn()
.mockResolvedValue(setSortPreferenceMutationResponseWithErrors);
- mountComponent({ sortPreferenceMutationResponse: mutationMock });
+ mountComponent({ sortPreferenceMutationHandler: mutationMock });
findIssuableList().vm.$emit('sort', UPDATED_DESC);
await waitForPromises();
@@ -426,7 +444,7 @@ describe('IssuesDashboardApp component', () => {
const mutationMock = jest.fn().mockResolvedValue(setSortPreferenceMutationResponse);
mountComponent({
provide: { isSignedIn: false },
- sortPreferenceMutationResponse: mutationMock,
+ sortPreferenceMutationHandler: mutationMock,
});
findIssuableList().vm.$emit('sort', CREATED_DESC);
diff --git a/spec/frontend/issues/dashboard/mock_data.js b/spec/frontend/issues/dashboard/mock_data.js
index cff764a3590..e789360d1d5 100644
--- a/spec/frontend/issues/dashboard/mock_data.js
+++ b/spec/frontend/issues/dashboard/mock_data.js
@@ -27,7 +27,6 @@ export const issuesQueryResponse = {
assignees: {
nodes: [
{
- __persist: true,
__typename: 'UserCore',
id: 'gid://gitlab/User/234',
avatarUrl: 'avatar/url',
@@ -38,7 +37,6 @@ export const issuesQueryResponse = {
],
},
author: {
- __persist: true,
__typename: 'UserCore',
id: 'gid://gitlab/User/456',
avatarUrl: 'avatar/url',
@@ -49,7 +47,6 @@ export const issuesQueryResponse = {
labels: {
nodes: [
{
- __persist: true,
id: 'gid://gitlab/ProjectLabel/456',
color: '#333',
title: 'Label title',
@@ -89,3 +86,17 @@ export const emptyIssuesQueryResponse = {
},
},
};
+
+export const issuesCountsQueryResponse = {
+ data: {
+ openedIssues: {
+ count: 1,
+ },
+ closedIssues: {
+ count: 2,
+ },
+ allIssues: {
+ count: 3,
+ },
+ },
+};
diff --git a/spec/frontend/lib/utils/apollo_startup_js_link_spec.js b/spec/frontend/lib/utils/apollo_startup_js_link_spec.js
index b972f669ac4..1d9c5aacf43 100644
--- a/spec/frontend/lib/utils/apollo_startup_js_link_spec.js
+++ b/spec/frontend/lib/utils/apollo_startup_js_link_spec.js
@@ -1,5 +1,6 @@
import { ApolloLink, Observable } from '@apollo/client/core';
import { StartupJSLink } from '~/lib/utils/apollo_startup_js_link';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
describe('StartupJSLink', () => {
const FORWARDED_RESPONSE = { data: 'FORWARDED_RESPONSE' };
@@ -175,7 +176,7 @@ describe('StartupJSLink', () => {
window.gl = {
startup_graphql_calls: [
{
- fetchCall: mockFetchCall(404),
+ fetchCall: mockFetchCall(HTTP_STATUS_NOT_FOUND),
query: STARTUP_JS_QUERY,
variables: { id: 3 },
},
diff --git a/spec/frontend/projects/compare/components/revision_dropdown_legacy_spec.js b/spec/frontend/projects/compare/components/revision_dropdown_legacy_spec.js
index c21c0f4f9d1..6152965398d 100644
--- a/spec/frontend/projects/compare/components/revision_dropdown_legacy_spec.js
+++ b/spec/frontend/projects/compare/components/revision_dropdown_legacy_spec.js
@@ -4,6 +4,7 @@ import AxiosMockAdapter from 'axios-mock-adapter';
import { nextTick } from 'vue';
import { createAlert } from '~/flash';
import axios from '~/lib/utils/axios_utils';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import RevisionDropdown from '~/projects/compare/components/revision_dropdown_legacy.vue';
const defaultProps = {
@@ -76,7 +77,7 @@ describe('RevisionDropdown component', () => {
});
it('shows flash message on error', async () => {
- axiosMock.onGet('some/invalid/path').replyOnce(404);
+ axiosMock.onGet('some/invalid/path').replyOnce(HTTP_STATUS_NOT_FOUND);
await wrapper.vm.fetchBranchesAndTags();
expect(createAlert).toHaveBeenCalled();
diff --git a/spec/frontend/projects/compare/components/revision_dropdown_spec.js b/spec/frontend/projects/compare/components/revision_dropdown_spec.js
index d598bafea92..d1f8fe96b86 100644
--- a/spec/frontend/projects/compare/components/revision_dropdown_spec.js
+++ b/spec/frontend/projects/compare/components/revision_dropdown_spec.js
@@ -4,6 +4,7 @@ import AxiosMockAdapter from 'axios-mock-adapter';
import { nextTick } from 'vue';
import { createAlert } from '~/flash';
import axios from '~/lib/utils/axios_utils';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import RevisionDropdown from '~/projects/compare/components/revision_dropdown.vue';
import { revisionDropdownDefaultProps as defaultProps } from './mock_data';
@@ -62,7 +63,7 @@ describe('RevisionDropdown component', () => {
});
it('shows flash message on error', async () => {
- axiosMock.onGet('some/invalid/path').replyOnce(404);
+ axiosMock.onGet('some/invalid/path').replyOnce(HTTP_STATUS_NOT_FOUND);
createComponent();
@@ -88,7 +89,7 @@ describe('RevisionDropdown component', () => {
describe('search', () => {
it('shows flash message on error', async () => {
- axiosMock.onGet('some/invalid/path').replyOnce(404);
+ axiosMock.onGet('some/invalid/path').replyOnce(HTTP_STATUS_NOT_FOUND);
createComponent();
diff --git a/spec/frontend/ref/components/ref_selector_spec.js b/spec/frontend/ref/components/ref_selector_spec.js
index 4997c13bbb2..ac588248f15 100644
--- a/spec/frontend/ref/components/ref_selector_spec.js
+++ b/spec/frontend/ref/components/ref_selector_spec.js
@@ -9,6 +9,7 @@ import commit from 'test_fixtures/api/commits/commit.json';
import branches from 'test_fixtures/api/branches/branches.json';
import tags from 'test_fixtures/api/tags/tags.json';
import { trimText } from 'helpers/text_helper';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import { ENTER_KEY } from '~/lib/utils/keys';
import { sprintf } from '~/locale';
import RefSelector from '~/ref/components/ref_selector.vue';
@@ -310,7 +311,7 @@ describe('Ref selector component', () => {
beforeEach(() => {
branchesApiCallSpy = jest.fn().mockReturnValue([200, [], { [X_TOTAL_HEADER]: '0' }]);
tagsApiCallSpy = jest.fn().mockReturnValue([200, [], { [X_TOTAL_HEADER]: '0' }]);
- commitApiCallSpy = jest.fn().mockReturnValue([404]);
+ commitApiCallSpy = jest.fn().mockReturnValue([HTTP_STATUS_NOT_FOUND]);
createComponent();
@@ -514,7 +515,7 @@ describe('Ref selector component', () => {
describe('when the commit search returns no results (i.e. a 404)', () => {
beforeEach(() => {
- commitApiCallSpy = jest.fn().mockReturnValue([404]);
+ commitApiCallSpy = jest.fn().mockReturnValue([HTTP_STATUS_NOT_FOUND]);
createComponent();
diff --git a/spec/frontend/token_access/mock_data.js b/spec/frontend/token_access/mock_data.js
index 0c8ba266201..fff5a0ad4d0 100644
--- a/spec/frontend/token_access/mock_data.js
+++ b/spec/frontend/token_access/mock_data.js
@@ -105,3 +105,29 @@ export const mockProjects = [
__typename: 'Project',
},
];
+
+export const optInJwtQueryResponse = (optInJwt) => ({
+ data: {
+ project: {
+ id: '1',
+ ciCdSettings: {
+ optInJwt,
+ __typename: 'ProjectCiCdSetting',
+ },
+ __typename: 'Project',
+ },
+ },
+});
+
+export const optInJwtMutationResponse = (optInJwt) => ({
+ data: {
+ ciCdSettingsUpdate: {
+ ciCdSettings: {
+ optInJwt,
+ __typename: 'ProjectCiCdSetting',
+ },
+ errors: [],
+ __typename: 'CiCdSettingsUpdatePayload',
+ },
+ },
+});
diff --git a/spec/frontend/token_access/opt_in_jwt_spec.js b/spec/frontend/token_access/opt_in_jwt_spec.js
new file mode 100644
index 00000000000..a25a480f889
--- /dev/null
+++ b/spec/frontend/token_access/opt_in_jwt_spec.js
@@ -0,0 +1,126 @@
+import { GlLoadingIcon, GlToggle } from '@gitlab/ui';
+import Vue from 'vue';
+import VueApollo from 'vue-apollo';
+import createMockApollo from 'helpers/mock_apollo_helper';
+import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import waitForPromises from 'helpers/wait_for_promises';
+import { createAlert } from '~/flash';
+import OptInJwt from '~/token_access/components/opt_in_jwt.vue';
+import getOptInJwtSettingQuery from '~/token_access/graphql/queries/get_opt_in_jwt_setting.query.graphql';
+import updateOptInJwtMutation from '~/token_access/graphql/mutations/update_opt_in_jwt.mutation.graphql';
+import { optInJwtMutationResponse, optInJwtQueryResponse } from './mock_data';
+
+const errorMessage = 'An error occurred';
+const error = new Error(errorMessage);
+
+Vue.use(VueApollo);
+
+jest.mock('~/flash');
+
+describe('OptInJwt component', () => {
+ let wrapper;
+
+ const failureHandler = jest.fn().mockRejectedValue(error);
+ const enabledOptInJwtHandler = jest.fn().mockResolvedValue(optInJwtQueryResponse(true));
+ const disabledOptInJwtHandler = jest.fn().mockResolvedValue(optInJwtQueryResponse(false));
+ const updateOptInJwtHandler = jest.fn().mockResolvedValue(optInJwtMutationResponse(true));
+
+ const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon);
+ const findToggle = () => wrapper.findComponent(GlToggle);
+ const findOptInJwtExpandedSection = () => wrapper.findByTestId('opt-in-jwt-expanded-section');
+
+ const createMockApolloProvider = (requestHandlers) => {
+ return createMockApollo(requestHandlers);
+ };
+
+ const createComponent = (requestHandlers, mountFn = shallowMountExtended) => {
+ wrapper = mountFn(OptInJwt, {
+ provide: {
+ fullPath: 'root/my-repo',
+ },
+ apolloProvider: createMockApolloProvider(requestHandlers),
+ data() {
+ return {
+ targetProjectPath: 'root/test',
+ };
+ },
+ });
+ };
+
+ describe('loading state', () => {
+ it('shows loading state and hides toggle while waiting on query to resolve', async () => {
+ createComponent([[getOptInJwtSettingQuery, enabledOptInJwtHandler]]);
+
+ expect(findLoadingIcon().exists()).toBe(true);
+ expect(findToggle().exists()).toBe(false);
+
+ await waitForPromises();
+
+ expect(findLoadingIcon().exists()).toBe(false);
+ expect(findToggle().exists()).toBe(true);
+ });
+ });
+
+ describe('toggle JWT token access', () => {
+ it('code instruction is visible when toggle is enabled', async () => {
+ createComponent([[getOptInJwtSettingQuery, enabledOptInJwtHandler]]);
+
+ await waitForPromises();
+
+ expect(findToggle().props('value')).toBe(true);
+ expect(findOptInJwtExpandedSection().exists()).toBe(true);
+ });
+
+ it('code instruction is hidden when toggle is disabled', async () => {
+ createComponent([[getOptInJwtSettingQuery, disabledOptInJwtHandler]]);
+
+ await waitForPromises();
+
+ expect(findToggle().props('value')).toBe(false);
+ expect(findOptInJwtExpandedSection().exists()).toBe(false);
+ });
+
+ describe('update JWT token access', () => {
+ it('calls updateOptInJwtMutation with correct arguments', async () => {
+ createComponent(
+ [
+ [getOptInJwtSettingQuery, disabledOptInJwtHandler],
+ [updateOptInJwtMutation, updateOptInJwtHandler],
+ ],
+ mountExtended,
+ );
+
+ await waitForPromises();
+
+ findToggle().vm.$emit('change', true);
+
+ expect(updateOptInJwtHandler).toHaveBeenCalledWith({
+ input: {
+ fullPath: 'root/my-repo',
+ optInJwt: true,
+ },
+ });
+ });
+
+ it('handles update error', async () => {
+ createComponent(
+ [
+ [getOptInJwtSettingQuery, enabledOptInJwtHandler],
+ [updateOptInJwtMutation, failureHandler],
+ ],
+ mountExtended,
+ );
+
+ await waitForPromises();
+
+ findToggle().vm.$emit('change', false);
+
+ await waitForPromises();
+
+ expect(createAlert).toHaveBeenCalledWith({
+ message: 'An error occurred while update the setting. Please try again.',
+ });
+ });
+ });
+ });
+});
diff --git a/spec/frontend/token_access/token_access_spec.js b/spec/frontend/token_access/token_access_spec.js
index 6fe94e28548..62f546463a1 100644
--- a/spec/frontend/token_access/token_access_spec.js
+++ b/spec/frontend/token_access/token_access_spec.js
@@ -5,6 +5,7 @@ import createMockApollo from 'helpers/mock_apollo_helper';
import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper';
import waitForPromises from 'helpers/wait_for_promises';
import { createAlert } from '~/flash';
+import OptInJwt from '~/token_access/components/opt_in_jwt.vue';
import TokenAccess from '~/token_access/components/token_access.vue';
import addProjectCIJobTokenScopeMutation from '~/token_access/graphql/mutations/add_project_ci_job_token_scope.mutation.graphql';
import removeProjectCIJobTokenScopeMutation from '~/token_access/graphql/mutations/remove_project_ci_job_token_scope.mutation.graphql';
@@ -40,6 +41,7 @@ describe('TokenAccess component', () => {
const failureHandler = jest.fn().mockRejectedValue(error);
const findToggle = () => wrapper.findComponent(GlToggle);
+ const findOptInJwt = () => wrapper.findComponent(OptInJwt);
const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon);
const findAddProjectBtn = () => wrapper.findByRole('button', { name: 'Add project' });
const findRemoveProjectBtn = () => wrapper.findByRole('button', { name: 'Remove access' });
@@ -82,6 +84,21 @@ describe('TokenAccess component', () => {
});
});
+ describe('template', () => {
+ beforeEach(async () => {
+ createComponent([
+ [getCIJobTokenScopeQuery, enabledJobTokenScopeHandler],
+ [getProjectsWithCIJobTokenScopeQuery, getProjectsWithScopeHandler],
+ ]);
+
+ await waitForPromises();
+ });
+
+ it('renders the opt in jwt component', () => {
+ expect(findOptInJwt().exists()).toBe(true);
+ });
+ });
+
describe('fetching projects and scope', () => {
it('fetches projects and scope correctly', () => {
const expectedVariables = {
diff --git a/spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js b/spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js
index 46bfd7eceb1..d8474708d6c 100644
--- a/spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js
+++ b/spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js
@@ -2,6 +2,7 @@ import MockAdapter from 'axios-mock-adapter';
import testAction from 'helpers/vuex_action_helper';
import axios from '~/lib/utils/axios_utils';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import * as actions from '~/vue_shared/security_reports/store/modules/sast/actions';
import * as types from '~/vue_shared/security_reports/store/modules/sast/mutation_types';
import createState from '~/vue_shared/security_reports/store/modules/sast/state';
@@ -159,7 +160,7 @@ describe('sast report actions', () => {
.onGet(diffEndpoint)
.replyOnce(200, reports.diff)
.onGet(vulnerabilityFeedbackPath)
- .replyOnce(404);
+ .replyOnce(HTTP_STATUS_NOT_FOUND);
});
it('should dispatch the `receiveError` action', () => {
@@ -177,7 +178,7 @@ describe('sast report actions', () => {
beforeEach(() => {
mock
.onGet(diffEndpoint)
- .replyOnce(404)
+ .replyOnce(HTTP_STATUS_NOT_FOUND)
.onGet(vulnerabilityFeedbackPath)
.replyOnce(200, reports.enrichData);
});
diff --git a/spec/frontend/vue_shared/security_reports/store/modules/secret_detection/actions_spec.js b/spec/frontend/vue_shared/security_reports/store/modules/secret_detection/actions_spec.js
index 4f4f653bb72..d0a8468ad92 100644
--- a/spec/frontend/vue_shared/security_reports/store/modules/secret_detection/actions_spec.js
+++ b/spec/frontend/vue_shared/security_reports/store/modules/secret_detection/actions_spec.js
@@ -2,6 +2,7 @@ import MockAdapter from 'axios-mock-adapter';
import testAction from 'helpers/vuex_action_helper';
import axios from '~/lib/utils/axios_utils';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
import * as actions from '~/vue_shared/security_reports/store/modules/secret_detection/actions';
import * as types from '~/vue_shared/security_reports/store/modules/secret_detection/mutation_types';
import createState from '~/vue_shared/security_reports/store/modules/secret_detection/state';
@@ -160,7 +161,7 @@ describe('secret detection report actions', () => {
.onGet(diffEndpoint)
.replyOnce(200, reports.diff)
.onGet(vulnerabilityFeedbackPath)
- .replyOnce(404);
+ .replyOnce(HTTP_STATUS_NOT_FOUND);
});
it('should dispatch the `receiveDiffError` action', () => {
@@ -178,7 +179,7 @@ describe('secret detection report actions', () => {
beforeEach(() => {
mock
.onGet(diffEndpoint)
- .replyOnce(404)
+ .replyOnce(HTTP_STATUS_NOT_FOUND)
.onGet(vulnerabilityFeedbackPath)
.replyOnce(200, reports.enrichData);
});
diff --git a/spec/frontend_integration/test_helpers/mock_server/routes/404.js b/spec/frontend_integration/test_helpers/mock_server/routes/404.js
index 54183f1189c..38742087675 100644
--- a/spec/frontend_integration/test_helpers/mock_server/routes/404.js
+++ b/spec/frontend_integration/test_helpers/mock_server/routes/404.js
@@ -1,9 +1,10 @@
import { Response } from 'miragejs';
+import { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';
export default (server) => {
['get', 'post', 'put', 'delete', 'patch'].forEach((method) => {
server[method]('*', () => {
- return new Response(404);
+ return new Response(HTTP_STATUS_NOT_FOUND);
});
});
};
diff --git a/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb b/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb
index 8d5aa6236a7..456d0165fe6 100644
--- a/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb
+++ b/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb
@@ -2,7 +2,8 @@
require 'spec_helper'
-RSpec.describe Gitlab::BackgroundMigration::BackfillSnippetRepositories, :migration, schema: 20210602155110 do
+RSpec.describe Gitlab::BackgroundMigration::BackfillSnippetRepositories, :migration, schema: 20210602155110,
+feature_category: :source_code_management do
let(:gitlab_shell) { Gitlab::Shell.new }
let(:users) { table(:users) }
let(:snippets) { table(:snippets) }
diff --git a/spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb
index 16deeb6916f..9e5fa6eecc2 100644
--- a/spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines do
+RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines, feature_category: :continuous_integration do
let_it_be(:project) { create(:project) }
let_it_be(:user) { create(:user) }
@@ -17,6 +17,7 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines do
let(:step) { described_class.new(pipeline, command) }
before do
+ stub_feature_flags(move_cancel_pending_pipelines_to_async: false)
create(:ci_build, :interruptible, :running, pipeline: prev_pipeline)
create(:ci_build, :interruptible, :success, pipeline: prev_pipeline)
create(:ci_build, :created, pipeline: prev_pipeline)
@@ -50,7 +51,7 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines do
perform
expect(Gitlab::AppLogger).to have_received(:info).with(
- class: described_class.name,
+ class: "Ci::PipelineCreation::CancelRedundantPipelinesService",
message: "Pipeline #{pipeline.id} auto-canceling pipeline #{prev_pipeline.id}",
canceled_pipeline_id: prev_pipeline.id,
canceled_by_pipeline_id: pipeline.id,
@@ -199,6 +200,25 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines do
expect(build_statuses(pipeline)).to contain_exactly('pending')
end
end
+
+ context 'when feature flag move_cancel_pending_pipelines_to_async is enabled' do
+ before do
+ stub_feature_flags(move_cancel_pending_pipelines_to_async: true)
+ end
+
+ it 'enqueues CancelRedundantPipelinesWorker' do
+ expect(Ci::CancelRedundantPipelinesWorker).to receive(:perform_async).with(pipeline.id)
+
+ subject
+ end
+
+ it 'does not do any synchronous processing' do
+ subject
+
+ expect(build_statuses(prev_pipeline)).to contain_exactly('running', 'success', 'created')
+ expect(build_statuses(pipeline)).to contain_exactly('pending')
+ end
+ end
end
private
diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb
index 10a099af4f0..5f5ac7fff2a 100644
--- a/spec/lib/gitlab/git_access_spec.rb
+++ b/spec/lib/gitlab/git_access_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GitAccess, :aggregate_failures do
+RSpec.describe Gitlab::GitAccess, :aggregate_failures, feature_category: :authentication_and_authorization do
include TermsHelper
include AdminModeHelper
include ExternalAuthorizationServiceHelpers
diff --git a/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb b/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb
index a8dd6b4725d..8488d39bc4e 100644
--- a/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::DiffNotesImporter do
+RSpec.describe Gitlab::GithubImport::Importer::DiffNotesImporter, feature_category: :importers do
let(:project) { double(:project, id: 4, import_source: 'foo/bar') }
let(:client) { double(:client) }
@@ -89,7 +89,7 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNotesImporter do
end
end
- describe '#parallel_import' do
+ describe '#parallel_import', :clean_gitlab_redis_cache do
it 'imports each diff note in parallel' do
importer = described_class.new(project, client)
@@ -97,10 +97,8 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNotesImporter do
.to receive(:each_object_to_import)
.and_yield(github_comment)
- expect(Gitlab::GithubImport::ImportDiffNoteWorker).to receive(:bulk_perform_in)
- .with(1.second, [
- [project.id, an_instance_of(Hash), an_instance_of(String)]
- ], batch_size: 1000, batch_delay: 1.minute)
+ expect(Gitlab::GithubImport::ImportDiffNoteWorker).to receive(:perform_in)
+ .with(1.minute, project.id, an_instance_of(Hash), an_instance_of(String))
waiter = importer.parallel_import
diff --git a/spec/lib/gitlab/github_import/importer/issue_events_importer_spec.rb b/spec/lib/gitlab/github_import/importer/issue_events_importer_spec.rb
index 2c1af4f8948..3ab238bce9e 100644
--- a/spec/lib/gitlab/github_import/importer/issue_events_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/issue_events_importer_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::IssueEventsImporter do
+RSpec.describe Gitlab::GithubImport::Importer::IssueEventsImporter, feature_category: :importers do
subject(:importer) { described_class.new(project, client, parallel: parallel) }
let(:project) { instance_double(Project, id: 4, import_source: 'foo/bar') }
@@ -73,14 +73,12 @@ RSpec.describe Gitlab::GithubImport::Importer::IssueEventsImporter do
end
end
- describe '#parallel_import' do
+ describe '#parallel_import', :clean_gitlab_redis_cache do
it 'imports each note in parallel' do
allow(importer).to receive(:each_object_to_import).and_yield(issue_event)
- expect(Gitlab::GithubImport::ImportIssueEventWorker).to receive(:bulk_perform_in).with(
- 1.second, [
- [project.id, an_instance_of(Hash), an_instance_of(String)]
- ], batch_size: 1000, batch_delay: 1.minute
+ expect(Gitlab::GithubImport::ImportIssueEventWorker).to receive(:perform_in).with(
+ 1.minute, project.id, an_instance_of(Hash), an_instance_of(String)
)
waiter = importer.parallel_import
diff --git a/spec/lib/gitlab/github_import/importer/issues_importer_spec.rb b/spec/lib/gitlab/github_import/importer/issues_importer_spec.rb
index 4a5525c250e..6ba65754ac5 100644
--- a/spec/lib/gitlab/github_import/importer/issues_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/issues_importer_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::IssuesImporter do
+RSpec.describe Gitlab::GithubImport::Importer::IssuesImporter, feature_category: :importers do
let(:project) { double(:project, id: 4, import_source: 'foo/bar') }
let(:client) { double(:client) }
let(:created_at) { Time.new(2017, 1, 1, 12, 00) }
@@ -82,7 +82,7 @@ RSpec.describe Gitlab::GithubImport::Importer::IssuesImporter do
end
end
- describe '#parallel_import' do
+ describe '#parallel_import', :clean_gitlab_redis_cache do
it 'imports each issue in parallel' do
importer = described_class.new(project, client)
@@ -91,12 +91,8 @@ RSpec.describe Gitlab::GithubImport::Importer::IssuesImporter do
.and_yield(github_issue)
expect(Gitlab::GithubImport::ImportIssueWorker)
- .to receive(:bulk_perform_in)
- .with(1.second,
- [[project.id, an_instance_of(Hash), an_instance_of(String)]],
- batch_size: 1000,
- batch_delay: 1.minute
- )
+ .to receive(:perform_in)
+ .with(1.minute, project.id, an_instance_of(Hash), an_instance_of(String))
waiter = importer.parallel_import
diff --git a/spec/lib/gitlab/github_import/importer/lfs_objects_importer_spec.rb b/spec/lib/gitlab/github_import/importer/lfs_objects_importer_spec.rb
index 678aa705b6c..35a6f6d5814 100644
--- a/spec/lib/gitlab/github_import/importer/lfs_objects_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/lfs_objects_importer_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::LfsObjectsImporter do
+RSpec.describe Gitlab::GithubImport::Importer::LfsObjectsImporter, feature_category: :importers do
let_it_be(:project) { create(:project, :import_started) }
let(:client) { double(:client) }
@@ -110,7 +110,7 @@ RSpec.describe Gitlab::GithubImport::Importer::LfsObjectsImporter do
end
end
- describe '#parallel_import' do
+ describe '#parallel_import', :clean_gitlab_redis_cache do
it 'imports each lfs object in parallel' do
importer = described_class.new(project, client)
@@ -118,10 +118,8 @@ RSpec.describe Gitlab::GithubImport::Importer::LfsObjectsImporter do
expect(service).to receive(:each_list_item).and_yield(lfs_download_object)
end
- expect(Gitlab::GithubImport::ImportLfsObjectWorker).to receive(:bulk_perform_in)
- .with(1.second, [
- [project.id, an_instance_of(Hash), an_instance_of(String)]
- ], batch_size: 1000, batch_delay: 1.minute)
+ expect(Gitlab::GithubImport::ImportLfsObjectWorker).to receive(:perform_in)
+ .with(1.minute, project.id, an_instance_of(Hash), an_instance_of(String))
waiter = importer.parallel_import
diff --git a/spec/lib/gitlab/github_import/importer/notes_importer_spec.rb b/spec/lib/gitlab/github_import/importer/notes_importer_spec.rb
index ca4560b6a1a..0ca27782084 100644
--- a/spec/lib/gitlab/github_import/importer/notes_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/notes_importer_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::NotesImporter do
+RSpec.describe Gitlab::GithubImport::Importer::NotesImporter, feature_category: :importers do
let(:project) { double(:project, id: 4, import_source: 'foo/bar') }
let(:client) { double(:client) }
@@ -75,7 +75,7 @@ RSpec.describe Gitlab::GithubImport::Importer::NotesImporter do
end
end
- describe '#parallel_import' do
+ describe '#parallel_import', :clean_gitlab_redis_cache do
it 'imports each note in parallel' do
importer = described_class.new(project, client)
@@ -83,10 +83,8 @@ RSpec.describe Gitlab::GithubImport::Importer::NotesImporter do
.to receive(:each_object_to_import)
.and_yield(github_comment)
- expect(Gitlab::GithubImport::ImportNoteWorker).to receive(:bulk_perform_in)
- .with(1.second, [
- [project.id, an_instance_of(Hash), an_instance_of(String)]
- ], batch_size: 1000, batch_delay: 1.minute)
+ expect(Gitlab::GithubImport::ImportNoteWorker).to receive(:perform_in)
+ .with(1.minute, project.id, an_instance_of(Hash), an_instance_of(String))
waiter = importer.parallel_import
diff --git a/spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb b/spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb
index 8809d58a252..f3d8dc9373f 100644
--- a/spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::ProtectedBranchesImporter do
+RSpec.describe Gitlab::GithubImport::Importer::ProtectedBranchesImporter, feature_category: :importers do
subject(:importer) { described_class.new(project, client, parallel: parallel) }
let(:project) { instance_double('Project', id: 4, import_source: 'foo/bar') }
@@ -143,13 +143,9 @@ RSpec.describe Gitlab::GithubImport::Importer::ProtectedBranchesImporter do
it 'imports each protected branch in parallel' do
expect(Gitlab::GithubImport::ImportProtectedBranchWorker)
- .to receive(:bulk_perform_in)
- .with(
- 1.second,
- [[project.id, an_instance_of(Hash), an_instance_of(String)]],
- batch_delay: 1.minute,
- batch_size: 1000
- )
+ .to receive(:perform_in)
+ .with(1.minute, project.id, an_instance_of(Hash), an_instance_of(String))
+
expect(Gitlab::GithubImport::ObjectCounter)
.to receive(:increment).with(project, :protected_branch, :fetched)
diff --git a/spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb b/spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb
index 3bf1976ee10..06005a447a8 100644
--- a/spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb
@@ -2,7 +2,8 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::PullRequests::ReviewRequestsImporter, :clean_gitlab_redis_cache do
+RSpec.describe Gitlab::GithubImport::Importer::PullRequests::ReviewRequestsImporter, :clean_gitlab_redis_cache,
+ feature_category: :importers do
subject(:importer) { described_class.new(project, client) }
let_it_be(:project) { create(:project, import_source: 'foo') }
@@ -107,12 +108,10 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequests::ReviewRequestsImpor
it 'schedule import for each merge request reviewers' do
expect(Gitlab::GithubImport::PullRequests::ImportReviewRequestWorker)
- .to receive(:bulk_perform_in).with(
- 1.second,
- match_array(expected_worker_payload),
- batch_size: 1000,
- batch_delay: 1.minute
- )
+ .to receive(:perform_in).with(1.minute, *expected_worker_payload.first).ordered
+
+ expect(Gitlab::GithubImport::PullRequests::ImportReviewRequestWorker)
+ .to receive(:perform_in).with(1.minute, *expected_worker_payload.second).ordered
importer.parallel_import
end
@@ -127,12 +126,7 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequests::ReviewRequestsImpor
it "doesn't schedule import this merge request reviewers" do
expect(Gitlab::GithubImport::PullRequests::ImportReviewRequestWorker)
- .to receive(:bulk_perform_in).with(
- 1.second,
- expected_worker_payload.slice(1, 1),
- batch_size: 1000,
- batch_delay: 1.minute
- )
+ .to receive(:perform_in).with(1.minute, *expected_worker_payload.second)
importer.parallel_import
end
diff --git a/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb b/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb
index aa92abdb110..e8a3764228f 100644
--- a/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter do
+RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter, feature_category: :importers do
let(:url) { 'https://github.com/foo/bar.git' }
let(:project) { create(:project, import_source: 'foo/bar', import_url: url) }
let(:client) { double(:client) }
@@ -92,7 +92,7 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter do
end
end
- describe '#parallel_import' do
+ describe '#parallel_import', :clean_gitlab_redis_cache do
it 'imports each note in parallel' do
importer = described_class.new(project, client)
@@ -101,13 +101,8 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter do
.and_yield(pull_request)
expect(Gitlab::GithubImport::ImportPullRequestWorker)
- .to receive(:bulk_perform_in)
- .with(
- 1.second,
- [[project.id, an_instance_of(Hash), an_instance_of(String)]],
- batch_delay: 1.minute,
- batch_size: 200
- )
+ .to receive(:perform_in)
+ .with(1.minute, project.id, an_instance_of(Hash), an_instance_of(String))
waiter = importer.parallel_import
diff --git a/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb b/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb
index cefad3baa31..1003f2cdc2b 100644
--- a/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb
+++ b/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::GithubImport::ParallelScheduling do
+RSpec.describe Gitlab::GithubImport::ParallelScheduling, feature_category: :importers do
let(:importer_class) do
Class.new do
def self.name
@@ -266,7 +266,7 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do
end
end
- describe '#parallel_import' do
+ describe '#parallel_import', :clean_gitlab_redis_cache do
let(:importer) { importer_class.new(project, client) }
let(:repr_class) { double(:representation) }
let(:worker_class) { double(:worker) }
@@ -286,25 +286,82 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do
allow(repr_class)
.to receive(:from_api_response)
.with(object, {})
- .and_return({ title: 'Foo' })
+ .and_return({ title: 'One' }, { title: 'Two' }, { title: 'Three' })
end
context 'with multiple objects' do
before do
+ stub_feature_flags(improved_spread_parallel_import: false)
+
expect(importer).to receive(:each_object_to_import).and_yield(object).and_yield(object).and_yield(object)
end
it 'imports data in parallel batches with delays' do
expect(worker_class).to receive(:bulk_perform_in)
.with(1.second, [
- [project.id, { title: 'Foo' }, an_instance_of(String)],
- [project.id, { title: 'Foo' }, an_instance_of(String)],
- [project.id, { title: 'Foo' }, an_instance_of(String)]
+ [project.id, { title: 'One' }, an_instance_of(String)],
+ [project.id, { title: 'Two' }, an_instance_of(String)],
+ [project.id, { title: 'Three' }, an_instance_of(String)]
], batch_size: batch_size, batch_delay: batch_delay)
importer.parallel_import
end
end
+
+ context 'when the feature flag `improved_spread_parallel_import` is enabled' do
+ before do
+ stub_feature_flags(improved_spread_parallel_import: true)
+ end
+
+ it 'imports data in parallel with delays respecting parallel_import_batch definition and return job waiter' do
+ allow(::Gitlab::JobWaiter).to receive(:generate_key).and_return('waiter-key')
+ allow(importer).to receive(:parallel_import_batch).and_return({ size: 2, delay: 1.minute })
+
+ expect(importer).to receive(:each_object_to_import)
+ .and_yield(object).and_yield(object).and_yield(object)
+ expect(worker_class).to receive(:perform_in)
+ .with(1.minute, project.id, { title: 'One' }, 'waiter-key').ordered
+ expect(worker_class).to receive(:perform_in)
+ .with(1.minute, project.id, { title: 'Two' }, 'waiter-key').ordered
+ expect(worker_class).to receive(:perform_in)
+ .with(2.minutes, project.id, { title: 'Three' }, 'waiter-key').ordered
+
+ job_waiter = importer.parallel_import
+
+ expect(job_waiter.key).to eq('waiter-key')
+ expect(job_waiter.jobs_remaining).to eq(3)
+ end
+
+ context 'when job restarts due to API rate limit or Sidekiq interruption' do
+ before do
+ cache_key = format(described_class::JOB_WAITER_CACHE_KEY,
+ project: project.id, collection: importer.collection_method)
+ Gitlab::Cache::Import::Caching.write(cache_key, 'waiter-key')
+
+ cache_key = format(described_class::JOB_WAITER_REMAINING_CACHE_KEY,
+ project: project.id, collection: importer.collection_method)
+ Gitlab::Cache::Import::Caching.write(cache_key, 3)
+ end
+
+ it "restores job waiter's key and jobs_remaining" do
+ allow(importer).to receive(:parallel_import_batch).and_return({ size: 1, delay: 1.minute })
+
+ expect(importer).to receive(:each_object_to_import).and_yield(object).and_yield(object).and_yield(object)
+
+ expect(worker_class).to receive(:perform_in)
+ .with(1.minute, project.id, { title: 'One' }, 'waiter-key').ordered
+ expect(worker_class).to receive(:perform_in)
+ .with(2.minutes, project.id, { title: 'Two' }, 'waiter-key').ordered
+ expect(worker_class).to receive(:perform_in)
+ .with(3.minutes, project.id, { title: 'Three' }, 'waiter-key').ordered
+
+ job_waiter = importer.parallel_import
+
+ expect(job_waiter.key).to eq('waiter-key')
+ expect(job_waiter.jobs_remaining).to eq(6)
+ end
+ end
+ end
end
describe '#each_object_to_import' do
diff --git a/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb
index 2699dc10b18..125d1736b9b 100644
--- a/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb
+++ b/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb
@@ -6,7 +6,7 @@ def match_mr1_note(content_regex)
MergeRequest.find_by(title: 'MR1').notes.find { |n| n.note.match(/#{content_regex}/) }
end
-RSpec.describe Gitlab::ImportExport::Project::TreeRestorer do
+RSpec.describe Gitlab::ImportExport::Project::TreeRestorer, feature_category: :importers do
include ImportExport::CommonUtil
using RSpec::Parameterized::TableSyntax
diff --git a/spec/lib/gitlab/job_waiter_spec.rb b/spec/lib/gitlab/job_waiter_spec.rb
index a9edb2b530b..f7a76035203 100644
--- a/spec/lib/gitlab/job_waiter_spec.rb
+++ b/spec/lib/gitlab/job_waiter_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::JobWaiter, :redis do
+RSpec.describe Gitlab::JobWaiter, :redis, feature_category: :not_owned do
describe '.notify' do
it 'pushes the jid to the named queue' do
key = described_class.new.key
@@ -15,6 +15,14 @@ RSpec.describe Gitlab::JobWaiter, :redis do
end
end
+ describe '.generate_key' do
+ it 'generates and return a new key' do
+ key = described_class.generate_key
+
+ expect(key).to include('gitlab:job_waiter:')
+ end
+ end
+
describe '#wait' do
let(:waiter) { described_class.new(2) }
diff --git a/spec/lib/gitlab/middleware/go_spec.rb b/spec/lib/gitlab/middleware/go_spec.rb
index bed43c04460..aaa274e252d 100644
--- a/spec/lib/gitlab/middleware/go_spec.rb
+++ b/spec/lib/gitlab/middleware/go_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::Middleware::Go do
+RSpec.describe Gitlab::Middleware::Go, feature_category: :source_code_management do
let(:app) { double(:app) }
let(:middleware) { described_class.new(app) }
let(:env) do
diff --git a/spec/lib/gitlab/sidekiq_death_handler_spec.rb b/spec/lib/gitlab/sidekiq_death_handler_spec.rb
index 434642bf3ef..9f90e985207 100644
--- a/spec/lib/gitlab/sidekiq_death_handler_spec.rb
+++ b/spec/lib/gitlab/sidekiq_death_handler_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe Gitlab::SidekiqDeathHandler, :clean_gitlab_redis_queues do
urgency :low
worker_has_external_dependencies!
worker_resource_boundary :cpu
- feature_category :users
+ feature_category :user_profile
end
end
@@ -25,7 +25,7 @@ RSpec.describe Gitlab::SidekiqDeathHandler, :clean_gitlab_redis_queues do
.to receive(:increment)
.with({ queue: 'test_queue', worker: 'TestWorker',
urgency: 'low', external_dependencies: 'yes',
- feature_category: 'users', boundary: 'cpu' })
+ feature_category: 'user_profile', boundary: 'cpu' })
described_class.handler({ 'class' => 'TestWorker', 'queue' => 'test_queue' }, nil)
end
diff --git a/spec/migrations/20221219122320_copy_clickhouse_connection_string_to_encrypted_var_spec.rb b/spec/migrations/20221219122320_copy_clickhouse_connection_string_to_encrypted_var_spec.rb
new file mode 100644
index 00000000000..7ff033ab0c2
--- /dev/null
+++ b/spec/migrations/20221219122320_copy_clickhouse_connection_string_to_encrypted_var_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe CopyClickhouseConnectionStringToEncryptedVar, feature_category: :product_analytics do
+ let!(:migration) { described_class.new }
+ let(:setting) { table(:application_settings).create!(clickhouse_connection_string: 'https://example.com/test') }
+
+ it 'copies the clickhouse_connection_string to the encrypted column' do
+ expect(setting.clickhouse_connection_string).to eq('https://example.com/test')
+
+ migrate!
+
+ setting.reload
+ expect(setting.clickhouse_connection_string).to eq('https://example.com/test')
+ expect(setting.encrypted_product_analytics_clickhouse_connection_string).not_to be_nil
+ end
+end
diff --git a/spec/models/analytics/cycle_analytics/project_stage_spec.rb b/spec/models/analytics/cycle_analytics/project_stage_spec.rb
index 3c7fde17355..1e7335987a4 100644
--- a/spec/models/analytics/cycle_analytics/project_stage_spec.rb
+++ b/spec/models/analytics/cycle_analytics/project_stage_spec.rb
@@ -22,14 +22,6 @@ RSpec.describe Analytics::CycleAnalytics::ProjectStage do
let(:parent_name) { :project }
end
- context 'relative positioning' do
- it_behaves_like 'a class that supports relative positioning' do
- let_it_be(:project) { create(:project) }
- let(:factory) { :cycle_analytics_project_stage }
- let(:default_params) { { project: project } }
- end
- end
-
describe '.distinct_stages_within_hierarchy' do
let_it_be(:top_level_group) { create(:group) }
let_it_be(:sub_group_1) { create(:group, parent: top_level_group) }
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index 6d9fbad7d10..3cea65ce699 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -1565,13 +1565,30 @@ RSpec.describe Ci::Build, feature_category: :continuous_integration do
it 'transitions to running and calls webhook' do
freeze_time do
expect(Deployments::HooksWorker)
- .to receive(:perform_async).with(deployment_id: deployment.id, status: 'running', status_changed_at: Time.current)
+ .to receive(:perform_async).with(hash_including({ 'deployment_id' => deployment.id, 'status' => 'running', 'status_changed_at' => Time.current.to_s }))
subject
end
expect(deployment).to be_running
end
+
+ context 'when improve_deployment_hooksworker_serialization is disabled' do
+ before do
+ stub_feature_flags(improve_deployment_hooksworker_serialization: false)
+ end
+
+ it 'transitions to running and calls webhook' do
+ freeze_time do
+ expect(Deployments::HooksWorker)
+ .to receive(:perform_async).with(hash_including({ deployment_id: deployment.id, status: 'running', status_changed_at: Time.current }))
+
+ subject
+ end
+
+ expect(deployment).to be_running
+ end
+ end
end
end
end
diff --git a/spec/models/concerns/ci/has_status_spec.rb b/spec/models/concerns/ci/has_status_spec.rb
index 9dfc7d84f89..4ef690ca4c1 100644
--- a/spec/models/concerns/ci/has_status_spec.rb
+++ b/spec/models/concerns/ci/has_status_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Ci::HasStatus do
+RSpec.describe Ci::HasStatus, feature_category: :continuous_integration do
describe '.composite_status' do
using RSpec::Parameterized::TableSyntax
diff --git a/spec/models/concerns/noteable_spec.rb b/spec/models/concerns/noteable_spec.rb
index 383ed68816e..ce2ddffc4e5 100644
--- a/spec/models/concerns/noteable_spec.rb
+++ b/spec/models/concerns/noteable_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Noteable do
+RSpec.describe Noteable, feature_category: :code_review_workflow do
let!(:active_diff_note1) { create(:diff_note_on_merge_request) }
let(:project) { active_diff_note1.project }
subject { active_diff_note1.noteable }
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb
index f0fdc62e6c7..745b69cb8d0 100644
--- a/spec/models/deployment_spec.rb
+++ b/spec/models/deployment_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Deployment do
+RSpec.describe Deployment, feature_category: :continuous_delivery do
subject { build(:deployment) }
it { is_expected.to belong_to(:project).required }
@@ -164,12 +164,30 @@ RSpec.describe Deployment do
freeze_time do
expect(Deployments::HooksWorker)
.to receive(:perform_async)
- .with(deployment_id: deployment.id, status: 'running', status_changed_at: Time.current)
+ .with(hash_including({ 'deployment_id' => deployment.id, 'status' => 'running',
+ 'status_changed_at' => Time.current.to_s }))
deployment.run!
end
end
+ context 'when improve_deployment_hooksworker_serialization is disabled' do
+ before do
+ stub_feature_flags(improve_deployment_hooksworker_serialization: false)
+ end
+
+ it 'executes Deployments::HooksWorker asynchronously' do
+ freeze_time do
+ expect(Deployments::HooksWorker)
+ .to receive(:perform_async)
+ .with(hash_including({ deployment_id: deployment.id, status: 'running',
+status_changed_at: Time.current }))
+
+ deployment.run!
+ end
+ end
+ end
+
it 'does not execute Deployments::DropOlderDeploymentsWorker' do
expect(Deployments::DropOlderDeploymentsWorker)
.not_to receive(:perform_async).with(deployment.id)
@@ -200,12 +218,29 @@ RSpec.describe Deployment do
it 'executes Deployments::HooksWorker asynchronously' do
freeze_time do
expect(Deployments::HooksWorker)
- .to receive(:perform_async)
- .with(deployment_id: deployment.id, status: 'success', status_changed_at: Time.current)
+ .to receive(:perform_async)
+ .with(hash_including({ 'deployment_id' => deployment.id, 'status' => 'success',
+ 'status_changed_at' => Time.current.to_s }))
deployment.succeed!
end
end
+
+ context 'when improve_deployment_hooksworker_serialization is disabled' do
+ before do
+ stub_feature_flags(improve_deployment_hooksworker_serialization: false)
+ end
+
+ it 'executes Deployments::HooksWorker asynchronously' do
+ freeze_time do
+ expect(Deployments::HooksWorker)
+ .to receive(:perform_async)
+ .with(hash_including({ deployment_id: deployment.id, status: 'success', status_changed_at: Time.current }))
+
+ deployment.succeed!
+ end
+ end
+ end
end
context 'when deployment failed' do
@@ -231,11 +266,29 @@ RSpec.describe Deployment do
freeze_time do
expect(Deployments::HooksWorker)
.to receive(:perform_async)
- .with(deployment_id: deployment.id, status: 'failed', status_changed_at: Time.current)
+ .with(hash_including({ 'deployment_id' => deployment.id, 'status' => 'failed',
+ 'status_changed_at' => Time.current.to_s }))
deployment.drop!
end
end
+
+ context 'when improve_deployment_hooksworker_serialization is disabled' do
+ before do
+ stub_feature_flags(improve_deployment_hooksworker_serialization: false)
+ end
+
+ it 'executes Deployments::HooksWorker asynchronously' do
+ freeze_time do
+ expect(Deployments::HooksWorker)
+ .to receive(:perform_async)
+ .with(hash_including({ deployment_id: deployment.id, status: 'failed',
+status_changed_at: Time.current }))
+
+ deployment.drop!
+ end
+ end
+ end
end
context 'when deployment was canceled' do
@@ -261,11 +314,28 @@ RSpec.describe Deployment do
freeze_time do
expect(Deployments::HooksWorker)
.to receive(:perform_async)
- .with(deployment_id: deployment.id, status: 'canceled', status_changed_at: Time.current)
-
+ .with(hash_including({ 'deployment_id' => deployment.id, 'status' => 'canceled',
+ 'status_changed_at' => Time.current.to_s }))
deployment.cancel!
end
end
+
+ context 'when improve_deployment_hooksworker_serialization is disabled' do
+ before do
+ stub_feature_flags(improve_deployment_hooksworker_serialization: false)
+ end
+
+ it 'executes Deployments::HooksWorker asynchronously' do
+ freeze_time do
+ expect(Deployments::HooksWorker)
+ .to receive(:perform_async)
+ .with(hash_including({ deployment_id: deployment.id, status: 'canceled',
+status_changed_at: Time.current }))
+
+ deployment.cancel!
+ end
+ end
+ end
end
context 'when deployment was skipped' do
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index d063f4713c7..e05eeb7772b 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Namespace do
+RSpec.describe Namespace, feature_category: :subgroups do
include ProjectForksHelper
include ReloadHelpers
diff --git a/spec/models/project_authorization_spec.rb b/spec/models/project_authorization_spec.rb
index df89e97a41f..f81d73a5da9 100644
--- a/spec/models/project_authorization_spec.rb
+++ b/spec/models/project_authorization_spec.rb
@@ -94,11 +94,13 @@ RSpec.describe ProjectAuthorization do
end
end
- shared_examples_for 'logs the detail' do
+ shared_examples_for 'logs the detail' do |batch_size:|
it 'logs the detail' do
expect(Gitlab::AppLogger).to receive(:info).with(
entire_size: 3,
- message: 'Project authorizations refresh performed with delay'
+ message: 'Project authorizations refresh performed with delay',
+ total_delay: (3 / batch_size.to_f).ceil * ProjectAuthorization::SLEEP_DELAY,
+ **Gitlab::ApplicationContext.current
)
execute
@@ -149,7 +151,7 @@ RSpec.describe ProjectAuthorization do
expect(user.project_authorizations.pluck(:user_id, :project_id, :access_level)).to match_array(attributes.map(&:values))
end
- it_behaves_like 'logs the detail'
+ it_behaves_like 'logs the detail', batch_size: 2
context 'when the GitLab installation does not have a replica database configured' do
before do
@@ -221,7 +223,7 @@ RSpec.describe ProjectAuthorization do
expect(project.project_authorizations.pluck(:user_id)).not_to include(*user_ids)
end
- it_behaves_like 'logs the detail'
+ it_behaves_like 'logs the detail', batch_size: 2
context 'when the GitLab installation does not have a replica database configured' do
before do
@@ -293,7 +295,7 @@ RSpec.describe ProjectAuthorization do
expect(user.project_authorizations.pluck(:project_id)).not_to include(*project_ids)
end
- it_behaves_like 'logs the detail'
+ it_behaves_like 'logs the detail', batch_size: 2
context 'when the GitLab installation does not have a replica database configured' do
before do
diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb
index 1fab07c1452..f4cf3130aa9 100644
--- a/spec/models/project_team_spec.rb
+++ b/spec/models/project_team_spec.rb
@@ -2,7 +2,7 @@
require "spec_helper"
-RSpec.describe ProjectTeam do
+RSpec.describe ProjectTeam, feature_category: :subgroups do
include ProjectForksHelper
let(:maintainer) { create(:user) }
diff --git a/spec/requests/api/api_spec.rb b/spec/requests/api/api_spec.rb
index f0e8e6b3b9d..1ad0f20b77e 100644
--- a/spec/requests/api/api_spec.rb
+++ b/spec/requests/api/api_spec.rb
@@ -171,7 +171,7 @@ RSpec.describe API::API, feature_category: :authentication_and_authorization do
'meta.remote_ip' => an_instance_of(String),
'meta.client_id' => a_string_matching(%r{\Auser/.+}),
'meta.user' => user.username,
- 'meta.feature_category' => 'users',
+ 'meta.feature_category' => 'user_profile',
'route' => '/api/:version/users')
expect(data.stringify_keys).not_to include('meta.caller_id')
diff --git a/spec/rubocop/cop/rspec/missing_feature_category_spec.rb b/spec/rubocop/cop/rspec/missing_feature_category_spec.rb
new file mode 100644
index 00000000000..1685fcf8044
--- /dev/null
+++ b/spec/rubocop/cop/rspec/missing_feature_category_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'rubocop_spec_helper'
+require_relative '../../../../rubocop/cop/rspec/missing_feature_category'
+
+RSpec.describe RuboCop::Cop::RSpec::MissingFeatureCategory, feature_category: :tooling do
+ it 'flags missing feature category in top level example group' do
+ expect_offense(<<~RUBY)
+ RSpec.describe 'foo' do
+ ^^^^^^^^^^^^^^^^^^^^^^^ Please add missing feature category. See https://docs.gitlab.com/ee/development/feature_categorization/#rspec-examples.
+ end
+
+ RSpec.describe 'foo', some: :tag do
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Please add missing feature category. See https://docs.gitlab.com/ee/development/feature_categorization/#rspec-examples.
+ end
+ RUBY
+ end
+
+ it 'does not flag if feature category is defined' do
+ expect_no_offenses(<<~RUBY)
+ RSpec.describe 'foo', feature_category: :foo do
+ end
+
+ RSpec.describe 'foo', some: :tag, feature_category: :foo do
+ end
+
+ RSpec.describe 'foo', feature_category: :foo, some: :tag do
+ end
+ RUBY
+ end
+end
diff --git a/spec/services/ci/pipeline_creation/cancel_redundant_pipelines_service_spec.rb b/spec/services/ci/pipeline_creation/cancel_redundant_pipelines_service_spec.rb
new file mode 100644
index 00000000000..402bc2faa81
--- /dev/null
+++ b/spec/services/ci/pipeline_creation/cancel_redundant_pipelines_service_spec.rb
@@ -0,0 +1,250 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Ci::PipelineCreation::CancelRedundantPipelinesService, feature_category: :continuous_integration do
+ let_it_be(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+
+ let(:prev_pipeline) { create(:ci_pipeline, project: project) }
+ let!(:new_commit) { create(:commit, project: project) }
+ let(:pipeline) { create(:ci_pipeline, project: project, sha: new_commit.sha) }
+
+ let(:service) { described_class.new(pipeline) }
+
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: prev_pipeline)
+ create(:ci_build, :interruptible, :success, pipeline: prev_pipeline)
+ create(:ci_build, :created, pipeline: prev_pipeline)
+
+ create(:ci_build, :interruptible, pipeline: pipeline)
+ end
+
+ describe '#execute!' do
+ subject(:execute) { service.execute }
+
+ context 'when build statuses are set up correctly' do
+ it 'has builds of all statuses' do
+ expect(build_statuses(prev_pipeline)).to contain_exactly('running', 'success', 'created')
+ expect(build_statuses(pipeline)).to contain_exactly('pending')
+ end
+ end
+
+ context 'when auto-cancel is enabled' do
+ before do
+ project.update!(auto_cancel_pending_pipelines: 'enabled')
+ end
+
+ it 'cancels only previous interruptible builds' do
+ execute
+
+ expect(build_statuses(prev_pipeline)).to contain_exactly('canceled', 'success', 'canceled')
+ expect(build_statuses(pipeline)).to contain_exactly('pending')
+ end
+
+ it 'logs canceled pipelines' do
+ allow(Gitlab::AppLogger).to receive(:info)
+
+ execute
+
+ expect(Gitlab::AppLogger).to have_received(:info).with(
+ class: described_class.name,
+ message: "Pipeline #{pipeline.id} auto-canceling pipeline #{prev_pipeline.id}",
+ canceled_pipeline_id: prev_pipeline.id,
+ canceled_by_pipeline_id: pipeline.id,
+ canceled_by_pipeline_source: pipeline.source
+ )
+ end
+
+ it 'cancels the builds with 2 queries to avoid query timeout' do
+ second_query_regex = /WHERE "ci_pipelines"\."id" = \d+ AND \(NOT EXISTS/
+ recorder = ActiveRecord::QueryRecorder.new { execute }
+ second_query = recorder.occurrences.keys.filter { |occ| occ =~ second_query_regex }
+
+ expect(second_query).to be_one
+ end
+
+ context 'when the previous pipeline has a child pipeline' do
+ let(:child_pipeline) { create(:ci_pipeline, child_of: prev_pipeline) }
+
+ context 'with another nested child pipeline' do
+ let(:another_child_pipeline) { create(:ci_pipeline, child_of: child_pipeline) }
+
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: another_child_pipeline)
+ create(:ci_build, :interruptible, :running, pipeline: another_child_pipeline)
+ end
+
+ it 'cancels all nested child pipeline builds' do
+ expect(build_statuses(another_child_pipeline)).to contain_exactly('running', 'running')
+
+ execute
+
+ expect(build_statuses(another_child_pipeline)).to contain_exactly('canceled', 'canceled')
+ end
+ end
+
+ context 'when started after pipeline was finished' do
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
+ prev_pipeline.update!(status: "success")
+ end
+
+ it 'cancels child pipeline builds' do
+ expect(build_statuses(child_pipeline)).to contain_exactly('running')
+
+ execute
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('canceled')
+ end
+ end
+
+ context 'when the child pipeline has interruptible running jobs' do
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
+ create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
+ end
+
+ it 'cancels all child pipeline builds' do
+ expect(build_statuses(child_pipeline)).to contain_exactly('running', 'running')
+
+ execute
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('canceled', 'canceled')
+ end
+
+ context 'when the child pipeline includes completed interruptible jobs' do
+ before do
+ create(:ci_build, :interruptible, :failed, pipeline: child_pipeline)
+ create(:ci_build, :interruptible, :success, pipeline: child_pipeline)
+ end
+
+ it 'cancels all child pipeline builds with a cancelable_status' do
+ expect(build_statuses(child_pipeline)).to contain_exactly('running', 'running', 'failed', 'success')
+
+ execute
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('canceled', 'canceled', 'failed', 'success')
+ end
+ end
+ end
+
+ context 'when the child pipeline has started non-interruptible job' do
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
+ # non-interruptible started
+ create(:ci_build, :success, pipeline: child_pipeline)
+ end
+
+ it 'does not cancel any child pipeline builds' do
+ expect(build_statuses(child_pipeline)).to contain_exactly('running', 'success')
+
+ execute
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('running', 'success')
+ end
+ end
+
+ context 'when the child pipeline has non-interruptible non-started job' do
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
+ end
+
+ not_started_statuses = Ci::HasStatus::AVAILABLE_STATUSES - Ci::HasStatus::STARTED_STATUSES
+ context 'when the jobs are cancelable' do
+ cancelable_not_started_statuses =
+ Set.new(not_started_statuses).intersection(Ci::HasStatus::CANCELABLE_STATUSES)
+ cancelable_not_started_statuses.each do |status|
+ it "cancels all child pipeline builds when build status #{status} included" do
+ # non-interruptible but non-started
+ create(:ci_build, status.to_sym, pipeline: child_pipeline)
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('running', status)
+
+ execute
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('canceled', 'canceled')
+ end
+ end
+ end
+
+ context 'when the jobs are not cancelable' do
+ not_cancelable_not_started_statuses = not_started_statuses - Ci::HasStatus::CANCELABLE_STATUSES
+ not_cancelable_not_started_statuses.each do |status|
+ it "does not cancel child pipeline builds when build status #{status} included" do
+ # non-interruptible but non-started
+ create(:ci_build, status.to_sym, pipeline: child_pipeline)
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('running', status)
+
+ execute
+
+ expect(build_statuses(child_pipeline)).to contain_exactly('canceled', status)
+ end
+ end
+ end
+ end
+ end
+
+ context 'when the pipeline is a child pipeline' do
+ let!(:parent_pipeline) { create(:ci_pipeline, project: project, sha: new_commit.sha) }
+ let(:pipeline) { create(:ci_pipeline, child_of: parent_pipeline) }
+
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: parent_pipeline)
+ create(:ci_build, :interruptible, :running, pipeline: parent_pipeline)
+ end
+
+ it 'does not cancel any builds' do
+ expect(build_statuses(prev_pipeline)).to contain_exactly('running', 'success', 'created')
+ expect(build_statuses(parent_pipeline)).to contain_exactly('running', 'running')
+
+ execute
+
+ expect(build_statuses(prev_pipeline)).to contain_exactly('running', 'success', 'created')
+ expect(build_statuses(parent_pipeline)).to contain_exactly('running', 'running')
+ end
+ end
+
+ context 'when the previous pipeline source is webide' do
+ let(:prev_pipeline) { create(:ci_pipeline, :webide, project: project) }
+
+ it 'does not cancel builds of the previous pipeline' do
+ execute
+
+ expect(build_statuses(prev_pipeline)).to contain_exactly('created', 'running', 'success')
+ expect(build_statuses(pipeline)).to contain_exactly('pending')
+ end
+ end
+
+ it 'does not cancel future pipelines' do
+ expect(prev_pipeline.id).to be < pipeline.id
+ expect(build_statuses(pipeline)).to contain_exactly('pending')
+ expect(build_statuses(prev_pipeline)).to contain_exactly('running', 'success', 'created')
+
+ described_class.new(prev_pipeline).execute
+
+ expect(build_statuses(pipeline.reload)).to contain_exactly('pending')
+ end
+ end
+
+ context 'when auto-cancel is disabled' do
+ before do
+ project.update!(auto_cancel_pending_pipelines: 'disabled')
+ end
+
+ it 'does not cancel any build' do
+ subject
+
+ expect(build_statuses(prev_pipeline)).to contain_exactly('running', 'success', 'created')
+ expect(build_statuses(pipeline)).to contain_exactly('pending')
+ end
+ end
+ end
+
+ private
+
+ def build_statuses(pipeline)
+ pipeline.builds.pluck(:status)
+ end
+end
diff --git a/spec/services/merge_requests/build_service_spec.rb b/spec/services/merge_requests/build_service_spec.rb
index 79c779678a4..0fcfc16af73 100644
--- a/spec/services/merge_requests/build_service_spec.rb
+++ b/spec/services/merge_requests/build_service_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-RSpec.describe MergeRequests::BuildService do
+RSpec.describe MergeRequests::BuildService, feature_category: :code_review_workflow do
using RSpec::Parameterized::TableSyntax
include RepoHelpers
include ProjectForksHelper
diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb
index 8eccb9e41bb..257e7eb972b 100644
--- a/spec/services/quick_actions/interpret_service_spec.rb
+++ b/spec/services/quick_actions/interpret_service_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe QuickActions::InterpretService do
+RSpec.describe QuickActions::InterpretService, feature_category: :team_planning do
include AfterNextHelpers
let_it_be(:group) { create(:group, :crm_enabled) }
diff --git a/spec/services/todos/destroy/entity_leave_service_spec.rb b/spec/services/todos/destroy/entity_leave_service_spec.rb
index 9d5ed70e9ef..1ced2eda799 100644
--- a/spec/services/todos/destroy/entity_leave_service_spec.rb
+++ b/spec/services/todos/destroy/entity_leave_service_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Todos::Destroy::EntityLeaveService do
+RSpec.describe Todos::Destroy::EntityLeaveService, feature_category: :team_planning do
let_it_be(:user, reload: true) { create(:user) }
let_it_be(:user2, reload: true) { create(:user) }
let_it_be_with_refind(:group) { create(:group, :private) }
diff --git a/spec/support/shared_examples/features/runners_shared_examples.rb b/spec/support/shared_examples/features/runners_shared_examples.rb
index 20078243cfb..63a0832117d 100644
--- a/spec/support/shared_examples/features/runners_shared_examples.rb
+++ b/spec/support/shared_examples/features/runners_shared_examples.rb
@@ -178,6 +178,22 @@ RSpec.shared_examples 'filters by tag' do
end
end
+RSpec.shared_examples 'shows runner jobs tab' do
+ context 'when clicking on jobs tab' do
+ before do
+ click_on("#{s_('Runners|Jobs')} #{job_count}")
+
+ wait_for_requests
+ end
+
+ it 'shows job in list' do
+ within "[data-testid='job-row-#{job.id}']" do
+ expect(page).to have_link("##{job.id}")
+ end
+ end
+ end
+end
+
RSpec.shared_examples 'submits edit runner form' do
it 'breadcrumb contains runner id and token' do
page.within '[data-testid="breadcrumb-links"]' do
diff --git a/spec/workers/ci/cancel_redundant_pipelines_worker_spec.rb b/spec/workers/ci/cancel_redundant_pipelines_worker_spec.rb
new file mode 100644
index 00000000000..f6639faab10
--- /dev/null
+++ b/spec/workers/ci/cancel_redundant_pipelines_worker_spec.rb
@@ -0,0 +1,54 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Ci::CancelRedundantPipelinesWorker, feature_category: :continuous_integration do
+ let_it_be(:project) { create(:project) }
+
+ let(:prev_pipeline) { create(:ci_pipeline, project: project) }
+ let(:pipeline) { create(:ci_pipeline, project: project) }
+
+ describe '#perform' do
+ subject(:perform) { described_class.new.perform(pipeline.id) }
+
+ let(:service) { instance_double('Ci::PipelineCreation::CancelRedundantPipelinesService') }
+
+ it 'calls cancel redundant pipeline service' do
+ expect(Ci::PipelineCreation::CancelRedundantPipelinesService)
+ .to receive(:new)
+ .with(pipeline)
+ .and_return(service)
+
+ expect(service).to receive(:execute)
+
+ perform
+ end
+
+ context 'if pipeline is deleted' do
+ subject(:perform) { described_class.new.perform(non_existing_record_id) }
+
+ it 'does not call redundant pipeline service' do
+ expect(Ci::PipelineCreation::CancelRedundantPipelinesService)
+ .not_to receive(:new)
+
+ perform
+ end
+ end
+
+ describe 'interacting with previous pending pipelines', :sidekiq_inline do
+ before do
+ create(:ci_build, :interruptible, :running, pipeline: prev_pipeline)
+ end
+
+ it_behaves_like 'an idempotent worker', :sidekiq_inline do
+ let(:job_args) { pipeline }
+
+ it 'cancels the previous pending pipeline' do
+ perform
+
+ expect(prev_pipeline.builds.pluck(:status)).to contain_exactly('canceled')
+ end
+ end
+ end
+ end
+end