diff options
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 |