From eb76ded04a14a281b34ffe83f81b607e0c865b92 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 8 Apr 2025 09:11:58 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../lint/assignment_in_condition.yml | 1 - .../rspec/example_without_description.yml | 1 - .rubocop_todo/rspec/named_subject.yml | 1 - .../components/runner_assigned_item.vue | 31 +- .../ci/runner/components/runner_groups.vue | 16 +- .../ci/runner/components/runner_projects.vue | 62 +- .../projects/compare/rapid_diffs/index.js | 5 + .../page_bundles/compare_rapid_diffs.scss | 6 + app/controllers/concerns/uploads_actions.rb | 7 +- .../projects/compare_controller.rb | 5 + app/finders/todos_finder.rb | 14 + .../work_items/glql/work_items_finder.rb | 21 + app/graphql/resolvers/work_items_resolver.rb | 25 +- app/models/ci/build.rb | 1 - app/models/commit_status.rb | 2 + .../ci/create_commit_status_service.rb | 78 +- app/views/admin/runners/edit.html.haml | 2 +- app/views/layouts/_page.html.haml | 2 +- app/views/layouts/project.html.haml | 2 +- .../projects/compare/rapid_diffs.html.haml | 5 +- config/events/create_pipeline_with_inputs.yml | 24 + config/events/request_todos_by_bot_user.yml | 20 + .../ci_limit_commit_statuses.yml | 9 + .../gitlab_com_derisk/glql_es_integration.yml | 9 + ...ct_id_from_create_pipeline_with_inputs.yml | 23 + ...user_id_from_request_todos_by_bot_user.yml | 23 + .../15-9-insecure-ci-job-token.yml | 8 +- .../16-5-ci-job-token-limit-setting.yml | 2 +- ...iption_limit_on_compliance_requirements.rb | 16 + ...seat_assignment_organization_id_default.rb | 9 + ...p_ci_stages_and_p_ci_pipelines_attempt3.rb | 31 + db/schema_migrations/20250320005730 | 1 + db/schema_migrations/20250328135136 | 1 + db/schema_migrations/20250404212646 | 1 + db/schema_migrations/20250407043340 | 1 + db/structure.sql | 4 +- doc/api/broadcast_messages.md | 2 +- doc/api/database_migrations.md | 6 +- doc/api/events.md | 4 +- doc/api/experiments.md | 8 +- doc/api/model_registry.md | 2 + doc/api/openapi/openapi_v2.yaml | 52 + doc/api/packages/conan_v2.md | 61 +- doc/api/usage_data.md | 2 +- doc/ci/jobs/fine_grained_permissions.md | 1 + doc/update/breaking_windows.md | 4 +- doc/update/deprecations.md | 4 +- doc/update/versions/gitlab_17_changes.md | 13 + .../repository/code_suggestions/_index.md | 1 + lib/api/conan/v2/project_packages.rb | 19 + .../packages/conan/recipe_revisions.rb | 28 + lib/gitlab/ci/pipeline/chain/metrics.rb | 18 + locale/gitlab.pot | 3 + .../example_runtimes/master_report.json | 1028 ++++++++--------- qa/knapsack/master_report.json | 566 ++++----- scripts/frontend/quarantined_vue3_specs.txt | 1 - .../projects/usage_quotas/storage_tab_spec.rb | 36 + spec/finders/todos_finder_spec.rb | 11 + .../work_items/glql/work_items_finder_spec.rb | 25 + .../components/runner_assigned_item_spec.js | 10 +- .../runner/components/runner_groups_spec.js | 12 +- .../runner/components/runner_projects_spec.js | 19 +- .../components/model_version_create_spec.js | 1 + .../resolvers/work_items_resolver_spec.rb | 40 +- .../packages/conan/recipe_revision_spec.rb | 2 +- .../packages/conan/recipe_revisions_spec.rb | 35 + .../gitlab/ci/pipeline/chain/metrics_spec.rb | 31 + spec/models/application_setting_spec.rb | 298 ++--- spec/models/ci/build_spec.rb | 26 - spec/models/commit_status_spec.rb | 40 +- .../api/conan/v2/project_packages_spec.rb | 38 + .../ci/create_commit_status_service_spec.rb | 76 ++ ...create_downstream_pipeline_service_spec.rb | 27 +- .../ci/create_pipeline_service/inputs_spec.rb | 17 + spec/views/layouts/_page.html.haml_spec.rb | 34 +- .../run_pipeline_schedule_worker_spec.rb | 36 + 76 files changed, 1989 insertions(+), 1117 deletions(-) create mode 100644 app/assets/stylesheets/page_bundles/compare_rapid_diffs.scss create mode 100644 app/finders/work_items/glql/work_items_finder.rb create mode 100644 config/events/create_pipeline_with_inputs.yml create mode 100644 config/events/request_todos_by_bot_user.yml create mode 100644 config/feature_flags/gitlab_com_derisk/ci_limit_commit_statuses.yml create mode 100644 config/feature_flags/gitlab_com_derisk/glql_es_integration.yml create mode 100644 config/metrics/counts_all/count_distinct_project_id_from_create_pipeline_with_inputs.yml create mode 100644 config/metrics/counts_all/count_distinct_user_id_from_request_todos_by_bot_user.yml create mode 100644 db/migrate/20250404212646_increase_description_limit_on_compliance_requirements.rb create mode 100644 db/post_migrate/20250328135136_remove_subscription_seat_assignment_organization_id_default.rb create mode 100644 db/post_migrate/20250407043340_remove_broken_fk_for_p_ci_stages_and_p_ci_pipelines_attempt3.rb create mode 100644 db/schema_migrations/20250328135136 create mode 100644 db/schema_migrations/20250404212646 create mode 100644 db/schema_migrations/20250407043340 create mode 100644 lib/api/entities/packages/conan/recipe_revisions.rb create mode 100644 spec/features/projects/usage_quotas/storage_tab_spec.rb create mode 100644 spec/finders/work_items/glql/work_items_finder_spec.rb create mode 100644 spec/lib/api/entities/packages/conan/recipe_revisions_spec.rb diff --git a/.rubocop_todo/lint/assignment_in_condition.yml b/.rubocop_todo/lint/assignment_in_condition.yml index fee7c4b88b2..b94b7766482 100644 --- a/.rubocop_todo/lint/assignment_in_condition.yml +++ b/.rubocop_todo/lint/assignment_in_condition.yml @@ -2,7 +2,6 @@ # Cop supports --autocorrect. Lint/AssignmentInCondition: Exclude: - - 'app/controllers/concerns/uploads_actions.rb' - 'app/controllers/concerns/verifies_with_email.rb' - 'app/controllers/omniauth_callbacks_controller.rb' - 'app/controllers/projects/commit_controller.rb' diff --git a/.rubocop_todo/rspec/example_without_description.yml b/.rubocop_todo/rspec/example_without_description.yml index 077e3bcd94e..2ddd0e4e305 100644 --- a/.rubocop_todo/rspec/example_without_description.yml +++ b/.rubocop_todo/rspec/example_without_description.yml @@ -381,7 +381,6 @@ RSpec/ExampleWithoutDescription: - '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/application_setting_spec.rb' - 'spec/models/board_spec.rb' - 'spec/models/bulk_imports/entity_spec.rb' - 'spec/models/bulk_imports/tracker_spec.rb' diff --git a/.rubocop_todo/rspec/named_subject.yml b/.rubocop_todo/rspec/named_subject.yml index 6f7c3b4e506..1afe24e2e20 100644 --- a/.rubocop_todo/rspec/named_subject.yml +++ b/.rubocop_todo/rspec/named_subject.yml @@ -2304,7 +2304,6 @@ RSpec/NamedSubject: - 'spec/models/alert_management/alert_spec.rb' - 'spec/models/alerting/project_alerting_setting_spec.rb' - 'spec/models/analytics/usage_trends/measurement_spec.rb' - - 'spec/models/application_setting_spec.rb' - 'spec/models/audit_event_spec.rb' - 'spec/models/aws/role_spec.rb' - 'spec/models/blob_spec.rb' diff --git a/app/assets/javascripts/ci/runner/components/runner_assigned_item.vue b/app/assets/javascripts/ci/runner/components/runner_assigned_item.vue index 5ea935cec5f..20a566d12f6 100644 --- a/app/assets/javascripts/ci/runner/components/runner_assigned_item.vue +++ b/app/assets/javascripts/ci/runner/components/runner_assigned_item.vue @@ -1,10 +1,11 @@ diff --git a/app/assets/javascripts/ci/runner/components/runner_groups.vue b/app/assets/javascripts/ci/runner/components/runner_groups.vue index c80507db9c2..46876b92a67 100644 --- a/app/assets/javascripts/ci/runner/components/runner_groups.vue +++ b/app/assets/javascripts/ci/runner/components/runner_groups.vue @@ -1,8 +1,10 @@ diff --git a/app/assets/javascripts/ci/runner/components/runner_projects.vue b/app/assets/javascripts/ci/runner/components/runner_projects.vue index a2f13fd60ec..6290e917494 100644 --- a/app/assets/javascripts/ci/runner/components/runner_projects.vue +++ b/app/assets/javascripts/ci/runner/components/runner_projects.vue @@ -1,10 +1,9 @@ diff --git a/app/assets/javascripts/pages/projects/compare/rapid_diffs/index.js b/app/assets/javascripts/pages/projects/compare/rapid_diffs/index.js index b86c9ec442f..83cd9b695d8 100644 --- a/app/assets/javascripts/pages/projects/compare/rapid_diffs/index.js +++ b/app/assets/javascripts/pages/projects/compare/rapid_diffs/index.js @@ -1,3 +1,8 @@ import initCompareSelector from '~/projects/compare'; +import { createRapidDiffsApp } from '~/rapid_diffs/app'; initCompareSelector(); + +const app = createRapidDiffsApp(); +app.init(); +app.reloadDiffs(); diff --git a/app/assets/stylesheets/page_bundles/compare_rapid_diffs.scss b/app/assets/stylesheets/page_bundles/compare_rapid_diffs.scss new file mode 100644 index 00000000000..d6065590145 --- /dev/null +++ b/app/assets/stylesheets/page_bundles/compare_rapid_diffs.scss @@ -0,0 +1,6 @@ +@import 'mixins_and_variables_and_functions'; +@import 'components/rapid_diffs'; + +.rd-app { + --rd-app-sticky-top: calc(#{$calc-application-header-height}); +} diff --git a/app/controllers/concerns/uploads_actions.rb b/app/controllers/concerns/uploads_actions.rb index cabc2e77cea..9a2450da8a1 100644 --- a/app/controllers/concerns/uploads_actions.rb +++ b/app/controllers/concerns/uploads_actions.rb @@ -80,8 +80,8 @@ module UploadsActions # behavior when serving uploads. def set_request_format_from_path_extension path = request.headers['action_dispatch.original_path'] || request.headers['PATH_INFO'] - - return unless match = path&.match(/\.(\w+)\z/) + match = path&.match(/\.(\w+)\z/) + return unless match format = Mime[match.captures.first] @@ -120,7 +120,8 @@ module UploadsActions # rubocop: disable CodeReuse/ActiveRecord def build_uploader_from_upload - return unless uploader = build_uploader + uploader = build_uploader + return unless uploader upload_paths = uploader.upload_paths(params[:filename]) upload = Upload.find_by(model: model, uploader: uploader_class.to_s, path: upload_paths) diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 3157d7ab6f8..328573c5a3a 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -80,6 +80,11 @@ class Projects::CompareController < Projects::ApplicationController def rapid_diffs return render_404 unless ::Feature.enabled?(:rapid_diffs, current_user, type: :wip) + @show_whitespace_default = current_user.nil? || current_user.show_whitespace_in_diffs + @reload_stream_url = diffs_stream_namespace_project_compare_index_path(**compare_params) + @diff_files_endpoint = diff_files_metadata_namespace_project_compare_index_path(**compare_params) + @update_current_user_path = expose_path(api_v4_user_preferences_path) + show end diff --git a/app/finders/todos_finder.rb b/app/finders/todos_finder.rb index 22ccb3bebdc..2b914b1709f 100644 --- a/app/finders/todos_finder.rb +++ b/app/finders/todos_finder.rb @@ -21,6 +21,7 @@ class TodosFinder include FinderMethods include Gitlab::Utils::StrongMemoize include SafeFormatHelper + include Gitlab::InternalEventsTracking requires_cross_project_access unless: -> { project? } @@ -48,6 +49,8 @@ class TodosFinder return Todo.none if current_user.nil? raise ArgumentError, invalid_type_message unless valid_types? + track_bot_user if current_user.bot? + items = current_user.todos items = without_hidden(items) items = by_action_id(items) @@ -261,6 +264,17 @@ class TodosFinder def filter_done_only? Array.wrap(params[:state]).map(&:to_sym) == [:done] end + + def track_bot_user + track_internal_event( + "request_todos_by_bot_user", + user: current_user, + additional_properties: { + label: 'user_type', + property: current_user.user_type + } + ) + end end TodosFinder.prepend_mod_with('TodosFinder') diff --git a/app/finders/work_items/glql/work_items_finder.rb b/app/finders/work_items/glql/work_items_finder.rb new file mode 100644 index 00000000000..4b44ddaebc7 --- /dev/null +++ b/app/finders/work_items/glql/work_items_finder.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module WorkItems + module Glql + class WorkItemsFinder + def initialize(current_user, context, resource_parent, params = {}) + @current_user = current_user + @context = context + @resource_parent = resource_parent + @params = params + end + + # Overwritten in ee/app/finders/ee/work_items/glql/work_items_finder.rb + def use_elasticsearch_finder? + false + end + end + end +end + +WorkItems::Glql::WorkItemsFinder.prepend_mod diff --git a/app/graphql/resolvers/work_items_resolver.rb b/app/graphql/resolvers/work_items_resolver.rb index d352ef90adf..7cc7c49e836 100644 --- a/app/graphql/resolvers/work_items_resolver.rb +++ b/app/graphql/resolvers/work_items_resolver.rb @@ -21,14 +21,31 @@ module Resolvers def resolve_with_lookahead(**args) return WorkItem.none if resource_parent.nil? - Gitlab::Graphql::Loaders::IssuableLoader.new( - resource_parent, - finder(prepare_finder_params(args)) - ).batching_find_all { |q| apply_lookahead(q) } + finder = choose_finder(args) + + Gitlab::Graphql::Loaders::IssuableLoader + .new(resource_parent, finder) + .batching_find_all { |q| apply_lookahead(q) } end private + def choose_finder(args) + if ::Feature.enabled?(:glql_es_integration, current_user) + glql_finder = glql_finder(args) + + return glql_finder if glql_finder.use_elasticsearch_finder? + end + + finder(prepare_finder_params(args)) + end + + def glql_finder(args) + ::WorkItems::Glql::WorkItemsFinder.new(current_user, context, resource_parent, args) + end + + # When we search on a group level, this finder is being overwritten in + # app/graphql/resolvers/namespaces/work_items_resolver.rb:32 def finder(args) ::WorkItems::WorkItemsFinder.new(current_user, args) end diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index c940f8dae0b..3b062b14709 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -179,7 +179,6 @@ module Ci scope :with_pipeline_locked_artifacts, -> { joins(:pipeline).where('pipeline.locked': Ci::Pipeline.lockeds[:artifacts_locked]) } scope :last_month, -> { where('created_at > ?', Date.today - 1.month) } scope :scheduled_actions, -> { where(when: :delayed, status: COMPLETED_STATUSES + %i[scheduled]) } - scope :ref_protected, -> { where(protected: true) } scope :with_live_trace, -> { where_exists(Ci::BuildTraceChunk.scoped_build) } scope :with_stale_live_trace, -> { with_live_trace.finished_before(12.hours.ago) } scope :finished_before, ->(date) { finished.where('finished_at < ?', date) } diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index b1cdf044637..74589a3cbf0 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -70,6 +70,7 @@ class CommitStatus < Ci::ApplicationRecord scope :after_stage, ->(index) { where('stage_idx > ?', index) } scope :for_project, ->(project_id) { where(project_id: project_id) } scope :for_ref, ->(ref) { where(ref: ref) } + scope :for_user, ->(user) { where(user: user) } scope :by_name, ->(name) { where(name: name) } scope :in_pipelines, ->(pipelines) { where(pipeline: pipelines) } scope :with_pipeline, -> { joins(:pipeline) } @@ -80,6 +81,7 @@ class CommitStatus < Ci::ApplicationRecord } scope :with_when_executed, ->(when_executed) { where(when: when_executed) } scope :with_type, ->(type) { where(type: type) } + scope :ref_protected, -> { where(protected: true) } # The scope applies `pluck` to split the queries. Use with care. scope :for_project_paths, ->(paths) do diff --git a/app/services/ci/create_commit_status_service.rb b/app/services/ci/create_commit_status_service.rb index 3c8c0fa1a71..4329a6f050d 100644 --- a/app/services/ci/create_commit_status_service.rb +++ b/app/services/ci/create_commit_status_service.rb @@ -26,7 +26,7 @@ module Ci result = validate return result if result&.error? - @pipeline = first_matching_pipeline || create_pipeline + @pipeline = find_or_create_pipeline return forbidden unless ::Ability.allowed?(current_user, :update_pipeline, pipeline) @stage = find_or_create_external_stage @@ -46,9 +46,13 @@ module Ci return bad_request('State is required') if params[:state].blank? return not_found('References for commit') if ref.blank? - return unless params[:pipeline_id] && !first_matching_pipeline + return unless params[:pipeline_id] - not_found("Pipeline for pipeline_id, sha and ref") + return not_found("Pipeline for pipeline_id, sha and ref") unless first_matching_pipeline + + return if can_append_jobs_to_existing_pipeline? + + error("The number of jobs has exceeded the limit", :unprocessable_entity) end def ref @@ -62,6 +66,23 @@ module Ci end strong_memoize_attr :commit + def find_or_create_pipeline + return create_pipeline unless first_matching_pipeline + return first_matching_pipeline if can_append_jobs_to_existing_pipeline? + + create_log_entry + + enforce_jobs_limit? ? create_pipeline : first_matching_pipeline + end + + def can_append_jobs_to_existing_pipeline? + return true unless first_matching_pipeline_size_exceeded? + return true if external_commit_status_exists? + + false + end + strong_memoize_attr :can_append_jobs_to_existing_pipeline? + def first_matching_pipeline limit = params[:pipeline_id] ? nil : DEFAULT_LIMIT_PIPELINES pipelines = project.ci_pipelines.newest_first(sha: sha, limit: limit) @@ -71,6 +92,13 @@ module Ci end strong_memoize_attr :first_matching_pipeline + def first_matching_pipeline_size_exceeded? + project + .actual_limits + .exceeded?(:ci_pipeline_size, first_matching_pipeline.all_jobs) + end + strong_memoize_attr :first_matching_pipeline_size_exceeded? + def name params[:name] || params[:context] || 'default' end @@ -99,22 +127,32 @@ module Ci end end + def external_commit_status_exists? + external_commit_status_scope(first_matching_pipeline).any? + end + def find_or_build_external_commit_status - ::GenericCommitStatus.running_or_pending.find_or_initialize_by( # rubocop:disable CodeReuse/ActiveRecord - project: project, - pipeline: pipeline, - name: name, - ref: ref, - user: current_user, - protected: project.protected_for?(ref), + external_commit_status_scope(pipeline).find_or_initialize_by( # rubocop:disable CodeReuse/ActiveRecord ci_stage: stage, - stage_idx: stage.position, - partition_id: pipeline.partition_id + stage_idx: stage.position ).tap do |new_commit_status| new_commit_status.assign_attributes(optional_commit_status_params) end end + def external_commit_status_scope(pipeline) + scope = ::GenericCommitStatus + .running_or_pending + .for_project(project.id) + .in_pipelines(pipeline) + .in_partition(pipeline.partition_id) + .for_ref(ref) + .by_name(name) + .for_user(current_user) + scope = scope.ref_protected if project.protected_for?(ref) + scope + end + def add_or_update_external_job ::Ci::Pipelines::AddJobService.new(pipeline).execute!(commit_status) do |job| apply_job_state!(job) @@ -153,6 +191,22 @@ module Ci } end + def create_log_entry + Gitlab::AppJsonLogger.info( + class: self.class.name, + namespace_id: project.namespace_id, + project_id: project.id, + current_user_id: current_user.id, + subscription_plan: project.actual_plan_name, + message: 'Project tried to create more jobs than the quota allowed', + limit_enforced: enforce_jobs_limit? + ) + end + + def enforce_jobs_limit? + Feature.enabled?(:ci_limit_commit_statuses, project) + end + def not_found(message) error("404 #{message} Not Found", :not_found) end diff --git a/app/views/admin/runners/edit.html.haml b/app/views/admin/runners/edit.html.haml index 6eead81ab64..652385ee090 100644 --- a/app/views/admin/runners/edit.html.haml +++ b/app/views/admin/runners/edit.html.haml @@ -10,7 +10,7 @@ = render ::Layouts::SettingsSectionComponent.new(_('Restrict projects for this runner'), options: { class: 'gl-mt-7 gl-pt-6 gl-border-t' }) do |c| - c.with_body do .gl-flex.gl-flex-col.gl-gap-5 - = render ::Layouts::CrudComponent.new(_('Assigned projects')) do |c| + = render ::Layouts::CrudComponent.new(_('Assigned projects'), icon: 'project', count: @runner.runner_projects.count) do |c| - c.with_body do - if @runner.runner_projects.any? %ul.content-list{ data: { testid: 'assigned-projects' } } diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml index ced191d5bcf..671dba282e1 100644 --- a/app/views/layouts/_page.html.haml +++ b/app/views/layouts/_page.html.haml @@ -14,7 +14,7 @@ -# Broadcast messages .broadcast-wrapper = dispensable_render_if_exists "shared/token_expiration_banner" - = dispensable_render "layouts/broadcast" + = dispensable_render "layouts/broadcast" unless content_for(:hide_broadcast_messages).present? = yield :group_invite_members_banner -# Alerts diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml index 41d33f6a563..ff818aea5b9 100644 --- a/app/views/layouts/project.html.haml +++ b/app/views/layouts/project.html.haml @@ -26,6 +26,6 @@ = dispensable_render_if_exists "projects/importing_alert", project: @project = dispensable_render_if_exists "shared/web_hooks/web_hook_disabled_alert" = dispensable_render_if_exists "projects/free_user_cap_alert", project: @project -= dispensable_render_if_exists 'shared/unlimited_members_during_trial_alert', resource: @project += dispensable_render_if_exists 'shared/unlimited_members_during_trial_alert', resource: @project unless content_for(:hide_unlimited_members_during_trial_alert).present? = render template: "layouts/application" diff --git a/app/views/projects/compare/rapid_diffs.html.haml b/app/views/projects/compare/rapid_diffs.html.haml index cf726ab446d..abeabfe53ec 100644 --- a/app/views/projects/compare/rapid_diffs.html.haml +++ b/app/views/projects/compare/rapid_diffs.html.haml @@ -5,6 +5,8 @@ - has_diff = @commits.present? || @diffs.present? && @diffs.diff_files.present? -# Only show commit list in the first page - hide_commit_list = params[:page].present? && params[:page] != '1' +- add_page_specific_style 'page_bundles/merge_requests' +- add_page_specific_style 'page_bundles/compare_rapid_diffs' .container-fluid{ class: [container_class] } .gl-border-b-0.gl-mb-0.gl-pt-4 @@ -15,7 +17,8 @@ .container-fluid{ class: [container_class] } = render "projects/commits/commit_list" unless hide_commit_list .container-fluid - = render RapidDiffs::DiffFileComponent.with_collection(@diffs.diff_files, parallel_view: diff_view == :parallel) + - args = { diffs_slice: nil, reload_stream_url: @reload_stream_url, stream_url: nil, show_whitespace: @show_whitespace_default, diff_view: diff_view, metadata_endpoint: nil, update_user_endpoint: @update_current_user_path, diff_files_endpoint: @diff_files_endpoint, lazy: true } + = render ::RapidDiffs::AppComponent.new(**args) - else .container-fluid = render Pajamas::CardComponent.new(card_options: { class: "gl-bg-subtle" }) do |c| diff --git a/config/events/create_pipeline_with_inputs.yml b/config/events/create_pipeline_with_inputs.yml new file mode 100644 index 00000000000..50979f11ba2 --- /dev/null +++ b/config/events/create_pipeline_with_inputs.yml @@ -0,0 +1,24 @@ +--- +description: Using inputs when creating a pipeline +internal_events: true +action: create_pipeline_with_inputs +identifiers: +- project +- namespace +- user +additional_properties: + label: + description: The source of the pipeline, e.g. push, merge_request, schedule, etc. + property: + description: The source of the config, e.g. repository_source, auto_devops_source, etc. + value: + description: Number of inputs passed from the user +product_group: pipeline_authoring +product_categories: +- pipeline_composition +milestone: '17.11' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186735 +tiers: +- free +- premium +- ultimate diff --git a/config/events/request_todos_by_bot_user.yml b/config/events/request_todos_by_bot_user.yml new file mode 100644 index 00000000000..e9e45d4fcfd --- /dev/null +++ b/config/events/request_todos_by_bot_user.yml @@ -0,0 +1,20 @@ +--- +description: todos accessed by user who is a bot +internal_events: true +action: request_todos_by_bot_user +identifiers: +- user +additional_properties: + label: + description: type of user + property: + description: type of user who requested todos +product_group: personal_productivity +product_categories: +- notifications +milestone: '17.11' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185261 +tiers: +- free +- premium +- ultimate diff --git a/config/feature_flags/gitlab_com_derisk/ci_limit_commit_statuses.yml b/config/feature_flags/gitlab_com_derisk/ci_limit_commit_statuses.yml new file mode 100644 index 00000000000..217e6201f50 --- /dev/null +++ b/config/feature_flags/gitlab_com_derisk/ci_limit_commit_statuses.yml @@ -0,0 +1,9 @@ +--- +name: ci_limit_commit_statuses +feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/436361 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185807 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/526901 +milestone: '17.11' +group: group::ci platform +type: gitlab_com_derisk +default_enabled: false diff --git a/config/feature_flags/gitlab_com_derisk/glql_es_integration.yml b/config/feature_flags/gitlab_com_derisk/glql_es_integration.yml new file mode 100644 index 00000000000..2f8214e60ec --- /dev/null +++ b/config/feature_flags/gitlab_com_derisk/glql_es_integration.yml @@ -0,0 +1,9 @@ +--- +name: glql_es_integration +feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/524326 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185103 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/527280 +milestone: '17.11' +group: group::knowledge +type: gitlab_com_derisk +default_enabled: false diff --git a/config/metrics/counts_all/count_distinct_project_id_from_create_pipeline_with_inputs.yml b/config/metrics/counts_all/count_distinct_project_id_from_create_pipeline_with_inputs.yml new file mode 100644 index 00000000000..0c2b3bda109 --- /dev/null +++ b/config/metrics/counts_all/count_distinct_project_id_from_create_pipeline_with_inputs.yml @@ -0,0 +1,23 @@ +--- +key_path: redis_hll_counters.count_distinct_project_id_from_create_pipeline_with_inputs +description: Count of unique projects that created a CI pipeline with inputs via any source. +product_group: pipeline_authoring +product_categories: +- pipeline_composition +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.11' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186735 +time_frame: +- 28d +- 7d +data_source: internal_events +data_category: optional +tiers: +- free +- premium +- ultimate +events: +- name: create_pipeline_with_inputs + unique: project.id diff --git a/config/metrics/counts_all/count_distinct_user_id_from_request_todos_by_bot_user.yml b/config/metrics/counts_all/count_distinct_user_id_from_request_todos_by_bot_user.yml new file mode 100644 index 00000000000..a878a8df8fa --- /dev/null +++ b/config/metrics/counts_all/count_distinct_user_id_from_request_todos_by_bot_user.yml @@ -0,0 +1,23 @@ +--- +key_path: redis_hll_counters.count_distinct_user_id_from_request_todos_by_bot_user +description: Count of unique users who are bots and who are accessing todos through webui/api endpoint. +product_group: personal_productivity +product_categories: +- notifications +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.11' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185261 +time_frame: +- 28d +- 7d +data_source: internal_events +data_category: optional +tiers: +- free +- premium +- ultimate +events: +- name: request_todos_by_bot_user + unique: user.id diff --git a/data/deprecations/15-9-insecure-ci-job-token.yml b/data/deprecations/15-9-insecure-ci-job-token.yml index 25612e827b9..924dfce7414 100644 --- a/data/deprecations/15-9-insecure-ci-job-token.yml +++ b/data/deprecations/15-9-insecure-ci-job-token.yml @@ -8,9 +8,9 @@ window: 1 impact: high # Can be one of: [critical, high, medium, low] scope: project # Can be one or a combination of: [instance, group, project] - reporter: jheimbuck_gl # (required) GitLab username of the person reporting the deprecation - stage: Verify # (required) String value of the stage that the feature was created in. e.g., Growth - issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/395708 # (required) Link to the deprecation issue in GitLab + reporter: jocelynjane # (required) GitLab username of the person reporting the deprecation + stage: Software Supply Chain Security # (required) String value of the stage that the feature was created in. e.g., Growth + issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/383084 # (required) Link to the deprecation issue in GitLab body: | # (required) Do not modify this line, instead modify the lines below. In GitLab 14.4, we introduced a setting to [limit access _from_ your project's CI/CD job tokens (`CI_JOB_TOKEN`)](https://docs.gitlab.com/ci/jobs/ci_job_token/#limit-your-projects-job-token-access) to make it more secure. This setting was called **Limit CI_JOB_TOKEN access**. In GitLab 16.3, we renamed this setting to **Limit access _from_ this project** for clarity. @@ -18,7 +18,7 @@ In GitLab 15.9, we introduced an alternative setting called [**Authorized groups and projects**](https://docs.gitlab.com/ci/jobs/ci_job_token/#add-a-group-or-project-to-the-job-token-allowlist). This setting controls job token access _to_ your project by using an allowlist. - This new setting is a large improvement over the original. The first iteration is deprecated + This new setting is a large improvement over the original. The first iteration was deprecated in GitLab 16.0 and scheduled for removal in GitLab 18.0. The **Limit access _from_ this project** setting is disabled by default for all new projects. diff --git a/data/deprecations/16-5-ci-job-token-limit-setting.yml b/data/deprecations/16-5-ci-job-token-limit-setting.yml index 9b26ec84ebe..03f016f5106 100644 --- a/data/deprecations/16-5-ci-job-token-limit-setting.yml +++ b/data/deprecations/16-5-ci-job-token-limit-setting.yml @@ -7,7 +7,7 @@ breaking_change: true # (required) If this deprecation is a breaking change, set this value to true window: 1 reporter: jocelynjane # (required) GitLab username of the person reporting the deprecation - stage: govern # (required) String value of the stage that the feature was created in. e.g., Growth + stage: Software Supply Chain Security # (required) String value of the stage that the feature was created in. e.g., Growth issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/383084 # (required) Link to the deprecation issue in GitLab check_impact: Use the [Authentication Log](../ci/jobs/ci_job_token.md#job-token-authentication-log) to verify which projects are authenticating with your project. impact: high # Can be one of: [critical, high, medium, low] diff --git a/db/migrate/20250404212646_increase_description_limit_on_compliance_requirements.rb b/db/migrate/20250404212646_increase_description_limit_on_compliance_requirements.rb new file mode 100644 index 00000000000..4b255abfc1e --- /dev/null +++ b/db/migrate/20250404212646_increase_description_limit_on_compliance_requirements.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class IncreaseDescriptionLimitOnComplianceRequirements < Gitlab::Database::Migration[2.2] + disable_ddl_transaction! + milestone '17.11' + + def up + remove_text_limit :compliance_requirements, :description + add_text_limit :compliance_requirements, :description, 500 + end + + def down + remove_text_limit :compliance_requirements, :description + add_text_limit :compliance_requirements, :description, 255 + end +end diff --git a/db/post_migrate/20250328135136_remove_subscription_seat_assignment_organization_id_default.rb b/db/post_migrate/20250328135136_remove_subscription_seat_assignment_organization_id_default.rb new file mode 100644 index 00000000000..ec8adacc237 --- /dev/null +++ b/db/post_migrate/20250328135136_remove_subscription_seat_assignment_organization_id_default.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class RemoveSubscriptionSeatAssignmentOrganizationIdDefault < Gitlab::Database::Migration[2.2] + milestone '17.11' + + def change + change_column_default(:subscription_seat_assignments, :organization_id, from: 1, to: nil) + end +end diff --git a/db/post_migrate/20250407043340_remove_broken_fk_for_p_ci_stages_and_p_ci_pipelines_attempt3.rb b/db/post_migrate/20250407043340_remove_broken_fk_for_p_ci_stages_and_p_ci_pipelines_attempt3.rb new file mode 100644 index 00000000000..6f091e81b1f --- /dev/null +++ b/db/post_migrate/20250407043340_remove_broken_fk_for_p_ci_stages_and_p_ci_pipelines_attempt3.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class RemoveBrokenFkForPCiStagesAndPCiPipelinesAttempt3 < Gitlab::Database::Migration[2.2] + include Gitlab::Database::PartitioningMigrationHelpers::ForeignKeyHelpers + include Gitlab::Database::MigrationHelpers::WraparoundAutovacuum + + milestone '17.11' + disable_ddl_transaction! + + SOURCE_TABLE_NAME = :p_ci_stages + TARGET_TABLE_NAME = :p_ci_pipelines + FK_NAME = :fk_fb57e6cc56_p + + def up + return unless can_execute_on?(:ci_pipelines, :ci_stages) + + with_lock_retries do + remove_foreign_key_if_exists( + SOURCE_TABLE_NAME, + TARGET_TABLE_NAME, + name: FK_NAME, + reverse_lock_order: true + ) + end + end + + def down + # no-op + # Since we recreate the fk in db/post_migrate/20250326204934_remove_broken_fk_for_p_ci_stages_and_p_ci_pipelines.rb + end +end diff --git a/db/schema_migrations/20250320005730 b/db/schema_migrations/20250320005730 index e69de29bb2d..7797c1c0521 100644 --- a/db/schema_migrations/20250320005730 +++ b/db/schema_migrations/20250320005730 @@ -0,0 +1 @@ +85210d36999484fafe57284bc5c68985d68f48061530ff79429c84875a6420f2 \ No newline at end of file diff --git a/db/schema_migrations/20250328135136 b/db/schema_migrations/20250328135136 new file mode 100644 index 00000000000..24c8baa003b --- /dev/null +++ b/db/schema_migrations/20250328135136 @@ -0,0 +1 @@ +b062d670e1b5da5de8bca3c4082a3a6cd76f873e33098cf3873fcee6ba1b128c \ No newline at end of file diff --git a/db/schema_migrations/20250404212646 b/db/schema_migrations/20250404212646 new file mode 100644 index 00000000000..c74450cab49 --- /dev/null +++ b/db/schema_migrations/20250404212646 @@ -0,0 +1 @@ +6dc9a76b5e4b712f670b18cc23721aa673b6db01c2a1806de0a0defb2019e39e \ No newline at end of file diff --git a/db/schema_migrations/20250407043340 b/db/schema_migrations/20250407043340 new file mode 100644 index 00000000000..e9d0ddf220e --- /dev/null +++ b/db/schema_migrations/20250407043340 @@ -0,0 +1 @@ +e4400de67e39e1bd6934ff41c05de276c7bf26294f15fb9ac6ac62e293e47ffa \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 9b1a56e12d3..59c0673e570 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -12651,7 +12651,7 @@ CREATE TABLE compliance_requirements ( description text NOT NULL, control_expression text, requirement_type smallint DEFAULT 0 NOT NULL, - CONSTRAINT check_71d7c59197 CHECK ((char_length(description) <= 255)), + CONSTRAINT check_71d7c59197 CHECK ((char_length(description) <= 500)), CONSTRAINT check_be5c3cfc16 CHECK ((char_length(control_expression) <= 2048)), CONSTRAINT check_f1fb6fdd81 CHECK ((char_length(name) <= 255)) ); @@ -23215,7 +23215,7 @@ CREATE TABLE subscription_seat_assignments ( last_activity_on timestamp with time zone, created_at timestamp with time zone NOT NULL, updated_at timestamp with time zone NOT NULL, - organization_id bigint DEFAULT 1 NOT NULL, + organization_id bigint NOT NULL, seat_type smallint ); diff --git a/doc/api/broadcast_messages.md b/doc/api/broadcast_messages.md index 05b592bedda..fd2b8b454a7 100644 --- a/doc/api/broadcast_messages.md +++ b/doc/api/broadcast_messages.md @@ -20,7 +20,7 @@ title: Broadcast Messages API {{< /history >}} -Broadcast messages API operates on [broadcast messages](../administration/broadcast_messages.md). +Use this API to interact with banners and notifications displayed in the UI. For more information, see [broadcast messages](../administration/broadcast_messages.md). GET requests do not require authentication. All other broadcast message API endpoints are accessible only to administrators. Non-GET requests by: diff --git a/doc/api/database_migrations.md b/doc/api/database_migrations.md index df98a894cae..0d753bb7e01 100644 --- a/doc/api/database_migrations.md +++ b/doc/api/database_migrations.md @@ -18,9 +18,11 @@ title: Database migrations API {{< /history >}} -This API is for managing database migrations used in the development of GitLab. +Use this API to manage GitLab database migrations. -All methods require administrator authorization. +Prerequisites: + +- You must have administrator access to the instance. ## Mark a migration as successful diff --git a/doc/api/events.md b/doc/api/events.md index 60ecfa35043..7b1d4db13f7 100644 --- a/doc/api/events.md +++ b/doc/api/events.md @@ -12,6 +12,8 @@ title: Events API {{< /details >}} +Use this API to view user and project events. + ## Filter parameters ### Actions @@ -137,7 +139,7 @@ Example response: ] ``` -### Get user contribution events +## Get user contribution events Get the contribution events for the specified user, sorted from newest to oldest. Scope `read_user` or `api` is required. Events associated with epics are not available using API. diff --git a/doc/api/experiments.md b/doc/api/experiments.md index a244ae9d06b..c0992eca5b0 100644 --- a/doc/api/experiments.md +++ b/doc/api/experiments.md @@ -2,7 +2,7 @@ stage: Growth group: Acquisition info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments -title: Experiments API (GitLab team only) +title: Experiments API --- {{< details >}} @@ -12,9 +12,11 @@ title: Experiments API (GitLab team only) {{< /details >}} -This API is for listing A/B experiments [defined in GitLab](../development/experiment_guide/_index.md). +Use this API to interact with A/B experiments. For more information, see the [experiment guide](../development/experiment_guide/_index.md). -The user must be a [GitLab team member](https://gitlab.com/groups/gitlab-com/-/group_members) to access the API. +Prerequisites: + +- You must be a [GitLab team member](https://gitlab.com/groups/gitlab-com/-/group_members). ## List all experiments diff --git a/doc/api/model_registry.md b/doc/api/model_registry.md index 0ccd7dfbcfd..7ca11edb836 100644 --- a/doc/api/model_registry.md +++ b/doc/api/model_registry.md @@ -12,6 +12,8 @@ title: Model registry API {{< /details >}} +Use this API to interact with the machine learning model registry. For more information, see [model registry](../user/project/ml/model_registry/_index.md). + ## Download a machine learning model package Returns the file. diff --git a/doc/api/openapi/openapi_v2.yaml b/doc/api/openapi/openapi_v2.yaml index edcb673d7ff..994bedfd7ad 100644 --- a/doc/api/openapi/openapi_v2.yaml +++ b/doc/api/openapi/openapi_v2.yaml @@ -15033,6 +15033,58 @@ paths: tags: - conan_packages operationId: getApiV4ProjectsIdPackagesConanV2ConansPackageNamePackageVersionPackageUsernamePackageChannelLatest + "/api/v4/projects/{id}/packages/conan/v2/conans/{package_name}/{package_version}/{package_username}/{package_channel}/revisions": + get: + summary: Get the list of revisions + description: This feature was introduced in GitLab 17.11 + produces: + - application/json + parameters: + - in: path + name: id + description: The ID or URL-encoded path of the project + type: string + required: true + - in: path + name: package_name + description: Package name + type: string + required: true + example: my-package + - in: path + name: package_version + description: Package version + type: string + required: true + example: '1.0' + - in: path + name: package_username + description: Package username + type: string + required: true + example: my-group+my-project + - in: path + name: package_channel + description: Package channel + type: string + required: true + example: stable + responses: + '200': + description: Get the list of revisions + schema: + "$ref": "#/definitions/API_Entities_Packages_Conan_RecipeRevision" + '400': + description: Bad Request + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + tags: + - conan_packages + operationId: getApiV4ProjectsIdPackagesConanV2ConansPackageNamePackageVersionPackageUsernamePackageChannelRevisions ? "/api/v4/projects/{id}/packages/conan/v2/conans/{package_name}/{package_version}/{package_username}/{package_channel}/revisions/{recipe_revision}/files" : get: summary: List recipe files diff --git a/doc/api/packages/conan_v2.md b/doc/api/packages/conan_v2.md index a125f7d66d4..a79cd2c15b2 100644 --- a/doc/api/packages/conan_v2.md +++ b/doc/api/packages/conan_v2.md @@ -12,6 +12,12 @@ title: Conan v2 API {{< /details >}} +{{< history >}} + +- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/519741) in GitLab 17.11 [with a flag](../../administration/feature_flags.md) named `conan_package_revisions_support`. Disabled by default. + +{{< /history >}} + {{< alert type="note" >}} For Conan v1 operations, see [Conan v1 API](conan_v1.md). @@ -20,6 +26,12 @@ For Conan v1 operations, see [Conan v1 API](conan_v1.md). Use this API to interact with the Conan v2 package manager. For more information, see [Conan packages in the package registry](../../user/packages/conan_repository/_index.md). +{{< alert type="flag" >}} + +The availability of this feature is controlled by a feature flag. For more information, see the history. + +{{< /alert >}} + Generally, these endpoints are used by the [Conan 2 package manager client](https://docs.conan.io/2/index.html) and are not meant for manual consumption. @@ -53,18 +65,6 @@ The project-level prefix is used to make requests in a single project's scope. T ## Get latest recipe revision -{{< history >}} - -- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/519741) in GitLab 17.11 [with a flag](../../administration/feature_flags.md) named `conan_package_revisions_support`. Disabled by default. - -{{< /history >}} - -{{< alert type="flag" >}} - -The availability of this feature is controlled by a feature flag. For more information, see the history. - -{{< /alert >}} - Get the revision hash and creation date of the latest package recipe. ```plaintext @@ -118,3 +118,40 @@ curl --request PUT \ --upload-file path/to/conaninfo.txt \ "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions/75151329520e7685dcf5da49ded2fec0/packages/103f6067a947f366ef91fc1b7da351c588d1827f/revisions/3bdd2d8c8e76c876ebd1ac0469a4e72c/files/conaninfo.txt" ``` + +## List all recipe revisions + +List all revisions for a package recipe. + +```plaintext +GET /v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions +``` + +| Attribute | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `package_name` | string | yes | Name of a package. | +| `package_version` | string | yes | Version of a package. | +| `package_username` | string | yes | Conan username of a package. This attribute is the `+`-separated full path of your project. | +| `package_channel` | string | yes | Channel of a package. | + +```shell +curl --header "Authorization: Bearer " "https://gitlab.example.com/api/v4/projects/9/packages/conan/v2/conans/my-package/1.0/my-group+my-project/stable/revisions" +``` + +Example response: + +```json +{ + "reference": "my-package/1.0@my-group+my-project/stable", + "revisions": [ + { + "revision": "75151329520e7685dcf5da49ded2fec0", + "time": "2024-12-17T09:16:40.334+0000" + }, + { + "revision": "df28fd816be3a119de5ce4d374436b25", + "time": "2024-12-17T09:15:30.123+0000" + } + ] +} +``` diff --git a/doc/api/usage_data.md b/doc/api/usage_data.md index 9faa240f63b..2dc2023e429 100644 --- a/doc/api/usage_data.md +++ b/doc/api/usage_data.md @@ -12,7 +12,7 @@ title: Service Ping API {{< /details >}} -The Service Ping API is associated with [Service Ping](../development/internal_analytics/service_ping/_index.md). +Use this API to interact with the GitLab Service Ping process. For more information, see the [Service Ping development guidelines](../development/internal_analytics/service_ping/_index.md). ## Export Service Ping data diff --git a/doc/ci/jobs/fine_grained_permissions.md b/doc/ci/jobs/fine_grained_permissions.md index 186057a3f4e..5c2a2612ad6 100644 --- a/doc/ci/jobs/fine_grained_permissions.md +++ b/doc/ci/jobs/fine_grained_permissions.md @@ -190,6 +190,7 @@ The following endpoints are available for CI/CD job tokens. | Packages: Read | `READ_PACKAGES` | `GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/latest` | Get the latest revision | | Packages: Read | `READ_PACKAGES` | `GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/files/:file_name` | Download recipe files | | Packages: Read | `READ_PACKAGES` | `GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/files` | List recipe files | +| Packages: Read | `READ_PACKAGES` | `GET /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions` | Get the list of revisions | | Packages: Read | `READ_PACKAGES` | `GET /projects/:id/packages/generic/:package_name/*package_version/(*path/):file_name` | Download package file | | Packages: Read | `READ_PACKAGES` | `GET /projects/:id/packages/go/*module_name/@v/:module_version.info` | Version metadata | | Packages: Read | `READ_PACKAGES` | `GET /projects/:id/packages/go/*module_name/@v/:module_version.mod` | Download module file | diff --git a/doc/update/breaking_windows.md b/doc/update/breaking_windows.md index 8886b25a05d..934614a285f 100644 --- a/doc/update/breaking_windows.md +++ b/doc/update/breaking_windows.md @@ -24,8 +24,8 @@ This window takes place on April 21 - 23, 2025 from 09:00 UTC to 22:00 UTC. | Deprecation | Impact | Stage | Scope | Check potential impact | |-------------|--------|-------|-------|------------------------| -| [CI/CD job token - **Limit access from your project** setting removal](https://gitlab.com/gitlab-org/gitlab/-/issues/395708) | High | Verify | Project | | -| [CI/CD job token - **Authorized groups and projects** allowlist enforcement](https://gitlab.com/gitlab-org/gitlab/-/issues/383084) | High | Govern | Project | Use the [Authentication Log](../ci/jobs/ci_job_token.md#job-token-authentication-log) to verify which projects are authenticating with your project. | +| [CI/CD job token - **Limit access from your project** setting removal](https://gitlab.com/gitlab-org/gitlab/-/issues/383084) | High | Software supply chain security | Project | | +| [CI/CD job token - **Authorized groups and projects** allowlist enforcement](https://gitlab.com/gitlab-org/gitlab/-/issues/383084) | High | Software supply chain security | Project | Use the [Authentication Log](../ci/jobs/ci_job_token.md#job-token-authentication-log) to verify which projects are authenticating with your project. | | [Deprecate License Scanning CI/CD artifact report type](https://gitlab.com/gitlab-org/gitlab/-/issues/439301) | Low | Secure | Project | | | [OpenTofu CI/CD template](https://gitlab.com/components/opentofu/-/issues/43#note_1913822299) | Low | Deploy | Project | | | [CodeClimate-based Code Quality scanning will be removed](https://gitlab.com/gitlab-org/gitlab/-/issues/471677) | High | Secure | | | diff --git a/doc/update/deprecations.md b/doc/update/deprecations.md index 4f2462aa08d..7fdee182acb 100644 --- a/doc/update/deprecations.md +++ b/doc/update/deprecations.md @@ -956,7 +956,7 @@ This migration tool will be removed in GitLab 18.3. - Announced in GitLab 15.9 - Removal in GitLab 18.0 ([breaking change](https://docs.gitlab.com/update/terminology/#breaking-change)) -- To discuss this change or learn more, see the [deprecation issue](https://gitlab.com/gitlab-org/gitlab/-/issues/395708). +- To discuss this change or learn more, see the [deprecation issue](https://gitlab.com/gitlab-org/gitlab/-/issues/383084). @@ -966,7 +966,7 @@ This setting was called **Limit CI_JOB_TOKEN access**. In GitLab 16.3, we rename In GitLab 15.9, we introduced an alternative setting called [**Authorized groups and projects**](https://docs.gitlab.com/ci/jobs/ci_job_token/#add-a-group-or-project-to-the-job-token-allowlist). This setting controls job token access _to_ your project by using an allowlist. -This new setting is a large improvement over the original. The first iteration is deprecated +This new setting is a large improvement over the original. The first iteration was deprecated in GitLab 16.0 and scheduled for removal in GitLab 18.0. The **Limit access _from_ this project** setting is disabled by default for all new projects. diff --git a/doc/update/versions/gitlab_17_changes.md b/doc/update/versions/gitlab_17_changes.md index b3ead5a3766..4415b3540df 100644 --- a/doc/update/versions/gitlab_17_changes.md +++ b/doc/update/versions/gitlab_17_changes.md @@ -296,6 +296,19 @@ However, some proxy services, such as Cloudflare, [alter this header, causing a If you see [SignatureDoesNotMatch errors](https://repost.aws/knowledge-center/s3-presigned-url-signature-mismatch) ensure that your proxy server does not alter or remove signed HTTP headers. +### 17.5 to 17.8 upgrade + +- When upgrading from GitLab 17.5 to 17.8, background migration fails with insert or update on the `group_type_ci_runner_machines` table. + + In the UI, the migration path `BackfillCiRunnerMachinesPartitionedTable: ci_runner_machines` shows progress `0.00%` and status `failed`. + The corresponding error in the logs include a foreign key constraint error. + + ```shell + ERROR: insert or update on table "group_type_ci_runner_machines_" violates foreign key constraint "fk_rails_" + ``` + + To resolve this error, initialize the migration from the UI. + ## 17.7.0 - Git 2.47.0 and later is required by Gitaly. For self-compiled installations, you should use the [Git version provided by Gitaly](../../install/installation.md#git). diff --git a/doc/user/project/repository/code_suggestions/_index.md b/doc/user/project/repository/code_suggestions/_index.md index 263099803d7..d672011ab10 100644 --- a/doc/user/project/repository/code_suggestions/_index.md +++ b/doc/user/project/repository/code_suggestions/_index.md @@ -267,6 +267,7 @@ that explain what you want to build: {{< history >}} - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/514124) in GitLab 17.9 [with a flag](../../../../administration/feature_flags.md) named `code_suggestions_include_context_imports`. Disabled by default. +- [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/514124) in GitLab 17.11. {{< /history >}} diff --git a/lib/api/conan/v2/project_packages.rb b/lib/api/conan/v2/project_packages.rb index ee02ea0921b..fd7addd3388 100644 --- a/lib/api/conan/v2/project_packages.rb +++ b/lib/api/conan/v2/project_packages.rb @@ -63,6 +63,25 @@ module API end end namespace 'revisions' do + desc 'Get the list of revisions' do + detail 'This feature was introduced in GitLab 17.11' + success code: 200, model: ::API::Entities::Packages::Conan::RecipeRevision + failure [ + { code: 400, message: 'Bad Request' }, + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not Found' } + ] + tags %w[conan_packages] + end + route_setting :authentication, job_token_allowed: true, basic_auth_personal_access_token: true + route_setting :authorization, job_token_policies: :read_packages, + allow_public_access_for_enabled_project_features: :package_registry + get urgency: :low do + not_found!('Package') unless package + + present package, with: ::API::Entities::Packages::Conan::RecipeRevisions + end params do requires :recipe_revision, type: String, regexp: Gitlab::Regex.conan_revision_regex_v2, desc: 'Recipe revision', documentation: { example: 'df28fd816be3a119de5ce4d374436b25' } diff --git a/lib/api/entities/packages/conan/recipe_revisions.rb b/lib/api/entities/packages/conan/recipe_revisions.rb new file mode 100644 index 00000000000..d68c0ffc179 --- /dev/null +++ b/lib/api/entities/packages/conan/recipe_revisions.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +module API + module Entities + module Packages + module Conan + class RecipeRevisions < Grape::Entity + MAX_REVISIONS_COUNT = 1000 + + expose :conan_recipe, as: :reference, documentation: { + type: String, + desc: 'The Conan package reference', + example: 'packageTest/1.2.3@gitlab-org+conan/stable' + } + + expose :conan_recipe_revisions, as: :revisions, using: + ::API::Entities::Packages::Conan::RecipeRevision, documentation: { + type: Array, + desc: 'List of recipe revisions', + is_array: true + } do |package| + package.conan_recipe_revisions.order_by_id_desc.limit(MAX_REVISIONS_COUNT) + end + end + end + end + end +end diff --git a/lib/gitlab/ci/pipeline/chain/metrics.rb b/lib/gitlab/ci/pipeline/chain/metrics.rb index db4745c0ba5..d3065153886 100644 --- a/lib/gitlab/ci/pipeline/chain/metrics.rb +++ b/lib/gitlab/ci/pipeline/chain/metrics.rb @@ -5,9 +5,12 @@ module Gitlab module Pipeline module Chain class Metrics < Chain::Base + include Gitlab::InternalEventsTracking + def perform! increment_pipeline_created_counter create_snowplow_event_for_pipeline_name + track_inputs_usage end def break? @@ -35,6 +38,21 @@ module Gitlab user: @pipeline.user, namespace: @pipeline.project.namespace) end + + def track_inputs_usage + return unless command.inputs.present? + + track_internal_event( + 'create_pipeline_with_inputs', + project: @pipeline.project, + user: @pipeline.user, + additional_properties: { + label: @pipeline.source, + property: @pipeline.config_source, + value: command.inputs.size + } + ) + end end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 297bb4c01cb..30016dede11 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -51899,6 +51899,9 @@ msgid_plural "Runner|%d days selected" msgstr[0] "" msgstr[1] "" +msgid "Runner|Assigned Projects" +msgstr "" + msgid "Runner|Export runner usage" msgstr "" diff --git a/qa/knapsack/example_runtimes/master_report.json b/qa/knapsack/example_runtimes/master_report.json index ff5a12f117d..a2030d65b95 100644 --- a/qa/knapsack/example_runtimes/master_report.json +++ b/qa/knapsack/example_runtimes/master_report.json @@ -1,524 +1,524 @@ { - "./qa/specs/features/api/10_govern/group_access_token_spec.rb[1:1:1]": 21.303713984, - "./qa/specs/features/api/10_govern/group_access_token_spec.rb[1:1:2]": 15.444975905, - "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:1:1]": 24.762917536, - "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:1:2]": 17.912869657, - "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:2:1]": 34.164761847, - "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:2:2]": 23.939050573, - "./qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb[1:1:1]": 64.393045194, - "./qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb[1:1:2:1]": 32.482224705, - "./qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb[1:1:1]": 102.907303401, - "./qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb[1:1:1]": 49.649203594, - "./qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb[1:1:2:1]": 58.168596297, - "./qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb[1:1:1]": 8.881418332, - "./qa/specs/features/api/1_manage/import/import_github_repo_spec.rb[1:1:1:1]": 132.936269333, - "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:1]": 14.846637325, - "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:2]": 13.664175245, - "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:3]": 6.375509046, - "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:4]": 11.100775004, - "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:5]": 10.829502186, - "./qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb[1:1:2:1]": 61.162899051, - "./qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb[1:1:2:1]": 104.31323268, - "./qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb[1:1:3:1]": 105.38809553, - "./qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb[1:1:1:1]": 96.173647769, - "./qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb[1:1:4:1]": 89.778076775, - "./qa/specs/features/api/1_manage/rate_limits_spec.rb[1:1:1]": 21.815154841, - "./qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb[1:1:1]": 15.03905998, - "./qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb[1:1:1]": 39.579143645, - "./qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb[1:1:1]": 67.817038612, - "./qa/specs/features/api/3_create/merge_request/push_options_spec.rb[1:1:1]": 16.053121019, - "./qa/specs/features/api/3_create/merge_request/push_options_spec.rb[1:1:2]": 23.824089413, - "./qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb[1:1:1:1]": 1.339750631, - "./qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb[1:1:1]": 30.421427255, - "./qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb[1:1:1]": 24.981516762, - "./qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb[1:1:1]": 8.903625307, - "./qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb[1:1:2]": 5.774787102, - "./qa/specs/features/api/3_create/repository/files_spec.rb[1:1:1]": 3.771527349, - "./qa/specs/features/api/3_create/repository/files_spec.rb[1:1:2:1]": 2.669736207, - "./qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb[1:1:1]": 14.791804148, - "./qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb[1:1:1]": 30.467549086, - "./qa/specs/features/api/3_create/repository/storage_size_spec.rb[1:1:1]": 27.377157513, - "./qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb[1:1:1:1:1]": 9.147974599, - "./qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb[1:1:1]": 73.730185215, - "./qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb[1:1:1]": 17.649168932, - "./qa/specs/features/api/4_verify/file_variable_spec.rb[1:1:1]": 58.651077536, - "./qa/specs/features/api/4_verify/file_variable_spec.rb[1:1:2]": 46.704651355, - "./qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb[1:1:1]": 40.292875856, - "./qa/specs/features/api/8_monitor/metrics_spec.rb[1:1:2:1]": 1.73616275, - "./qa/specs/features/api/8_monitor/metrics_spec.rb[1:2:1:1]": 2.853409305, + "./qa/specs/features/api/10_govern/group_access_token_spec.rb[1:1:1]": 22.190691172, + "./qa/specs/features/api/10_govern/group_access_token_spec.rb[1:1:2]": 16.985814416, + "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:1:1]": 22.103018023, + "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:1:2]": 15.636420931, + "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:2:1]": 33.582141136, + "./qa/specs/features/api/10_govern/project_access_token_spec.rb[1:1:2:2]": 19.733788826, + "./qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb[1:1:1]": 66.897623613, + "./qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb[1:1:2:1]": 31.623972297, + "./qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb[1:1:1]": 104.551483562, + "./qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb[1:1:1]": 44.402756724, + "./qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb[1:1:2:1]": 55.922086197, + "./qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb[1:1:1]": 14.807430715, + "./qa/specs/features/api/1_manage/import/import_github_repo_spec.rb[1:1:1:1]": 130.784218543, + "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:1]": 10.930594477, + "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:2]": 15.407972062, + "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:3]": 8.21496605, + "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:4]": 13.886626316, + "./qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb[1:1:5]": 16.222572038, + "./qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb[1:1:2:1]": 54.421507083, + "./qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb[1:1:2:1]": 97.384492829, + "./qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb[1:1:3:1]": 94.439752715, + "./qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb[1:1:1:1]": 100.22250081, + "./qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb[1:1:4:1]": 104.033227667, + "./qa/specs/features/api/1_manage/rate_limits_spec.rb[1:1:1]": 19.836200967, + "./qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb[1:1:1]": 18.60979307, + "./qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb[1:1:1]": 14.490345451, + "./qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb[1:1:1]": 36.466250826, + "./qa/specs/features/api/3_create/merge_request/push_options_spec.rb[1:1:1]": 19.448657602, + "./qa/specs/features/api/3_create/merge_request/push_options_spec.rb[1:1:2]": 23.540007475, + "./qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb[1:1:1:1]": 3.085092701, + "./qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb[1:1:1]": 18.731098203, + "./qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb[1:1:1]": 31.756471593, + "./qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb[1:1:1]": 3.964057918, + "./qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb[1:1:2]": 5.212159801, + "./qa/specs/features/api/3_create/repository/files_spec.rb[1:1:1]": 6.200658843, + "./qa/specs/features/api/3_create/repository/files_spec.rb[1:1:2:1]": 2.899632877, + "./qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb[1:1:1]": 19.789176191, + "./qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb[1:1:1]": 14.127716535, + "./qa/specs/features/api/3_create/repository/storage_size_spec.rb[1:1:1]": 17.738230164, + "./qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb[1:1:1:1:1]": 9.718849433, + "./qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb[1:1:1]": 93.993469578, + "./qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb[1:1:1]": 27.827293353, + "./qa/specs/features/api/4_verify/file_variable_spec.rb[1:1:1]": 28.044708211, + "./qa/specs/features/api/4_verify/file_variable_spec.rb[1:1:2]": 53.569935001, + "./qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb[1:1:1]": 37.030485183, + "./qa/specs/features/api/8_monitor/metrics_spec.rb[1:1:2:1]": 1.75862327, + "./qa/specs/features/api/8_monitor/metrics_spec.rb[1:2:1:1]": 2.545229839, "./qa/specs/features/api/9_data_stores/users_spec.rb[1:1:1]": 0.312105925, "./qa/specs/features/api/9_data_stores/users_spec.rb[1:1:2]": 0.190404743, "./qa/specs/features/api/9_data_stores/users_spec.rb[1:1:3]": 0.188122873, - "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:1:1]": 29.413018097, - "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:1:2]": 30.01145315, - "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:1:3]": 23.920786629, - "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:2:1]": 40.001571428, - "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:2:2]": 19.732597581, - "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:2:3]": 5.698692514, - "./qa/specs/features/api/9_tenant_scale/users_spec.rb[1:1:1]": 1.095930346, - "./qa/specs/features/api/9_tenant_scale/users_spec.rb[1:1:2]": 1.651102579, - "./qa/specs/features/api/9_tenant_scale/users_spec.rb[1:1:3]": 5.029887783, - "./qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb[1:1:1]": 27.588405841, - "./qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb[1:1:1]": 46.231992708, - "./qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb[1:1:1]": 57.553888476, - "./qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb[1:1:1]": 13.458955311, - "./qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb[1:1:1]": 86.727141342, - "./qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb[1:1:1]": 4.970114166, - "./qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb[1:1:1]": 27.669525792, - "./qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb[1:1:1]": 16.169293578, - "./qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb[1:1:1]": 42.577628715, - "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:1:1]": 4.380134838, - "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:2:1:1:1]": 27.549757077, - "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:2:1:2:1]": 10.619828931, - "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:2:2:1]": 45.403229732, - "./qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb[1:1:1]": 25.181579702, - "./qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb[1:1:1]": 41.360734357, - "./qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb[1:1:1:1]": 30.009179222, - "./qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb[1:1:1:2]": 13.547165469, - "./qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb[1:1:1:3]": 9.942919803, - "./qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb[1:1:1:1]": 34.572808644, - "./qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb[1:1:1:1]": 8.464928637, - "./qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb[1:1:1:1]": 12.230266086, - "./qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb[1:1:1]": 94.820041243, - "./qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb[1:1:1]": 33.19684278, - "./qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb[1:1:2]": 36.967080699, - "./qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb[1:1:1]": 58.96069371, - "./qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb[1:1:1:1]": 31.34093991, - "./qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb[1:1:2:1]": 36.95172385, - "./qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb[1:1:1]": 52.941611866, - "./qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb[1:1:1:1]": 144.893616525, - "./qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb[1:1:1]": 27.34963433, - "./qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb[1:1:1]": 36.015767611, - "./qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb[1:1:1]": 37.963573242, - "./qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb[1:1:1]": 12.927938319, - "./qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb[1:1:1]": 19.811932895, - "./qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb[1:1:1]": 20.828166886, - "./qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb[1:1:1]": 23.007679044, - "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:1]": 43.706690481, - "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:2]": 81.150094224, - "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:3:1]": 35.255402449, - "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:3]": 44.325062807, - "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:4:1]": 35.76845255, - "./qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb[1:1:1]": 32.378738655, - "./qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb[1:1:1]": 38.887409131, - "./qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb[1:1:1]": 26.782780208, - "./qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb[1:1:1]": 23.678412682, - "./qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb[1:1:1]": 29.57041069, - "./qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb[1:1:1]": 24.674775355, - "./qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb[1:1:1]": 17.228493134, - "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:1:1:1]": 22.501629211, - "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:1:2:1]": 31.365397533, - "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:2:1:1]": 22.09634618, - "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:2:2:1]": 30.987413197, - "./qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb[1:1:1]": 13.440053257, - "./qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb[1:1:1]": 31.145231421, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:1]": 29.418752439, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:2]": 17.093549004, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:3]": 12.656729257, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:4]": 18.17272352, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:5]": 11.445746915, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb[1:1:1]": 11.578869493, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb[1:1:2]": 12.978469799, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb[1:1:3]": 10.380475533, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb[1:1:1]": 26.17470458, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb[1:1:1]": 32.885310584, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb[1:1:1:1]": 25.021329817, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb[1:1:2:1]": 29.622946762, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb[1:1:1]": 10.671219831, - "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb[1:1:2]": 29.36000283, - "./qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb[1:1:1]": 30.079835836, - "./qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb[1:1:1]": 42.306773861, - "./qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb[1:1:2]": 49.473453925, - "./qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb[1:1:1]": 63.644932612, - "./qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb[1:1:1]": 30.368519293, - "./qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb[1:1:1]": 36.51658184, - "./qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb[1:1:2]": 53.942370495, - "./qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb[1:1:1]": 145.387593325, - "./qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb[1:1:1]": 85.207053341, - "./qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb[1:1:1]": 141.369671603, - "./qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb[1:1:1]": 37.068462598, - "./qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb[1:1:1]": 79.385398953, - "./qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb[1:1:1]": 54.326760602, - "./qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb[1:1:1]": 74.449561397, - "./qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb[1:1:1]": 33.678764377, - "./qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb[1:1:2]": 32.144085888, - "./qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb[1:1:1]": 33.774430334, - "./qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb[1:1:1]": 44.553965054, - "./qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb[1:1:1:1]": 22.782698586, - "./qa/specs/features/browser_ui/3_create/repository/clone_spec.rb[1:1:1]": 39.982719604, - "./qa/specs/features/browser_ui/3_create/repository/clone_spec.rb[1:1:2]": 28.222381465, - "./qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb[1:1:1:1:1]": 18.061548989, - "./qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb[1:1:2:1:1]": 17.504226855, - "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:1:1:1]": 15.909226714, - "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:1:2:1]": 15.320259064, - "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:2:1:1]": 30.075576334, - "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:2:2:1]": 35.719084826, - "./qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb[1:1:1]": 36.136286218, - "./qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb[1:1:1]": 23.553872932, - "./qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb[1:1:1]": 31.752627947, - "./qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb[1:1:1]": 73.068276571, - "./qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb[1:1:1]": 71.790220715, - "./qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb[1:1:1]": 12.708872465, - "./qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb[1:1:2]": 39.575565371, - "./qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb[1:1:1]": 29.662148719, - "./qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb[1:1:2]": 8.681509888, - "./qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb[1:1:1]": 34.520492998, - "./qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb[1:1:2]": 41.469108493, - "./qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb[1:1:1]": 26.30073834, + "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:1:1]": 19.370431713, + "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:1:2]": 13.602779851, + "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:1:3]": 19.408702163, + "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:2:1]": 41.172337056, + "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:2:2]": 11.889305954, + "./qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb[1:1:2:3]": 7.898832017, + "./qa/specs/features/api/9_tenant_scale/users_spec.rb[1:1:1]": 4.348534041, + "./qa/specs/features/api/9_tenant_scale/users_spec.rb[1:1:2]": 1.636559421, + "./qa/specs/features/api/9_tenant_scale/users_spec.rb[1:1:3]": 1.591595813, + "./qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb[1:1:1]": 25.491246615, + "./qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb[1:1:1]": 54.40607851, + "./qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb[1:1:1]": 53.929611186, + "./qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb[1:1:1]": 13.785073181, + "./qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb[1:1:1]": 105.09600871, + "./qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb[1:1:1]": 5.853250944, + "./qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb[1:1:1]": 31.138112638, + "./qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb[1:1:1]": 15.655818167, + "./qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb[1:1:1]": 41.830935048, + "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:1:1]": 3.767196404, + "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:2:1:1:1]": 29.290060703, + "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:2:1:2:1]": 8.57036191, + "./qa/specs/features/browser_ui/10_govern/login/register_spec.rb[1:2:2:1]": 50.589014284, + "./qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb[1:1:1]": 29.087858797, + "./qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb[1:1:1]": 36.609030039, + "./qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb[1:1:1:1]": 18.105838403, + "./qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb[1:1:1:2]": 8.875005131, + "./qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb[1:1:1:3]": 5.082809325, + "./qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb[1:1:1:1]": 30.140470085, + "./qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb[1:1:1:1]": 14.898678269, + "./qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb[1:1:1:1]": 11.457741844, + "./qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb[1:1:1]": 80.956942756, + "./qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb[1:1:1]": 19.522003405, + "./qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb[1:1:2]": 42.065453576, + "./qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb[1:1:1]": 49.783134806, + "./qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb[1:1:1:1]": 33.20142387, + "./qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb[1:1:2:1]": 42.196763917, + "./qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb[1:1:1]": 62.551203658, + "./qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb[1:1:1:1]": 179.079921323, + "./qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb[1:1:1]": 24.699574178, + "./qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb[1:1:1]": 31.446366729, + "./qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb[1:1:1]": 23.345811836, + "./qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb[1:1:1]": 11.585723651, + "./qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb[1:1:1]": 13.430481753, + "./qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb[1:1:1]": 20.990459605, + "./qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb[1:1:1]": 26.300396238, + "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:1]": 43.787116905, + "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:2]": 78.545244308, + "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:3:1]": 19.192317945, + "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:3]": 49.558278939, + "./qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb[1:1:4:1]": 37.498898257, + "./qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb[1:1:1]": 27.159370728, + "./qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb[1:1:1]": 46.197502022, + "./qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb[1:1:1]": 39.438472973, + "./qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb[1:1:1]": 28.561117183, + "./qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb[1:1:1]": 34.849981602, + "./qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb[1:1:1]": 30.922639705, + "./qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb[1:1:1]": 11.334030194, + "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:1:1:1]": 21.963737675, + "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:1:2:1]": 30.546000786, + "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:2:1:1]": 20.942003731, + "./qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb[1:1:2:2:1]": 30.296889596, + "./qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb[1:1:1]": 16.530162796, + "./qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb[1:1:1]": 29.868662989, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:1]": 13.852331529, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:2]": 12.616416443, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:3]": 9.444458307, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:4]": 13.068708035, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb[1:1:5]": 13.568041495, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb[1:1:1]": 14.445970839, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb[1:1:2]": 18.207908392, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb[1:1:3]": 19.317912616, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb[1:1:1]": 23.423750975, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb[1:1:1]": 40.495311468, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb[1:1:1:1]": 16.050368209, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb[1:1:2:1]": 36.432504211, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb[1:1:1]": 17.860233952, + "./qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb[1:1:2]": 26.863160506, + "./qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb[1:1:1]": 27.279122592, + "./qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb[1:1:1]": 49.840538194, + "./qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb[1:1:2]": 46.175653996, + "./qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb[1:1:1]": 47.946711635, + "./qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb[1:1:1]": 37.292467574, + "./qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb[1:1:1]": 45.588930106, + "./qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb[1:1:2]": 42.362704031, + "./qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb[1:1:1]": 69.095170681, + "./qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb[1:1:1]": 89.353301884, + "./qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb[1:1:1]": 82.455191487, + "./qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb[1:1:1]": 37.496633679, + "./qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb[1:1:1]": 43.344028066, + "./qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb[1:1:1]": 61.870465045, + "./qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb[1:1:1]": 99.357846168, + "./qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb[1:1:1]": 47.905194433, + "./qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb[1:1:2]": 60.751430067, + "./qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb[1:1:1]": 28.127477243, + "./qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb[1:1:1]": 19.554299625, + "./qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb[1:1:1:1]": 18.53950606, + "./qa/specs/features/browser_ui/3_create/repository/clone_spec.rb[1:1:1]": 17.106644898, + "./qa/specs/features/browser_ui/3_create/repository/clone_spec.rb[1:1:2]": 20.032210741, + "./qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb[1:1:1:1:1]": 19.503310617, + "./qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb[1:1:2:1:1]": 22.19199597, + "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:1:1:1]": 13.832735184, + "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:1:2:1]": 13.998755295, + "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:2:1:1]": 33.264796597, + "./qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb[1:1:2:2:1]": 33.990886122, + "./qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb[1:1:1]": 15.482273838, + "./qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb[1:1:1]": 17.088130169, + "./qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb[1:1:1]": 21.634184929, + "./qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb[1:1:1]": 63.780286729, + "./qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb[1:1:1]": 72.25449942, + "./qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb[1:1:1]": 6.427803146, + "./qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb[1:1:2]": 39.047985194, + "./qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb[1:1:1]": 24.380378485, + "./qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb[1:1:2]": 9.665651915, + "./qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb[1:1:1]": 23.282652018, + "./qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb[1:1:2]": 52.303752408, + "./qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb[1:1:1]": 27.284576862, "./qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb[1:1:2]": 24.47073788, - "./qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb[1:1:1:1]": 15.306413479, - "./qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb[1:1:1]": 23.180083188, - "./qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb[1:1:1]": 21.218950143, - "./qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb[1:1:1]": 20.068239239, - "./qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb[1:1:1]": 16.718740447, - "./qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb[1:1:2]": 27.461740254, - "./qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb[1:1:1:1]": 15.56094141, - "./qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb[1:1:2:1]": 27.093877735, - "./qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb[1:1:1:1]": 18.404065251, - "./qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb[1:1:2:1]": 16.929042553, - "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb[1:1:1]": 22.665434701, - "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb[1:1:2]": 25.746099679, - "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb[1:1:1]": 27.369823492, - "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb[1:1:2]": 28.040208978, - "./qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb[1:1:1:1]": 22.734855607, - "./qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb[1:1:2:1]": 16.815357619, - "./qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb[1:1:1]": 17.272513407, - "./qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb[1:1:1]": 8.439073346, - "./qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb[1:1:1]": 29.506290837, - "./qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb[1:1:1]": 25.578753549, - "./qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb[1:1:1:1]": 22.965745878, - "./qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb[1:1:2:1]": 18.895728157, - "./qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb[1:1:1:1]": 14.51144988, - "./qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb[1:1:2:1]": 12.178504353, - "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:1:1]": 12.829997514, - "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:2:1]": 15.766456884, - "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:3:1]": 23.553407873, - "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:4:1]": 15.4832488, - "./qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb[1:1:1]": 14.42981476, - "./qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb[1:1:1:1]": 16.29551286, - "./qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb[1:1:2:1]": 22.688796386, - "./qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb[1:1:1:1]": 24.731726318, - "./qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb[1:1:2:1]": 46.036471896, - "./qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb[1:1:1]": 23.048958336, - "./qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb[1:1:1]": 36.631792256, - "./qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb[1:1:2]": 78.499049914, - "./qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb[1:1:3]": 63.619791129, - "./qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb[1:1:1:1]": 17.040161734, - "./qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb[1:1:2:1:1:1]": 28.524314176, - "./qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb[1:1:2:2:1:1]": 26.886253818, - "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb[1:1:1:2:1:1]": 50.591326409, - "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb[1:1:1:2:2:1]": 50.467339057, - "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb[1:1:1]": 51.897715938, - "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb[1:1:2]": 77.895409395, - "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb[1:1:1]": 54.061610957, - "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb[1:1:2]": 68.56395418, - "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb[1:1:1]": 65.538729527, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb[1:1:1:1]": 97.80482527, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:1:1:1]": 41.517813743, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:1:1:2]": 25.994419855, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:2:1:1]": 37.434356722, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:2:1:2]": 39.215682272, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:3:1:1]": 109.970691761, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:3:1:2]": 97.610826391, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb[1:1:1:1]": 160.140245677, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb[1:1:2:1]": 119.948145257, - "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb[1:1:3:1]": 86.664246123, - "./qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb[1:1:1:1]": 70.714951878, - "./qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb[1:1:1]": 30.507147829, - "./qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb[1:1:2]": 101.069489314, - "./qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb[1:1:1]": 39.675315354, - "./qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb[1:1:1]": 117.389873128, - "./qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb[1:1:1]": 27.84489054, - "./qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb[1:1:1]": 43.507904949, - "./qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb[1:1:1]": 55.177185025, - "./qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb[1:1:1]": 44.730110017, - "./qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb[1:1:2]": 48.517953174, - "./qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb[1:1:1]": 58.761583905, - "./qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb[1:1:1]": 84.806505638, - "./qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb[1:1:1]": 73.702687013, - "./qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb[1:1:1]": 180.233371283, - "./qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb[1:1:1]": 34.903017314, - "./qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb[1:1:1]": 19.747268518, - "./qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb[1:1:1]": 32.949971249, - "./qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb[1:1:1]": 23.765970791, - "./qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb[1:1:1]": 17.981969578, - "./qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb[1:1:1]": 19.530808179, - "./qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb[1:1:1]": 37.176360232, - "./qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb[1:1:1]": 47.515444821, - "./qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb[1:1:1:1:1]": 104.422318464, - "./qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb[1:1:1:2:1]": 125.094864489, - "./qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb[1:1:1:3:1]": 99.98444421, - "./qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb[1:1:1:1]": 56.557669462, - "./qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb[1:1:2:1]": 56.565581205, - "./qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb[1:1:3:1]": 53.517437091, - "./qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb[1:1:1]": 73.44111263, - "./qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb[1:1:1]": 90.026104761, - "./qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb[1:1:1]": 70.888136062, - "./qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb[1:1:1:1]": 108.957868706, - "./qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb[1:1:2:1]": 87.378393588, - "./qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb[1:1:3:1]": 128.694447468, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:1:1:1]": 106.525405807, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:1:2:1]": 91.854916397, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:1:3:1]": 127.207411261, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:2:1:1]": 91.460473246, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:2:2:1]": 77.829425528, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb[1:1:1:1]": 92.061086908, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb[1:1:2:1]": 97.266779159, - "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb[1:1:3:1]": 110.398291994, - "./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb[1:1:1:1]": 88.835789754, - "./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb[1:1:2:1]": 175.450683821, - "./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb[1:1:3:1]": 91.607946373, - "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb[1:1:1:1]": 117.730521897, - "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb[1:1:2:1]": 83.609109848, - "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb[1:1:3:1]": 93.532744003, - "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb[1:1:1:1]": 78.081078661, - "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb[1:1:2:1]": 90.915996033, - "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb[1:1:3:1]": 209.51469783, - "./qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb[1:1:1:1]": 87.854051053, - "./qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb[1:1:1]": 25.377972394, - "./qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb[1:1:1]": 91.140890446, - "./qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb[1:1:2]": 53.829131996, - "./qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb[1:1:3]": 103.858670802, - "./qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb[1:1:1]": 6.531194724, - "./qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb[1:1:1:1:1]": 28.506396369, - "./qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb[1:1:2:1:1]": 34.419875085, - "./qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb[1:1:1:1:1]": 26.566925275, - "./qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb[1:1:2:1:1]": 35.82286243, - "./qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb[1:1:1:1:1]": 31.618339772, - "./qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb[1:1:2:1:1]": 27.538440945, - "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:1:1:1:1]": 17.739647004, - "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:1:2:1:1]": 22.450291736, - "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:2:1:1:1]": 16.200239372, - "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:2:2:1:1]": 15.559067721, - "./qa/specs/features/browser_ui/8_monitor/alert_management/recovery_alert_resolves_correct_alert_spec.rb[1:1:1:1:1]": 26.572676154, + "./qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb[1:1:1:1]": 15.57759222, + "./qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb[1:1:1]": 25.965786077, + "./qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb[1:1:1]": 26.613981945, + "./qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb[1:1:1]": 23.486877928, + "./qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb[1:1:1]": 17.598898712, + "./qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb[1:1:2]": 17.838921029, + "./qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb[1:1:1:1]": 16.227579474, + "./qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb[1:1:2:1]": 24.172815995, + "./qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb[1:1:1:1]": 13.464959683, + "./qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb[1:1:2:1]": 13.587255212, + "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb[1:1:1]": 22.722509324, + "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb[1:1:2]": 34.931123125, + "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb[1:1:1]": 28.35644043, + "./qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb[1:1:2]": 41.160119347, + "./qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb[1:1:1:1]": 19.894559287, + "./qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb[1:1:2:1]": 14.616299665, + "./qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb[1:1:1]": 15.504011263, + "./qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb[1:1:1]": 10.092901067, + "./qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb[1:1:1]": 14.182606942, + "./qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb[1:1:1]": 18.591736551, + "./qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb[1:1:1:1]": 14.142580644, + "./qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb[1:1:2:1]": 19.09338891, + "./qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb[1:1:1:1]": 8.21689379, + "./qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb[1:1:2:1]": 6.994054203, + "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:1:1]": 4.892439473, + "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:2:1]": 12.830038579, + "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:3:1]": 24.439623445, + "./qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb[1:1:4:1]": 15.635312508, + "./qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb[1:1:1]": 21.582307971, + "./qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb[1:1:1:1]": 19.211457666, + "./qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb[1:1:2:1]": 33.685629108, + "./qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb[1:1:1:1]": 20.290451977, + "./qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb[1:1:2:1]": 37.415625679, + "./qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb[1:1:1]": 30.677331388, + "./qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb[1:1:1]": 33.119771732, + "./qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb[1:1:2]": 69.765399205, + "./qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb[1:1:3]": 59.52828579, + "./qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb[1:1:1:1]": 21.969496986, + "./qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb[1:1:2:1:1:1]": 31.562939266, + "./qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb[1:1:2:2:1:1]": 90.109081116, + "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb[1:1:1:2:1:1]": 41.829742663, + "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb[1:1:1:2:2:1]": 38.57562815, + "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb[1:1:1]": 97.964129368, + "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb[1:1:2]": 65.205761621, + "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb[1:1:1]": 52.863778173, + "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb[1:1:2]": 68.875100157, + "./qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb[1:1:1]": 46.964068505, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb[1:1:1:1]": 55.897837024, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:1:1:1]": 41.037336029, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:1:1:2]": 41.368733504, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:2:1:1]": 43.449630495, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:2:1:2]": 26.954359458, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:3:1:1]": 51.475481635, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb[1:1:3:1:2]": 105.824151548, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb[1:1:1:1]": 97.151101412, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb[1:1:2:1]": 111.446211392, + "./qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb[1:1:3:1]": 111.331036077, + "./qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb[1:1:1:1]": 86.907390959, + "./qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb[1:1:1]": 44.065511705, + "./qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb[1:1:2]": 77.345919969, + "./qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb[1:1:1]": 36.921699422, + "./qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb[1:1:1]": 105.475351609, + "./qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb[1:1:1]": 30.960499654, + "./qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb[1:1:1]": 69.279146518, + "./qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb[1:1:1]": 56.21386151, + "./qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb[1:1:1]": 65.622310425, + "./qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb[1:1:2]": 45.0146551, + "./qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb[1:1:1]": 64.510124169, + "./qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb[1:1:1]": 139.018442123, + "./qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb[1:1:1]": 56.130873145, + "./qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb[1:1:1]": 62.838020438, + "./qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb[1:1:1]": 20.270429665, + "./qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb[1:1:1]": 23.662636469, + "./qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb[1:1:1]": 30.993274153, + "./qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb[1:1:1]": 26.663382279, + "./qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb[1:1:1]": 20.681835993, + "./qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb[1:1:1]": 16.421210592, + "./qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb[1:1:1]": 68.496165287, + "./qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb[1:1:1]": 44.026361299, + "./qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb[1:1:1:1:1]": 133.583237659, + "./qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb[1:1:1:2:1]": 106.065074371, + "./qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb[1:1:1:3:1]": 106.403102303, + "./qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb[1:1:1:1]": 54.72816564, + "./qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb[1:1:2:1]": 52.346290597, + "./qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb[1:1:3:1]": 58.832919408, + "./qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb[1:1:1]": 54.621088382, + "./qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb[1:1:1]": 89.727124535, + "./qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb[1:1:1]": 56.272736953, + "./qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb[1:1:1:1]": 81.731575528, + "./qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb[1:1:2:1]": 73.879435724, + "./qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb[1:1:3:1]": 76.923882318, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:1:1:1]": 86.028817458, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:1:2:1]": 175.368212354, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:1:3:1]": 90.639168907, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:2:1:1]": 88.542207522, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb[1:1:2:2:1]": 91.415763223, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb[1:1:1:1]": 86.144905688, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb[1:1:2:1]": 114.547206787, + "./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb[1:1:3:1]": 100.339537029, + "./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb[1:1:1:1]": 74.445114347, + "./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb[1:1:2:1]": 73.435206659, + "./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb[1:1:3:1]": 108.578392925, + "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb[1:1:1:1]": 98.24309494, + "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb[1:1:2:1]": 95.805206219, + "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb[1:1:3:1]": 123.88253439, + "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb[1:1:1:1]": 81.300062917, + "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb[1:1:2:1]": 117.209495906, + "./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb[1:1:3:1]": 101.420368048, + "./qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb[1:1:1:1]": 93.123572624, + "./qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb[1:1:1]": 40.923164628, + "./qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb[1:1:1]": 54.829329655, + "./qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb[1:1:2]": 51.97327166, + "./qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb[1:1:3]": 45.706500805, + "./qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb[1:1:1]": 14.747934885, + "./qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb[1:1:1:1:1]": 26.603684415, + "./qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb[1:1:2:1:1]": 24.670310804, + "./qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb[1:1:1:1:1]": 28.472220098, + "./qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb[1:1:2:1:1]": 36.933606647, + "./qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb[1:1:1:1:1]": 26.40488854, + "./qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb[1:1:2:1:1]": 27.402503383, + "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:1:1:1:1]": 16.899540504, + "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:1:2:1:1]": 14.582184524, + "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:2:1:1:1]": 14.183003885, + "./qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb[1:1:2:2:1:1]": 12.717184843, + "./qa/specs/features/browser_ui/8_monitor/alert_management/recovery_alert_resolves_correct_alert_spec.rb[1:1:1:1:1]": 18.612875487, "./qa/specs/features/browser_ui/9_data_stores/project/add_project_member_spec.rb[1:1:1]": 22.367142461, "./qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb[1:1:1:1:1]": 15.739382483, "./qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb[1:1:2:1:1]": 12.0713692, "./qa/specs/features/browser_ui/9_data_stores/project/view_project_activity_spec.rb[1:1:1:1]": 15.037094806, - "./qa/specs/features/browser_ui/9_tenant_scale/group/create_group_with_mattermost_team_spec.rb[1:1:1]": 7.637430428, - "./qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb[1:1:1]": 21.324987521, - "./qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb[1:1:2:1:1]": 22.650066512, - "./qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb[1:1:2:2:1]": 22.698565148, - "./qa/specs/features/browser_ui/9_tenant_scale/group/transfer_project_spec.rb[1:1:1]": 28.54705019, - "./qa/specs/features/browser_ui/9_tenant_scale/project/add_project_member_spec.rb[1:1:1]": 36.495004679, - "./qa/specs/features/browser_ui/9_tenant_scale/project/create_project_badge_spec.rb[1:1:1]": 22.77783493, - "./qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb[1:1:1:1:1]": 29.516292648, - "./qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb[1:1:2:1:1]": 33.003549519, - "./qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb[1:1:1:1:1]": 7.978093047, - "./qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb[1:1:2:1:1]": 9.895787651, - "./qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb[1:1:1:1:1]": 30.170486404, - "./qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb[1:1:2:1:1]": 25.159914235, - "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:1:1:1]": 44.956965012, - "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:1:2:1]": 44.313015274, - "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:2:1:1]": 53.18802475, - "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:2:2:1]": 38.770509211, - "./qa/specs/features/browser_ui/9_tenant_scale/project/view_project_activity_spec.rb[1:1:1:1]": 28.142072277, - "./qa/specs/features/browser_ui/9_tenant_scale/user/follow_user_activity_spec.rb[1:1:1]": 49.140768645, - "./qa/specs/features/browser_ui/9_tenant_scale/user/parent_group_access_termination_spec.rb[1:1:1:1]": 31.675526669, - "./qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb[1:1:1:1]": 20.173207803, - "./qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb[1:1:2:1]": 17.275523761, - "./qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb[1:1:1:1]": 40.151562624, - "./qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb[1:1:1:1]": 17.588975903, - "./qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb[1:1:4:1]": 35.190554746, - "./qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb[1:1:1]": 37.897074089, - "./qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb[1:1:2]": 9.050039286, - "./qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb[1:1:3]": 11.047810541, - "./qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb[1:1:1:1]": 26.798864946, - "./qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb[1:1:1]": 11.316165249, - "./qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb[1:1:1:1]": 78.565359616, - "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:1]": 7.533443244, - "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:2]": 22.728303668, - "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:3]": 18.236949974, - "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:4]": 8.107667039, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:1:1:1]": 1.66002135, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:1:2:1:1]": 1.693931206, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:2:1:1:1:1:1]": 1.288856161, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:2:1:1:1:2:1:1]": 1.086192776, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:1:1:1]": 8.421563936, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:1:1:1:1:1]": 0.975256273, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:1:1:2:1]": 0.098064172, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:1:2:1]": 2.386542394, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:2:1]": 0.149321918, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:3:1:1]": 8.331166275, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:3:2:1:1:1:1]": 2.151376942, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:1:1]": 3.779749094, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:1:2]": 3.553295867, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:2:1:1:1:1]": 2.551394804, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:2:1:1:1:2]": 2.144407471, - "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:2:1:1:1:3:1]": 1.314944758, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/advanced_global_advanced_syntax_search_spec.rb[1:1:1:1]": 49.591802485, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/advanced_global_advanced_syntax_search_spec.rb[1:1:1:2]": 71.487824655, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb[1:1:1]": 20.286827459, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb[1:1:2:1]": 8.455605242, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb[1:1:2:2]": 10.331635744, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/commit_index/commit_index_spec.rb[1:1:1]": 20.538624526, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/issues_index/issue_index_spec.rb[1:1:1]": 69.628096222, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/main_index/blob_index_spec.rb[1:1:1]": 98.944347351, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb[1:1:1]": 59.333038368, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/notes_index/note_index_spec.rb[1:1:1]": 45.730371219, - "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/user_index/user_index_spec.rb[1:1:1]": 55.23396789, - "./qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb[1:1:1]": 53.592304743, - "./qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb[1:1:2]": 42.487343867, - "./qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb[1:1:3]": 24.330369066, - "./qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb[1:1:1]": 69.981076146, - "./qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb[1:1:1]": 87.439770461, - "./qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb[1:1:1]": 28.91454899, - "./qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb[1:1:1]": 130.455638878, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:1:1]": 18.860909349, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:2:1:1]": 12.780555146, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:2:2:1]": 9.411341156, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:2:3:1]": 13.357765459, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:1:1:1]": 27.525563523, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:2:1:1]": 36.653423519, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:3:1:1]": 35.476641525, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:4:1:1]": 30.805452718, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:5:1:1]": 21.635058098, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:1:1:1]": 46.030665816, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:1:1:2]": 17.145602375, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:1:1:3]": 16.197076575, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:2:1:1]": 40.724807093, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:2:1:2]": 15.361175478, - "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:2:1:3]": 19.262095831, - "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:1:1:1]": 13.098169598, - "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:1:2:1]": 9.771669844, - "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:1:3:1]": 44.101681467, - "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:2:1:1]": 14.110742606, - "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:2:2:1]": 9.500188313, - "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:2:3:1]": 19.967767427, - "./qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb[1:1:1]": 105.832938983, - "./qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb[1:1:2]": 93.93386953, - "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:1:1:1]": 13.902551681, - "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:2:1:1]": 11.951841376, - "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:3:1:1]": 17.47404079, - "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:4:1:1]": 20.514491099, - "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:5:1:1]": 20.986141913, - "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:6:1:1]": 19.263077568, - "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:1:1:1]": 18.016843054, - "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:2:1:1]": 18.557578012, - "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:3:1:1]": 22.566606814, - "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:4:1:1]": 32.391910221, - "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:5:1:1]": 60.393571403, - "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:6:1:1]": 31.711243981, - "./qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb[1:1:1]": 28.395663328, - "./qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb[1:1:2]": 40.804938933, - "./qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb[1:1:1]": 67.081932571, - "./qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb[1:1:2]": 84.159184383, - "./qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb[1:1:1]": 61.462985815, - "./qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb[1:1:2]": 56.340702987, - "./qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb[1:1:1]": 23.377783156, - "./qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb[1:1:2]": 24.386451706, - "./qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb[1:1:3]": 37.669475609, - "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:1]": 11.027439611, - "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:2]": 104.689538917, - "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:3]": 96.589429163, - "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:4]": 119.635715049, - "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:6:1]": 23.615839608, - "./qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb[1:1:1]": 20.289002323, - "./qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb[1:1:1]": 24.600869353, - "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:1]": 74.248194032, - "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:2]": 48.476805359, - "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:3]": 98.638207634, - "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:4]": 105.412517963, - "./qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb[1:1:1]": 11.914646627, - "./qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb[1:2:1]": 10.532891137, - "./qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb[1:1:1]": 8.110863641, - "./qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb[1:1:1:1:1]": 18.01465773, - "./qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb[1:1:1:1]": 69.873956932, - "./qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb[1:1:1:1]": 118.375459768, - "./qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb[1:1:1]": 44.622707498, - "./qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb[1:1:2:1]": 56.561158318, - "./qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb[1:1:1:2:1]": 14.192048308, - "./qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb[1:1:1]": 27.329184661, - "./qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb[1:1:2]": 15.676827311, - "./qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb[1:1:3]": 15.43587016, - "./qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb[1:1:1]": 188.68364248, - "./qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb[1:1:1]": 61.557919679, - "./qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb[1:1:1:1:1:1]": 21.789052353, - "./qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb[1:1:1:2:1:1]": 17.341448413, - "./qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb[1:1:1]": 11.328566694, - "./qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb[1:1:1]": 10.165153364, - "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:1]": 52.898810364, - "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:2]": 46.586564557, - "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:1:1]": 13.606855366, - "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:1:2]": 11.311108206, - "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:1:3]": 54.856009245, - "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:2]": 18.369301041, - "./qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb[1:1:1]": 37.649970935, - "./qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb[1:1:1]": 11.0974183, - "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb[1:1:1:1]": 16.643535041, - "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb[1:1:2:1]": 15.112186692, - "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb[1:1:1]": 11.462498838, - "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb[1:1:1]": 25.760340238, - "./qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb[1:1:1:1]": 11.27510382, - "./qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb[1:2:1:1]": 11.320018074, - "./qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb[1:1:1]": 30.187060882, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb[1:1:1]": 11.557951333, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb[1:1:1]": 32.387186465, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb[1:1:1]": 21.612366417, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb[1:1:1]": 22.71344926, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb[1:1:1:1]": 22.816876539, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb[1:1:2:1]": 15.371217822, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb[1:1:3:1]": 15.380564542, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb[1:1:1]": 17.672093606, - "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb[1:1:1]": 18.395458779, - "./qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb[1:1:1:1]": 11.132046974, - "./qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb[1:2:1:1]": 19.124017343, - "./qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb[1:1:1]": 26.065709995, - "./qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb[1:1:1]": 14.315851726, - "./qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb[1:1:1:1]": 25.93440539, - "./qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb[1:1:2:1]": 13.221564137, - "./qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb[1:1:1]": 48.642485804, - "./qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb[1:1:1]": 27.593969486, - "./qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb[1:1:2]": 13.871088326, - "./qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb[1:1:1]": 30.501364072, - "./qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb[1:1:1]": 91.529703764, - "./qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb[1:1:1]": 39.586881532, - "./qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb[1:1:1]": 120.609385585, - "./qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb[1:1:1]": 30.602658116, - "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:1]": 71.802143321, - "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:2]": 37.516443011, - "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:3]": 59.160356193, - "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:4]": 28.886166174, - "./qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb[1:1:1]": 34.340679891, - "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb[1:1:1:1:1:1]": 70.172646576, - "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb[1:1:1:2:1:1]": 97.159996355, - "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb[1:1:1:1:1:1]": 59.477651389, - "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb[1:1:1:2:1:1]": 95.943189492, - "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb[1:1:1:3:1:1]": 66.929397858, - "./qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb[1:1:1:1]": 22.823848337, - "./qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb[1:1:2:1]": 15.25664285, - "./qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb[1:1:1:1]": 31.639390981, - "./qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb[1:1:3:1]": 49.763871181, - "./qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb[1:1:1]": 34.385134201, - "./qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb[1:1:1]": 37.732446262, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:1]": 15.492347459, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:2]": 41.032807323, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:3]": 28.478068963, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:4]": 29.351759678, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:5]": 38.26446505, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:6]": 25.130415414, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:7]": 26.602581453, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:8]": 26.699195289, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:9]": 30.754466777, - "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:2:1]": 35.744766936, - "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:1:1:1]": 33.289832998, - "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:1:2:1]": 42.615610711, - "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:2:1:1]": 43.733985151, - "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:2:2:1]": 53.990534483, - "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:3:1:1]": 33.266998955, - "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:1:1:1]": 37.994959221, - "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:1:2:1]": 38.710642529, - "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:1:1:1:1:1]": 23.961585133, - "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:1:1:2:1:1]": 24.534300524, - "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:1:2:1:1]": 24.684871591, - "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:2:1:1]": 23.542061182, - "./qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb[1:1:1]": 62.8214752, - "./qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb[1:1:1]": 48.228572737, - "./qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb[1:1:2]": 87.025550537, - "./qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb[1:1:1]": 42.272271643, - "./qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb[1:1:1:1]": 56.186165218, - "./qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb[1:1:1]": 21.83266261, - "./qa/specs/features/ee/browser_ui/9_tenant_scale/elasticsearch/elasticsearch_reindexing_spec.rb[1:1:1]": 32.93606884, - "./qa/specs/features/ee/browser_ui/9_tenant_scale/elasticsearch/elasticsearch_reindexing_spec.rb[1:1:2]": 56.830339355, - "./qa/specs/features/ee/browser_ui/9_tenant_scale/group/share_group_with_group_spec.rb[1:1:1]": 23.115335836 + "./qa/specs/features/browser_ui/9_tenant_scale/group/create_group_with_mattermost_team_spec.rb[1:1:1]": 7.104243912, + "./qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb[1:1:1]": 16.765986998, + "./qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb[1:1:2:1:1]": 19.624925681, + "./qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb[1:1:2:2:1]": 19.319773698, + "./qa/specs/features/browser_ui/9_tenant_scale/group/transfer_project_spec.rb[1:1:1]": 25.724117626, + "./qa/specs/features/browser_ui/9_tenant_scale/project/add_project_member_spec.rb[1:1:1]": 34.548432906, + "./qa/specs/features/browser_ui/9_tenant_scale/project/create_project_badge_spec.rb[1:1:1]": 22.612643177, + "./qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb[1:1:1:1:1]": 29.406097596, + "./qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb[1:1:2:1:1]": 29.886030881, + "./qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb[1:1:1:1:1]": 10.133015944, + "./qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb[1:1:2:1:1]": 9.910381194, + "./qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb[1:1:1:1:1]": 21.01162612, + "./qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb[1:1:2:1:1]": 23.521760598, + "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:1:1:1]": 52.311758431, + "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:1:2:1]": 30.800097402, + "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:2:1:1]": 63.447451098, + "./qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb[1:1:2:2:1]": 34.49395412, + "./qa/specs/features/browser_ui/9_tenant_scale/project/view_project_activity_spec.rb[1:1:1:1]": 29.277003431, + "./qa/specs/features/browser_ui/9_tenant_scale/user/follow_user_activity_spec.rb[1:1:1]": 29.6309072, + "./qa/specs/features/browser_ui/9_tenant_scale/user/parent_group_access_termination_spec.rb[1:1:1:1]": 24.421995476, + "./qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb[1:1:1:1]": 27.432655832, + "./qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb[1:1:2:1]": 13.779108269, + "./qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb[1:1:1:1]": 46.413296588, + "./qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb[1:1:1:1]": 24.5768038, + "./qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb[1:1:4:1]": 19.66219109, + "./qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb[1:1:1]": 40.27771115, + "./qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb[1:1:2]": 18.992439202, + "./qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb[1:1:3]": 14.368416192, + "./qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb[1:1:1:1]": 29.562953975, + "./qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb[1:1:1]": 5.940498168, + "./qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb[1:1:1:1]": 78.366718749, + "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:1]": 13.526490098, + "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:2]": 25.446555362, + "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:3]": 17.66402384, + "./qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb[1:1:4]": 14.484371871, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:1:1:1]": 1.506309711, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:1:2:1:1]": 1.897554879, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:2:1:1:1:1:1]": 0.156863942, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:1:2:1:1:1:2:1:1]": 0.709192816, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:1:1:1]": 10.373092311, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:1:1:1:1:1]": 1.572761343, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:1:1:2:1]": 2.69215027, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:1:2:1]": 2.626512057, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:2:2:1]": 2.093357, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:3:1:1]": 8.55046309, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:2:3:2:1:1:1:1]": 1.404266103, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:1:1]": 3.647799277, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:1:2]": 3.843597201, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:2:1:1:1:1]": 0.814929474, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:2:1:1:1:2]": 1.806858015, + "./qa/specs/features/ee/api/3_create/code_suggestions_spec.rb[1:1:3:2:1:1:1:3:1]": 2.057543256, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/advanced_global_advanced_syntax_search_spec.rb[1:1:1:1]": 55.983103862, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/advanced_global_advanced_syntax_search_spec.rb[1:1:1:2]": 56.602038733, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb[1:1:1]": 19.663515322, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb[1:1:2:1]": 7.675336408, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb[1:1:2:2]": 9.579290837, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/commit_index/commit_index_spec.rb[1:1:1]": 101.979260884, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/issues_index/issue_index_spec.rb[1:1:1]": 61.369233457, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/main_index/blob_index_spec.rb[1:1:1]": 20.746524222, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb[1:1:1]": 69.662616855, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/notes_index/note_index_spec.rb[1:1:1]": 26.684938838, + "./qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/user_index/user_index_spec.rb[1:1:1]": 53.445630676, + "./qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb[1:1:1]": 48.35001428, + "./qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb[1:1:2]": 43.449625293, + "./qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb[1:1:3]": 26.98064942, + "./qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb[1:1:1]": 71.145434648, + "./qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb[1:1:1]": 82.468044455, + "./qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb[1:1:1]": 17.585545491, + "./qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb[1:1:1]": 133.700659851, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:1:1]": 19.329524905, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:2:1:1]": 17.155830386, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:2:2:1]": 14.611002406, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb[1:1:2:3:1]": 19.196690146, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:1:1:1]": 29.643700242, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:2:1:1]": 12.650158779, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:3:1:1]": 14.785615553, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:4:1:1]": 32.075410932, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb[1:1:5:1:1]": 28.565824935, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:1:1:1]": 45.014201743, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:1:1:2]": 12.525859174, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:1:1:3]": 14.555723256, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:2:1:1]": 34.254324693, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:2:1:2]": 12.811824999, + "./qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb[1:1:2:1:3]": 13.137283622, + "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:1:1:1]": 19.01039082, + "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:1:2:1]": 10.917758473, + "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:1:3:1]": 43.604062381, + "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:2:1:1]": 16.355358987, + "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:2:2:1]": 11.351453783, + "./qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb[1:1:2:3:1]": 28.28997091, + "./qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb[1:1:1]": 77.783091837, + "./qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb[1:1:2]": 162.300340495, + "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:1:1:1]": 12.838259287, + "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:2:1:1]": 11.011810625, + "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:3:1:1]": 17.212991375, + "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:4:1:1]": 16.72348153, + "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:5:1:1]": 19.374416161, + "./qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb[1:1:6:1:1]": 17.833970293, + "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:1:1:1]": 15.146412377, + "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:2:1:1]": 17.172597357, + "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:3:1:1]": 18.266778552, + "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:4:1:1]": 17.894962718, + "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:5:1:1]": 56.378162696, + "./qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb[1:1:6:1:1]": 40.742428572, + "./qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb[1:1:1]": 28.770098139, + "./qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb[1:1:2]": 40.112902572, + "./qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb[1:1:1]": 79.558610268, + "./qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb[1:1:2]": 86.009288433, + "./qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb[1:1:1]": 56.464841021, + "./qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb[1:1:2]": 71.318325718, + "./qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb[1:1:1]": 23.190547438, + "./qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb[1:1:2]": 22.773901313, + "./qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb[1:1:3]": 35.74877612, + "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:1]": 10.800559502, + "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:2]": 135.299311509, + "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:3]": 141.871461919, + "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:4]": 99.502385516, + "./qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb[1:1:6:1]": 46.418827406, + "./qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb[1:1:1]": 19.419528764, + "./qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb[1:1:1]": 39.387180892, + "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:1]": 98.856788985, + "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:2]": 50.313921066, + "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:3]": 108.372594373, + "./qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb[1:1:4]": 81.780960549, + "./qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb[1:1:1]": 14.418469563, + "./qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb[1:2:1]": 10.539244699, + "./qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb[1:1:1]": 5.396372707, + "./qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb[1:1:1:1:1]": 13.24383258, + "./qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb[1:1:1:1]": 47.132167116, + "./qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb[1:1:1:1]": 121.623449753, + "./qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb[1:1:1]": 41.554862138, + "./qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb[1:1:2:1]": 57.671794422, + "./qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb[1:1:1:2:1]": 9.987338635, + "./qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb[1:1:1]": 23.187039326, + "./qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb[1:1:2]": 17.093693043, + "./qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb[1:1:3]": 17.261800924, + "./qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb[1:1:1]": 90.962175234, + "./qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb[1:1:1]": 67.089455546, + "./qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb[1:1:1:1:1:1]": 18.210129625, + "./qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb[1:1:1:2:1:1]": 26.814282379, + "./qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb[1:1:1]": 13.988895666, + "./qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb[1:1:1]": 12.150748481, + "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:1]": 53.78505991, + "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:2]": 48.752318833, + "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:1:1]": 13.567532253, + "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:1:2]": 9.279325357, + "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:1:3]": 54.084691916, + "./qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb[1:1:3:2]": 19.149183046, + "./qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb[1:1:1]": 54.053503038, + "./qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb[1:1:1]": 9.031209059, + "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb[1:1:1:1]": 13.889525936, + "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb[1:1:2:1]": 15.878249502, + "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb[1:1:1]": 13.233084817, + "./qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb[1:1:1]": 27.14804958, + "./qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb[1:1:1:1]": 10.481152658, + "./qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb[1:2:1:1]": 15.373920619, + "./qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb[1:1:1]": 34.027625922, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb[1:1:1]": 21.303439779, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb[1:1:1]": 25.468812878, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb[1:1:1]": 14.568871698, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb[1:1:1]": 26.677815288, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb[1:1:1:1]": 17.323085027, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb[1:1:2:1]": 14.885755056, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb[1:1:3:1]": 16.807905059, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb[1:1:1]": 26.511320585, + "./qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb[1:1:1]": 14.111546655, + "./qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb[1:1:1:1]": 13.09725613, + "./qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb[1:2:1:1]": 10.072763875, + "./qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb[1:1:1]": 36.953367027, + "./qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb[1:1:1]": 25.536112939, + "./qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb[1:1:1:1]": 25.260992712, + "./qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb[1:1:2:1]": 22.890716049, + "./qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb[1:1:1]": 37.730140177, + "./qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb[1:1:1]": 29.557981728, + "./qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb[1:1:2]": 19.140300449, + "./qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb[1:1:1]": 35.147782681, + "./qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb[1:1:1]": 80.363806285, + "./qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb[1:1:1]": 36.886591042, + "./qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb[1:1:1]": 96.127670207, + "./qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb[1:1:1]": 29.63738232, + "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:1]": 40.676884766, + "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:2]": 33.670589823, + "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:3]": 49.532344741, + "./qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb[1:1:4]": 26.72703672, + "./qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb[1:1:1]": 39.389905743, + "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb[1:1:1:1:1:1]": 106.573905485, + "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb[1:1:1:2:1:1]": 66.689459408, + "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb[1:1:1:1:1:1]": 55.968446247, + "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb[1:1:1:2:1:1]": 55.246811297, + "./qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb[1:1:1:3:1:1]": 56.794391981, + "./qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb[1:1:1:1]": 31.65955514, + "./qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb[1:1:2:1]": 21.656923376, + "./qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb[1:1:1:1]": 26.708339691, + "./qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb[1:1:3:1]": 62.824405963, + "./qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb[1:1:1]": 31.234434872, + "./qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb[1:1:1]": 40.536372702, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:1]": 29.117662867, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:2]": 43.482509577, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:3]": 31.160626656, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:4]": 29.687395073, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:5]": 43.390254441, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:6]": 35.798662788, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:7]": 33.097351979, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:8]": 28.88935011, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:1:9]": 33.324033211, + "./qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb[1:1:2:1]": 60.409066574, + "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:1:1:1]": 35.046258191, + "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:1:2:1]": 60.714407121, + "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:2:1:1]": 38.009460066, + "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:2:2:1]": 60.369791271, + "./qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb[1:1:3:1:1]": 32.888158161, + "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:1:1:1]": 37.748935675, + "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:1:2:1]": 37.018473659, + "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:1:1:1:1:1]": 25.626364081, + "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:1:1:2:1:1]": 24.041695209, + "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:1:2:1:1]": 25.400112897, + "./qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb[1:1:2:2:1:1]": 23.729608075, + "./qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb[1:1:1]": 63.285966995, + "./qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb[1:1:1]": 59.695701744, + "./qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb[1:1:2]": 38.814699071, + "./qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb[1:1:1]": 45.99535396, + "./qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb[1:1:1:1]": 55.500998288, + "./qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb[1:1:1]": 13.888654807, + "./qa/specs/features/ee/browser_ui/9_tenant_scale/elasticsearch/elasticsearch_reindexing_spec.rb[1:1:1]": 31.149645579, + "./qa/specs/features/ee/browser_ui/9_tenant_scale/elasticsearch/elasticsearch_reindexing_spec.rb[1:1:2]": 92.607082319, + "./qa/specs/features/ee/browser_ui/9_tenant_scale/group/share_group_with_group_spec.rb[1:1:1]": 26.039019041 } diff --git a/qa/knapsack/master_report.json b/qa/knapsack/master_report.json index 8231675faeb..fe4c85bd81d 100644 --- a/qa/knapsack/master_report.json +++ b/qa/knapsack/master_report.json @@ -1,289 +1,289 @@ { - "qa/specs/features/api/10_govern/group_access_token_spec.rb": 36.748689889000005, - "qa/specs/features/api/10_govern/project_access_token_spec.rb": 100.77959961300002, - "qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb": 96.87526989899999, - "qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb": 102.907303401, - "qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb": 107.81779989099999, - "qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb": 8.881418332, - "qa/specs/features/api/1_manage/import/import_github_repo_spec.rb": 132.936269333, - "qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb": 56.816598805999995, - "qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb": 61.162899051, - "qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb": 209.70132820999999, - "qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb": 96.173647769, - "qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb": 89.778076775, - "qa/specs/features/api/1_manage/rate_limits_spec.rb": 21.815154841, - "qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb": 15.03905998, - "qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb": 39.579143645, - "qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb": 67.817038612, - "qa/specs/features/api/3_create/merge_request/push_options_spec.rb": 39.877210432, - "qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb": 1.339750631, - "qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb": 30.421427255, - "qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb": 24.981516762, - "qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb": 14.678412409, - "qa/specs/features/api/3_create/repository/files_spec.rb": 6.441263556, - "qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 14.791804148, - "qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb": 30.467549086, - "qa/specs/features/api/3_create/repository/storage_size_spec.rb": 27.377157513, - "qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb": 9.147974599, - "qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb": 73.730185215, - "qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb": 17.649168932, - "qa/specs/features/api/4_verify/file_variable_spec.rb": 105.35572889100001, - "qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb": 40.292875856, - "qa/specs/features/api/8_monitor/metrics_spec.rb": 4.589572055, + "qa/specs/features/api/10_govern/group_access_token_spec.rb": 39.176505588, + "qa/specs/features/api/10_govern/project_access_token_spec.rb": 91.05536891599999, + "qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb": 98.52159591, + "qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb": 104.551483562, + "qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb": 100.324842921, + "qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb": 14.807430715, + "qa/specs/features/api/1_manage/import/import_github_repo_spec.rb": 130.784218543, + "qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb": 64.662730943, + "qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb": 54.421507083, + "qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb": 191.824245544, + "qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb": 100.22250081, + "qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb": 104.033227667, + "qa/specs/features/api/1_manage/rate_limits_spec.rb": 19.836200967, + "qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb": 18.60979307, + "qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb": 14.490345451, + "qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb": 36.466250826, + "qa/specs/features/api/3_create/merge_request/push_options_spec.rb": 42.988665077, + "qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb": 3.085092701, + "qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb": 18.731098203, + "qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb": 31.756471593, + "qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb": 9.176217719, + "qa/specs/features/api/3_create/repository/files_spec.rb": 9.100291720000001, + "qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 19.789176191, + "qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb": 14.127716535, + "qa/specs/features/api/3_create/repository/storage_size_spec.rb": 17.738230164, + "qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb": 9.718849433, + "qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb": 93.993469578, + "qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb": 27.827293353, + "qa/specs/features/api/4_verify/file_variable_spec.rb": 81.614643212, + "qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb": 37.030485183, + "qa/specs/features/api/8_monitor/metrics_spec.rb": 4.303853109, "qa/specs/features/api/9_data_stores/users_spec.rb": 0.690633541, - "qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb": 148.778119399, - "qa/specs/features/api/9_tenant_scale/users_spec.rb": 7.7769207080000005, - "qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb": 27.588405841, - "qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb": 46.231992708, - "qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb": 57.553888476, - "qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb": 13.458955311, - "qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb": 86.727141342, - "qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb": 4.970114166, - "qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb": 27.669525792, - "qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb": 16.169293578, - "qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb": 42.577628715, - "qa/specs/features/browser_ui/10_govern/login/register_spec.rb": 87.952950578, - "qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb": 25.181579702, - "qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb": 41.360734357, - "qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb": 53.499264494, - "qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb": 34.572808644, - "qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb": 8.464928637, - "qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb": 12.230266086, - "qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb": 94.820041243, - "qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb": 70.163923479, - "qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb": 58.96069371, - "qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb": 68.29266376, - "qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb": 52.941611866, - "qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb": 144.893616525, - "qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb": 27.34963433, - "qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb": 36.015767611, - "qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb": 37.963573242, - "qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb": 12.927938319, - "qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb": 19.811932895, - "qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 20.828166886, - "qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 23.007679044, - "qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 240.205702511, - "qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb": 32.378738655, - "qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb": 38.887409131, - "qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 26.782780208, - "qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 23.678412682, - "qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb": 29.57041069, - "qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb": 24.674775355, - "qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb": 17.228493134, - "qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb": 106.950786121, - "qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb": 13.440053257, - "qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb": 31.145231421, - "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb": 88.787501135, - "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb": 34.937814825000004, - "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb": 26.17470458, - "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb": 32.885310584, - "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb": 54.64427657900001, - "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb": 40.031222661, - "qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb": 30.079835836, - "qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb": 91.78022778600001, - "qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb": 63.644932612, - "qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb": 30.368519293, - "qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 90.45895233499999, - "qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 145.387593325, - "qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb": 85.207053341, - "qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 141.369671603, - "qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb": 37.068462598, - "qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb": 79.385398953, - "qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb": 54.326760602, - "qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb": 74.449561397, - "qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 65.822850265, - "qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 33.774430334, - "qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb": 44.553965054, - "qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb": 22.782698586, - "qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 68.20510106900001, - "qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb": 35.565775844, - "qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb": 97.024146938, - "qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb": 36.136286218, - "qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb": 23.553872932, - "qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 31.752627947, - "qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb": 73.068276571, - "qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 71.790220715, - "qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 52.284437836, - "qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 38.343658607, - "qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb": 75.989601491, - "qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb": 50.77147622, - "qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 15.306413479, - "qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb": 23.180083188, - "qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb": 21.218950143, - "qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb": 20.068239239, - "qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 44.18048070099999, - "qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb": 42.654819145, - "qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb": 35.333107803999994, - "qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb": 48.41153438, - "qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb": 55.41003247, - "qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb": 39.550213226, - "qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb": 17.272513407, - "qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb": 8.439073346, - "qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb": 29.506290837, - "qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb": 25.578753549, - "qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb": 41.861474035, - "qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb": 26.689954233, - "qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb": 67.633111071, - "qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb": 14.42981476, - "qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb": 38.984309245999995, - "qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb": 70.768198214, - "qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb": 23.048958336, - "qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb": 178.750633299, - "qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb": 72.450729728, - "qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb": 101.058665466, - "qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb": 129.793125333, - "qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb": 122.625565137, - "qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb": 65.538729527, - "qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb": 97.80482527, - "qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb": 351.74379074399997, - "qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb": 366.752637057, - "qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb": 70.714951878, - "qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb": 131.576637143, - "qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb": 39.675315354, - "qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb": 117.389873128, - "qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb": 27.84489054, - "qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb": 43.507904949, - "qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb": 55.177185025, - "qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb": 93.248063191, - "qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb": 58.761583905, - "qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb": 84.806505638, - "qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb": 73.702687013, - "qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb": 180.233371283, - "qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb": 34.903017314, - "qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb": 19.747268518, - "qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb": 32.949971249, - "qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb": 23.765970791, - "qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb": 17.981969578, - "qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb": 19.530808179, - "qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb": 37.176360232, - "qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb": 47.515444821, - "qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb": 329.501627163, - "qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb": 166.640687758, - "qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb": 73.44111263, - "qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb": 90.026104761, - "qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb": 70.888136062, - "qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb": 325.030709762, - "qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb": 494.877632239, - "qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb": 299.726158061, - "qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb": 355.894419948, - "qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb": 294.872375748, - "qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb": 378.511772524, - "qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb": 87.854051053, - "qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 25.377972394, - "qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 248.82869324400002, - "qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 6.531194724, - "qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb": 62.926271454, - "qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb": 62.389787705, - "qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb": 59.156780717000004, - "qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb": 71.949245833, - "qa/specs/features/browser_ui/8_monitor/alert_management/recovery_alert_resolves_correct_alert_spec.rb": 26.572676154, + "qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb": 113.342388754, + "qa/specs/features/api/9_tenant_scale/users_spec.rb": 7.576689275, + "qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb": 25.491246615, + "qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb": 54.40607851, + "qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb": 53.929611186, + "qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb": 13.785073181, + "qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb": 105.09600871, + "qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb": 5.853250944, + "qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb": 31.138112638, + "qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb": 15.655818167, + "qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb": 41.830935048, + "qa/specs/features/browser_ui/10_govern/login/register_spec.rb": 92.216633301, + "qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb": 29.087858797, + "qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb": 36.609030039, + "qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb": 32.063652859, + "qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb": 30.140470085, + "qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb": 14.898678269, + "qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb": 11.457741844, + "qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb": 80.956942756, + "qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb": 61.587456981, + "qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb": 49.783134806, + "qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb": 75.398187787, + "qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb": 62.551203658, + "qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb": 179.079921323, + "qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb": 24.699574178, + "qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb": 31.446366729, + "qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb": 23.345811836, + "qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb": 11.585723651, + "qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb": 13.430481753, + "qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 20.990459605, + "qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 26.300396238, + "qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 228.58185635399997, + "qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb": 27.159370728, + "qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb": 46.197502022, + "qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 39.438472973, + "qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 28.561117183, + "qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb": 34.849981602, + "qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb": 30.922639705, + "qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb": 11.334030194, + "qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb": 103.748631788, + "qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb": 16.530162796, + "qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb": 29.868662989, + "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb": 62.549955809, + "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb": 51.971791847, + "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb": 23.423750975, + "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb": 40.495311468, + "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb": 52.48287242, + "qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb": 44.723394458, + "qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb": 27.279122592, + "qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb": 96.01619219, + "qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb": 47.946711635, + "qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb": 37.292467574, + "qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 87.951634137, + "qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 69.095170681, + "qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb": 89.353301884, + "qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 82.455191487, + "qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb": 37.496633679, + "qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb": 43.344028066, + "qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb": 61.870465045, + "qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb": 99.357846168, + "qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 108.65662449999999, + "qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 28.127477243, + "qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb": 19.554299625, + "qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb": 18.53950606, + "qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 37.138855639, + "qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb": 41.695306587000005, + "qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb": 95.087173198, + "qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb": 15.482273838, + "qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb": 17.088130169, + "qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 21.634184929, + "qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb": 63.780286729, + "qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 72.25449942, + "qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 45.47578834, + "qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 34.0460304, + "qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb": 75.586404426, + "qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb": 51.755314742, + "qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 15.57759222, + "qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb": 25.965786077, + "qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb": 26.613981945, + "qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb": 23.486877928, + "qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 35.437819741, + "qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb": 40.400395469, + "qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb": 27.052214895, + "qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb": 57.653632449, + "qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb": 69.516559777, + "qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb": 34.510858952, + "qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb": 15.504011263, + "qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb": 10.092901067, + "qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb": 14.182606942, + "qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb": 18.591736551, + "qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb": 33.235969554, + "qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb": 15.210947993000001, + "qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb": 57.79741400499999, + "qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb": 21.582307971, + "qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb": 52.897086774, + "qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb": 57.706077656000005, + "qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb": 30.677331388, + "qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb": 162.41345672699998, + "qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb": 143.641517368, + "qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb": 80.40537081299999, + "qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb": 163.169890989, + "qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb": 121.73887833, + "qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb": 46.964068505, + "qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb": 55.897837024, + "qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb": 310.10969266899997, + "qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb": 319.92834888100003, + "qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb": 86.907390959, + "qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb": 121.411431674, + "qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb": 36.921699422, + "qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb": 105.475351609, + "qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb": 30.960499654, + "qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb": 69.279146518, + "qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb": 56.21386151, + "qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb": 110.636965525, + "qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb": 64.510124169, + "qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb": 139.018442123, + "qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb": 56.130873145, + "qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb": 62.838020438, + "qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb": 20.270429665, + "qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb": 23.662636469, + "qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb": 30.993274153, + "qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb": 26.663382279, + "qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb": 20.681835993, + "qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb": 16.421210592, + "qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb": 68.496165287, + "qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb": 44.026361299, + "qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb": 346.051414333, + "qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb": 165.907375645, + "qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb": 54.621088382, + "qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb": 89.727124535, + "qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb": 56.272736953, + "qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb": 232.53489357, + "qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb": 531.994169464, + "qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb": 301.031649504, + "qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb": 256.45871393100003, + "qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb": 317.930835549, + "qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb": 299.929926871, + "qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb": 93.123572624, + "qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 40.923164628, + "qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 152.50910212, + "qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 14.747934885, + "qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb": 51.273995219, + "qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb": 65.405826745, + "qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb": 53.807391923, + "qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb": 58.381913755999996, + "qa/specs/features/browser_ui/8_monitor/alert_management/recovery_alert_resolves_correct_alert_spec.rb": 18.612875487, "qa/specs/features/browser_ui/9_data_stores/project/add_project_member_spec.rb": 22.367142461, "qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb": 27.810751683, "qa/specs/features/browser_ui/9_data_stores/project/view_project_activity_spec.rb": 15.037094806, - "qa/specs/features/browser_ui/9_tenant_scale/group/create_group_with_mattermost_team_spec.rb": 7.637430428, - "qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb": 66.67361918099999, - "qa/specs/features/browser_ui/9_tenant_scale/group/transfer_project_spec.rb": 28.54705019, - "qa/specs/features/browser_ui/9_tenant_scale/project/add_project_member_spec.rb": 36.495004679, - "qa/specs/features/browser_ui/9_tenant_scale/project/create_project_badge_spec.rb": 22.77783493, - "qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb": 62.51984216700001, - "qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb": 17.873880698, - "qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb": 55.330400639, - "qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb": 181.22851424699996, - "qa/specs/features/browser_ui/9_tenant_scale/project/view_project_activity_spec.rb": 28.142072277, - "qa/specs/features/browser_ui/9_tenant_scale/user/follow_user_activity_spec.rb": 49.140768645, - "qa/specs/features/browser_ui/9_tenant_scale/user/parent_group_access_termination_spec.rb": 31.675526669, - "qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb": 37.448731564, - "qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb": 40.151562624, - "qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb": 52.779530648999994, - "qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb": 57.994923916000005, - "qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb": 26.798864946, - "qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb": 11.316165249, - "qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb": 78.565359616, - "qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb": 56.606363925000004, - "qa/specs/features/ee/api/3_create/code_suggestions_spec.rb": 41.586085397000005, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/advanced_global_advanced_syntax_search_spec.rb": 121.07962714, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb": 39.074068445, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/commit_index/commit_index_spec.rb": 20.538624526, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/issues_index/issue_index_spec.rb": 69.628096222, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/main_index/blob_index_spec.rb": 98.944347351, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb": 59.333038368, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/notes_index/note_index_spec.rb": 45.730371219, - "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/user_index/user_index_spec.rb": 55.23396789, - "qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb": 120.410017676, - "qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb": 69.981076146, - "qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb": 87.439770461, - "qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb": 28.91454899, - "qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb": 130.455638878, - "qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb": 54.41057111, - "qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb": 152.096139383, - "qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb": 154.72142316800003, - "qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb": 110.55021925499999, - "qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb": 199.766808513, - "qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb": 104.092144427, - "qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb": 183.637753485, - "qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb": 69.200602261, - "qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb": 151.241116954, - "qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb": 117.80368880200001, - "qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb": 85.433710471, - "qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb": 355.557962348, - "qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb": 20.289002323, - "qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb": 24.600869353, - "qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb": 326.775724988, - "qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb": 22.447537764, - "qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb": 8.110863641, - "qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb": 18.01465773, - "qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb": 69.873956932, - "qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb": 118.375459768, - "qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb": 101.183865816, - "qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb": 14.192048308, - "qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb": 58.441882131999996, - "qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb": 188.68364248, - "qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb": 61.557919679, - "qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb": 39.130500766, - "qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb": 11.328566694, - "qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb": 10.165153364, - "qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb": 197.628648779, - "qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb": 37.649970935, - "qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb": 11.0974183, - "qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb": 31.755721733, - "qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb": 11.462498838, - "qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb": 25.760340238, - "qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb": 22.595121894000002, - "qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb": 30.187060882, - "qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb": 11.557951333, - "qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb": 32.387186465, - "qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb": 21.612366417, - "qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb": 22.71344926, - "qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb": 53.568658903, - "qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb": 17.672093606, - "qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb": 18.395458779, - "qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb": 30.256064316999996, - "qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb": 26.065709995, - "qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb": 14.315851726, - "qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb": 39.155969526999996, - "qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb": 48.642485804, - "qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb": 41.465057812, - "qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb": 30.501364072, - "qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb": 91.529703764, - "qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb": 39.586881532, - "qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb": 120.609385585, - "qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb": 30.602658116, - "qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb": 197.365108699, - "qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb": 34.340679891, - "qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb": 167.332642931, - "qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb": 222.35023873900002, - "qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb": 38.080491187, - "qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb": 81.403262162, - "qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb": 34.385134201, - "qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb": 37.732446262, - "qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb": 297.550874342, - "qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb": 206.89696229799998, - "qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb": 173.42842018, - "qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb": 62.8214752, - "qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb": 135.254123274, - "qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb": 42.272271643, - "qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb": 56.186165218, - "qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb": 21.83266261, - "qa/specs/features/ee/browser_ui/9_tenant_scale/elasticsearch/elasticsearch_reindexing_spec.rb": 89.766408195, - "qa/specs/features/ee/browser_ui/9_tenant_scale/group/share_group_with_group_spec.rb": 23.115335836 + "qa/specs/features/browser_ui/9_tenant_scale/group/create_group_with_mattermost_team_spec.rb": 7.104243912, + "qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb": 55.710686376999995, + "qa/specs/features/browser_ui/9_tenant_scale/group/transfer_project_spec.rb": 25.724117626, + "qa/specs/features/browser_ui/9_tenant_scale/project/add_project_member_spec.rb": 34.548432906, + "qa/specs/features/browser_ui/9_tenant_scale/project/create_project_badge_spec.rb": 22.612643177, + "qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb": 59.292128477, + "qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb": 20.043397138, + "qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb": 44.533386718, + "qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb": 181.053261051, + "qa/specs/features/browser_ui/9_tenant_scale/project/view_project_activity_spec.rb": 29.277003431, + "qa/specs/features/browser_ui/9_tenant_scale/user/follow_user_activity_spec.rb": 29.6309072, + "qa/specs/features/browser_ui/9_tenant_scale/user/parent_group_access_termination_spec.rb": 24.421995476, + "qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb": 41.211764101, + "qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb": 46.413296588, + "qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb": 44.23899489, + "qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb": 73.638566544, + "qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb": 29.562953975, + "qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb": 5.940498168, + "qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb": 78.366718749, + "qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb": 71.121441171, + "qa/specs/features/ee/api/3_create/code_suggestions_spec.rb": 45.753250745, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/advanced_global_advanced_syntax_search_spec.rb": 112.58514259500001, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb": 36.918142567, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/commit_index/commit_index_spec.rb": 101.979260884, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/issues_index/issue_index_spec.rb": 61.369233457, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/main_index/blob_index_spec.rb": 20.746524222, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb": 69.662616855, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/notes_index/note_index_spec.rb": 26.684938838, + "qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/user_index/user_index_spec.rb": 53.445630676, + "qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb": 118.780288993, + "qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb": 71.145434648, + "qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb": 82.468044455, + "qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb": 17.585545491, + "qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb": 133.700659851, + "qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb": 70.29304784300001, + "qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb": 117.720710441, + "qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb": 132.299217487, + "qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb": 129.528995354, + "qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb": 240.083432332, + "qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb": 94.99492927099999, + "qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb": 165.601342272, + "qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb": 68.88300071100001, + "qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb": 165.567898701, + "qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb": 127.783166739, + "qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb": 81.713224871, + "qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb": 433.892545852, + "qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb": 19.419528764, + "qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb": 39.387180892, + "qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb": 339.32426497299997, + "qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb": 24.957714262, + "qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb": 5.396372707, + "qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb": 13.24383258, + "qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb": 47.132167116, + "qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb": 121.623449753, + "qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb": 99.22665656, + "qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb": 9.987338635, + "qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb": 57.542533293, + "qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb": 90.962175234, + "qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb": 67.089455546, + "qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb": 45.024412004, + "qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb": 13.988895666, + "qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb": 12.150748481, + "qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb": 198.618111315, + "qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb": 54.053503038, + "qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb": 9.031209059, + "qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb": 29.767775438, + "qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb": 13.233084817, + "qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb": 27.14804958, + "qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb": 25.855073277, + "qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb": 34.027625922, + "qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb": 21.303439779, + "qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb": 25.468812878, + "qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb": 14.568871698, + "qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb": 26.677815288, + "qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb": 49.016745142, + "qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb": 26.511320585, + "qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb": 14.111546655, + "qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb": 23.170020004999998, + "qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb": 36.953367027, + "qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb": 25.536112939, + "qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb": 48.151708761, + "qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb": 37.730140177, + "qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb": 48.698282177, + "qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb": 35.147782681, + "qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb": 80.363806285, + "qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb": 36.886591042, + "qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb": 96.127670207, + "qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb": 29.63738232, + "qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb": 150.60685605, + "qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb": 39.389905743, + "qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb": 173.26336489300002, + "qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb": 168.009649525, + "qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb": 53.316478516000004, + "qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb": 89.532745654, + "qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb": 31.234434872, + "qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb": 40.536372702, + "qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb": 368.356913276, + "qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb": 227.02807481, + "qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb": 173.56518959599998, + "qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb": 63.285966995, + "qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb": 98.510400815, + "qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb": 45.99535396, + "qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb": 55.500998288, + "qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb": 13.888654807, + "qa/specs/features/ee/browser_ui/9_tenant_scale/elasticsearch/elasticsearch_reindexing_spec.rb": 123.75672789800001, + "qa/specs/features/ee/browser_ui/9_tenant_scale/group/share_group_with_group_spec.rb": 26.039019041 } diff --git a/scripts/frontend/quarantined_vue3_specs.txt b/scripts/frontend/quarantined_vue3_specs.txt index b4fe24b6d79..fe12441416f 100644 --- a/scripts/frontend/quarantined_vue3_specs.txt +++ b/scripts/frontend/quarantined_vue3_specs.txt @@ -139,7 +139,6 @@ spec/frontend/members/components/table/members_pagination_spec.js spec/frontend/members/components/table/members_table_spec.js spec/frontend/ml/model_registry/apps/show_ml_model_spec.js spec/frontend/ml/model_registry/components/model_edit_spec.js -spec/frontend/ml/model_registry/components/model_version_create_spec.js spec/frontend/notes/components/discussion_notes_spec.js spec/frontend/packages_and_registries/container_registry/explorer/components/list_page/image_list_row_spec.js spec/frontend/packages_and_registries/dependency_proxy/app_spec.js diff --git a/spec/features/projects/usage_quotas/storage_tab_spec.rb b/spec/features/projects/usage_quotas/storage_tab_spec.rb new file mode 100644 index 00000000000..f8c0bb6e6c9 --- /dev/null +++ b/spec/features/projects/usage_quotas/storage_tab_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Projects > Usage Quotas > Storage tab', :js, feature_category: :consumables_cost_management do + let_it_be_with_reload(:user) { create(:user) } + let_it_be_with_reload(:group) { create(:group) } + let_it_be_with_reload(:project) { create(:project, group: group) } + let_it_be_with_reload(:statistics) { create(:project_statistics, project: project, repository_size: 12.megabytes) } + + before_all do + group.add_owner(user) + end + + before do + sign_in(user) + end + + context 'when directly accessed via a url' do + before do + visit project_usage_quotas_path(project, anchor: 'storage-quota-tab') + end + + it 'displays the tab header' do + within_testid 'storage-tab-app' do + expect(page).to have_text('Usage breakdown') + end + end + + it 'displays the total project storage size' do + within_testid 'total-usage' do + expect(page).to have_text('12.0 MiB') + end + end + end +end diff --git a/spec/finders/todos_finder_spec.rb b/spec/finders/todos_finder_spec.rb index 6e419749066..a3a1771ccba 100644 --- a/spec/finders/todos_finder_spec.rb +++ b/spec/finders/todos_finder_spec.rb @@ -22,6 +22,17 @@ RSpec.describe TodosFinder, feature_category: :notifications do expect(described_class.new(nil, {}).execute).to be_empty end + context 'when user is a bot' do + it_behaves_like 'internal event tracking' do + let(:event) { 'request_todos_by_bot_user' } + let(:category) { described_class.name } + let(:user) { create(:user, :bot) } + let(:additional_properties) { { label: 'user_type', property: user.user_type } } + let(:event_attribute_overrides) { { project: nil, namespace: nil } } + subject(:finder_service) { finder.new(user).execute } + end + end + context 'filtering' do let!(:todo1) { create(:todo, user: user, project: project, target: issue) } let!(:todo2) { create(:todo, user: user, group: group, target: merge_request) } diff --git a/spec/finders/work_items/glql/work_items_finder_spec.rb b/spec/finders/work_items/glql/work_items_finder_spec.rb new file mode 100644 index 00000000000..4a81e7b08c1 --- /dev/null +++ b/spec/finders/work_items/glql/work_items_finder_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe WorkItems::Glql::WorkItemsFinder, feature_category: :markdown do + let_it_be(:resource_parent) { create(:group) } + let(:current_user) { create(:user) } + let(:context) { instance_double(GraphQL::Query::Context) } + let(:params) { {} } + let(:dummy_request) do + instance_double(ActionDispatch::Request, params: {}, referer: 'http://localhost') + end + + subject(:finder) { described_class.new(current_user, context, resource_parent, params) } + + describe '#use_elasticsearch_finder?' do + before do + allow(context).to receive(:[]).with(:request).and_return(dummy_request) + end + + it 'returns false by default' do + expect(finder.use_elasticsearch_finder?).to be_falsey + end + end +end diff --git a/spec/frontend/ci/runner/components/runner_assigned_item_spec.js b/spec/frontend/ci/runner/components/runner_assigned_item_spec.js index ab3c8aee6dd..aadd1f5a813 100644 --- a/spec/frontend/ci/runner/components/runner_assigned_item_spec.js +++ b/spec/frontend/ci/runner/components/runner_assigned_item_spec.js @@ -1,4 +1,4 @@ -import { GlAvatar, GlBadge, GlLink } from '@gitlab/ui'; +import { GlAvatar, GlAvatarLink, GlBadge } from '@gitlab/ui'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import RunnerAssignedItem from '~/ci/runner/components/runner_assigned_item.vue'; import { AVATAR_SHAPE_OPTION_RECT } from '~/vue_shared/constants'; @@ -37,11 +37,11 @@ describe('RunnerAssignedItem', () => { entityName: mockName, src: mockAvatarUrl, shape: AVATAR_SHAPE_OPTION_RECT, - size: 48, + size: 32, }; it('Shows an avatar as a link', () => { - const avatarLink = wrapper.findAllComponents(GlLink).at(0); + const avatarLink = wrapper.findAllComponents(GlAvatarLink).at(0); expect(avatarLink.attributes('href')).toBe(mockHref); expect(avatarLink.findComponent(GlAvatar).props()).toMatchObject(avatarProps); @@ -53,7 +53,7 @@ describe('RunnerAssignedItem', () => { }); it('does not display avatar as a link', () => { - expect(wrapper.findComponent(GlLink).exists()).toBe(false); + expect(wrapper.findComponent(GlAvatarLink).exists()).toBe(false); expect(wrapper.findComponent(GlAvatar).props()).toMatchObject(avatarProps); }); }); @@ -72,7 +72,7 @@ describe('RunnerAssignedItem', () => { }); it('does not display item as a link', () => { - expect(wrapper.findComponent(GlLink).exists()).toBe(false); + expect(wrapper.findComponent(GlAvatarLink).exists()).toBe(false); expect(wrapper.findByText(mockFullName).exists()).toBe(true); }); diff --git a/spec/frontend/ci/runner/components/runner_groups_spec.js b/spec/frontend/ci/runner/components/runner_groups_spec.js index e4f5f55ab4b..6af85c6be77 100644 --- a/spec/frontend/ci/runner/components/runner_groups_spec.js +++ b/spec/frontend/ci/runner/components/runner_groups_spec.js @@ -2,6 +2,7 @@ import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import RunnerGroups from '~/ci/runner/components/runner_groups.vue'; import RunnerAssignedItem from '~/ci/runner/components/runner_assigned_item.vue'; +import CrudComponent from '~/vue_shared/components/crud_component.vue'; import { runnerData, runnerWithGroupData } from '../mock_data'; @@ -12,7 +13,7 @@ const mockGroup = mockGroupRunner.groups.nodes[0]; describe('RunnerGroups', () => { let wrapper; - const findHeading = () => wrapper.find('h3'); + const findHeading = () => wrapper.findByTestId('crud-title'); const findRunnerAssignedItems = () => wrapper.findAllComponents(RunnerAssignedItem); const createComponent = ({ runner = mockGroupRunner, mountFn = shallowMountExtended } = {}) => { @@ -20,6 +21,9 @@ describe('RunnerGroups', () => { propsData: { runner, }, + stubs: { + CrudComponent, + }, }); }; @@ -40,6 +44,8 @@ describe('RunnerGroups', () => { const item = findRunnerAssignedItems().at(0); const { webUrl, name, fullName, avatarUrl } = mockGroup; + expect(wrapper.findByTestId('runner-groups').exists()).toBe(true); + expect(item.props()).toMatchObject({ href: webUrl, name, @@ -56,8 +62,8 @@ describe('RunnerGroups', () => { }); }); - it('Shows a "None" label', () => { - expect(wrapper.findByText('None').exists()).toBe(true); + it('Hides component', () => { + expect(wrapper.findByTestId('runner-groups').exists()).toBe(false); }); }); }); diff --git a/spec/frontend/ci/runner/components/runner_projects_spec.js b/spec/frontend/ci/runner/components/runner_projects_spec.js index 2cf9e577d7b..87525781d6e 100644 --- a/spec/frontend/ci/runner/components/runner_projects_spec.js +++ b/spec/frontend/ci/runner/components/runner_projects_spec.js @@ -1,13 +1,11 @@ -import { GlSearchBoxByType, GlSkeletonLoader } from '@gitlab/ui'; +import { GlSearchBoxByType } from '@gitlab/ui'; import Vue from 'vue'; import VueApollo from 'vue-apollo'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import { createAlert } from '~/alert'; -import { sprintf } from '~/locale'; import { - I18N_ASSIGNED_PROJECTS, I18N_CLEAR_FILTER_PROJECTS, I18N_FILTER_PROJECTS, I18N_NO_PROJECTS_FOUND, @@ -16,6 +14,7 @@ import { import RunnerProjects from '~/ci/runner/components/runner_projects.vue'; import RunnerAssignedItem from '~/ci/runner/components/runner_assigned_item.vue'; import RunnerPagination from '~/ci/runner/components/runner_pagination.vue'; +import CrudComponent from '~/vue_shared/components/crud_component.vue'; import { captureException } from '~/ci/runner/sentry_utils'; import runnerProjectsQuery from '~/ci/runner/graphql/show/runner_projects.query.graphql'; @@ -35,8 +34,7 @@ describe('RunnerProjects', () => { let wrapper; let mockRunnerProjectsQuery; - const findHeading = () => wrapper.find('h3'); - const findGlSkeletonLoading = () => wrapper.findComponent(GlSkeletonLoader); + const findCrud = () => wrapper.findComponent(CrudComponent); const findGlSearchBoxByType = () => wrapper.findComponent(GlSearchBoxByType); const findRunnerAssignedItems = () => wrapper.findAllComponents(RunnerAssignedItem); const findRunnerPagination = () => wrapper.findComponent(RunnerPagination); @@ -47,6 +45,9 @@ describe('RunnerProjects', () => { propsData: { runner: mockRunner, }, + stubs: { + CrudComponent, + }, }); }; @@ -91,9 +92,8 @@ describe('RunnerProjects', () => { }); it('Shows a heading', () => { - const expected = sprintf(I18N_ASSIGNED_PROJECTS, { projectCount: mockProjects.length }); - - expect(findHeading().text()).toBe(expected); + expect(findCrud().props('title')).toContain('Assigned Projects'); + expect(findCrud().props('count')).toBe(2); }); it('Shows projects', () => { @@ -193,12 +193,9 @@ describe('RunnerProjects', () => { it('shows loading indicator and no other content', () => { createComponent(); - expect(findGlSkeletonLoading().exists()).toBe(true); - expect(wrapper.findByText(I18N_NO_PROJECTS_FOUND).exists()).toBe(false); expect(findRunnerAssignedItems().length).toBe(0); - expect(findRunnerPagination().attributes('disabled')).toBeDefined(); expect(findGlSearchBoxByType().props('isLoading')).toBe(true); }); }); diff --git a/spec/frontend/ml/model_registry/components/model_version_create_spec.js b/spec/frontend/ml/model_registry/components/model_version_create_spec.js index 84fe1ca5b2f..9a85c91fd40 100644 --- a/spec/frontend/ml/model_registry/components/model_version_create_spec.js +++ b/spec/frontend/ml/model_registry/components/model_version_create_spec.js @@ -65,6 +65,7 @@ describe('ModelVersionCreate', () => { stubs: { PageHeading, UploadDropzone, + ImportArtifactZone, }, }); }; diff --git a/spec/graphql/resolvers/work_items_resolver_spec.rb b/spec/graphql/resolvers/work_items_resolver_spec.rb index a2449ce0cce..deb28774796 100644 --- a/spec/graphql/resolvers/work_items_resolver_spec.rb +++ b/spec/graphql/resolvers/work_items_resolver_spec.rb @@ -182,7 +182,45 @@ RSpec.describe Resolvers::WorkItemsResolver, feature_category: :team_planning do end end - def resolve_items(args = {}, context = { current_user: current_user }) + context 'when searching for work items in ES for GLQL request' do + let(:request_params) { { 'operationName' => 'GLQL' } } + let(:glql_ctx) do + { request: instance_double(ActionDispatch::Request, params: request_params, referer: 'http://localhost') } + end + + before do + allow(Gitlab::CurrentSettings).to receive(:elasticsearch_search?).and_return(true) + allow(project).to receive(:use_elasticsearch?).and_return(true) + end + + context 'when feature flag is enabled' do + before do + stub_feature_flags(glql_es_integration: true) + end + + it 'uses GLQL WorkItemsFinder' do + expect(::WorkItems::Glql::WorkItemsFinder).to receive(:new).and_call_original + + batch_sync { resolve_items({ label_name: item1.labels }, glql_ctx).to_a } + end + end + + context 'when feature flag is not enabled' do + before do + stub_feature_flags(glql_es_integration: false) + end + + it 'falls back to old WorkItemsFinder' do + expect(::WorkItems::Glql::WorkItemsFinder).not_to receive(:new) + + batch_sync { resolve_items({ label_name: item1.labels }, glql_ctx).to_a } + end + end + end + + def resolve_items(args = {}, context = {}) + context[:current_user] = current_user + resolve(described_class, obj: project, args: args, ctx: context, arg_style: :internal) end end diff --git a/spec/lib/api/entities/packages/conan/recipe_revision_spec.rb b/spec/lib/api/entities/packages/conan/recipe_revision_spec.rb index cc8d2f96785..8baf36604b9 100644 --- a/spec/lib/api/entities/packages/conan/recipe_revision_spec.rb +++ b/spec/lib/api/entities/packages/conan/recipe_revision_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe ::API::Entities::Packages::Conan::RecipeRevision, feature_category: :package_registry do - let(:recipe_revision) { build(:conan_recipe_revision) } + let(:recipe_revision) { build_stubbed(:conan_recipe_revision) } let(:entity) { described_class.new(recipe_revision) } subject { entity.as_json } diff --git a/spec/lib/api/entities/packages/conan/recipe_revisions_spec.rb b/spec/lib/api/entities/packages/conan/recipe_revisions_spec.rb new file mode 100644 index 00000000000..d8568af523e --- /dev/null +++ b/spec/lib/api/entities/packages/conan/recipe_revisions_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe API::Entities::Packages::Conan::RecipeRevisions, feature_category: :package_registry do + let_it_be(:package) { create(:conan_package, without_package_files: true) } + let_it_be(:revision1) { package.conan_recipe_revisions.first } + let_it_be(:revision2) { create(:conan_recipe_revision, package: package) } + + let(:entity) { described_class.new(package) } + + describe '#as_json' do + subject(:json) { entity.as_json } + + it 'exposes the reference and revisions', :aggregate_failures do + expect(json[:reference]).to eq(package.conan_recipe) + expect(json[:revisions].map(&:as_json)).to eq([ + { 'revision' => revision2.revision, 'time' => revision2.created_at.iso8601(3) }, + { 'revision' => revision1.revision, 'time' => revision1.created_at.iso8601(3) } + ]) + end + + context 'when the limit is reached' do + before do + stub_const("#{described_class}::MAX_REVISIONS_COUNT", 1) + end + + it 'limits the number of revisions to MAX_REVISIONS_COUNT' do + expect(json[:revisions].map(&:as_json)).to eq([ + 'revision' => revision2.revision, 'time' => revision2.created_at.iso8601(3) + ]) + end + end + end +end diff --git a/spec/lib/gitlab/ci/pipeline/chain/metrics_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/metrics_spec.rb index 7e29a6914ac..d4a6f4b9f48 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/metrics_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/metrics_spec.rb @@ -60,4 +60,35 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Metrics, feature_category: :continuo expect_no_snowplow_event end end + + context 'with inputs' do + let(:inputs) do + { + deploy_strategy: 'manual', + job_stage: 'deploy', + test_script: 'echo "test"' + } + end + + let(:command) do + Gitlab::Ci::Pipeline::Chain::Command.new( + project: project, + current_user: user, + origin_ref: 'master', + inputs: inputs + ) + end + + it 'tracks the usage of inputs' do + expect { run_chain }.to trigger_internal_events('create_pipeline_with_inputs').with( + project: pipeline.project, + user: pipeline.user, + additional_properties: { + label: 'push', + property: 'unknown_source', + value: 3 + } + ) + end + end end diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index 700ec87241c..21c92ad2284 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -178,7 +178,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.not_to allow_value(nil).for(:protected_paths_for_get_request) } it { is_expected.to allow_value([]).for(:protected_paths_for_get_request) } - it do + it 'validates wiki_page_max_content_bytes is an integer not less than 1KB' do is_expected.to validate_numericality_of(:wiki_page_max_content_bytes) .only_integer.is_greater_than_or_equal_to(1024) end @@ -204,17 +204,17 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value('default' => '90').for(:repository_storages_weighted) } it { is_expected.to allow_value('default' => nil).for(:repository_storages_weighted) } - it do + it 'rejects negative repository storage weights' do is_expected.not_to allow_value('default' => -1).for(:repository_storages_weighted) .with_message("value for 'default' must be between 0 and 100") end - it do + it 'rejects repository storage weights over 100' do is_expected.not_to allow_value('default' => 101).for(:repository_storages_weighted) .with_message("value for 'default' must be between 0 and 100") end - it do + it 'rejects repository storage weights with invalid keys' do is_expected.not_to allow_value('default' => 100, shouldntexist: 50).for(:repository_storages_weighted).with_message("can't include: shouldntexist") end @@ -263,7 +263,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.not_to allow_value(apdex_slo: '10').for(:prometheus_alert_db_indicators_settings) } it { is_expected.to allow_value(nil).for(:prometheus_alert_db_indicators_settings) } - it do + it 'accepts valid prometheus alert db indicators settings' do is_expected.to allow_value(valid_prometheus_alert_db_indicators_settings) .for(:prometheus_alert_db_indicators_settings) end @@ -484,7 +484,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'for grafana_url validations' do before do - subject.instance_variable_set(:@parsed_grafana_url, nil) + setting.instance_variable_set(:@parsed_grafana_url, nil) end it { is_expected.to allow_value(http).for(:grafana_url) } @@ -506,10 +506,10 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'with invalid grafana URL' do it 'adds an error' do - subject.grafana_url = " #{http}" - expect(subject.save).to be false + setting.grafana_url = " #{http}" + expect(setting.save).to be false - expect(subject.errors[:grafana_url]).to eq( + expect(setting.errors[:grafana_url]).to eq( [ 'must be a valid relative or absolute URL. ' \ 'Please check your Grafana URL setting in ' \ @@ -520,10 +520,10 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'with blocked grafana URL' do it 'adds an error' do - subject.grafana_url = javascript - expect(subject.save).to be false + setting.grafana_url = javascript + expect(setting.save).to be false - expect(subject.errors[:grafana_url]).to eq( + expect(setting.errors[:grafana_url]).to eq( [ 'is blocked: Only allowed schemes are http, https. Please check your ' \ 'Grafana URL setting in ' \ @@ -581,7 +581,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value("snowplow.gitlab.com").for(:snowplow_collector_hostname) } it { is_expected.to allow_value("db-snowplow.gitlab.com").for(:snowplow_database_collector_hostname) } - it do + it 'rejects snowplow database collector hostnames that exceed maximum length' do is_expected.not_to allow_value("#{'a' * 256}db-snowplow.gitlab.com") .for(:snowplow_database_collector_hostname) end @@ -734,14 +734,14 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do end end - it do + it 'validates local_markdown_version is an integer between 0 and 65535' do is_expected.to validate_numericality_of(:local_markdown_version) .only_integer .is_greater_than_or_equal_to(0) .is_less_than(65536) end - it do + it 'validates archive_builds_in_seconds is at least 1 day' do is_expected.to validate_numericality_of(:archive_builds_in_seconds) .only_integer .is_greater_than_or_equal_to(1.day.seconds.to_i) @@ -750,14 +750,14 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do describe 'usage_ping_enabled setting' do shared_examples 'usage ping enabled' do - it do + it 'properly reflects enabled status' do expect(setting.usage_ping_enabled).to be(true) expect(setting.usage_ping_enabled?).to be(true) end end shared_examples 'usage ping disabled' do - it do + it 'properly reflects disabled status' do expect(setting.usage_ping_enabled).to be(false) expect(setting.usage_ping_enabled?).to be(false) end @@ -985,72 +985,72 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do [:gitaly_timeout_medium, :gitaly_timeout_fast].each do |timeout_name| it "validates that #{timeout_name} is lower than timeout_default" do - subject[:gitaly_timeout_default] = 50 - subject[timeout_name] = 100 + setting[:gitaly_timeout_default] = 50 + setting[timeout_name] = 100 - expect(subject).to be_invalid + expect(setting).to be_invalid end end it 'accepts all timeouts equal' do - subject.gitaly_timeout_default = 0 - subject.gitaly_timeout_medium = 0 - subject.gitaly_timeout_fast = 0 + setting.gitaly_timeout_default = 0 + setting.gitaly_timeout_medium = 0 + setting.gitaly_timeout_fast = 0 - expect(subject).to be_valid + expect(setting).to be_valid end it 'accepts timeouts in descending order' do - subject.gitaly_timeout_default = 50 - subject.gitaly_timeout_medium = 30 - subject.gitaly_timeout_fast = 20 + setting.gitaly_timeout_default = 50 + setting.gitaly_timeout_medium = 30 + setting.gitaly_timeout_fast = 20 - expect(subject).to be_valid + expect(setting).to be_valid end it 'rejects timeouts in ascending order' do - subject.gitaly_timeout_default = 20 - subject.gitaly_timeout_medium = 30 - subject.gitaly_timeout_fast = 50 + setting.gitaly_timeout_default = 20 + setting.gitaly_timeout_medium = 30 + setting.gitaly_timeout_fast = 50 - expect(subject).to be_invalid + expect(setting).to be_invalid end it 'rejects medium timeout larger than default' do - subject.gitaly_timeout_default = 30 - subject.gitaly_timeout_medium = 50 - subject.gitaly_timeout_fast = 20 + setting.gitaly_timeout_default = 30 + setting.gitaly_timeout_medium = 50 + setting.gitaly_timeout_fast = 20 - expect(subject).to be_invalid + expect(setting).to be_invalid end it 'rejects medium timeout smaller than fast' do - subject.gitaly_timeout_default = 30 - subject.gitaly_timeout_medium = 15 - subject.gitaly_timeout_fast = 20 + setting.gitaly_timeout_default = 30 + setting.gitaly_timeout_medium = 15 + setting.gitaly_timeout_fast = 20 - expect(subject).to be_invalid + expect(setting).to be_invalid end it 'does not prevent from saving when gitaly timeouts were previously invalid' do - subject.update_column(:gitaly_timeout_default, Settings.gitlab.max_request_duration_seconds + 1) + setting.update_column(:gitaly_timeout_default, Settings.gitlab.max_request_duration_seconds + 1) - expect(subject.reload).to be_valid + expect(setting.reload).to be_valid end end describe 'enforcing terms' do it 'requires the terms to present when enforcing users to accept' do - subject.enforce_terms = true + setting.enforce_terms = true - expect(subject).to be_invalid + expect(setting).to be_invalid end it 'is valid when terms are created' do create(:term) - subject.enforce_terms = true + setting.enforce_terms = true - expect(subject).to be_valid + expect(setting).to be_valid end end @@ -1102,7 +1102,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'with asset proxy settings' do before do - subject.asset_proxy_enabled = true + setting.asset_proxy_enabled = true end describe '#asset_proxy_url' do @@ -1112,10 +1112,10 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.not_to allow_value(ftp).for(:asset_proxy_url) } it 'is not required when asset proxy is disabled' do - subject.asset_proxy_enabled = false - subject.asset_proxy_url = '' + setting.asset_proxy_enabled = false + setting.asset_proxy_url = '' - expect(subject).to be_valid + expect(setting).to be_valid end end @@ -1124,17 +1124,17 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value('anything').for(:asset_proxy_secret_key) } it 'is not required when asset proxy is disabled' do - subject.asset_proxy_enabled = false - subject.asset_proxy_secret_key = '' + setting.asset_proxy_enabled = false + setting.asset_proxy_secret_key = '' - expect(subject).to be_valid + expect(setting).to be_valid end it 'is encrypted' do - subject.asset_proxy_secret_key = 'shared secret' + setting.asset_proxy_secret_key = 'shared secret' - expect(subject.encrypted_asset_proxy_secret_key).to be_present - expect(subject.encrypted_asset_proxy_secret_key).not_to eq(subject.asset_proxy_secret_key) + expect(setting.encrypted_asset_proxy_secret_key).to be_present + expect(setting.encrypted_asset_proxy_secret_key).not_to eq(setting.asset_proxy_secret_key) end end @@ -1197,12 +1197,12 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value(OpenSSL::PKey::RSA.new(1024).to_pem).for(:ci_jwt_signing_key) } it 'is encrypted' do - subject.ci_jwt_signing_key = OpenSSL::PKey::RSA.new(1024).to_pem + setting.ci_jwt_signing_key = OpenSSL::PKey::RSA.new(1024).to_pem aggregate_failures do - expect(subject.encrypted_ci_jwt_signing_key).to be_present - expect(subject.encrypted_ci_jwt_signing_key_iv).to be_present - expect(subject.encrypted_ci_jwt_signing_key).not_to eq(subject.ci_jwt_signing_key) + expect(setting.encrypted_ci_jwt_signing_key).to be_present + expect(setting.encrypted_ci_jwt_signing_key_iv).to be_present + expect(setting.encrypted_ci_jwt_signing_key).not_to eq(setting.ci_jwt_signing_key) end end end @@ -1214,12 +1214,12 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value(OpenSSL::PKey::RSA.new(1024).to_pem).for(:ci_job_token_signing_key) } it 'is encrypted' do - subject.ci_job_token_signing_key = OpenSSL::PKey::RSA.new(1024).to_pem + setting.ci_job_token_signing_key = OpenSSL::PKey::RSA.new(1024).to_pem aggregate_failures do - expect(subject.encrypted_ci_job_token_signing_key).to be_present - expect(subject.encrypted_ci_job_token_signing_key_iv).to be_present - expect(subject.encrypted_ci_job_token_signing_key).not_to eq(subject.ci_job_token_signing_key) + expect(setting.encrypted_ci_job_token_signing_key).to be_present + expect(setting.encrypted_ci_job_token_signing_key_iv).to be_present + expect(setting.encrypted_ci_job_token_signing_key).not_to eq(setting.ci_job_token_signing_key) end end end @@ -1231,12 +1231,12 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value(OpenSSL::PKey::RSA.new(1024).to_pem).for(:customers_dot_jwt_signing_key) } it 'is encrypted' do - subject.customers_dot_jwt_signing_key = OpenSSL::PKey::RSA.new(1024).to_pem + setting.customers_dot_jwt_signing_key = OpenSSL::PKey::RSA.new(1024).to_pem aggregate_failures do - expect(subject.encrypted_customers_dot_jwt_signing_key).to be_present - expect(subject.encrypted_customers_dot_jwt_signing_key_iv).to be_present - expect(subject.encrypted_customers_dot_jwt_signing_key).not_to eq(subject.customers_dot_jwt_signing_key) + expect(setting.encrypted_customers_dot_jwt_signing_key).to be_present + expect(setting.encrypted_customers_dot_jwt_signing_key_iv).to be_present + expect(setting.encrypted_customers_dot_jwt_signing_key).not_to eq(setting.customers_dot_jwt_signing_key) end end end @@ -1245,12 +1245,12 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value(nil).for(:cloud_license_auth_token) } it 'is encrypted' do - subject.cloud_license_auth_token = 'token-from-customers-dot' + setting.cloud_license_auth_token = 'token-from-customers-dot' aggregate_failures do - expect(subject.encrypted_cloud_license_auth_token).to be_present - expect(subject.encrypted_cloud_license_auth_token_iv).to be_present - expect(subject.encrypted_cloud_license_auth_token).not_to eq(subject.cloud_license_auth_token) + expect(setting.encrypted_cloud_license_auth_token).to be_present + expect(setting.encrypted_cloud_license_auth_token_iv).to be_present + expect(setting.encrypted_cloud_license_auth_token).not_to eq(setting.cloud_license_auth_token) end end end @@ -1259,7 +1259,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'for static objects external storage' do context 'when URL is set' do before do - subject.static_objects_external_storage_url = http + setting.static_objects_external_storage_url = http end it { is_expected.not_to allow_value(nil).for(:static_objects_external_storage_auth_token) } @@ -1268,28 +1268,28 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'with sourcegraph settings' do it 'is invalid if sourcegraph is enabled and no url is provided' do - allow(subject).to receive(:sourcegraph_enabled).and_return(true) + allow(setting).to receive(:sourcegraph_enabled).and_return(true) - expect(subject.sourcegraph_url).to be_nil + expect(setting.sourcegraph_url).to be_nil is_expected.to be_invalid end end context 'with gitpod settings' do it 'is invalid if gitpod is enabled and no url is provided' do - allow(subject).to receive_messages(gitpod_enabled: true, gitpod_url: nil) + allow(setting).to receive_messages(gitpod_enabled: true, gitpod_url: nil) is_expected.to be_invalid end it 'is invalid if gitpod is enabled and an empty url is provided' do - allow(subject).to receive_messages(gitpod_enabled: true, gitpod_url: '') + allow(setting).to receive_messages(gitpod_enabled: true, gitpod_url: '') is_expected.to be_invalid end it 'is invalid if gitpod is enabled and an invalid url is provided' do - allow(subject).to receive_messages(gitpod_enabled: true, gitpod_url: 'javascript:alert("test")//') + allow(setting).to receive_messages(gitpod_enabled: true, gitpod_url: 'javascript:alert("test")//') is_expected.to be_invalid end @@ -1329,7 +1329,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'with prometheus settings' do it 'validates metrics_method_call_threshold' do - allow(subject).to receive(:prometheus_metrics_enabled).and_return(true) + allow(setting).to receive(:prometheus_metrics_enabled).and_return(true) is_expected.to validate_numericality_of(:metrics_method_call_threshold).is_greater_than_or_equal_to(0) end @@ -1364,7 +1364,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'for default_syntax_highlighting_theme' do it { is_expected.to allow_value(*Gitlab::ColorSchemes.valid_ids).for(:default_syntax_highlighting_theme) } - it do + it 'rejects invalid values for default syntax highlighting theme' do is_expected.not_to allow_value(nil, 0, Gitlab::ColorSchemes.available_schemes.size + 1).for(:default_syntax_highlighting_theme) end @@ -1389,7 +1389,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'for default_project_visibility, default_group_visibility and restricted_visibility_levels validations' do before do - subject.restricted_visibility_levels = [10] + setting.restricted_visibility_levels = [10] end it { is_expected.not_to allow_value(10).for(:default_group_visibility) } @@ -1398,19 +1398,19 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do it { is_expected.to allow_value(20).for(:default_project_visibility) } it 'sets error messages when default visibility settings are not valid' do - subject.default_group_visibility = 10 - subject.default_project_visibility = 10 + setting.default_group_visibility = 10 + setting.default_project_visibility = 10 - expect(subject).not_to be_valid - expect(subject.errors.messages[:default_group_visibility].first) + expect(setting).not_to be_valid + expect(setting.errors.messages[:default_group_visibility].first) .to eq("cannot be set to a restricted visibility level") - expect(subject.errors.messages[:default_project_visibility].first) + expect(setting.errors.messages[:default_project_visibility].first) .to eq("cannot be set to a restricted visibility level") end end describe 'sentry_clientside_traces_sample_rate' do - it do + it 'validates sentry_clientside_traces_sample_rate is between 0 and 1' do is_expected.to validate_numericality_of(:sentry_clientside_traces_sample_rate) .is_greater_than_or_equal_to(0) .is_less_than_or_equal_to(1) @@ -1575,24 +1575,24 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do end it 'removes unknown sources (as strings) from the array' do - subject.disabled_oauth_sign_in_sources = %w[github test] + setting.disabled_oauth_sign_in_sources = %w[github test] - expect(subject).to be_valid - expect(subject.disabled_oauth_sign_in_sources).to eq ['github'] + expect(setting).to be_valid + expect(setting.disabled_oauth_sign_in_sources).to eq ['github'] end it 'removes unknown sources (as symbols) from the array' do - subject.disabled_oauth_sign_in_sources = %i[github test] + setting.disabled_oauth_sign_in_sources = %i[github test] - expect(subject).to be_valid - expect(subject.disabled_oauth_sign_in_sources).to eq ['github'] + expect(setting).to be_valid + expect(setting.disabled_oauth_sign_in_sources).to eq ['github'] end it 'ignores nil' do - subject.disabled_oauth_sign_in_sources = nil + setting.disabled_oauth_sign_in_sources = nil - expect(subject).to be_valid - expect(subject.disabled_oauth_sign_in_sources).to be_empty + expect(setting).to be_valid + expect(setting.disabled_oauth_sign_in_sources).to be_empty end end @@ -1637,7 +1637,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'for validations' do it { is_expected.to validate_presence_of(:diff_max_patch_bytes) } - it do + it 'validates diff_max_patch_bytes is an integer within defined bounds' do is_expected.to validate_numericality_of(:diff_max_patch_bytes) .only_integer .is_greater_than_or_equal_to(Gitlab::Git::Diff::DEFAULT_MAX_PATCH_BYTES) @@ -1650,7 +1650,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'for validations' do it { is_expected.to validate_presence_of(:diff_max_files) } - it do + it 'validates diff_max_files is an integer within allowed bounds' do is_expected .to validate_numericality_of(:diff_max_files) .only_integer @@ -1664,7 +1664,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do context 'for validations' do it { is_expected.to validate_presence_of(:diff_max_lines) } - it do + it 'validates diff_max_lines is an integer within allowed bounds' do is_expected .to validate_numericality_of(:diff_max_lines) .only_integer @@ -1704,7 +1704,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do where(users_over_minimum: [-1, 0, 1]) with_them do - it do + it 'permits instance review when user count meets minimum requirement' do expect(Rails.cache).to receive(:fetch).with('limited_users_count', anything) .and_return(::ApplicationSetting::INSTANCE_REVIEW_MIN_USERS + users_over_minimum) is_expected.to be(users_over_minimum >= 0) @@ -1715,51 +1715,51 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do describe 'email_restrictions' do context 'when email restrictions are enabled' do before do - subject.email_restrictions_enabled = true + setting.email_restrictions_enabled = true end it 'allows empty email restrictions' do - subject.email_restrictions = '' + setting.email_restrictions = '' - expect(subject).to be_valid + expect(setting).to be_valid end it 'accepts valid email restrictions regex' do - subject.email_restrictions = '\+' + setting.email_restrictions = '\+' - expect(subject).to be_valid + expect(setting).to be_valid end it 'does not accept invalid email restrictions regex' do - subject.email_restrictions = '+' + setting.email_restrictions = '+' - expect(subject).not_to be_valid + expect(setting).not_to be_valid end it 'sets an error when regex is not valid' do - subject.email_restrictions = '+' + setting.email_restrictions = '+' - expect(subject).not_to be_valid - expect(subject.errors.messages[:email_restrictions].first) + expect(setting).not_to be_valid + expect(setting.errors.messages[:email_restrictions].first) .to eq(_('not valid RE2 syntax: no argument for repetition operator: +')) end end context 'when email restrictions are disabled' do before do - subject.email_restrictions_enabled = false + setting.email_restrictions_enabled = false end it 'allows empty email restrictions' do - subject.email_restrictions = '' + setting.email_restrictions = '' - expect(subject).to be_valid + expect(setting).to be_valid end it 'invalid regex is not valid' do - subject.email_restrictions = '+' + setting.email_restrictions = '+' - expect(subject).not_to be_valid + expect(setting).not_to be_valid end end end @@ -1768,45 +1768,45 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do describe 'kroki_format_supported?' do it 'returns true when Excalidraw is enabled' do - subject.kroki_formats_excalidraw = true - expect(subject.kroki_format_supported?('excalidraw')).to be(true) + setting.kroki_formats_excalidraw = true + expect(setting.kroki_format_supported?('excalidraw')).to be(true) end it 'returns true when BlockDiag is enabled' do - subject.kroki_formats_blockdiag = true + setting.kroki_formats_blockdiag = true # format "blockdiag" aggregates multiple diagram types: actdiag, blockdiag, nwdiag... - expect(subject.kroki_format_supported?('actdiag')).to be(true) - expect(subject.kroki_format_supported?('blockdiag')).to be(true) + expect(setting.kroki_format_supported?('actdiag')).to be(true) + expect(setting.kroki_format_supported?('blockdiag')).to be(true) end it 'returns false when BlockDiag is disabled' do - subject.kroki_formats_blockdiag = false + setting.kroki_formats_blockdiag = false # format "blockdiag" aggregates multiple diagram types: actdiag, blockdiag, nwdiag... - expect(subject.kroki_format_supported?('actdiag')).to be(false) - expect(subject.kroki_format_supported?('blockdiag')).to be(false) + expect(setting.kroki_format_supported?('actdiag')).to be(false) + expect(setting.kroki_format_supported?('blockdiag')).to be(false) end it 'returns false when the diagram type is optional and not enabled' do - expect(subject.kroki_format_supported?('bpmn')).to be(false) + expect(setting.kroki_format_supported?('bpmn')).to be(false) end it 'returns true when the diagram type is enabled by default' do - expect(subject.kroki_format_supported?('vegalite')).to be(true) - expect(subject.kroki_format_supported?('nomnoml')).to be(true) - expect(subject.kroki_format_supported?('unknown-diagram-type')).to be(false) + expect(setting.kroki_format_supported?('vegalite')).to be(true) + expect(setting.kroki_format_supported?('nomnoml')).to be(true) + expect(setting.kroki_format_supported?('unknown-diagram-type')).to be(false) end it 'returns false when the diagram type is unknown' do - expect(subject.kroki_format_supported?('unknown-diagram-type')).to be(false) + expect(setting.kroki_format_supported?('unknown-diagram-type')).to be(false) end end describe 'kroki_formats' do it 'returns the value for kroki_formats' do - subject.kroki_formats = { blockdiag: true, bpmn: false, excalidraw: true } - expect(subject.kroki_formats_blockdiag).to be(true) - expect(subject.kroki_formats_bpmn).to be(false) - expect(subject.kroki_formats_excalidraw).to be(true) + setting.kroki_formats = { blockdiag: true, bpmn: false, excalidraw: true } + expect(setting.kroki_formats_blockdiag).to be(true) + expect(setting.kroki_formats_bpmn).to be(false) + expect(setting.kroki_formats_excalidraw).to be(true) end end @@ -1814,11 +1814,11 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do let(:defaults) { { name: 'main', push_access_level: 30, merge_access_level: 30, unprotect_access_level: 40 } } it 'returns the value for default_branch_protection_defaults' do - subject.default_branch_protection_defaults = defaults - expect(subject.default_branch_protection_defaults['name']).to eq('main') - expect(subject.default_branch_protection_defaults['push_access_level']).to eq(30) - expect(subject.default_branch_protection_defaults['merge_access_level']).to eq(30) - expect(subject.default_branch_protection_defaults['unprotect_access_level']).to eq(40) + setting.default_branch_protection_defaults = defaults + expect(setting.default_branch_protection_defaults['name']).to eq('main') + expect(setting.default_branch_protection_defaults['push_access_level']).to eq(30) + expect(setting.default_branch_protection_defaults['merge_access_level']).to eq(30) + expect(setting.default_branch_protection_defaults['unprotect_access_level']).to eq(40) end context 'when provided with content that does not match the JSON schema' do @@ -1891,12 +1891,12 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do end describe '#static_objects_external_storage_auth_token=', :aggregate_failures do - subject { setting.static_objects_external_storage_auth_token = token } + subject(:set_auth_token) { setting.static_objects_external_storage_auth_token = token } let(:token) { 'Test' } it 'stores an encrypted version of the token' do - subject + set_auth_token expect(setting[:static_objects_external_storage_auth_token]).to be_nil expect(setting[:static_objects_external_storage_auth_token_encrypted]).to be_present @@ -1907,7 +1907,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do let(:token) { '' } it 'removes an encrypted version of the token' do - subject + set_auth_token expect(setting[:static_objects_external_storage_auth_token]).to be_nil expect(setting[:static_objects_external_storage_auth_token_encrypted]).to be_nil @@ -1919,7 +1919,7 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do let(:plaintext_token) { Devise.friendly_token(20) } it 'encrypts the plaintext token' do - subject + set_auth_token described_class.update!(static_objects_external_storage_auth_token: plaintext_token) @@ -1933,25 +1933,25 @@ RSpec.describe ApplicationSetting, feature_category: :shared, type: :model do describe '#database_grafana_api_key' do it 'is encrypted' do - subject.database_grafana_api_key = 'somesecret' + setting.database_grafana_api_key = 'somesecret' aggregate_failures do - expect(subject.encrypted_database_grafana_api_key).to be_present - expect(subject.encrypted_database_grafana_api_key_iv).to be_present - expect(subject.encrypted_database_grafana_api_key).not_to eq(subject.database_grafana_api_key) + expect(setting.encrypted_database_grafana_api_key).to be_present + expect(setting.encrypted_database_grafana_api_key_iv).to be_present + expect(setting.encrypted_database_grafana_api_key).not_to eq(setting.database_grafana_api_key) end end end context "when inactive project deletion" do it "validates warning email after months is less than delete after months" do - subject[:inactive_projects_delete_after_months] = 3 - subject[:inactive_projects_send_warning_email_after_months] = 6 + setting[:inactive_projects_delete_after_months] = 3 + setting[:inactive_projects_send_warning_email_after_months] = 6 - expect(subject).to be_invalid + expect(setting).to be_invalid end - it do + it 'validates inactive project warning email period is greater than zero' do is_expected.to validate_numericality_of(:inactive_projects_send_warning_email_after_months).is_greater_than(0) end diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index 3e288f523c7..1a2da0730ab 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -198,32 +198,6 @@ RSpec.describe Ci::Build, feature_category: :continuous_integration, factory_def it_behaves_like 'a triggerable processable', :ci_build - describe '.ref_protected' do - subject { described_class.ref_protected } - - context 'when protected is true' do - let!(:job) { create(:ci_build, :protected, pipeline: pipeline) } - - it { is_expected.to include(job) } - end - - context 'when protected is false' do - let!(:job) { create(:ci_build, pipeline: pipeline) } - - it { is_expected.not_to include(job) } - end - - context 'when protected is nil' do - let!(:job) { create(:ci_build, pipeline: pipeline) } - - before do - job.update_attribute(:protected, nil) - end - - it { is_expected.not_to include(job) } - end - end - describe '.with_downloadable_artifacts' do subject { described_class.with_downloadable_artifacts } diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index eea75e349df..c443d84cfe0 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -6,7 +6,7 @@ RSpec.describe CommitStatus, feature_category: :continuous_integration do let_it_be(:project) { create(:project, :repository) } let_it_be_with_reload(:pipeline) do - create(:ci_pipeline, project: project, sha: project.commit.id) + create(:ci_pipeline, project: project, sha: project.commit.id, user: create(:user)) end let(:commit_status) { create_status } @@ -611,6 +611,44 @@ RSpec.describe CommitStatus, feature_category: :continuous_integration do end end + describe '.ref_protected' do + subject { described_class.ref_protected } + + context 'when protected is true' do + let!(:job) { create_status(protected: true) } + + it { is_expected.to include(job) } + end + + context 'when protected is false' do + let!(:job) { create_status(protected: false) } + + it { is_expected.not_to include(job) } + end + + context 'when protected is nil' do + let!(:job) { create_status } + + before do + job.update_attribute(:protected, nil) + end + + it { is_expected.not_to include(job) } + end + end + + describe '.for_user' do + subject { described_class.for_user(pipeline.user).order(:id) } + + let(:statuses) do + [create_status(user: create(:user)), create_status(user: pipeline.user)] + end + + it 'returns statuses for the specified user' do + is_expected.to eq(statuses.values_at(1)) + end + end + describe '#before_sha' do subject { commit_status.before_sha } diff --git a/spec/requests/api/conan/v2/project_packages_spec.rb b/spec/requests/api/conan/v2/project_packages_spec.rb index 1bbc6ce42e3..5e23b94a63a 100644 --- a/spec/requests/api/conan/v2/project_packages_spec.rb +++ b/spec/requests/api/conan/v2/project_packages_spec.rb @@ -247,4 +247,42 @@ RSpec.describe API::Conan::V2::ProjectPackages, feature_category: :package_regis it_behaves_like 'package not found' it_behaves_like 'project not found by project id' end + + describe 'GET /api/v4/projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username' \ + '/:package_channel/revisions' do + include_context 'for conan recipe endpoints' + + let(:recipe_path) { package.conan_recipe_path } + let(:url_suffix) { "#{recipe_path}/revisions" } + let_it_be(:revision1) { package.conan_recipe_revisions.first } + let_it_be(:revision2) { create(:conan_recipe_revision, package: package) } + + subject(:request) { get api(url), headers: headers } + + it 'returns the reference and a list of revisions in descending order' do + request + + expect(response).to have_gitlab_http_status(:ok) + + expect(json_response['reference']).to eq(package.conan_recipe) + expect(json_response['revisions']).to eq([ + { + 'revision' => revision2.revision, + 'time' => revision2.created_at.iso8601(3) + }, + { + 'revision' => revision1.revision, + 'time' => revision1.created_at.iso8601(3) + } + ]) + end + + it_behaves_like 'conan package revisions feature flag check' + it_behaves_like 'packages feature check' + it_behaves_like 'enforcing read_packages job token policy' + it_behaves_like 'accept get request on private project with access to package registry for everyone' + it_behaves_like 'conan FIPS mode' + it_behaves_like 'package not found' + it_behaves_like 'project not found by project id' + end end diff --git a/spec/services/ci/create_commit_status_service_spec.rb b/spec/services/ci/create_commit_status_service_spec.rb index 6627eb35c36..3946a469b24 100644 --- a/spec/services/ci/create_commit_status_service_spec.rb +++ b/spec/services/ci/create_commit_status_service_spec.rb @@ -12,6 +12,7 @@ RSpec.describe Ci::CreateCommitStatusService, :clean_gitlab_redis_cache, feature let_it_be(:guest) { create_user(:guest) } let_it_be(:reporter) { create_user(:reporter) } let_it_be(:developer) { create_user(:developer) } + let_it_be_with_reload(:plan_limits) { create(:plan_limits, :default_plan) } let(:user) { developer } let(:sha) { commit.id } @@ -68,6 +69,46 @@ RSpec.describe Ci::CreateCommitStatusService, :clean_gitlab_redis_cache, feature expect(response.message).to eq('403 Forbidden') end end + + context 'when the pipeline size is exceeded' do + before do + plan_limits.update!(ci_pipeline_size: 1) + create(:ci_build, pipeline: pipeline) + end + + it 'creates commit status on a new pipeline' do + expect(response).to be_success + expect(job.sha).to eq(commit.id) + expect(job.status).to eq(status) + expect(job.name).to eq('default') + expect(job.ref).not_to be_empty + expect(job.pipeline_id).to be_present + expect(job.pipeline_id).not_to eq(pipeline.id) + end + + context 'when the flag is disabled' do + before do + stub_feature_flags(ci_limit_commit_statuses: false) + end + + it 'creates commit status on the pipeline and logs a message' do + expect(Gitlab::AppJsonLogger).to receive(:info).with( + a_hash_including( + class: described_class.name, + project_id: project.id, + subscription_plan: project.actual_plan_name + ) + ) + + expect(response).to be_success + expect(job.sha).to eq(commit.id) + expect(job.status).to eq(status) + expect(job.name).to eq('default') + expect(job.ref).not_to be_empty + expect(job.pipeline_id).to eq(pipeline.id) + end + end + end end end end @@ -90,6 +131,23 @@ RSpec.describe Ci::CreateCommitStatusService, :clean_gitlab_redis_cache, feature expect(response).to be_success expect(job.status).to eq(status) end + + context 'when the pipeline size is exceeded' do + before do + plan_limits.update!(ci_pipeline_size: 1) + create(:ci_build, pipeline: ::Ci::Pipeline.last) + end + + it "changes existing job to #{status}" do + expect { response } + .to not_change { ::Ci::Pipeline.count }.from(1) + .and not_change { ::Ci::Stage.count }.from(2) + .and not_change { ::CommitStatus.count }.from(2) + + expect(response).to be_success + expect(job.status).to eq(status) + end + end end end @@ -368,6 +426,24 @@ RSpec.describe Ci::CreateCommitStatusService, :clean_gitlab_redis_cache, feature expect(response.message).to eq("404 Pipeline for pipeline_id, sha and ref Not Found") end end + + context 'when the specified pipeline has too many jobs' do + before do + plan_limits.update!(ci_pipeline_size: 1) + create(:ci_build, pipeline: other_pipeline) + end + + it 'returns a service error' do + expect { response } + .to not_change { ::Ci::Pipeline.count }.from(2) + .and not_change { ::Ci::Stage.count }.from(1) + .and not_change { ::CommitStatus.count }.from(1) + + expect(response).to be_error + expect(response.http_status).to eq(:unprocessable_entity) + expect(response.message).to eq("The number of jobs has exceeded the limit") + end + end end end diff --git a/spec/services/ci/create_downstream_pipeline_service_spec.rb b/spec/services/ci/create_downstream_pipeline_service_spec.rb index ec2ed09492b..460ea3bf570 100644 --- a/spec/services/ci/create_downstream_pipeline_service_spec.rb +++ b/spec/services/ci/create_downstream_pipeline_service_spec.rb @@ -196,13 +196,11 @@ RSpec.describe Ci::CreateDownstreamPipelineService, '#execute', feature_category let(:trigger) do { trigger: { - include: { - project: downstream_project.full_path, - file: '.gitlab-ci.yml', - inputs: { - stage: 'deploy', - suffix: 'build' - } + project: downstream_project.full_path, + file: '.gitlab-ci.yml', + inputs: { + stage: 'deploy', + suffix: 'build' } } } @@ -214,6 +212,15 @@ RSpec.describe Ci::CreateDownstreamPipelineService, '#execute', feature_category end it_behaves_like 'creates a downstream pipeline with the inputs provided' + + it 'tracks the usage of inputs' do + expect { subject }.to trigger_internal_events('create_pipeline_with_inputs').with( + category: 'Gitlab::Ci::Pipeline::Chain::Metrics', + additional_properties: { value: 2, label: 'pipeline', property: 'repository_source' }, + project: downstream_project, + user: user + ) + end end context 'when the downstream pipeline is for the same project' do @@ -238,6 +245,12 @@ RSpec.describe Ci::CreateDownstreamPipelineService, '#execute', feature_category end it_behaves_like 'creates a downstream pipeline with the inputs provided' + + it 'does not track the usage of inputs because the inputs are in the internal include' do + expect { subject }.not_to trigger_internal_events('create_pipeline_with_inputs') + + subject + end end end diff --git a/spec/services/ci/create_pipeline_service/inputs_spec.rb b/spec/services/ci/create_pipeline_service/inputs_spec.rb index a5545955f6c..2faa5aef812 100644 --- a/spec/services/ci/create_pipeline_service/inputs_spec.rb +++ b/spec/services/ci/create_pipeline_service/inputs_spec.rb @@ -117,6 +117,15 @@ RSpec.describe Ci::CreatePipelineService, feature_category: :pipeline_compositio expect(my_job_deploy.options[:script]).to eq(['echo "Deploying to staging using blue-green strategy"']) end + it 'tracks the usage of inputs' do + expect { execute }.to trigger_internal_events('create_pipeline_with_inputs').with( + category: 'Gitlab::Ci::Pipeline::Chain::Metrics', + additional_properties: { value: 5, label: 'push', property: config_source }, + project: project, + user: user + ) + end + context 'when the FF ci_inputs_for_pipelines is disabled' do before do stub_feature_flags(ci_inputs_for_pipelines: false) @@ -136,6 +145,8 @@ RSpec.describe Ci::CreatePipelineService, feature_category: :pipeline_compositio end context 'when the project CI config is in the current repository file' do + let(:config_source) { 'repository_source' } + let(:project_files) do { '.gitlab-ci.yml' => complex_inputs_example_yaml } end @@ -150,6 +161,8 @@ RSpec.describe Ci::CreatePipelineService, feature_category: :pipeline_compositio end context 'when the project CI config is in another project repository file' do + let(:config_source) { 'external_project_source' } + let_it_be(:project_2) do create(:project, :custom_repo, files: { 'a_config_file.yml' => complex_inputs_example_yaml }) end @@ -164,6 +177,8 @@ RSpec.describe Ci::CreatePipelineService, feature_category: :pipeline_compositio end context 'when the project CI config is a remote file' do + let(:config_source) { 'remote_source' } + let(:project_ci_config_path) { 'https://gitlab.example.com/something/.gitlab-ci.yml' } before do @@ -175,6 +190,8 @@ RSpec.describe Ci::CreatePipelineService, feature_category: :pipeline_compositio end context 'when the CI config is passed as content' do + let(:config_source) { 'parameter_source' } + let(:content) { complex_inputs_example_yaml } it_behaves_like 'testing invalid and valid cases' diff --git a/spec/views/layouts/_page.html.haml_spec.rb b/spec/views/layouts/_page.html.haml_spec.rb index da9d086efe0..85e33107c8d 100644 --- a/spec/views/layouts/_page.html.haml_spec.rb +++ b/spec/views/layouts/_page.html.haml_spec.rb @@ -3,14 +3,14 @@ require 'spec_helper' RSpec.describe 'layouts/_page', feature_category: :geo_replication do - let_it_be(:user) { build_stubbed(:user) } + let(:user) { build_stubbed(:user) } + + before do + allow(view).to receive(:current_user).and_return(user) + allow(view).to receive(:current_user_mode).and_return(Gitlab::Auth::CurrentUserMode.new(user)) + end describe '_silent_mode_banner' do - before do - allow(view).to receive(:current_user).and_return(user) - allow(view).to receive(:current_user_mode).and_return(Gitlab::Auth::CurrentUserMode.new(user)) - end - describe 'when ::Gitlab::SilentMode.enabled? is true' do before do allow(::Gitlab::SilentMode).to receive(:enabled?).and_return(true) @@ -35,4 +35,26 @@ RSpec.describe 'layouts/_page', feature_category: :geo_replication do end end end + + describe '_broadcast' do + context 'when broadcast messages are hidden' do + before do + view.content_for(:hide_broadcast_messages, true) + end + + it 'does not render broadcast messages' do + render + + expect(rendered).not_to render_template('layouts/_broadcast') + end + end + + context 'when `:hide_broadcast_messages` is not present' do + it 'renders broadcast messages' do + render + + expect(rendered).to render_template('layouts/_broadcast') + end + end + end end diff --git a/spec/workers/run_pipeline_schedule_worker_spec.rb b/spec/workers/run_pipeline_schedule_worker_spec.rb index fae6eda8010..f8e5e34c006 100644 --- a/spec/workers/run_pipeline_schedule_worker_spec.rb +++ b/spec/workers/run_pipeline_schedule_worker_spec.rb @@ -57,6 +57,10 @@ RSpec.describe RunPipelineScheduleWorker, feature_category: :pipeline_compositio let(:service_response) { instance_double(ServiceResponse, payload: pipeline, error?: false) } let(:pipeline) { instance_double(Ci::Pipeline, persisted?: true) } + before_all do + project.add_maintainer(user) + end + context 'when pipeline can be created' do before do expect(Ci::CreatePipelineService).to receive(:new) @@ -134,6 +138,27 @@ RSpec.describe RunPipelineScheduleWorker, feature_category: :pipeline_compositio end before_all do + project.repository.create_file( + user, + '.gitlab-ci.yml', + <<~YAML, + spec: + inputs: + input1: + default: v1 + input2: + default: v2 + + --- + + build: + stage: build + script: echo "build" + YAML + message: 'test', + branch_name: 'master' + ) + create(:ci_pipeline_schedule_input, pipeline_schedule: pipeline_schedule, name: 'input1', value: 'value1') create(:ci_pipeline_schedule_input, pipeline_schedule: pipeline_schedule, name: 'input2', value: 'value2') end @@ -147,6 +172,17 @@ RSpec.describe RunPipelineScheduleWorker, feature_category: :pipeline_compositio expect(worker.perform(pipeline_schedule.id, user.id)).to eq(service_response) end + + it 'tracks the usage of inputs' do + expect do + worker.perform(pipeline_schedule.id, user.id) + end.to trigger_internal_events('create_pipeline_with_inputs').with( + category: 'Gitlab::Ci::Pipeline::Chain::Metrics', + additional_properties: { value: 2, label: 'schedule', property: 'repository_source' }, + project: project, + user: user + ) + end end end