Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot
2025-03-21 09:12:14 +00:00
parent fa44915648
commit 7f6c4631ec
27 changed files with 1070 additions and 916 deletions

View File

@ -1,6 +1,6 @@
# When adding a group as a code owner, make sure to invite the group to the
# project here: https://gitlab.com/gitlab-org/gitlab/-/project_members
# As described in https://docs.gitlab.com/ee/user/project/codeowners
# As described in https://docs.gitlab.com/user/project/codeowners/reference/#add-a-group-as-a-code-owner
* @gitlab-org/maintainers/rails-backend @gitlab-org/maintainers/frontend @gitlab-org/maintainers/database @gl-dx/maintainers @gl-dx/tooling-maintainers @gitlab-org/delivery @gitlab-org/maintainers/cicd-templates @gitlab-org/tw-leadership @gitlab-org/maintainers/kas-version-maintainers

View File

@ -1 +1 @@
622866ad5085e4863074e77c34cf63c1bb762e94
e5c697b18d5c1b2de9ffd206e3f70ecfe5194cb5

View File

@ -184,8 +184,8 @@ export default {
:show-pipeline-editor-button="Boolean(blob.pipelineEditorPath)"
:pipeline-editor-url="blob.pipelineEditorPath"
:gitpod-url="blob.gitpodBlobUrl"
:show-gitpod-button="gitpodEnabled"
:gitpod-enabled="currentUser && currentUser.gitpodEnabled"
:is-gitpod-enabled-for-instance="gitpodEnabled"
:is-gitpod-enabled-for-user="currentUser && currentUser.gitpodEnabled"
:project-path="projectPath"
:project-id="projectIdAsNumber"
:user-preferences-gitpod-path="currentUser && currentUser.preferencesGitpodPath"

View File

@ -83,6 +83,7 @@ export async function mountIssuesListApp() {
hasAnyIssues,
hasAnyProjects,
hasBlockedIssuesFeature,
hasCustomFieldsFeature,
hasIssuableHealthStatusFeature,
hasIssueDateFilterFeature,
hasIssueWeightsFeature,
@ -157,6 +158,7 @@ export async function mountIssuesListApp() {
hasAnyIssues: parseBoolean(hasAnyIssues),
hasAnyProjects: parseBoolean(hasAnyProjects),
hasBlockedIssuesFeature: parseBoolean(hasBlockedIssuesFeature),
hasCustomFieldsFeature: parseBoolean(hasCustomFieldsFeature),
hasIssuableHealthStatusFeature: parseBoolean(hasIssuableHealthStatusFeature),
hasIssueDateFilterFeature: parseBoolean(hasIssueDateFilterFeature),
hasIssueWeightsFeature: parseBoolean(hasIssueWeightsFeature),

View File

@ -68,11 +68,11 @@ export default {
'isReadmeView',
'isFork',
'needsToFork',
'gitpodEnabled',
'isGitpodEnabledForUser',
'isBlob',
'showEditButton',
'showWebIdeButton',
'showGitpodButton',
'isGitpodEnabledForInstance',
'showPipelineEditorUrl',
'webIdeUrl',
'editUrl',
@ -285,11 +285,11 @@ export default {
:project-path="projectPath"
:is-fork="isFork"
:needs-to-fork="needsToFork"
:gitpod-enabled="gitpodEnabled"
:is-gitpod-enabled-for-user="isGitpodEnabledForUser"
:is-blob="isBlob"
:show-edit-button="showEditButton"
:show-web-ide-button="showWebIdeButton"
:show-gitpod-button="showGitpodButton"
:is-gitpod-enabled-for-instance="isGitpodEnabledForInstance"
:show-pipeline-editor-url="showPipelineEditorUrl"
:web-ide-url="webIDEUrl"
:edit-url="editUrl"
@ -334,7 +334,7 @@ export default {
:current-path="currentPath"
:directory-download-links="downloadLinks"
:show-web-ide-button="showWebIdeButton"
:show-gitpod-button="showGitpodButton"
:show-gitpod-button="isGitpodEnabledForInstance"
/>
<repository-overflow-menu v-if="comparePath" />
</div>

View File

@ -2,6 +2,8 @@
import { GlButton, GlTooltipDirective } from '@gitlab/ui';
import { computed } from 'vue';
import { __ } from '~/locale';
import { logError } from '~/lib/logger';
import * as Sentry from '~/sentry/sentry_browser_wrapper';
import { createAlert } from '~/alert';
import getRefMixin from '~/repository/mixins/get_ref';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
@ -27,6 +29,7 @@ import {
} from '~/repository/utils/fork_suggestion_utils';
import blobControlsQuery from '~/repository/queries/blob_controls.query.graphql';
import userGitpodInfo from '~/repository/queries/user_gitpod_info.query.graphql';
import applicationInfoQuery from '~/blob/queries/application_info.query.graphql';
import { getRefType } from '~/repository/utils/ref_type';
import OpenMrBadge from '~/repository/components/header_area/open_mr_badge.vue';
import OverflowMenu from 'ee_else_ce/repository/components/header_area/blob_overflow_menu.vue';
@ -65,18 +68,39 @@ export default {
skip() {
return !this.filePath;
},
error() {
error(error) {
createAlert({ message: this.$options.i18n.errorMessage });
logError(
`Failed to fetch blob controls. See exception details for more information.`,
error,
);
Sentry.captureException(error);
},
},
currentUser: {
query: userGitpodInfo,
error() {
error(error) {
createAlert({ message: this.$options.i18n.errorMessage });
logError(
`Failed to fetch current user. See exception details for more information.`,
error,
);
Sentry.captureException(error);
},
},
gitpodEnabled: {
query: applicationInfoQuery,
error(error) {
createAlert({ message: this.$options.i18n.errorMessage });
logError(
`Failed to fetch application info. See exception details for more information.`,
error,
);
Sentry.captureException(error);
},
},
},
inject: ['currentRef', 'gitpodEnabled'],
inject: ['currentRef'],
provide() {
return {
blobInfo: computed(() => this.blobInfo ?? DEFAULT_BLOB_INFO.repository.blobs.nodes[0]),
@ -107,6 +131,7 @@ export default {
return {
project: {},
currentUser: {},
gitpodEnabled: false,
};
},
computed: {
@ -282,8 +307,8 @@ export default {
:show-pipeline-editor-button="Boolean(blobInfo.pipelineEditorPath)"
:pipeline-editor-url="blobInfo.pipelineEditorPath"
:gitpod-url="blobInfo.gitpodBlobUrl"
:show-gitpod-button="gitpodEnabled"
:gitpod-enabled="currentUser && currentUser.gitpodEnabled"
:is-gitpod-enabled-for-instance="gitpodEnabled"
:is-gitpod-enabled-for-user="currentUser && currentUser.gitpodEnabled"
:project-path="projectPath"
:project-id="projectIdAsNumber"
:user-preferences-gitpod-path="currentUser && currentUser.preferencesGitpodPath"

View File

@ -110,11 +110,11 @@ export default function initHeaderApp({ router, isReadmeView = false, isBlobView
isReadmeView,
isFork: parseBoolean(isFork),
needsToFork: parseBoolean(needsToFork),
gitpodEnabled: parseBoolean(gitpodEnabled),
isGitpodEnabledForUser: parseBoolean(gitpodEnabled),
isBlob: parseBoolean(isBlob),
showEditButton: parseBoolean(showEditButton),
showWebIdeButton: parseBoolean(showWebIdeButton),
showGitpodButton: parseBoolean(showGitpodButton),
isGitpodEnabledForInstance: parseBoolean(showGitpodButton),
showPipelineEditorUrl: parseBoolean(showPipelineEditorUrl),
webIdeUrl,
editUrl,

View File

@ -131,6 +131,7 @@ export const TOKEN_TYPE_WEIGHT = 'weight';
export const TOKEN_TYPE_SEARCH_WITHIN = 'in';
export const TOKEN_TYPE_CREATED = 'created';
export const TOKEN_TYPE_CLOSED = 'closed';
export const TOKEN_TYPE_CUSTOM_FIELD = 'custom-field';
export const TOKEN_TYPE_DEPLOYED_BEFORE = 'deployed-before';
export const TOKEN_TYPE_DEPLOYED_AFTER = 'deployed-after';
export const TOKEN_TYPE_ENVIRONMENT = 'environment';

View File

@ -21,12 +21,13 @@ export const WithButtonVariant = Template.bind({});
const defaultArgs = {
isFork: false,
needsToFork: false,
gitpodEnabled: true,
isGitpodEnabledForUser: true,
showEditButton: true,
showWebIdeButton: true,
showGitpodButton: true,
isGitpodEnabledForInstance: true,
showPipelineEditorButton: true,
disableForkModal: true,
gitpodUrl: 'http://example.com',
};
Default.args = {

View File

@ -50,7 +50,7 @@ export default {
required: false,
default: false,
},
gitpodEnabled: {
isGitpodEnabledForUser: {
type: Boolean,
required: false,
default: false,
@ -70,7 +70,7 @@ export default {
required: false,
default: true,
},
showGitpodButton: {
isGitpodEnabledForInstance: {
type: Boolean,
required: false,
default: false,
@ -247,7 +247,7 @@ export default {
return this.gitpodText || __('Gitpod');
},
computedShowGitpodButton() {
return this.showGitpodButton && this.gitpodEnabled && this.gitpodUrl;
return this.isGitpodEnabledForInstance && this.isGitpodEnabledForUser && this.gitpodUrl;
},
pipelineEditorAction() {
if (!this.showPipelineEditorButton) {

View File

@ -260,7 +260,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
end
# session variable for storing bypass two-factor request from IDP
store_idp_two_factor_status(true)
store_idp_two_factor_status(auth_user.bypass_two_factor?)
accept_pending_invitations(user: @user) if new_user
synchronize_broadcast_message_dismissals(@user) unless new_user

View File

@ -84,6 +84,9 @@ module Types
description: 'URL of the work item that the work item is marked as a duplicate of.'
field :moved_to_work_item_url, GraphQL::Types::String, null: true,
description: 'URL of the work item that the work item was moved to.'
field :show_plan_upgrade_promotion, GraphQL::Types::Boolean, null: false,
description: 'Whether to show the promotional message for the work item.',
experiment: { milestone: '17.11' }
markdown_field :title_html, null: true
markdown_field :description_html, null: true
@ -105,6 +108,13 @@ module Types
object.project.archived?
end
def show_plan_upgrade_promotion
# It should be true for namespaces in free plan.
# As we don't have a direct way to check that. We can check if the licensed feature for epics is enabled,
# which is a premium and ultimate feature.
!object.namespace.licensed_feature_available?(:epics)
end
end
end

View File

@ -56,8 +56,7 @@ module Boards
end
def should_include_task?
parent&.work_items_beta_feature_flag_enabled? ||
current_user&.user_preference&.use_work_items_view?
parent&.work_items_beta_feature_flag_enabled?
end
def item_model

View File

@ -179,7 +179,10 @@ This flag is not recommended for use.
#### `@final` artifacts not deleted from object store
An issue in GitLab 16.1 and 16.2 caused [`@final` artifacts to not be deleted from object storage](https://gitlab.com/gitlab-org/gitlab/-/issues/419920).
In GitLab 16.1 and later, artifacts are uploaded directly to their final storage location in the `@final` directory, rather than using a temporary location first.
An issue in GitLab 16.1 and 16.2 causes [artifacts to not be deleted from object storage](https://gitlab.com/gitlab-org/gitlab/-/issues/419920) when they expire.
The cleanup process for expired artifacts does not remove artifacts from the `@final` directory. This issue is fixed in GitLab 16.3 and later.
Administrators of GitLab instances that ran GitLab 16.1 or 16.2 for some time could see an increase
in object storage used by artifacts. Follow this procedure to check for and remove these artifacts.

View File

@ -40172,6 +40172,7 @@ four standard [pagination arguments](#pagination-arguments):
| <a id="workitemnamespace"></a>`namespace` {{< icon name="warning-solid" >}} | [`Namespace`](#namespace) | **Introduced** in GitLab 15.10. **Status**: Experiment. Namespace the work item belongs to. |
| <a id="workitemproject"></a>`project` {{< icon name="warning-solid" >}} | [`Project`](#project) | **Introduced** in GitLab 15.3. **Status**: Experiment. Project the work item belongs to. |
| <a id="workitempromotedtoepicurl"></a>`promotedToEpicUrl` | [`String`](#string) | URL of the epic that the work item has been promoted to. |
| <a id="workitemshowplanupgradepromotion"></a>`showPlanUpgradePromotion` {{< icon name="warning-solid" >}} | [`Boolean!`](#boolean) | **Introduced** in GitLab 17.11. **Status**: Experiment. Whether to show the promotional message for the work item. |
| <a id="workitemstate"></a>`state` | [`WorkItemState!`](#workitemstate) | State of the work item. |
| <a id="workitemtitle"></a>`title` | [`String!`](#string) | Title of the work item. |
| <a id="workitemtitlehtml"></a>`titleHtml` | [`String`](#string) | GitLab Flavored Markdown rendering of `title`. |

View File

@ -254,6 +254,10 @@ role as Code Owners for `file.md`:
You can set **direct members** of a group or subgroup as a Code Owner.
For more information about group membership, see [Membership types](../members/_index.md#membership-types).
Prerequisites:
- The group must be [invited to the project](../members/sharing_projects_groups.md#invite-a-group-to-a-project).
To set direct members of a group or subgroup as a Code Owner:
1. Open the `CODEOWNERS` file.

View File

@ -66537,6 +66537,9 @@ msgstr ""
msgid "Work items"
msgstr ""
msgid "WorkItemCustomFields|Failed to load custom fields."
msgstr ""
msgid "WorkItemCustomFields|Options could not be loaded for field: %{dropdownLabel}. Please try again."
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -1,291 +1,287 @@
{
"qa/specs/features/api/10_govern/group_access_token_spec.rb": 38.830221863,
"qa/specs/features/api/10_govern/project_access_token_spec.rb": 87.39035069699999,
"qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb": 109.614520646,
"qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb": 139.434393491,
"qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb": 132.738289594,
"qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb": 16.61797786,
"qa/specs/features/api/1_manage/import/import_github_repo_spec.rb": 76.47044677,
"qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb": 49.764845911,
"qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb": 50.26492157,
"qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb": 208.269855584,
"qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb": 98.232757868,
"qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb": 95.166599136,
"qa/specs/features/api/1_manage/rate_limits_spec.rb": 17.219864244,
"qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb": 14.29460189,
"qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb": 14.889942116,
"qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb": 32.460051195,
"qa/specs/features/api/3_create/merge_request/push_options_spec.rb": 38.776216123,
"qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb": 2.258270365,
"qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb": 21.838523304,
"qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb": 25.684536562,
"qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb": 16.03139595,
"qa/specs/features/api/3_create/repository/files_spec.rb": 7.384564136,
"qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 18.734244438,
"qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb": 18.107993846,
"qa/specs/features/api/3_create/repository/storage_size_spec.rb": 27.447436415,
"qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb": 6.587761474,
"qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb": 129.665109311,
"qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb": 15.212343058,
"qa/specs/features/api/4_verify/file_variable_spec.rb": 90.94460219000001,
"qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb": 24.142897347,
"qa/specs/features/api/8_monitor/metrics_spec.rb": 3.945730668,
"qa/specs/features/api/9_data_stores/user_inherited_access_spec.rb": 105.512576924,
"qa/specs/features/api/9_data_stores/users_spec.rb": 4.9509330039999995,
"qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb": 20.602007572,
"qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb": 58.403532693,
"qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb": 42.699665132,
"qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb": 13.060812412,
"qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb": 89.665544616,
"qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb": 5.016591099,
"qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb": 30.830785409,
"qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb": 15.272220788,
"qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb": 42.691597421,
"qa/specs/features/browser_ui/10_govern/login/register_spec.rb": 89.39180487,
"qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb": 23.102119725,
"qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb": 33.579175427,
"qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb": 52.544795160999996,
"qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb": 29.238221391,
"qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb": 12.811865502,
"qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb": 11.441061682,
"qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb": 77.105798782,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb": 70.25281258,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb": 75.597419344,
"qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb": 63.559030766999996,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb": 66.193277026,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb": 129.927484351,
"qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb": 14.414869156,
"qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb": 28.279092305,
"qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb": 27.676944247,
"qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb": 19.155493642,
"qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb": 31.588776438,
"qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 16.258712169,
"qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 24.627702034,
"qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 88.822370111,
"qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb": 27.19635702,
"qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb": 41.782259163,
"qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 29.48396292,
"qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 22.056021838,
"qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb": 41.699431978,
"qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb": 24.928606131,
"qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb": 19.4588711,
"qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb": 108.235978297,
"qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb": 17.547002184,
"qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb": 26.795519178,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb": 68.14757165,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb": 47.26616765400001,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb": 20.219878404,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb": 39.653937804,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb": 57.840320340999995,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb": 36.186356501,
"qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb": 29.103823718,
"qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb": 102.23725056800001,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb": 70.62813641,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb": 29.372545108,
"qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 95.10871195600001,
"qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 38.388737903,
"qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb": 86.677463805,
"qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 69.027020257,
"qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb": 48.890003483,
"qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb": 39.982841351,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb": 91.164060539,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb": 42.093162265,
"qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 35.539010405,
"qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 68.445174663,
"qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb": 29.166793163,
"qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb": 17.398246571,
"qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 62.70991131,
"qa/specs/features/browser_ui/3_create/repository/file/create_file_via_web_spec.rb": 14.580428424,
"qa/specs/features/browser_ui/3_create/repository/file/delete_file_via_web_spec.rb": 24.140948661,
"qa/specs/features/browser_ui/3_create/repository/file/edit_file_via_web_spec.rb": 14.007700781,
"qa/specs/features/browser_ui/3_create/repository/file/file_with_unusual_name_spec.rb": 17.877356287,
"qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb": 45.474894222,
"qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb": 110.928023141,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb": 21.10564087,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb": 53.916843173,
"qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 28.58117191,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb": 56.500472262,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 58.899622907,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 64.752748379,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 36.44425279,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb": 56.320818317000004,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb": 68.490488914,
"qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 18.387058594,
"qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb": 24.072685247,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb": 27.404302262,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb": 29.021533517,
"qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 52.688324287,
"qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb": 41.939117696,
"qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb": 31.023346673000002,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb": 60.101984482000006,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb": 60.965341752,
"qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb": 29.416909561,
"qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb": 14.318998343,
"qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb": 13.27622299,
"qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb": 25.805028463,
"qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb": 30.354138461,
"qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb": 31.071406293,
"qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb": 18.600863658,
"qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb": 76.58097589500001,
"qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb": 15.244475191,
"qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb": 40.975942883,
"qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb": 72.060739315,
"qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb": 22.036684632,
"qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb": 187.289226122,
"qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb": 73.064539585,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb": 101.35821685900001,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb": 135.939060481,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb": 134.31947082800002,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb": 84.585065373,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb": 80.601400551,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb": 278.098511864,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb": 292.320962081,
"qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb": 127.818923983,
"qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb": 139.88354285,
"qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb": 59.121858203,
"qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb": 127.287056824,
"qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb": 27.954384136,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb": 74.022562871,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb": 55.629969092,
"qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb": 118.03092346100001,
"qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb": 71.198251361,
"qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb": 89.482088852,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb": 69.261740371,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb": 74.164369875,
"qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb": 38.066092552,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb": 17.524633325,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb": 33.132292003,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb": 26.191812661,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb": 11.135064763,
"qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb": 14.660892699,
"qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb": 48.138790154,
"qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb": 89.676301493,
"qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb": 316.99915424,
"qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb": 159.40054221100002,
"qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb": 77.877469497,
"qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb": 78.418281227,
"qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb": 54.650440933,
"qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb": 252.258330624,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb": 492.911208309,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb": 350.84294826999997,
"qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb": 263.193480901,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb": 317.01490709999996,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb": 314.899200948,
"qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb": 109.305156509,
"qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 25.200388707,
"qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 153.214143864,
"qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 11.583575227,
"qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb": 44.671746067,
"qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb": 88.02957761799999,
"qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb": 44.799972043,
"qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb": 70.1658872,
"qa/specs/features/browser_ui/8_monitor/alert_management/recovery_alert_resolves_correct_alert_spec.rb": 26.558897397,
"qa/specs/features/browser_ui/9_data_stores/group/create_group_with_mattermost_team_spec.rb": 7.777932345,
"qa/specs/features/browser_ui/9_data_stores/group/group_member_access_request_spec.rb": 71.151826935,
"qa/specs/features/browser_ui/9_data_stores/group/transfer_project_spec.rb": 30.490726904,
"qa/specs/features/browser_ui/9_data_stores/project/add_project_member_spec.rb": 39.776095712,
"qa/specs/features/browser_ui/9_data_stores/project/create_project_badge_spec.rb": 27.927983888,
"qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb": 60.642680207,
"qa/specs/features/browser_ui/9_data_stores/project/dashboard_images_spec.rb": 12.835148462,
"qa/specs/features/browser_ui/9_data_stores/project/invite_group_to_project_spec.rb": 55.453211718999995,
"qa/specs/features/browser_ui/9_data_stores/project/project_owner_permissions_spec.rb": 92.884791114,
"qa/specs/features/browser_ui/9_data_stores/project/view_project_activity_spec.rb": 29.611863842,
"qa/specs/features/browser_ui/9_data_stores/user/follow_user_activity_spec.rb": 34.290392104,
"qa/specs/features/browser_ui/9_data_stores/user/parent_group_access_termination_spec.rb": 33.44748252,
"qa/specs/features/browser_ui/9_data_stores/user/user_inherited_access_spec.rb": 51.663283273,
"qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb": 42.487218913,
"qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb": 31.092083754,
"qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb": 60.181588191,
"qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb": 95.675145615,
"qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb": 10.505203109,
"qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb": 92.539668361,
"qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb": 53.136055457,
"qa/specs/features/ee/api/3_create/code_suggestions_spec.rb": 36.552451463,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/advanced_global_advanced_syntax_search_spec.rb": 124.656851304,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/elasticsearch_api_spec.rb": 38.282816346999994,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/commit_index/commit_index_spec.rb": 12.048536501,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/issues_index/issue_index_spec.rb": 35.466351341,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/main_index/blob_index_spec.rb": 22.934717327,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb": 58.927881816,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/notes_index/note_index_spec.rb": 45.101494383,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/user_index/user_index_spec.rb": 55.139397952,
"qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb": 105.014431906,
"qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb": 69.272375898,
"qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb": 106.738922382,
"qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb": 34.329233673,
"qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb": 181.55591051,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb": 68.977867906,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb": 122.174196278,
"qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb": 109.071098444,
"qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb": 135.258606429,
"qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb": 274.465751772,
"qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb": 112.10336789200001,
"qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb": 190.588819347,
"qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb": 60.334768043,
"qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb": 155.282655742,
"qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb": 138.903999962,
"qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb": 100.378179582,
"qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb": 407.50152686599995,
"qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb": 15.168013527,
"qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb": 21.233728685,
"qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb": 501.926325405,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb": 18.992517882,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb": 8.447619498,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb": 18.097218437,
"qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb": 47.859343327,
"qa/specs/features/ee/browser_ui/13_secure/enable_advanced_sast_spec.rb": 130.083688924,
"qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb": 134.321556911,
"qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb": 89.29323446500001,
"qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb": 10.215519928,
"qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb": 56.439102000999995,
"qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb": 31.582257819,
"qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb": 84.457134099,
"qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb": 31.748416638000002,
"qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb": 20.602377265,
"qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb": 14.33838265,
"qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb": 192.109004899,
"qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb": 43.312129583,
"qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb": 12.897672519,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb": 31.241663692,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb": 12.271596638,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb": 30.116336154,
"qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb": 22.833422826,
"qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb": 34.038940966,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb": 11.850925274,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb": 26.841013487,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb": 18.146870648,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb": 15.079736088,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb": 45.633665861,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb": 24.382891252,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb": 20.747739285,
"qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb": 29.275818821999998,
"qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb": 26.06848268,
"qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb": 17.446324121,
"qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb": 41.094270946,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb": 38.744334858,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb": 58.628407553,
"qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb": 23.86130621,
"qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb": 81.608875899,
"qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb": 28.64484283,
"qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb": 43.685660763,
"qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb": 26.250913639,
"qa/specs/features/ee/browser_ui/3_create/repository/code_owners_with_protected_branch_and_squashed_commits_spec.rb": 21.239039483,
"qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb": 161.863236826,
"qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb": 111.153552944,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb": 127.08301193599999,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb": 138.52093614400002,
"qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb": 63.454328449,
"qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb": 99.211627298,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb": 27.000461376,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb": 42.383514919,
"qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb": 313.64760450000006,
"qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb": 177.381375569,
"qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb": 169.730037745,
"qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb": 33.331000253,
"qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb": 189.061023226,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb": 65.311082579,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb": 52.417364933,
"qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb": 20.94564363,
"qa/specs/features/ee/browser_ui/9_data_stores/elasticsearch/elasticsearch_reindexing_spec.rb": 209.62676711,
"qa/specs/features/ee/browser_ui/9_data_stores/group/share_group_with_group_spec.rb": 30.319614751
"qa/specs/features/api/10_govern/group_access_token_spec.rb": 31.703014339,
"qa/specs/features/api/10_govern/project_access_token_spec.rb": 78.92264022500001,
"qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb": 106.726568702,
"qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb": 109.74363054,
"qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb": 108.733977315,
"qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb": 12.568074347,
"qa/specs/features/api/1_manage/import/import_github_repo_spec.rb": 99.009459603,
"qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb": 56.137446576,
"qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb": 67.695550806,
"qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb": 195.740302463,
"qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb": 94.699092712,
"qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb": 94.173910258,
"qa/specs/features/api/1_manage/rate_limits_spec.rb": 19.767152043,
"qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb": 25.049243999,
"qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb": 15.952948868,
"qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb": 15.384751374,
"qa/specs/features/api/3_create/merge_request/push_options_spec.rb": 44.599877422999995,
"qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb": 2.756458571,
"qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb": 26.892447553,
"qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb": 10.280749628,
"qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb": 8.946450114000001,
"qa/specs/features/api/3_create/repository/files_spec.rb": 11.500734346000002,
"qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 8.61086845,
"qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb": 31.573758826,
"qa/specs/features/api/3_create/repository/storage_size_spec.rb": 21.839550135,
"qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb": 4.7735896,
"qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb": 108.492447474,
"qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb": 15.62215229,
"qa/specs/features/api/4_verify/file_variable_spec.rb": 71.798017525,
"qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb": 29.689649977,
"qa/specs/features/api/8_monitor/metrics_spec.rb": 4.363259502,
"qa/specs/features/api/9_data_stores/user_inherited_access_spec.rb": 102.330128375,
"qa/specs/features/api/9_data_stores/users_spec.rb": 3.137117979,
"qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb": 20.574116874,
"qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb": 41.84321492,
"qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb": 49.611973741,
"qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb": 12.780074749,
"qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb": 96.624001088,
"qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb": 4.060203306,
"qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb": 30.406773449,
"qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb": 15.616218102,
"qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb": 42.805535767,
"qa/specs/features/browser_ui/10_govern/login/register_spec.rb": 93.222894024,
"qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb": 22.937257831,
"qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb": 32.578212752,
"qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb": 32.701844836999996,
"qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb": 29.48724404,
"qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb": 12.370792018,
"qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb": 11.997207766,
"qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb": 72.97959328,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb": 56.330095345000004,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb": 55.597080526,
"qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb": 61.952110509,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb": 57.250954929,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb": 131.941218316,
"qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb": 24.251581796,
"qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb": 30.380548389,
"qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb": 23.025883547,
"qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb": 12.563371817,
"qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb": 31.281580639,
"qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 24.520439606,
"qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 27.108293668,
"qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 95.40641828100001,
"qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb": 25.332357442,
"qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb": 40.223397538,
"qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 27.001051564,
"qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 21.764057381,
"qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb": 30.017683166,
"qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb": 22.714785807,
"qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb": 16.110249763,
"qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb": 101.933396527,
"qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb": 14.520532291,
"qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb": 26.214659703,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb": 64.981378986,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb": 45.194310509999994,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb": 14.182147207,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb": 37.808351602,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb": 54.759518805,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb": 48.011543301,
"qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb": 22.734154537,
"qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb": 81.99599488,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb": 43.339444055,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb": 31.827365209,
"qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 72.796823229,
"qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 69.502706703,
"qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb": 89.501830713,
"qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 86.021124602,
"qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb": 32.607773388,
"qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb": 38.642792508,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb": 47.905898947,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb": 50.799852307,
"qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 45.57397428,
"qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 15.10525355,
"qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb": 24.27762364,
"qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb": 12.559834115,
"qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 24.584901131000002,
"qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb": 35.709518765,
"qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb": 100.04092785499999,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb": 19.896683992,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb": 17.167776767,
"qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 29.562499222,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb": 57.124061683,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 61.158866196,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 50.735768072999996,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 35.469447824,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb": 57.448504649,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb": 48.335073561,
"qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 11.336657698,
"qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb": 24.234022927,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb": 29.194618973,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb": 30.377330181,
"qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 38.290441286000004,
"qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb": 38.637134872000004,
"qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb": 23.88638159,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb": 43.341474082000005,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb": 61.118852573,
"qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb": 29.878348109,
"qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb": 14.709369124,
"qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb": 10.86109199,
"qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb": 11.821569866,
"qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb": 16.190646686,
"qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb": 31.784634059,
"qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb": 15.786463073,
"qa/specs/features/browser_ui/3_create/snippet/snippet_index_page_spec.rb": 54.07200680099999,
"qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb": 14.046801723,
"qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb": 41.592560196,
"qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb": 66.234174814,
"qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb": 20.722392851,
"qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb": 176.395422051,
"qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb": 76.640090682,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb": 93.31481964700001,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb": 108.514534176,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb": 124.768354261,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb": 54.613689755,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb": 52.217146373,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb": 257.1994276,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb": 256.676535447,
"qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb": 83.781901162,
"qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb": 106.08956521100001,
"qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb": 47.542866038,
"qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb": 130.204026263,
"qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb": 25.220507395,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb": 64.505760169,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb": 62.000569459,
"qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb": 115.47115751199999,
"qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb": 78.098823144,
"qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb": 68.813979732,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb": 42.16721313,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb": 55.0583872,
"qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb": 24.115616385,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb": 16.441132572,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb": 33.182855815,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb": 25.338309737,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb": 11.7675603,
"qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb": 19.60325508,
"qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb": 39.08576984,
"qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb": 55.436517773,
"qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb": 345.40671833,
"qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb": 166.330953118,
"qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb": 64.035905301,
"qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb": 72.526549128,
"qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb": 55.82131515,
"qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb": 253.117900781,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb": 457.296966069,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb": 283.753705001,
"qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb": 283.902797053,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb": 310.263202875,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb": 267.67807568,
"qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb": 94.056441583,
"qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 24.892532209,
"qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 192.201756292,
"qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 8.874279429,
"qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb": 46.114636288,
"qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb": 65.411835643,
"qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb": 49.739971389000004,
"qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb": 78.041320683,
"qa/specs/features/browser_ui/8_monitor/alert_management/recovery_alert_resolves_correct_alert_spec.rb": 26.049985424,
"qa/specs/features/browser_ui/9_data_stores/group/create_group_with_mattermost_team_spec.rb": 6.946811161,
"qa/specs/features/browser_ui/9_data_stores/group/group_member_access_request_spec.rb": 54.329304594999996,
"qa/specs/features/browser_ui/9_data_stores/group/transfer_project_spec.rb": 28.762996075,
"qa/specs/features/browser_ui/9_data_stores/project/add_project_member_spec.rb": 30.187520783,
"qa/specs/features/browser_ui/9_data_stores/project/create_project_badge_spec.rb": 23.731095338,
"qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb": 66.35945620199999,
"qa/specs/features/browser_ui/9_data_stores/project/dashboard_images_spec.rb": 11.464182832999999,
"qa/specs/features/browser_ui/9_data_stores/project/invite_group_to_project_spec.rb": 51.88795118,
"qa/specs/features/browser_ui/9_data_stores/project/project_owner_permissions_spec.rb": 78.423126492,
"qa/specs/features/browser_ui/9_data_stores/project/view_project_activity_spec.rb": 29.215052281,
"qa/specs/features/browser_ui/9_data_stores/user/follow_user_activity_spec.rb": 25.372159395,
"qa/specs/features/browser_ui/9_data_stores/user/parent_group_access_termination_spec.rb": 29.643333864,
"qa/specs/features/browser_ui/9_data_stores/user/user_inherited_access_spec.rb": 34.626438085000004,
"qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb": 23.32616615,
"qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb": 43.861195197,
"qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb": 57.961035796999994,
"qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb": 129.175080845,
"qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb": 5.704376705,
"qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb": 74.427295527,
"qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb": 59.927685204,
"qa/specs/features/ee/api/3_create/code_suggestions_spec.rb": 45.26120806299999,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/advanced_global_advanced_syntax_search_spec.rb": 80.963507325,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/elasticsearch_api_spec.rb": 51.703807192999996,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/commit_index/commit_index_spec.rb": 21.670149514,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/issues_index/issue_index_spec.rb": 19.411934007,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/main_index/blob_index_spec.rb": 22.230905871,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb": 58.019172751,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/notes_index/note_index_spec.rb": 45.369852142,
"qa/specs/features/ee/api/9_data_stores/elasticsearch/index_tests/user_index/user_index_spec.rb": 53.661212451,
"qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb": 101.799399246,
"qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb": 82.42067465,
"qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb": 80.422941643,
"qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb": 27.413777382,
"qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb": 147.430094112,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb": 50.349869803000004,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb": 114.624410331,
"qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb": 127.540262947,
"qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb": 118.90211786599998,
"qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb": 217.929463878,
"qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb": 102.63345611599999,
"qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb": 139.794607042,
"qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb": 62.71258645500001,
"qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb": 159.952120907,
"qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb": 123.933248512,
"qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb": 97.18039289500001,
"qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb": 370.913280104,
"qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb": 13.772253664,
"qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb": 26.810145088,
"qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb": 321.301839725,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb": 21.442768764,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb": 9.163537331,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb": 18.134415504,
"qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb": 69.809848397,
"qa/specs/features/ee/browser_ui/13_secure/enable_advanced_sast_spec.rb": 117.512836745,
"qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb": 127.827799204,
"qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb": 106.59646785199999,
"qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb": 10.617398017,
"qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb": 54.017466312,
"qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb": 33.692492272,
"qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb": 100.156308765,
"qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb": 41.707363219,
"qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb": 18.138359684,
"qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb": 14.12878646,
"qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb": 191.336249046,
"qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb": 51.306831734,
"qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb": 7.226821546,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb": 24.3927555,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb": 10.587511889,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb": 27.199110082,
"qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb": 18.498174778,
"qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb": 27.693335983,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb": 13.112076458,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb": 25.871644911,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb": 15.367111201,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb": 18.093278076,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb": 44.88654993,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb": 25.351474316,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb": 12.485874924,
"qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb": 26.823168554,
"qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb": 33.612176458,
"qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb": 16.847013675,
"qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb": 40.276474915,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb": 39.889851314,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb": 40.321002840000006,
"qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb": 15.49693179,
"qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb": 86.346557831,
"qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb": 31.430671473,
"qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb": 30.886832573,
"qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb": 27.420387455,
"qa/specs/features/ee/browser_ui/3_create/repository/code_owners_with_protected_branch_and_squashed_commits_spec.rb": 24.148701709,
"qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb": 145.094083685,
"qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb": 98.525283086,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb": 87.48837346799999,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb": 128.971645594,
"qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb": 42.800077181999995,
"qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb": 86.462144889,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb": 38.492217546,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb": 41.633288965,
"qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb": 295.73184570399997,
"qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb": 166.79583682900002,
"qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb": 157.45189922000003,
"qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb": 71.708650897,
"qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb": 133.605039461,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb": 62.518517923,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb": 58.042964678,
"qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb": 19.563594627,
"qa/specs/features/ee/browser_ui/9_data_stores/elasticsearch/elasticsearch_reindexing_spec.rb": 169.074513749,
"qa/specs/features/ee/browser_ui/9_data_stores/group/share_group_with_group_spec.rb": 33.413727571
}

View File

@ -5,17 +5,60 @@ require 'spec_helper'
RSpec.describe OmniauthCallbacksController, type: :controller, feature_category: :system_access do
include LoginHelpers
shared_examples 'store provider2FA value in session' do
before do
stub_omniauth_setting(allow_bypass_two_factor: true)
saml_config.args[:upstream_two_factor_authn_contexts] << "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"
sign_in user
shared_examples 'stores value for provider_2FA to session according to saml response' do
let(:user) { create(:omniauth_user, extern_uid: 'my-uid', provider: 'saml') }
context 'with IDP bypass two factor request' do
before do
stub_omniauth_setting(allow_bypass_two_factor: true)
saml_config.args[:upstream_two_factor_authn_contexts] << "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"
sign_in user
end
it "sets the session variable for provider 2FA" do
post :saml, params: { SAMLResponse: mock_saml_response }
expect(session[:provider_2FA]).to eq(true)
end
end
it "sets the session variable for provider 2FA" do
post :saml, params: { SAMLResponse: mock_saml_response }
context 'without IDP bypass two factor request' do
before do
stub_omniauth_setting(allow_bypass_two_factor: true)
sign_in user
end
expect(session[:provider_2FA]).to eq(true)
it "sets the session variable as nil" do
post :saml, params: { SAMLResponse: mock_saml_response }
expect(session[:provider_2FA]).to be_nil
end
end
end
shared_examples "sets provider_2FA session variable according to bypass_two_factor return value" do
context 'when method returns true' do
it "sets value as true" do
allow_next_instance_of(Gitlab::Auth::OAuth::User) do |instance|
allow(instance).to receive(:bypass_two_factor?).and_return(true)
end
post provider
expect(session[:provider_2FA]).to be(true)
end
end
context 'when method returns false' do
it "sets value to nil" do
allow_next_instance_of(Gitlab::Auth::OAuth::User) do |instance|
allow(instance).to receive(:bypass_two_factor?).and_return(false)
end
post provider
expect(session[:provider_2FA]).to be_nil
end
end
end
@ -161,6 +204,8 @@ RSpec.describe OmniauthCallbacksController, type: :controller, feature_category:
)
end
end
it_behaves_like "sets provider_2FA session variable according to bypass_two_factor return value"
end
context 'for a deactivated user' do
@ -189,16 +234,22 @@ RSpec.describe OmniauthCallbacksController, type: :controller, feature_category:
let(:provider) { :github }
let(:extern_uid) { 'my-uid' }
it 'renders omniauth error page' do
before do
allow_next_instance_of(Gitlab::Auth::OAuth::User) do |instance|
allow(instance).to receive(:valid_sign_in?).and_return(false)
end
post provider
end
it 'renders omniauth error page' do
expect(response).to render_template("errors/omniauth_error")
expect(response).to have_gitlab_http_status(:unprocessable_entity)
end
it "does not set provider_2FA in session" do
expect(session[:provider_2FA]).to be_nil
end
end
context 'when the user is on the last sign in attempt' do
@ -756,6 +807,8 @@ RSpec.describe OmniauthCallbacksController, type: :controller, feature_category:
end
end
end
it_behaves_like "sets provider_2FA session variable according to bypass_two_factor return value"
end
describe '#saml' do
@ -892,12 +945,6 @@ RSpec.describe OmniauthCallbacksController, type: :controller, feature_category:
it 'doesn\'t link a new identity to the user' do
expect { post :saml, params: { SAMLResponse: mock_saml_response } }.not_to change { user.identities.count }
end
context 'with IDP bypass two factor request' do
let(:user) { create(:omniauth_user, extern_uid: 'my-uid', provider: 'saml') }
it_behaves_like 'store provider2FA value in session'
end
end
context 'with a blocked user trying to log in when there are hooks set up' do
@ -933,9 +980,7 @@ RSpec.describe OmniauthCallbacksController, type: :controller, feature_category:
end
end
context 'with IDP bypass two factor request' do
it_behaves_like 'store provider2FA value in session'
end
it_behaves_like "stores value for provider_2FA to session according to saml response"
end
describe 'enable admin mode' do

View File

@ -106,8 +106,8 @@ describe('Blob Header Default Actions', () => {
showPipelineEditorButton: Boolean(pipelineEditorPath),
pipelineEditorUrl: pipelineEditorPath,
gitpodUrl: gitpodBlobUrl,
showGitpodButton: applicationInfoMock.gitpodEnabled,
gitpodEnabled: userInfoMock.currentUser.gitpodEnabled,
isGitpodEnabledForInstance: applicationInfoMock.gitpodEnabled,
isGitpodEnabledForUser: userInfoMock.currentUser.gitpodEnabled,
});
});

View File

@ -4,6 +4,9 @@ import createMockApollo from 'helpers/mock_apollo_helper';
import waitForPromises from 'helpers/wait_for_promises';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import { useMockInternalEventsTracking } from 'helpers/tracking_internal_events_helper';
import { logError } from '~/lib/logger';
import * as Sentry from '~/sentry/sentry_browser_wrapper';
import { createAlert } from '~/alert';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import WebIdeLink from 'ee_else_ce/vue_shared/components/web_ide_link.vue';
import { resetShortcutsForTests } from '~/behaviors/shortcuts';
@ -14,29 +17,71 @@ import OverflowMenu from 'ee_else_ce/repository/components/header_area/blob_over
import BlobControls from '~/repository/components/header_area/blob_controls.vue';
import blobControlsQuery from '~/repository/queries/blob_controls.query.graphql';
import userGitpodInfo from '~/repository/queries/user_gitpod_info.query.graphql';
import applicationInfoQuery from '~/blob/queries/application_info.query.graphql';
import createRouter from '~/repository/router';
import { updateElementsVisibility } from '~/repository/utils/dom';
import OpenMrBadge from '~/repository/components/header_area/open_mr_badge.vue';
import { blobControlsDataMock, refMock, currentUserDataMock } from '../../mock_data';
import {
blobControlsDataMock,
refMock,
currentUserDataMock,
applicationInfoMock,
} from '../../mock_data';
Vue.use(VueApollo);
jest.mock('~/repository/utils/dom');
jest.mock('~/behaviors/shortcuts/shortcuts_blob');
jest.mock('~/blob/blob_line_permalink_updater');
jest.mock('~/alert');
jest.mock('~/lib/logger');
jest.mock('~/sentry/sentry_browser_wrapper');
describe('Blob controls component', () => {
let router;
let wrapper;
let fakeApollo;
const blobControlsSuccessResolver = jest.fn().mockResolvedValue({
data: { project: blobControlsDataMock },
});
const blobControlsErrorResolver = jest.fn().mockRejectedValue(new Error('Request failed'));
const overrideBlobControlsResolver = (blobControlsOverrides = {}) => {
return jest.fn().mockResolvedValue({
data: {
project: {
...blobControlsDataMock,
repository: {
...blobControlsDataMock.repository,
blobs: {
...blobControlsDataMock.repository.blobs,
nodes: [
{ ...blobControlsDataMock.repository.blobs.nodes[0], ...blobControlsOverrides },
],
},
},
},
},
});
};
const currentUserSuccessResolver = jest
.fn()
.mockResolvedValue({ data: { currentUser: currentUserDataMock } });
const currentUserErrorResolver = jest.fn().mockRejectedValue(new Error('Request failed'));
const applicationInfoSuccessResolver = jest.fn().mockResolvedValue({
data: { ...applicationInfoMock },
});
const applicationInfoErrorResolver = jest.fn().mockRejectedValue(new Error('Request failed'));
const createComponent = async ({
props = {},
blobInfoOverrides = {},
blobControlsResolver = blobControlsSuccessResolver,
currentUserResolver = currentUserSuccessResolver,
applicationInfoResolver = applicationInfoSuccessResolver,
glFeatures = { blobOverflowMenu: false },
routerOverride = {},
} = {}) => {
Vue.use(VueApollo);
const projectPath = 'some/project';
router = createRouter(projectPath, refMock);
@ -46,30 +91,12 @@ describe('Blob controls component', () => {
...routerOverride,
});
const blobControlsMockResolver = jest.fn().mockResolvedValue({
data: {
project: {
...blobControlsDataMock,
repository: {
...blobControlsDataMock.repository,
blobs: {
...blobControlsDataMock.repository.blobs,
nodes: [{ ...blobControlsDataMock.repository.blobs.nodes[0], ...blobInfoOverrides }],
},
},
},
},
});
const currentUserMockResolver = jest
.fn()
.mockResolvedValue({ data: { currentUser: currentUserDataMock } });
await resetShortcutsForTests();
fakeApollo = createMockApollo([
[blobControlsQuery, blobControlsMockResolver],
[userGitpodInfo, currentUserMockResolver],
[blobControlsQuery, blobControlsResolver],
[userGitpodInfo, currentUserResolver],
[applicationInfoQuery, applicationInfoResolver],
]);
wrapper = shallowMountExtended(BlobControls, {
@ -78,7 +105,6 @@ describe('Blob controls component', () => {
provide: {
glFeatures,
currentRef: refMock,
gitpodEnabled: true,
},
propsData: {
projectPath,
@ -105,6 +131,7 @@ describe('Blob controls component', () => {
const { bindInternalEventDocument } = useMockInternalEventsTracking();
beforeEach(async () => {
createAlert.mockClear();
await createComponent();
});
@ -154,6 +181,27 @@ describe('Blob controls component', () => {
expect(BlobLinePermalinkUpdater).toHaveBeenCalled();
});
describe('Error handling', () => {
it.each`
scenario | resolverParam | loggedError
${'blobControls query'} | ${{ blobControlsResolver: blobControlsErrorResolver }} | ${'Failed to fetch blob controls. See exception details for more information.'}
${'currentUser query'} | ${{ currentUserResolver: currentUserErrorResolver }} | ${'Failed to fetch current user. See exception details for more information.'}
${'applicationInfo query'} | ${{ applicationInfoResolver: applicationInfoErrorResolver }} | ${'Failed to fetch application info. See exception details for more information.'}
`(
'renders an alert and logs the error if the $scenario fails',
async ({ resolverParam, loggedError }) => {
const mockError = new Error('Request failed');
await createComponent(resolverParam);
expect(createAlert).toHaveBeenCalledWith({
message: 'An error occurred while loading the blob controls.',
});
expect(logError).toHaveBeenCalledWith(loggedError, mockError);
expect(Sentry.captureException).toHaveBeenCalledWith(mockError);
},
);
});
describe('MR badge', () => {
it('should render the badge if `filter_blob_path` flag is on', async () => {
await createComponent({ glFeatures: { filterBlobPath: true } });
@ -197,15 +245,18 @@ describe('Blob controls component', () => {
});
it('does not render blame button when blobInfo.storedExternally is true', async () => {
await createComponent({ blobInfoOverrides: { storedExternally: true } });
const blobOverwriteResolver = overrideBlobControlsResolver({ storedExternally: true });
await createComponent({ blobControlsResolver: blobOverwriteResolver });
expect(findBlameButton().exists()).toBe(false);
});
it('does not render blame button when blobInfo.externalStorage is "lfs"', async () => {
await createComponent({
blobInfoOverrides: { storedExternally: true, externalStorage: 'lfs' },
const blobOverwriteResolver = overrideBlobControlsResolver({
storedExternally: true,
externalStorage: 'lfs',
});
await createComponent({ blobControlsResolver: blobOverwriteResolver });
expect(findBlameButton().exists()).toBe(false);
});
@ -241,30 +292,34 @@ describe('Blob controls component', () => {
showPipelineEditorButton: true,
pipelineEditorUrl: 'pipeline/editor/path/file.yml',
gitpodUrl: 'gitpod/blob/url/file.js',
showGitpodButton: true,
gitpodEnabled: true,
isGitpodEnabledForInstance: true,
isGitpodEnabledForUser: true,
});
});
it('does not render WebIdeLink component if file is archived', async () => {
const blobOverwriteResolver = overrideBlobControlsResolver({
...blobControlsDataMock.repository.blobs.nodes[0],
archived: true,
});
await createComponent({
blobInfoOverrides: {
...blobControlsDataMock.repository.blobs.nodes[0],
archived: true,
},
blobControlsResolver: blobOverwriteResolver,
glFeatures: { blobOverflowMenu: true },
});
expect(findWebIdeLink().exists()).toBe(false);
});
it('does not render WebIdeLink component if file is not editable', async () => {
const blobOverwriteResolver = overrideBlobControlsResolver({
...blobControlsDataMock.repository.blobs.nodes[0],
editBlobPath: '',
});
await createComponent({
blobInfoOverrides: {
...blobControlsDataMock.repository.blobs.nodes[0],
editBlobPath: '',
},
blobControlsResolver: blobOverwriteResolver,
glFeatures: { blobOverflowMenu: true },
});
expect(findWebIdeLink().exists()).toBe(false);
});
});

View File

@ -187,7 +187,7 @@ describe('HeaderArea', () => {
webIdeUrl: headerAppInjected.webIdeUrl,
gitpodUrl: headerAppInjected.gitpodUrl,
showWebIdeButton: headerAppInjected.showWebIdeButton,
showGitpodButton: headerAppInjected.showGitpodButton,
showGitpodButton: headerAppInjected.isGitpodEnabledForInstance,
currentPath: defaultMockRoute.params.path,
directoryDownloadLinks: headerAppInjected.downloadLinks,
});

View File

@ -241,11 +241,11 @@ export const headerAppInjected = {
isReadmeView: false,
isFork: false,
needsToFork: true,
gitpodEnabled: false,
isGitpodEnabledForUser: false,
isBlob: true,
showEditButton: true,
showWebIdeButton: true,
showGitpodButton: false,
isGitpodEnabledForInstance: false,
showPipelineEditorUrl: true,
webIdeUrl: 'https://gitlab.com/project/-/ide/',
editUrl: 'https://gitlab.com/project/-/edit/main/',
@ -279,3 +279,5 @@ export const currentUserDataMock = {
preferencesGitpodPath: 'preferences/gitpod/path',
profileEnableGitpodPath: 'profile/enable/gitpod/path',
};
export const applicationInfoMock = { gitpodEnabled: true };

View File

@ -180,31 +180,31 @@ describe('vue_shared/components/web_ide_link', () => {
{
props: {
showWebIdeButton: false,
showGitpodButton: true,
gitpodEnabled: true,
isGitpodEnabledForInstance: true,
isGitpodEnabledForUser: true,
},
expectedActions: [ACTION_EDIT, ACTION_GITPOD],
},
{
props: {
showWebIdeButton: false,
showGitpodButton: true,
gitpodEnabled: false,
isGitpodEnabledForInstance: true,
isGitpodEnabledForUser: false,
},
expectedActions: [ACTION_EDIT],
},
{
props: {
showGitpodButton: true,
gitpodEnabled: false,
isGitpodEnabledForInstance: true,
isGitpodEnabledForUser: false,
},
expectedActions: [ACTION_WEB_IDE, ACTION_EDIT],
},
{
props: {
showEditButton: false,
showGitpodButton: true,
gitpodEnabled: true,
isGitpodEnabledForInstance: true,
isGitpodEnabledForUser: true,
gitpodText: 'Test Gitpod',
},
expectedActions: [ACTION_WEB_IDE, { ...ACTION_GITPOD, text: 'Test Gitpod' }],
@ -216,8 +216,8 @@ describe('vue_shared/components/web_ide_link', () => {
{
props: {
showWebIdeButton: true,
showGitpodButton: true,
gitpodEnabled: true,
isGitpodEnabledForInstance: true,
isGitpodEnabledForUser: true,
isBlob: true,
},
expectedActions: [
@ -230,8 +230,8 @@ describe('vue_shared/components/web_ide_link', () => {
{
props: {
showWebIdeButton: true,
showGitpodButton: true,
gitpodEnabled: true,
isGitpodEnabledForInstance: true,
isGitpodEnabledForUser: true,
isBlob: false,
},
expectedActions: [ACTION_EDIT],
@ -286,9 +286,9 @@ describe('vue_shared/components/web_ide_link', () => {
createComponent({
showEditButton: false,
showWebIdeButton: true,
showGitpodButton: true,
isGitpodEnabledForInstance: true,
showPipelineEditorButton: true,
gitpodEnabled: true,
isGitpodEnabledForUser: true,
});
});
@ -312,9 +312,9 @@ describe('vue_shared/components/web_ide_link', () => {
createComponent({
showEditButton: false,
showWebIdeButton: false,
showGitpodButton: true,
isGitpodEnabledForInstance: true,
showPipelineEditorButton: false,
gitpodEnabled: true,
isGitpodEnabledForUser: true,
gitpodUrl: GITPOD_URL,
});
});

View File

@ -37,6 +37,7 @@ RSpec.describe GitlabSchema.types['WorkItem'], feature_category: :team_planning
name
duplicatedToWorkItemUrl
movedToWorkItemUrl
showPlanUpgradePromotion
]
expect(described_class).to have_graphql_fields(*fields).at_least

View File

@ -52,6 +52,19 @@ RSpec.describe 'Query.work_item(id)', feature_category: :team_planning do
end
end
context "for showPlanUpgradePromotion field" do
context "when the namespace is in a free plan" do
before do
post_graphql(query, current_user: current_user)
end
it "returns true" do
# For FOSS/ce version the api will always return true
expect(work_item_data).to include('showPlanUpgradePromotion' => true)
end
end
end
context 'when the user can read the work item' do
let(:incoming_email_token) { current_user.incoming_email_token }
let(:work_item_email) do