Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-05-20 09:14:16 +00:00
parent 90f2c67875
commit a9e651e01a
58 changed files with 1323 additions and 1134 deletions

View File

@ -136,15 +136,16 @@ detect-tests:
stage: prepare
variables:
RSPEC_TESTS_MAPPING_ENABLED: "true"
MAPPING_ARCHIVE: $RSPEC_PACKED_TESTS_MAPPING_PATH
before_script:
- apt update && apt install -y curl
script:
- source ./scripts/utils.sh
- source ./scripts/rspec_helpers.sh
- install_gitlab_gem
- install_tff_gem
- retrieve_tests_mapping
- retrieve_tests_mapping "$MAPPING_ARCHIVE"
- retrieve_frontend_fixtures_mapping
script:
- |
# $FIND_CHANGES_MERGE_REQUEST_IID is defined in as-if-foss.gitlab-ci.yml
if [ -n "$CI_MERGE_REQUEST_IID" ] || [ -n "$FIND_CHANGES_MERGE_REQUEST_IID" ]; then
@ -182,6 +183,14 @@ detect-tests:
- ${RSPEC_MATCHING_TESTS_PATH}
- ${RSPEC_VIEWS_INCLUDING_PARTIALS_PATH}
# This job is used for evaluating rspec test mappings created based on coverage strategy
# See: https://gitlab.com/groups/gitlab-org/quality/analytics/-/epics/13
detect-tests-alt:
extends: detect-tests
variables:
MAPPING_ARCHIVE: $RSPEC_PACKED_TESTS_MAPPING_ALT_PATH
PREDICTIVE_TESTS_STRATEGY: coverage
detect-previous-failed-tests:
extends:
- detect-tests

View File

@ -1 +1 @@
64e5702b727ea069f6f987d33cf87264a761e997
9a811d8cd0a428c6a2a6c7037d0792855d1fd1bc

View File

@ -5,6 +5,13 @@ export default {
components: {
GlBreadcrumb,
},
props: {
staticBreadcrumbs: {
type: Object,
required: false,
default: () => ({ items: [] }),
},
},
computed: {
rootRoute() {
const rootName = this.$route.meta.environmentName;
@ -30,7 +37,7 @@ export default {
if (!this.isLoaded) {
return [];
}
const breadCrumbs = [this.rootRoute];
const breadCrumbs = [...this.staticBreadcrumbs.items, this.rootRoute];
if (!this.isRootRoute) {
breadCrumbs.push(this.logsRoute);

View File

@ -109,7 +109,7 @@ export const initPage = async () => {
},
});
injectVueAppBreadcrumbs(router, EnvironmentBreadcrumbs);
injectVueAppBreadcrumbs(router, EnvironmentBreadcrumbs, null, {}, { singleNavOptIn: true });
return new Vue({
el,

View File

@ -13,7 +13,10 @@ module Packages
INVALID_METADATA_ERROR_SYMBOL_MESSAGE = 'package name, version and/or description not found in metadata'
MISSING_MATCHING_PACKAGE_ERROR_MESSAGE = 'symbol package is invalid, matching package does not exist'
InvalidMetadataError = ZipError = DuplicatePackageError = ProtectedPackageError = Class.new(StandardError)
DuplicatePackageError = Class.new(StandardError)
InvalidMetadataError = Class.new(StandardError)
ProtectedPackageError = Class.new(StandardError)
ZipError = Class.new(StandardError)
def initialize(package_file, package_zip_file)
@package_file = package_file

View File

@ -1,9 +0,0 @@
---
name: virtual_registry_maven
feature_issue_url: https://gitlab.com/groups/gitlab-org/-/epics/14137
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/160891
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/474863
milestone: '17.3'
group: group::package registry
type: wip
default_enabled: false

View File

@ -5,4 +5,4 @@ feature_category: team_planning
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/183903
milestone: '17.11'
queued_migration_version: 20250317222744
finalized_by: # version of the migration that finalized this BBM
finalized_by: 20250519120927

View File

@ -7,6 +7,7 @@ feature_categories:
description: The diff of the change when an edit is made to an Issue, MR or Epic description
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/17147
milestone: '12.4'
gitlab_schema: gitlab_main
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/514600
gitlab_schema: gitlab_main_cell
sharding_key:
namespace_id: namespaces
table_size: over_limit

View File

@ -0,0 +1,25 @@
# frozen_string_literal: true
class AddStatusWidgetDefinitionToIssues < Gitlab::Database::Migration[2.3]
include Gitlab::Database::MigrationHelpers::WorkItems::Widgets
restrict_gitlab_migration gitlab_schema: :gitlab_main
disable_ddl_transaction!
milestone '18.1'
WORK_ITEM_TYPE_ENUM_VALUES = [0] # issues
WIDGETS = [
{
name: 'Status',
widget_type: 26
}
]
def up
add_widget_definitions(type_enum_values: WORK_ITEM_TYPE_ENUM_VALUES, widgets: WIDGETS)
end
def down
remove_widget_definitions(type_enum_values: WORK_ITEM_TYPE_ENUM_VALUES, widgets: WIDGETS)
end
end

View File

@ -0,0 +1,23 @@
# frozen_string_literal: true
class FinalizeBackfillDescriptionVersionsNamespace < Gitlab::Database::Migration[2.3]
MIGRATION = "BackfillDescriptionVersionsNamespace"
disable_ddl_transaction!
restrict_gitlab_migration gitlab_schema: :gitlab_main
milestone '18.1'
def up
ensure_batched_background_migration_is_finished(
job_class_name: MIGRATION,
table_name: :description_versions,
column_name: :id,
job_arguments: [],
finalize: true
)
end
def down
# no-op
end
end

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
class AddDescriptionVersionsNamespaceIdIndex < Gitlab::Database::Migration[2.3]
INDEX_NAME = 'idx_description_versions_on_namespace_id'
disable_ddl_transaction!
milestone '18.1'
def up
add_concurrent_index :description_versions, :namespace_id, name: INDEX_NAME # rubocop:disable Migration/PreventIndexCreation -- Sharding keys are an exception
end
def down
remove_concurrent_index_by_name :description_versions, name: INDEX_NAME
end
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class ValidateDescriptionVersionsParentNotNullConstraint < Gitlab::Database::Migration[2.3]
CONSTRAINT_NAME = 'check_76c1eb7122'
milestone '18.1'
def up
validate_multi_column_not_null_constraint :description_versions,
:issue_id,
:merge_request_id,
:epic_id,
constraint_name: CONSTRAINT_NAME
end
def down
# no-op
end
end

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
class AddDescriptionVersionsNamespaceIdForeignKey < Gitlab::Database::Migration[2.3]
disable_ddl_transaction!
milestone '18.1'
def up
add_concurrent_foreign_key :description_versions, :namespaces, column: :namespace_id, reverse_lock_order: true
end
def down
with_lock_retries do
remove_foreign_key :description_versions, column: :namespace_id
end
end
end

View File

@ -0,0 +1 @@
3c906a2d6678e67796db3f3c747c6292918afb0bf50b2b1e870a8662563221cc

View File

@ -0,0 +1 @@
0b2704a6ed7771436a1a7162b4b18c3919d289c1ca8e301bf054a86e5079615f

View File

@ -0,0 +1 @@
8f46177086b14092eee689a654b21f4e3a6e335a5471319910a54a95cbd52efd

View File

@ -0,0 +1 @@
d738c6e86e47f82690f0eff2c5e396ed823cdee50b54459c31169b6be0afb96a

View File

@ -0,0 +1 @@
edd0af1ca8b6140920ae6005a640e2df1ca304a7cefd29e6487a98b566a47740

View File

@ -13545,7 +13545,8 @@ CREATE TABLE description_versions (
epic_id bigint,
description text,
deleted_at timestamp with time zone,
namespace_id bigint NOT NULL
namespace_id bigint NOT NULL,
CONSTRAINT check_76c1eb7122 CHECK ((num_nonnulls(epic_id, issue_id, merge_request_id) = 1))
);
CREATE SEQUENCE description_versions_id_seq
@ -29107,9 +29108,6 @@ ALTER TABLE ONLY project_type_ci_runners
ALTER TABLE lists
ADD CONSTRAINT check_6dadb82d36 CHECK ((num_nonnulls(group_id, project_id) = 1)) NOT VALID;
ALTER TABLE description_versions
ADD CONSTRAINT check_76c1eb7122 CHECK ((num_nonnulls(epic_id, issue_id, merge_request_id) = 1)) NOT VALID;
ALTER TABLE ONLY group_type_ci_runners
ADD CONSTRAINT check_81b90172a6 UNIQUE (id);
@ -33139,6 +33137,8 @@ CREATE INDEX idx_dep_proxy_pkgs_settings_enabled_maven_on_project_id ON dependen
CREATE INDEX idx_deployment_clusters_on_cluster_id_and_kubernetes_namespace ON deployment_clusters USING btree (cluster_id, kubernetes_namespace);
CREATE INDEX idx_description_versions_on_namespace_id ON description_versions USING btree (namespace_id);
CREATE INDEX idx_devops_adoption_segments_namespace_end_time ON analytics_devops_adoption_snapshots USING btree (namespace_id, end_time);
CREATE INDEX idx_devops_adoption_segments_namespace_recorded_at ON analytics_devops_adoption_snapshots USING btree (namespace_id, recorded_at);
@ -43267,6 +43267,9 @@ ALTER TABLE ONLY packages_conan_file_metadata
ALTER TABLE ONLY catalog_resource_versions
ADD CONSTRAINT fk_b670eae96b FOREIGN KEY (catalog_resource_id) REFERENCES catalog_resources(id) ON DELETE CASCADE;
ALTER TABLE ONLY description_versions
ADD CONSTRAINT fk_b688e93ee1 FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE;
ALTER TABLE ONLY bulk_import_entities
ADD CONSTRAINT fk_b69fa2b2df FOREIGN KEY (bulk_import_id) REFERENCES bulk_imports(id) ON DELETE CASCADE;

View File

@ -2,7 +2,7 @@
stage: AI-powered
group: Custom Models
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
description: Get started with GitLab Duo Self-Hosted.
description: Host your own AI gateway and language models.
title: GitLab Duo Self-Hosted
---

View File

@ -32,6 +32,8 @@ Use the following endpoints to create and manage Maven virtual registries.
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161615) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -75,6 +77,8 @@ Example response:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161615) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -119,6 +123,8 @@ Example response:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161615) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -160,6 +166,8 @@ Example response:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/189070) in GitLab 18.0 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -192,6 +200,8 @@ If successful, returns a [`200 OK`](rest/troubleshooting.md#status-codes) status
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161615) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -224,6 +234,8 @@ Use the following endpoints to configure and manage upstream Maven registries.
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162019) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -274,6 +286,8 @@ Example response:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162019) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -331,6 +345,8 @@ Example response:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162019) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -375,6 +391,8 @@ Example response:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162019) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -418,6 +436,8 @@ If successful, returns a [`200 OK`](rest/troubleshooting.md#status-codes) status
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186890) in GitLab 18.0 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -448,6 +468,8 @@ If successful, returns a [`200 OK`](rest/troubleshooting.md#status-codes) status
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162019) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -480,6 +502,8 @@ Use the following endpoints to manage cache entries for a Maven virtual registry
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162614) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -532,6 +556,8 @@ Example response:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162614) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -578,6 +604,8 @@ see [Maven package registry](../user/packages/maven_repository/_index.md). Undoc
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/160891) in GitLab 17.3 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -615,6 +643,8 @@ the following response headers:
{{< history >}}
- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163641) in GitLab 17.4 [with a flag](../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}

View File

@ -65,7 +65,7 @@ Follow these guidelines when you document GitLab Duo features.
When documenting a GitLab Duo experiment:
- On the [top-level GitLab Duo page](../../user/gitlab_duo/_index.md#summary-of-gitlab-duo-features):
- On the [top-level GitLab Duo page](../../user/gitlab_duo/feature_summary.md):
- Add a row to the table.
- Add the feature to an area at the top of the page, near other features that are available
during a similar stage of the software development lifecycle.
@ -80,7 +80,7 @@ When documenting a GitLab Duo experiment:
When a GitLab Duo experiment moves to beta:
- On the [top-level GitLab Duo page](../../user/gitlab_duo/_index.md#summary-of-gitlab-duo-features),
- On the [top-level GitLab Duo page](../../user/gitlab_duo/feature_summary.md),
update the row in the table.
- Make sure you update the history and status values, including any
[add-on information](styleguide/availability_details.md#add-ons).
@ -92,7 +92,7 @@ When a GitLab Duo experiment moves to beta:
When a GitLab Duo feature becomes generally available:
- On the [top-level GitLab Duo page](../../user/gitlab_duo/_index.md#summary-of-gitlab-duo-features),
- On the [top-level GitLab Duo page](../../user/gitlab_duo/feature_summary.md),
update the row in the table.
- Make sure you update the history and status values, including any
[add-on information](styleguide/availability_details.md#add-ons).

View File

@ -26,7 +26,7 @@ and gain deeper insights across your projects.
Three add-ons are available: GitLab Duo Core, Pro, and Enterprise.
Each add-on provides access to
[a set of GitLab Duo features](../user/gitlab_duo/_index.md#summary-of-gitlab-duo-features).
[a set of GitLab Duo features](../user/gitlab_duo/feature_summary.md).
## GitLab Duo Core

View File

@ -65,6 +65,8 @@ GitLab can help you with a vulnerability by using a large language model to:
- Help developers and security analysts to understand the vulnerability, how it could be exploited, and how to fix it.
- Provide a suggested mitigation.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=MMVFvGrmMzw&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
### Vulnerability Explanation
Explain a vulnerability with GitLab Duo Vulnerability Explanation. Use the explanation to better
@ -137,6 +139,8 @@ You should always review the proposed change before merging it. When reviewing,
- Your application's existing functionality is preserved.
- The vulnerability is resolved in accordance with your organization's standards.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=VJmsw_C125E&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
Prerequisites:
- You must have the GitLab Ultimate subscription tier and GitLab Duo Enterprise.

View File

@ -386,6 +386,9 @@ such as:
Generate a summary of discussions on an issue.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=IcdxLfTIUgc)
<!-- Video published on 2024-03-28 -->
Prerequisites:
- You must have permission to view the issue.

View File

@ -28,7 +28,7 @@ can check the health of the installation.
For more information, see:
- [GitLab Duo features by add-on](../gitlab_duo/_index.md#summary-of-gitlab-duo-features).
- [GitLab Duo features by add-on](../gitlab_duo/feature_summary.md).
- [How to purchase an add-on](../../subscriptions/subscription-add-ons.md).
- [GitLab Duo Self-Hosted](../../administration/gitlab_duo_self_hosted/_index.md).
- [Health check details](../gitlab_duo/setup.md#run-a-health-check-for-gitlab-duo).

View File

@ -20,140 +20,10 @@ These features aim to help increase velocity and solve key pain points across th
GitLab Duo features are available in [IDE extensions](../../editor_extensions/_index.md) and the GitLab UI.
Some features are also available as part of [GitLab Duo Chat](../gitlab_duo_chat_examples.md).
- [Get started with GitLab Duo](../get_started/getting_started_gitlab_duo.md).
- [View a walkthrough of GitLab Duo Enterprise features](https://gitlab.navattic.com/duo-enterprise).
{{< walkthrough data="duo-walkthrough" >}}
## GitLab Duo language models
- [View list of all GitLab Duo features](feature_summary.md)
- [Set up GitLab Duo on Self-Managed GitLab](setup.md)
- [Use your own models with GitLab Duo Self-Hosted](../../administration/gitlab_duo_self_hosted/_index.md)
The language models that are the source for GitLab Duo depend on where you're using it.
- On GitLab.com: GitLab hosts the models and connects to them through the cloud-based AI gateway.
- On GitLab Self-Managed, two options exist:
- **GitLab** can [host the models and the cloud-based AI gateway](setup.md).
- **Your organization** can [use GitLab Duo Self-Hosted](../../administration/gitlab_duo_self_hosted/_index.md),
which means you host the AI gateway and language models. You can use GitLab AI vendor models
or the other supported language models.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://youtu.be/TQoO3sFnb28?si=w_gFAYLYIzPEbhEl)
<!-- Video published on 2025-02-20 -->
## Working across the entire software development lifecycle
To improve your workflow across the entire software development lifecycle, try these features:
- [GitLab Duo Chat](../gitlab_duo_chat/_index.md): Write and understand code, get up to speed on the status of projects,
and learn about GitLab by asking your questions in a chat window.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=ZQBAuf-CTAY)
<!-- Video published on 2024-04-18 -->
- [GitLab Duo Workflow](../duo_workflow/_index.md): Automate tasks and help increase productivity in your development workflow.
- [AI Impact Dashboard](../analytics/ai_impact_analytics.md): Measure the AI effectiveness and impact on SDLC metrics.
## Planning work
To improve your workflow while planning work, try these features:
- [Issue Description Generation](../project/issues/managing_issues.md#populate-an-issue-with-issue-description-generation): Generate a more in-depth issue description based on a short summary.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=-BWBQat7p5M)
<!-- Video published on 2024-12-18 -->
- [Discussion Summary](../discussions/_index.md#summarize-issue-discussions-with-duo-chat): Summarize lengthy conversations in an issue.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=IcdxLfTIUgc)
<!-- Video published on 2024-03-28 -->
## Authoring code
To improve your workflow while authoring code, try these features:
- [Code Suggestions](../project/repository/code_suggestions/_index.md): Generate code and show suggestions as you type.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://youtu.be/ds7SG1wgcVM)
- Code Explanation: Have code explained. View docs for explaining code in:
- [The IDE](../gitlab_duo_chat/examples.md#explain-selected-code).
- [A file](../project/repository/code_explain.md).
- [A merge request](../project/merge_requests/changes.md#explain-code-in-a-merge-request).
- <i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://youtu.be/1izKaLmmaCA?si=O2HDokLLujRro_3O)
<!-- Video published on 2023-11-18 -->
- [Test Generation](../gitlab_duo_chat/examples.md#write-tests-in-the-ide): Test your code by generating tests.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=zWhwuixUkYU)
- [Refactor Code](../gitlab_duo_chat/examples.md#refactor-code-in-the-ide): Improve or refactor the selected code.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://youtu.be/oxziu7_mWVk?si=fS2JUO-8doARS169)
- [Fix Code](../gitlab_duo_chat/examples.md#fix-code-in-the-ide): Fix quality problems, like bugs or typos, in the selected code.
- [GitLab Duo for the CLI](../../editor_extensions/gitlab_cli/_index.md#gitlab-duo-for-the-cli): Discover or recall `git` commands.
## Reviewing code
To improve your workflow while reviewing code in merge requests, try these features:
- [Merge Request Summary](../project/merge_requests/duo_in_merge_requests.md#generate-a-description-by-summarizing-code-changes): Generate a description based on the code changes.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=CKjkVsfyFd8&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
- [Code Review](../project/merge_requests/duo_in_merge_requests.md#have-gitlab-duo-review-your-code): Review proposed code changes.
- [Code Review Summary](../project/merge_requests/duo_in_merge_requests.md#summarize-a-code-review): Summarize all the comments in a review.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=Bx6Zajyuy9k)
- [Merge Commit Message Generation](../project/merge_requests/duo_in_merge_requests.md#generate-a-merge-commit-message): Generate commit messages.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=fUHPNT4uByQ)
## Testing and deploying code
To improve your testing and deployment workflow, try these features:
- [Root Cause Analysis](../gitlab_duo_chat/examples.md#troubleshoot-failed-cicd-jobs-with-root-cause-analysis): Research the root cause for a CI/CD job failure by analyzing the logs.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=MLjhVbMjFAY&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
## Securing code
To improve your security, try these features:
- [Vulnerability Explanation](../application_security/vulnerabilities/_index.md#explaining-a-vulnerability): Learn more about vulnerabilities, how they can be exploited, and how to fix them.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=MMVFvGrmMzw&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
- [Vulnerability Resolution](../application_security/vulnerabilities/_index.md#vulnerability-resolution): Generate a merge request that addresses a vulnerability.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=VJmsw_C125E&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
## Summary of GitLab Duo features
The following features are generally available on GitLab.com, GitLab Self-Managed, and GitLab Dedicated.
They require a Premium or Ultimate subscription and one of the available add-ons.
| Feature | GitLab Duo Core | GitLab Duo Pro | GitLab Duo Enterprise |
|---------|----------|---------|----------------|
| [Code Suggestions](../project/repository/code_suggestions/_index.md) | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [GitLab Duo Chat](../gitlab_duo_chat/_index.md) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Code Explanation](../gitlab_duo_chat/examples.md#explain-selected-code) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Refactor Code](../gitlab_duo_chat/examples.md#refactor-code-in-the-ide) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Fix Code](../gitlab_duo_chat/examples.md#fix-code-in-the-ide) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Test Generation](../gitlab_duo_chat/examples.md#write-tests-in-the-ide) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [GitLab Duo Chat](../gitlab_duo_chat/_index.md) in GitLab UI | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Code Explanation](../project/repository/code_explain.md) in GitLab UI | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Discussion Summary](../discussions/_index.md#summarize-issue-discussions-with-duo-chat) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [GitLab Duo for the CLI](../../editor_extensions/gitlab_cli/_index.md#gitlab-duo-for-the-cli) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Merge Commit Message Generation](../project/merge_requests/duo_in_merge_requests.md#generate-a-merge-commit-message) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Root Cause Analysis](../gitlab_duo_chat/examples.md#troubleshoot-failed-cicd-jobs-with-root-cause-analysis) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Vulnerability Explanation](../application_security/vulnerabilities/_index.md#explaining-a-vulnerability) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Vulnerability Resolution](../application_security/vulnerabilities/_index.md#vulnerability-resolution) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [AI Impact Dashboard](../analytics/ai_impact_analytics.md) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
### Features available in GitLab Duo Self-Hosted
Your organization can use [GitLab Duo Self-Hosted](../../administration/gitlab_duo_self_hosted/_index.md)
to self-host the AI gateway and language models if you:
- Have the GitLab Duo Enterprise add-on.
- Are a GitLab Self-Managed customer.
To check which GitLab Duo features are available for use with GitLab Duo Self-Hosted,
and the status of those features, see the
[supported GitLab Duo features for GitLab Duo Self-Hosted](../../administration/gitlab_duo_self_hosted/_index.md#supported-gitlab-duo-features).
### Beta and experimental features
The following features are not generally available.
They require a Premium or Ultimate subscription and one of the available add-ons.
| Feature | GitLab Duo Core | GitLab Duo Pro | GitLab Duo Enterprise | GitLab.com | GitLab Self-Managed | GitLab Dedicated | GitLab Duo Self-Hosted |
|---------|----------|---------|----------------|-----------|-------------|-----------|------------------------|
| [Code Review Summary](../project/merge_requests/duo_in_merge_requests.md#summarize-a-code-review) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Experiment | Experiment | {{< icon name="dash-circle" >}} No | Experiment |
| [Issue Description Generation](../project/issues/managing_issues.md#populate-an-issue-with-issue-description-generation) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Experiment | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | N/A |
| [Code Review](../project/merge_requests/duo_in_merge_requests.md#have-gitlab-duo-review-your-code) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Beta | Beta | Beta | N/A |
| [Merge Request Summary](../project/merge_requests/duo_in_merge_requests.md#generate-a-description-by-summarizing-code-changes) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Beta | Beta | {{< icon name="dash-circle" >}} No | Beta |
[GitLab Duo Workflow](../duo_workflow/_index.md) is in private beta, does not require an add-on, and is not supported for GitLab Duo Self-Hosted.
{{< /walkthrough >}}

View File

@ -0,0 +1,50 @@
---
stage: AI-powered
group: AI Framework
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
description: AI-native features and functionality.
title: Summary of GitLab Duo features
---
The following features are generally available on GitLab.com, GitLab Self-Managed, and GitLab Dedicated.
They require a Premium or Ultimate subscription and one of the available add-ons.
| Feature | GitLab Duo Core | GitLab Duo Pro | GitLab Duo Enterprise |
|---------|----------|---------|----------------|
| [Code Suggestions](../project/repository/code_suggestions/_index.md) | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [GitLab Duo Chat](../gitlab_duo_chat/_index.md) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Code Explanation](../gitlab_duo_chat/examples.md#explain-selected-code) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Refactor Code](../gitlab_duo_chat/examples.md#refactor-code-in-the-ide) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Fix Code](../gitlab_duo_chat/examples.md#fix-code-in-the-ide) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Test Generation](../gitlab_duo_chat/examples.md#write-tests-in-the-ide) in IDEs | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [GitLab Duo Chat](../gitlab_duo_chat/_index.md) in GitLab UI | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Code Explanation](../project/repository/code_explain.md) in GitLab UI | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | {{< icon name="check-circle-filled" >}} Yes |
| [Discussion Summary](../discussions/_index.md#summarize-issue-discussions-with-duo-chat) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [GitLab Duo for the CLI](../../editor_extensions/gitlab_cli/_index.md#gitlab-duo-for-the-cli) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Merge Commit Message Generation](../project/merge_requests/duo_in_merge_requests.md#generate-a-merge-commit-message) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Root Cause Analysis](../gitlab_duo_chat/examples.md#troubleshoot-failed-cicd-jobs-with-root-cause-analysis) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Vulnerability Explanation](../application_security/vulnerabilities/_index.md#explaining-a-vulnerability) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [Vulnerability Resolution](../application_security/vulnerabilities/_index.md#vulnerability-resolution) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
| [AI Impact Dashboard](../analytics/ai_impact_analytics.md) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes |
In addition:
- All GitLab Duo Core and Pro features include generally available support for
[GitLab Duo Self-Hosted](../../administration/gitlab_duo_self_hosted/_index.md).
- All GitLab Duo Enterprise-only features include beta support for GitLab Duo Self-Hosted.
## Beta and experimental features
The following features are not generally available.
They require a Premium or Ultimate subscription and one of the available add-ons.
| Feature | GitLab Duo Core | GitLab Duo Pro | GitLab Duo Enterprise | GitLab.com | GitLab Self-Managed | GitLab Dedicated | GitLab Duo Self-Hosted |
|---------|----------|---------|----------------|-----------|-------------|-----------|------------------------|
| [Code Review Summary](../project/merge_requests/duo_in_merge_requests.md#summarize-a-code-review) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Experiment | Experiment | {{< icon name="dash-circle" >}} No | Experiment |
| [Issue Description Generation](../project/issues/managing_issues.md#populate-an-issue-with-issue-description-generation) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Experiment | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | N/A |
| [Code Review](../project/merge_requests/duo_in_merge_requests.md#have-gitlab-duo-review-your-code) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Beta | Beta | Beta | N/A |
| [Merge Request Summary](../project/merge_requests/duo_in_merge_requests.md#generate-a-description-by-summarizing-code-changes) | {{< icon name="dash-circle" >}} No | {{< icon name="dash-circle" >}} No | {{< icon name="check-circle-filled" >}} Yes | Beta | Beta | {{< icon name="dash-circle" >}} No | Beta |
[GitLab Duo Workflow](../duo_workflow/_index.md) is in private beta, does not require an add-on, and is not supported for GitLab Duo Self-Hosted.

View File

@ -2,6 +2,7 @@
stage: AI-powered
group: AI Framework
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
description: Ensure GitLab Duo is configured and operating correctly.
title: Configure GitLab Duo on a GitLab Self-Managed instance
gitlab_dedicated: no
---

View File

@ -35,6 +35,9 @@ contextual, conversational AI. Chat:
- Integrates directly in the GitLab UI, Web IDE, VS Code, JetBrains IDEs, and Visual Studio.
- Can include information from your repositories and projects to deliver targeted improvements.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=ZQBAuf-CTAY)
<!-- Video published on 2024-04-18 -->
## Supported editor extensions
You can use GitLab Duo Chat in:

View File

@ -451,8 +451,11 @@ You can include additional instructions to be considered. For example:
- Focus on performance, for example `/refactor improving performance`.
- Focus on potential vulnerabilities, for example `/refactor avoiding memory leaks and exploits`.
For more information, see <i class="fa-youtube-play" aria-hidden="true"></i> [Application modernization with GitLab Duo (C++ to Java)](https://youtu.be/FjoAmt5eeXA?si=SLv9Mv8eSUAVwW5Z).
For more information, see:
- <i class="fa-youtube-play" aria-hidden="true"></i> [Application modernization with GitLab Duo (C++ to Java)](https://youtu.be/FjoAmt5eeXA?si=SLv9Mv8eSUAVwW5Z).
<!-- Video published on 2025-03-18 -->
- <i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://youtu.be/oxziu7_mWVk?si=fS2JUO-8doARS169)
## Fix code in the IDE
@ -526,6 +529,8 @@ You can include additional instructions to be considered. For example:
For more information, see [Use GitLab Duo Chat in VS Code](_index.md#use-gitlab-duo-chat-in-vs-code).
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=zWhwuixUkYU)
## Ask about CI/CD
{{< details >}}
@ -593,6 +598,8 @@ It analyzes the last 100,000 characters of the job log to determine the cause of
You can access this feature either from the **Pipelines** tab in merge requests or directly from the job log.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch overview](https://www.youtube.com/watch?v=MLjhVbMjFAY&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
Root Cause Analysis does not support:
- Trigger jobs

View File

@ -68,3 +68,5 @@ You can also access issue analytics from the [Value Streams Dashboard](../../ana
Enhanced issue analytics display the additional metric `Issues closed`, which represents the total number of resolved issues in your group over a selected period.
You can use this metric to improve the overall turn-around time and value delivered to your customers.
![Enhanced issue analytics bar chart and table for a group](img/enhanced_issue_analytics_v17_8.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 143 KiB

View File

@ -9,13 +9,15 @@ title: Virtual registry
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed
- Status: Experiment
- Status: Beta
{{< /details >}}
{{< history >}}
- [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14137) in GitLab 18.0 [with a flag](../../../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -23,7 +25,7 @@ title: Virtual registry
The availability of this feature is controlled by a feature flag.
For more information, see the history.
This feature is available in [experiment](../../../policy/development_stages_support.md#experiment).
This feature is available in [beta](../../../policy/development_stages_support.md#beta).
Review the documentation carefully before you use this feature.
{{< /alert >}}

View File

@ -9,13 +9,15 @@ title: Maven virtual registry
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed
- Status: Experiment
- Status: Beta
{{< /details >}}
{{< history >}}
- [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14137) in GitLab 18.0 [with a flag](../../../../administration/feature_flags.md) named `virtual_registry_maven`. Disabled by default.
- Feature flag [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) to `maven_virtual_registry` in GitLab 18.1.
- [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/540276) from experiment to beta in GitLab 18.1.
{{< /history >}}
@ -23,7 +25,7 @@ title: Maven virtual registry
The availability of this feature is controlled by a feature flag.
For more information, see the history.
This feature is available in [experiment](../../../../policy/development_stages_support.md#experiment).
This feature is available in [beta](../../../../policy/development_stages_support.md#beta).
Review the documentation carefully before you use this feature.
{{< /alert >}}

View File

@ -64,6 +64,9 @@ To edit an issue:
Generate a detailed description for an issue based on a short summary you provide.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=-BWBQat7p5M)
<!-- Video published on 2024-12-18 -->
Prerequisites:
- You must belong to at least one group with the [experiment and beta features setting](../../gitlab_duo/turn_on_off.md#turn-on-beta-and-experimental-features) enabled.

View File

@ -267,6 +267,9 @@ If you spend a lot of time trying to understand code that others have created, o
you struggle to understand code written in a language you are not familiar with,
you can ask GitLab Duo to explain the code to you.
- <i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://youtu.be/1izKaLmmaCA?si=O2HDokLLujRro_3O)
<!-- Video published on 2023-11-18 -->
Prerequisites:
- You must belong to at least one group with the

View File

@ -43,6 +43,8 @@ to create a merge request description.
The description is inserted where your cursor was.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=CKjkVsfyFd8&list=PLFGfElNsQthZGazU1ZdfDpegu0HflunXW)
Provide feedback on this feature in [issue 443236](https://gitlab.com/gitlab-org/gitlab/-/issues/443236).
Data usage: The diff of changes between the source branch's head and the target branch is sent to the large language model.
@ -156,6 +158,8 @@ When you've completed your review of a merge request and are ready to [submit yo
The summary is displayed in the comment box. You can edit and refine the summary prior to submitting your review.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=Bx6Zajyuy9k)
Provide feedback on this experimental feature in [issue 408991](https://gitlab.com/gitlab-org/gitlab/-/issues/408991).
Data usage: When you use this feature, the following data is sent to the large language model referenced above:
@ -191,6 +195,8 @@ by using GitLab Duo Merge Commit Message Generation.
1. Select **Generate commit message**.
1. Review the commit message provided and choose **Insert** to add it to the commit.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://www.youtube.com/watch?v=fUHPNT4uByQ)
Data usage: When you use this feature, the following data is sent to the large language model:
- Contents of the file

View File

@ -35,9 +35,10 @@ title: Code Suggestions
Use GitLab Duo Code Suggestions to write code more efficiently by using generative AI to suggest code while you're developing.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
[View a click-through demo](https://gitlab.navattic.com/code-suggestions).
<!-- Video published on 2023-12-09 --> <!-- Demo published on 2024-02-01 -->
- <i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
[View a click-through demo](https://gitlab.navattic.com/code-suggestions).
<!-- Video published on 2023-12-09 --> <!-- Demo published on 2024-02-01 -->
- <i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Watch an overview](https://youtu.be/ds7SG1wgcVM)
## Prerequisites

View File

@ -60,7 +60,8 @@ module Gitlab
:start_and_due_date,
:time_tracking,
:vulnerabilities,
[:weight, { editable: true, rollup: false }]
[:weight, { editable: true, rollup: false }],
:status
],
incident: [
:assignees,

View File

@ -35572,6 +35572,9 @@ msgstr ""
msgid "LDAP|Server"
msgstr ""
msgid "LDAP|Start typing"
msgstr ""
msgid "LDAP|Sync method"
msgstr ""
@ -35584,6 +35587,9 @@ msgstr ""
msgid "LDAP|User filter"
msgstr ""
msgid "LDAP|View more information on %{linkStart}user filters%{linkEnd}."
msgstr ""
msgid "LDAP|You can manage permission levels for individual group members in the Members tab."
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -1,293 +1,291 @@
{
"qa/specs/features/api/10_govern/group_access_token_spec.rb": 32.98999308,
"qa/specs/features/api/10_govern/project_access_token_spec.rb": 75.62535221,
"qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb": 97.971406904,
"qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb": 99.394917952,
"qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb": 111.202909403,
"qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb": 23.128792633,
"qa/specs/features/api/1_manage/import/import_github_repo_spec.rb": 98.601690677,
"qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb": 63.884309438,
"qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb": 60.555716827,
"qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb": 185.120150591,
"qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb": 97.451122042,
"qa/specs/features/api/1_manage/migration/gitlab_migration_project_spec.rb": 101.663654195,
"qa/specs/features/api/1_manage/rate_limits_spec.rb": 14.907381728,
"qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb": 25.755076546,
"qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb": 16.82332341,
"qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb": 22.433046338,
"qa/specs/features/api/3_create/merge_request/push_options_spec.rb": 39.80516242,
"qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb": 1.38181908,
"qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb": 25.431371545,
"qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb": 22.631262867,
"qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb": 26.793694843000004,
"qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 16.670677201,
"qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb": 25.454150535,
"qa/specs/features/api/3_create/repository/storage_size_spec.rb": 28.961005929,
"qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb": 10.547959073,
"qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb": 95.84142065,
"qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb": 26.575834034,
"qa/specs/features/api/4_verify/file_variable_spec.rb": 60.79006248,
"qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb": 39.828565691,
"qa/specs/features/api/5_package/container_registry/saas/container_registry_spec.rb": 69.770433031,
"qa/specs/features/api/8_monitor/metrics_spec.rb": 5.996862642,
"qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb": 145.832127287,
"qa/specs/features/api/9_tenant_scale/users_spec.rb": 3.88771732,
"qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb": 18.955245548,
"qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb": 51.379482902,
"qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb": 63.15838517,
"qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb": 13.427990734,
"qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb": 94.549567111,
"qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb": 4.26200593,
"qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb": 30.355360322,
"qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb": 16.78395848,
"qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb": 41.820836674,
"qa/specs/features/browser_ui/10_govern/login/register_spec.rb": 101.892100194,
"qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb": 25.906346348,
"qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb": 30.138602861,
"qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb": 44.138226734999996,
"qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb": 60.04423653,
"qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb": 18.762676849,
"qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb": 13.578009866,
"qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb": 61.994387357,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb": 65.227220864,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb": 46.776170762,
"qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb": 73.78475297,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb": 57.03791635,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb": 181.520241604,
"qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb": 23.031130269,
"qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb": 29.780177896,
"qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb": 30.636613756,
"qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb": 16.470446876,
"qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 23.402340109,
"qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 26.608420993,
"qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 226.30203992999998,
"qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb": 30.203090855,
"qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb": 40.13231434,
"qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 24.860881753,
"qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 24.575106282,
"qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb": 33.018544554,
"qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb": 26.291870234,
"qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb": 17.561810633,
"qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb": 106.336658382,
"qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb": 22.587552274,
"qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb": 28.049283666,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb": 108.875066367,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb": 69.419140123,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb": 25.037219196,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb": 38.413254353,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb": 70.598098006,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb": 59.092698467000005,
"qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb": 24.049024633,
"qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb": 83.35424972999999,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb": 65.769218013,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb": 30.017509364,
"qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 92.452005772,
"qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 46.535589667,
"qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb": 85.059614424,
"qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 58.678788745,
"qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb": 38.031947034,
"qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb": 107.744959716,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb": 64.079688598,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb": 60.464588091,
"qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 47.575329799,
"qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 27.119274477,
"qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb": 30.340932638,
"qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb": 24.416460797,
"qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 26.239438601,
"qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb": 37.20657738,
"qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb": 142.734936736,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb": 24.264817229,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb": 27.222468229,
"qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 49.703005927,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb": 84.31200969,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 77.096792386,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 54.592720064000005,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 43.343972126,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb": 100.70291134499999,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb": 57.116473049999996,
"qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 22.332861645,
"qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb": 21.55505836,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb": 29.287778902,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb": 26.294830596,
"qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 65.051120837,
"qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb": 31.803789523,
"qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb": 51.590373962,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb": 83.905883157,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb": 73.04176784399999,
"qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb": 20.481249541,
"qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb": 8.514641421,
"qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb": 14.67105945,
"qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb": 28.514565884,
"qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb": 47.298550792,
"qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb": 34.434016889,
"qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb": 25.014898858,
"qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb": 42.752924537,
"qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb": 84.502238036,
"qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb": 24.250358427,
"qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb": 180.07976596700001,
"qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb": 96.65252819099999,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb": 86.128659366,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb": 121.634773435,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb": 116.303910391,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb": 55.741715074,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb": 66.436168654,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb": 260.885521371,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb": 319.85414603000004,
"qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb": 73.521802689,
"qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb": 134.719012043,
"qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb": 33.577634151,
"qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb": 84.286087112,
"qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb": 18.525020519,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb": 54.886224503,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb": 64.229339559,
"qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb": 112.862791923,
"qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb": 66.298914071,
"qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb": 66.049358924,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb": 65.493875232,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb": 50.079680864,
"qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb": 31.110243067,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb": 23.618801349,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb": 39.029569115,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb": 25.616882657,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb": 17.609245948,
"qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb": 20.499690898,
"qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb": 45.242119367,
"qa/specs/features/browser_ui/4_verify/runner/unregister_runner_spec.rb": 26.076009522,
"qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb": 54.246992046,
"qa/specs/features/browser_ui/5_package/container_registry/saas/container_registry_spec.rb": 165.693115559,
"qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb": 345.187678671,
"qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb": 172.648268037,
"qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb": 67.483790802,
"qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb": 97.870222592,
"qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb": 133.504862177,
"qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb": 382.312482672,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb": 591.8489436350001,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb": 285.250109461,
"qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb": 304.329392175,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb": 335.093454552,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb": 285.115592965,
"qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb": 107.899088585,
"qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 29.988003167,
"qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 187.45400691700002,
"qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 15.694988036,
"qa/specs/features/browser_ui/8_monitor/alert_management/alert_settings_create_new_alerts_spec.rb": 56.424444699,
"qa/specs/features/browser_ui/8_monitor/alert_management/automatically_creates_incident_for_alert_spec.rb": 69.98793122000001,
"qa/specs/features/browser_ui/8_monitor/alert_management/create_alert_using_authorization_key_spec.rb": 47.768660694,
"qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb": 69.965951869,
"qa/specs/features/browser_ui/8_monitor/alert_management/recovery_alert_resolves_correct_alert_spec.rb": 29.011678497,
"qa/specs/features/browser_ui/9_tenant_scale/group/create_group_with_mattermost_team_spec.rb": 9.344660726,
"qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb": 65.26559089599999,
"qa/specs/features/browser_ui/9_tenant_scale/group/transfer_project_spec.rb": 27.244025476,
"qa/specs/features/browser_ui/9_tenant_scale/project/add_project_member_spec.rb": 32.014529209,
"qa/specs/features/browser_ui/9_tenant_scale/project/create_project_badge_spec.rb": 20.068110387,
"qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb": 67.337069478,
"qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb": 22.587608685,
"qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb": 53.449546747,
"qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb": 171.14910748399998,
"qa/specs/features/browser_ui/9_tenant_scale/project/view_project_activity_spec.rb": 35.743874052,
"qa/specs/features/browser_ui/9_tenant_scale/user/follow_user_activity_spec.rb": 31.223309247,
"qa/specs/features/browser_ui/9_tenant_scale/user/parent_group_access_termination_spec.rb": 27.375015555,
"qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb": 66.960839159,
"qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb": 38.562984764,
"qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb": 37.026030479,
"qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb": 80.57801924500001,
"qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb": 131.481349437,
"qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb": 13.047155732,
"qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb": 62.834426385,
"qa/specs/features/ee/api/2_plan/analytics/dora_metrics_spec.rb": 2.3438559850000003,
"qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb": 82.006404714,
"qa/specs/features/ee/api/3_create/code_suggestions_spec.rb": 39.562657235,
"qa/specs/features/ee/api/9_tenant_scale/elasticsearch/advanced_global_advanced_syntax_search_spec.rb": 105.411032861,
"qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb": 95.84806871400001,
"qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/commit_index/commit_index_spec.rb": 31.44747142,
"qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/issues_index/issue_index_spec.rb": 72.872250958,
"qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/main_index/blob_index_spec.rb": 40.252409182,
"qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb": 63.477970837,
"qa/specs/features/ee/api/9_tenant_scale/elasticsearch/index_tests/notes_index/note_index_spec.rb": 62.85925672,
"qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb": 133.854524265,
"qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb": 71.378891385,
"qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb": 106.310033633,
"qa/specs/features/ee/browser_ui/10_govern/explain_this_vulnerability_spec.rb": 48.656577734,
"qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb": 15.908063331,
"qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb": 144.069410289,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb": 58.155441685,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb": 115.65698714400001,
"qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb": 122.51110615500002,
"qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb": 123.506448268,
"qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb": 244.91917489399998,
"qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb": 167.819808879,
"qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb": 231.473886222,
"qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb": 62.095760528,
"qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb": 158.81351263,
"qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_license_finding_spec.rb": 49.199501503,
"qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb": 210.54865648499998,
"qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb": 81.540982641,
"qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb": 363.572918207,
"qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb": 24.151715831,
"qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb": 42.562710221,
"qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb": 342.169147882,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb": 19.519817991,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb": 7.57460835,
"qa/specs/features/ee/browser_ui/11_fulfillment/saas_user_limit_experience_spec.rb": 184.78561392999998,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/free_namespace_storage_spec.rb": 341.009588447,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/saas_user_caps_spec.rb": 44.723411659,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb": 23.297850153,
"qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb": 75.638407947,
"qa/specs/features/ee/browser_ui/13_secure/license_scanning_spec.rb": 116.30680739,
"qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb": 110.920330885,
"qa/specs/features/ee/browser_ui/15_growth/free_trial_spec.rb": 68.967794595,
"qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb": 43.075428703,
"qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/root_cause_analysis_with_duo_chat_spec.rb": 37.931425691,
"qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb": 58.653198608000004,
"qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb": 211.292243553,
"qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb": 74.28075828,
"qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb": 75.671017318,
"qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb": 22.641035335,
"qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb": 16.821151717,
"qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb": 375.506600713,
"qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb": 63.20070909,
"qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb": 14.576608489,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb": 41.373198799,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb": 17.600620542,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb": 35.702110881,
"qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb": 34.127026174,
"qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb": 30.402700367,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb": 19.263109267,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb": 26.399046988,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb": 44.058644116,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb": 42.505086799,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb": 66.01471323000001,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb": 32.519977572,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb": 22.535067519,
"qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb": 31.517568487,
"qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb": 34.898537993,
"qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb": 22.289509862,
"qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb": 45.105684972999995,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb": 39.05453727,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb": 82.65206438300001,
"qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb": 24.677114242,
"qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb": 106.008473686,
"qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb": 48.185280618,
"qa/specs/features/ee/browser_ui/3_create/merge_request/generate_commit_message_spec.rb": 40.390914617,
"qa/specs/features/ee/browser_ui/3_create/remote_development/workspace_actions_spec.rb": 656.975314259,
"qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb": 77.835283702,
"qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb": 29.858441116,
"qa/specs/features/ee/browser_ui/3_create/repository/duo_chat_explain_code_spec.rb": 28.16854103,
"qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb": 255.24311795800003,
"qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb": 43.29283679,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb": 133.52674356,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb": 314.069409969,
"qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb": 49.551448328,
"qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb": 195.161257407,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb": 54.098731282,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb": 54.379182606,
"qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb": 434.95902557700003,
"qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb": 259.66672728500004,
"qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb": 106.25856156900001,
"qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb": 89.697462894,
"qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb": 110.677573526,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb": 53.854234828,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb": 61.396500039,
"qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb": 16.936613385,
"qa/specs/features/ee/browser_ui/9_tenant_scale/group/share_group_with_group_spec.rb": 33.98725241
"qa/specs/features/api/10_govern/group_access_token_spec.rb": 33.40652677,
"qa/specs/features/api/10_govern/project_access_token_spec.rb": 108.14779121100001,
"qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb": 99.263909494,
"qa/specs/features/api/12_systems/gitaly/backend_node_recovery_spec.rb": 102.480642205,
"qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb": 102.77347513500001,
"qa/specs/features/api/12_systems/gitaly/gitaly_mtls_spec.rb": 19.340814466,
"qa/specs/features/api/1_manage/import/import_github_repo_spec.rb": 127.489575968,
"qa/specs/features/api/1_manage/integrations/webhook_events_spec.rb": 56.808515615,
"qa/specs/features/api/1_manage/migration/gitlab_migration_group_spec.rb": 59.361528533,
"qa/specs/features/api/1_manage/migration/gitlab_migration_issue_spec.rb": 215.076974441,
"qa/specs/features/api/1_manage/migration/gitlab_migration_pipeline_spec.rb": 91.729914798,
"qa/specs/features/api/1_manage/rate_limits_spec.rb": 14.607217966,
"qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb": 23.008684037,
"qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb": 22.494501055,
"qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb": 43.636242201,
"qa/specs/features/api/3_create/merge_request/push_options_spec.rb": 37.520196219,
"qa/specs/features/api/3_create/merge_request/view_merge_requests_spec.rb": 1.082708408,
"qa/specs/features/api/3_create/repository/add_list_delete_branches_spec.rb": 17.708858703,
"qa/specs/features/api/3_create/repository/commit_to_templated_project_spec.rb": 10.779747315,
"qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb": 11.272503979,
"qa/specs/features/api/3_create/repository/files_spec.rb": 9.00272815,
"qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 15.180661393,
"qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb": 25.050371408,
"qa/specs/features/api/3_create/repository/storage_size_spec.rb": 19.204492761,
"qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb": 11.841812764,
"qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb": 61.1731228,
"qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb": 26.376580723,
"qa/specs/features/api/4_verify/file_variable_spec.rb": 68.844644612,
"qa/specs/features/api/4_verify/job_downloads_artifacts_spec.rb": 27.161383435,
"qa/specs/features/api/5_package/container_registry/saas/container_registry_spec.rb": 69.033341671,
"qa/specs/features/api/8_monitor/metrics_spec.rb": 6.335980976,
"qa/specs/features/api/9_tenant_scale/user_inherited_access_spec.rb": 131.510213571,
"qa/specs/features/api/9_tenant_scale/users_spec.rb": 6.051365423,
"qa/specs/features/browser_ui/10_govern/group/group_access_token_spec.rb": 20.474029766,
"qa/specs/features/browser_ui/10_govern/login/2fa_recovery_spec.rb": 53.607716173,
"qa/specs/features/browser_ui/10_govern/login/2fa_ssh_recovery_spec.rb": 57.850255819,
"qa/specs/features/browser_ui/10_govern/login/log_in_spec.rb": 13.623114893,
"qa/specs/features/browser_ui/10_govern/login/log_in_with_2fa_spec.rb": 100.334444961,
"qa/specs/features/browser_ui/10_govern/login/log_into_gitlab_via_ldap_spec.rb": 4.92612366,
"qa/specs/features/browser_ui/10_govern/login/log_into_mattermost_via_gitlab_spec.rb": 30.722237006,
"qa/specs/features/browser_ui/10_govern/login/login_via_instance_wide_saml_sso_spec.rb": 20.068269269,
"qa/specs/features/browser_ui/10_govern/login/oauth_login_with_github_spec.rb": 42.085418594,
"qa/specs/features/browser_ui/10_govern/login/register_spec.rb": 115.60960340700001,
"qa/specs/features/browser_ui/10_govern/project/project_access_token_spec.rb": 22.744552996,
"qa/specs/features/browser_ui/10_govern/user/impersonation_token_spec.rb": 39.080742241,
"qa/specs/features/browser_ui/10_govern/user/user_access_termination_spec.rb": 40.930434999,
"qa/specs/features/browser_ui/14_analytics/performance_bar_spec.rb": 41.248273954,
"qa/specs/features/browser_ui/14_analytics/service_ping_default_enabled_spec.rb": 23.762679721,
"qa/specs/features/browser_ui/14_analytics/service_ping_disabled_spec.rb": 16.107325885,
"qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb": 63.049141584,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb": 63.873755599,
"qa/specs/features/browser_ui/1_manage/integrations/jira/jira_issue_import_spec.rb": 53.065096905,
"qa/specs/features/browser_ui/1_manage/integrations/pipeline_status_emails_spec.rb": 88.621169064,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_group_spec.rb": 72.757495199,
"qa/specs/features/browser_ui/1_manage/migration/gitlab_migration_user_contribution_reassignment_spec.rb": 177.476700287,
"qa/specs/features/browser_ui/2_plan/design_management/add_design_content_spec.rb": 22.390309891,
"qa/specs/features/browser_ui/2_plan/design_management/archive_design_content_spec.rb": 33.211751438,
"qa/specs/features/browser_ui/2_plan/design_management/modify_design_content_spec.rb": 25.175048505,
"qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb": 19.399112122,
"qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 22.48118938,
"qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 26.180878901,
"qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 202.763821406,
"qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb": 31.199291474,
"qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb": 42.882703366,
"qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 25.652492251,
"qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb": 34.942500464,
"qa/specs/features/browser_ui/2_plan/issue/real_time_assignee_spec.rb": 31.47515856,
"qa/specs/features/browser_ui/2_plan/issue_boards/focus_mode_spec.rb": 19.343151789,
"qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb": 106.787337649,
"qa/specs/features/browser_ui/2_plan/milestone/create_group_milestone_spec.rb": 22.265545915,
"qa/specs/features/browser_ui/2_plan/milestone/create_project_milestone_spec.rb": 30.000384865,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_creation_spec.rb": 114.445210364,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_content_manipulation_spec.rb": 72.235405971,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_directory_management_spec.rb": 22.372347952,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_file_upload_spec.rb": 39.202519551,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_list_spec.rb": 88.058121398,
"qa/specs/features/browser_ui/2_plan/project_wiki/project_based_page_deletion_spec.rb": 56.673871897,
"qa/specs/features/browser_ui/2_plan/related_issues/related_issues_spec.rb": 25.667597999,
"qa/specs/features/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb": 85.171982466,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb": 44.176778105,
"qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb": 34.686354604,
"qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 65.810911428,
"qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 39.69523976,
"qa/specs/features/browser_ui/3_create/merge_request/merge_request_set_to_auto_merge_spec.rb": 96.135750584,
"qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 91.869611652,
"qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb": 29.611802805,
"qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb": 55.520810221,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb": 73.960590807,
"qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb": 53.032713696,
"qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 53.95135281,
"qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 27.930282318,
"qa/specs/features/browser_ui/3_create/repository/add_new_branch_rule_spec.rb": 45.270817966,
"qa/specs/features/browser_ui/3_create/repository/branch_with_unusual_name_spec.rb": 24.174087797,
"qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 24.501091296,
"qa/specs/features/browser_ui/3_create/repository/license_detection_spec.rb": 37.788228757,
"qa/specs/features/browser_ui/3_create/repository/protected_tags_spec.rb": 156.75783241,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb": 22.762603095,
"qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb": 23.320743313,
"qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 25.847487444,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb": 84.458710267,
"qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 78.821934437,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 58.192687617000004,
"qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 35.895744995,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_file_size_spec.rb": 60.211859737,
"qa/specs/features/browser_ui/3_create/repository/push_over_ssh_spec.rb": 49.343938607,
"qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 26.67423749,
"qa/specs/features/browser_ui/3_create/repository/push_to_canary_gitaly_spec.rb": 23.857914052,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_create_spec.rb": 21.282368827,
"qa/specs/features/browser_ui/3_create/repository/ssh_key_support_delete_spec.rb": 18.902263736,
"qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 56.115527203,
"qa/specs/features/browser_ui/3_create/snippet/add_comment_to_snippet_spec.rb": 31.974285998,
"qa/specs/features/browser_ui/3_create/snippet/add_file_to_snippet_spec.rb": 55.954054138000004,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_personal_snippet_spec.rb": 76.00938344400001,
"qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb": 86.193481991,
"qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb": 25.41531335,
"qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_with_multiple_files_spec.rb": 16.54897191,
"qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_with_multiple_files_spec.rb": 31.074118649,
"qa/specs/features/browser_ui/3_create/snippet/delete_file_from_snippet_spec.rb": 46.240431095999995,
"qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb": 30.257300877,
"qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb": 30.364181551,
"qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb": 38.433381843,
"qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb": 101.220843888,
"qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb": 37.055114931,
"qa/specs/features/browser_ui/3_create/web_ide/settings_sync_web_ide_spec.rb": 179.651143572,
"qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb": 150.02571713999998,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/ci_catalog_sorting_spec.rb": 88.257084475,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_glab_spec.rb": 123.628271413,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/release_with_release_cli_spec.rb": 158.557140521,
"qa/specs/features/browser_ui/4_verify/ci_components_catalog/run_component_in_project_pipeline_spec.rb": 48.949554375,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/expose_job_artifacts_in_mr_spec.rb": 37.774771155,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/job_artifacts_access_keyword_spec.rb": 266.063759199,
"qa/specs/features/browser_ui/4_verify/ci_job_artifacts/unlocking_job_artifacts_across_pipelines_spec.rb": 269.653268932,
"qa/specs/features/browser_ui/4_verify/ci_project_artifacts/user_can_bulk_delete_artifacts_spec.rb": 73.291987677,
"qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb": 133.265900999,
"qa/specs/features/browser_ui/4_verify/ci_variable/raw_variables_defined_in_yaml_spec.rb": 61.572497471,
"qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb": 74.633719222,
"qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb": 30.915270131,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb": 49.364241601,
"qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_multiple_projects_spec.rb": 49.394313638,
"qa/specs/features/browser_ui/4_verify/pipeline/parent_child_pipelines_independent_relationship_spec.rb": 75.159637624,
"qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb": 63.867982759,
"qa/specs/features/browser_ui/4_verify/pipeline/run_pipeline_with_manual_jobs_spec.rb": 60.973117906,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_child_pipeline_with_manual_spec.rb": 60.126772749,
"qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb": 41.242408651,
"qa/specs/features/browser_ui/4_verify/pipeline/update_ci_file_with_pipeline_editor_spec.rb": 42.089385742,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_registration_token_spec.rb": 21.650577048,
"qa/specs/features/browser_ui/4_verify/runner/deprecated_unregister_runner_spec.rb": 36.095911812,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_counts_spec.rb": 21.918267332,
"qa/specs/features/browser_ui/4_verify/runner/fleet_visibility/group_runner_status_counts_spec.rb": 18.97998052,
"qa/specs/features/browser_ui/4_verify/runner/register_group_runner_spec.rb": 26.115506564,
"qa/specs/features/browser_ui/4_verify/runner/register_project_runner_spec.rb": 52.527923887,
"qa/specs/features/browser_ui/4_verify/runner/unregister_runner_spec.rb": 26.236790015,
"qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb": 52.316446719,
"qa/specs/features/browser_ui/5_package/container_registry/saas/container_registry_spec.rb": 165.634585609,
"qa/specs/features/browser_ui/5_package/container_registry/self_managed/container_registry_spec.rb": 347.338332446,
"qa/specs/features/browser_ui/5_package/dependency_proxy/dependency_proxy_spec.rb": 199.50891662499998,
"qa/specs/features/browser_ui/5_package/package_registry/composer_registry_spec.rb": 67.286344045,
"qa/specs/features/browser_ui/5_package/package_registry/conan_repository_spec.rb": 109.692268132,
"qa/specs/features/browser_ui/5_package/package_registry/generic_repository_spec.rb": 63.838511729,
"qa/specs/features/browser_ui/5_package/package_registry/helm_registry_spec.rb": 322.85689752,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb": 650.299845526,
"qa/specs/features/browser_ui/5_package/package_registry/maven/maven_project_level_spec.rb": 296.734672131,
"qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb": 324.63351607,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_group_level_spec.rb": 288.85934595599997,
"qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb": 276.400771392,
"qa/specs/features/browser_ui/5_package/package_registry/pypi_repository_spec.rb": 124.86013221,
"qa/specs/features/browser_ui/6_deploy/auto_devops/create_project_with_auto_devops_spec.rb": 568.348871003,
"qa/specs/features/browser_ui/6_deploy/deploy_key/add_deploy_key_spec.rb": 25.653972745,
"qa/specs/features/browser_ui/6_deploy/deploy_key/clone_using_deploy_key_spec.rb": 160.158991192,
"qa/specs/features/browser_ui/6_deploy/deploy_token/add_deploy_token_spec.rb": 13.617455071,
"qa/specs/features/browser_ui/8_monitor/alert_management/alert_management_spec.rb": 203.638595592,
"qa/specs/features/browser_ui/8_monitor/alert_management/email_notification_for_alert_spec.rb": 85.05421501699999,
"qa/specs/features/browser_ui/9_tenant_scale/group/create_group_with_mattermost_team_spec.rb": 11.792938794,
"qa/specs/features/browser_ui/9_tenant_scale/group/group_member_access_request_spec.rb": 74.36519395900001,
"qa/specs/features/browser_ui/9_tenant_scale/group/transfer_project_spec.rb": 21.639426063,
"qa/specs/features/browser_ui/9_tenant_scale/project/add_project_member_spec.rb": 32.685666012,
"qa/specs/features/browser_ui/9_tenant_scale/project/create_project_badge_spec.rb": 29.041984398,
"qa/specs/features/browser_ui/9_tenant_scale/project/create_project_spec.rb": 56.481595366,
"qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb": 22.738437165,
"qa/specs/features/browser_ui/9_tenant_scale/project/invite_group_to_project_spec.rb": 54.548344267000004,
"qa/specs/features/browser_ui/9_tenant_scale/project/project_owner_permissions_spec.rb": 178.041656998,
"qa/specs/features/browser_ui/9_tenant_scale/project/view_project_activity_spec.rb": 24.761728824,
"qa/specs/features/browser_ui/9_tenant_scale/user/follow_user_activity_spec.rb": 26.594523245,
"qa/specs/features/browser_ui/9_tenant_scale/user/parent_group_access_termination_spec.rb": 29.703109918,
"qa/specs/features/browser_ui/9_tenant_scale/user/user_inherited_access_spec.rb": 35.873381803,
"qa/specs/features/ee/api/10_govern/compliance_pipeline_spec.rb": 27.990791839,
"qa/specs/features/ee/api/10_govern/instance_audit_event_streaming_spec.rb": 23.876685125999998,
"qa/specs/features/ee/api/10_govern/user/minimal_access_user_spec.rb": 83.41368070499999,
"qa/specs/features/ee/api/17_foundations/elasticsearch/advanced_global_advanced_syntax_search_spec.rb": 114.08060985,
"qa/specs/features/ee/api/17_foundations/elasticsearch/elasticsearch_api_spec.rb": 110.64275206500001,
"qa/specs/features/ee/api/17_foundations/elasticsearch/index_tests/blob_index_spec.rb": 42.299344592,
"qa/specs/features/ee/api/17_foundations/elasticsearch/index_tests/commit_index_spec.rb": 39.190616521,
"qa/specs/features/ee/api/17_foundations/elasticsearch/index_tests/issue_index_spec.rb": 45.731552806,
"qa/specs/features/ee/api/17_foundations/elasticsearch/index_tests/merge_request_index_spec.rb": 28.517704861,
"qa/specs/features/ee/api/17_foundations/elasticsearch/index_tests/note_index_spec.rb": 36.025010085,
"qa/specs/features/ee/api/1_manage/import/import_github_repo_spec.rb": 26.742735677,
"qa/specs/features/ee/api/1_manage/integrations/group_webhook_events_spec.rb": 13.725903805,
"qa/specs/features/ee/api/1_manage/migration/gitlab_migration_group_spec.rb": 76.185247628,
"qa/specs/features/ee/api/2_plan/analytics/dora_metrics_spec.rb": 2.134576299,
"qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb": 88.307651451,
"qa/specs/features/ee/api/3_create/code_suggestions_spec.rb": 62.483465078,
"qa/specs/features/ee/api/6_deploy/kubernetes/kubernetes_agent_spec.rb": 333.841964395,
"qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb": 117.605842988,
"qa/specs/features/ee/browser_ui/10_govern/create_merge_request_with_secure_spec.rb": 70.493630702,
"qa/specs/features/ee/browser_ui/10_govern/dismissed_vulnerabilities_in_security_widget_spec.rb": 78.775272987,
"qa/specs/features/ee/browser_ui/10_govern/explain_this_vulnerability_spec.rb": 48.390992685,
"qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb": 25.195373892,
"qa/specs/features/ee/browser_ui/10_govern/fix_vulnerability_workflow_spec.rb": 154.707140401,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_event_streaming_spec.rb": 43.394211121,
"qa/specs/features/ee/browser_ui/10_govern/group/group_audit_logs_1_spec.rb": 132.310534667,
"qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb": 129.970168319,
"qa/specs/features/ee/browser_ui/10_govern/group/restrict_by_ip_address_spec.rb": 130.90665025799998,
"qa/specs/features/ee/browser_ui/10_govern/group_pipeline_execution_policy_spec.rb": 274.306130962,
"qa/specs/features/ee/browser_ui/10_govern/instance/instance_audit_logs_spec.rb": 130.149224385,
"qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb": 214.633844395,
"qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb": 65.29810035,
"qa/specs/features/ee/browser_ui/10_govern/scan_execution_policy_vulnerabilities_spec.rb": 127.97672757800001,
"qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_license_finding_spec.rb": 51.5421001,
"qa/specs/features/ee/browser_ui/10_govern/scan_result_policy_vulnerabilities_spec.rb": 115.277674252,
"qa/specs/features/ee/browser_ui/10_govern/security_policies_spec.rb": 81.00644148,
"qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb": 361.54343162199996,
"qa/specs/features/ee/browser_ui/10_govern/user/minimal_access_user_spec.rb": 24.578217313,
"qa/specs/features/ee/browser_ui/10_govern/vulnerabilities_jira_integration_spec.rb": 42.807938893,
"qa/specs/features/ee/browser_ui/10_govern/vulnerability_management_spec.rb": 361.155253561,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/cloud_activation_spec.rb": 52.245580561,
"qa/specs/features/ee/browser_ui/11_fulfillment/license/license_spec.rb": 13.510919953,
"qa/specs/features/ee/browser_ui/11_fulfillment/saas_user_limit_experience_spec.rb": 188.378093649,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/free_namespace_storage_spec.rb": 345.016066913,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/saas_user_caps_spec.rb": 51.455543511,
"qa/specs/features/ee/browser_ui/11_fulfillment/utilization/user_registration_billing_spec.rb": 18.337433436,
"qa/specs/features/ee/browser_ui/13_secure/cvs_dependency_scanning_spec.rb": 100.302462833,
"qa/specs/features/ee/browser_ui/13_secure/license_scanning_spec.rb": 125.252427312,
"qa/specs/features/ee/browser_ui/13_secure/on_demand_dast_spec.rb": 116.524583274,
"qa/specs/features/ee/browser_ui/13_secure/secret_push_protection_spec.rb": 143.955237362,
"qa/specs/features/ee/browser_ui/15_growth/free_trial_spec.rb": 67.843876343,
"qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_explain_code_spec.rb": 36.093509303,
"qa/specs/features/ee/browser_ui/16_ai_powered/duo_chat/duo_chat_spec.rb": 51.176578692,
"qa/specs/features/ee/browser_ui/1_manage/integrations/jira_issues_list_spec.rb": 58.508339867000004,
"qa/specs/features/ee/browser_ui/2_plan/analytics/contribution_analytics_spec.rb": 180.922854976,
"qa/specs/features/ee/browser_ui/2_plan/analytics/mr_analytics_spec.rb": 72.150498024,
"qa/specs/features/ee/browser_ui/2_plan/analytics/value_stream_analytics_spec.rb": 75.65637634000001,
"qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb": 23.40066441,
"qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb": 17.422913947,
"qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb": 382.51985342,
"qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb": 53.152013451,
"qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb": 15.612040113,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/create_group_wiki_page_spec.rb": 43.134573792,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/delete_group_wiki_page_spec.rb": 17.688236191,
"qa/specs/features/ee/browser_ui/2_plan/group_wiki/file_upload_group_wiki_page_spec.rb": 36.245175063,
"qa/specs/features/ee/browser_ui/2_plan/insights/default_insights_spec.rb": 36.127016912,
"qa/specs/features/ee/browser_ui/2_plan/issue/default_issue_template_spec.rb": 29.981502699,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb": 20.511514982,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb": 28.127288041,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb": 33.431527318,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb": 38.178550758,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb": 83.637027736,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb": 31.767948444,
"qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb": 24.656618797,
"qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb": 44.522445772,
"qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb": 35.332557938,
"qa/specs/features/ee/browser_ui/2_plan/iterations/assign_group_iteration_spec.rb": 30.182850649,
"qa/specs/features/ee/browser_ui/2_plan/iterations/create_group_iteration_spec.rb": 45.154880479,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb": 40.772116388,
"qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb": 74.761764619,
"qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb": 25.870807747,
"qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb": 135.927114261,
"qa/specs/features/ee/browser_ui/3_create/merge_request/default_merge_request_template_spec.rb": 45.063333201,
"qa/specs/features/ee/browser_ui/3_create/merge_request/generate_commit_message_spec.rb": 31.566704251,
"qa/specs/features/ee/browser_ui/3_create/remote_development/workspace_actions_spec.rb": 543.233404997,
"qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb": 59.357746585,
"qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb": 36.869256928,
"qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb": 246.545303253,
"qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb": 43.200725758,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_root_group_spec.rb": 128.98384694,
"qa/specs/features/ee/browser_ui/3_create/repository/merge_with_code_owner_in_subgroup_spec.rb": 211.633649123,
"qa/specs/features/ee/browser_ui/3_create/repository/prevent_forking_outside_group_spec.rb": 41.111944978,
"qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb": 176.516678502,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb": 44.548635509,
"qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb": 74.217703857,
"qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb": 475.40952402,
"qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb": 262.966270802,
"qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb": 110.59269366000001,
"qa/specs/features/ee/browser_ui/4_verify/multi-project_pipelines_spec.rb": 44.332298042,
"qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb": 94.640597731,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_for_merged_result_spec.rb": 64.50677508,
"qa/specs/features/ee/browser_ui/4_verify/pipeline_subscription_with_group_owned_project_spec.rb": 65.356541838,
"qa/specs/features/ee/browser_ui/4_verify/root_cause_analysis_with_duo_chat_spec.rb": 33.753791004,
"qa/specs/features/ee/browser_ui/8_monitor/incident_management/incident_quick_action_spec.rb": 22.417525672,
"qa/specs/features/ee/browser_ui/9_tenant_scale/share_group_with_group_spec.rb": 21.968808136
}

View File

@ -85,13 +85,13 @@ namespace :ci do
label: tests_from_mapping.nil? || tests_from_mapping.empty? ? 'non-selective' : 'selective',
value: tests_from_mapping.nil? || tests_from_mapping.empty? ? 0 : tests_from_mapping.count
}
Tooling::Events::TrackPipelineEvents.new(
event_name: "e2e_tests_selected_for_execution_gitlab_pipeline",
properties: properties
).send_event
Tooling::Events::TrackPipelineEvents.new(logger: logger).send_event(
"e2e_tests_selected_for_execution_gitlab_pipeline",
**properties
)
rescue StandardError => e
logger.warn("*** Error while creating pipeline with selected specs: #{e.backtrace} ****")
logger.info("*** Running full suite ***")
logger.warn("*** Error while creating pipeline with selected specs: #{e.backtrace} ***")
logger.info("*** Defaulting to running full suite ***")
QA::Tools::Ci::PipelineCreator.new([], **creator_args).create
end
end

View File

@ -16,13 +16,16 @@ function update_tests_metadata() {
}
function retrieve_tests_mapping() {
mkdir -p $(dirname "$RSPEC_PACKED_TESTS_MAPPING_PATH")
local mapping_archive="${1:-$RSPEC_PACKED_TESTS_MAPPING_PATH}"
local mapping_path="${2:-$RSPEC_TESTS_MAPPING_PATH}"
if [[ ! -f "${RSPEC_PACKED_TESTS_MAPPING_PATH}" ]]; then
(curl --fail --location -o "${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz" "https://gitlab-org.gitlab.io/gitlab/${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz" && gzip -d "${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz") || echo "{}" > "${RSPEC_PACKED_TESTS_MAPPING_PATH}"
mkdir -p $(dirname "$mapping_archive")
if [[ ! -f "${mapping_archive}" ]]; then
(curl --fail --location -o "${mapping_archive}.gz" "https://gitlab-org.gitlab.io/gitlab/${mapping_archive}.gz" && gzip -d "${mapping_archive}.gz") || echo "{}" > "${mapping_archive}"
fi
scripts/unpack-test-mapping "${RSPEC_PACKED_TESTS_MAPPING_PATH}" "${RSPEC_TESTS_MAPPING_PATH}"
scripts/unpack-test-mapping "${mapping_archive}" "${mapping_path}"
}
function retrieve_frontend_fixtures_mapping() {

View File

@ -211,9 +211,8 @@ RSpec.describe UserSettings::PersonalAccessTokensController, feature_category: :
end
end
context 'with virtual_registry_maven feature flag disabled and dependency proxy disabled' do
context 'with dependency proxy disabled' do
before do
stub_feature_flags(virtual_registry_maven: false)
stub_config(dependency_proxy: { enabled: false })
end

View File

@ -115,7 +115,6 @@ RSpec.describe 'Database schema',
deploy_keys_projects: %w[deploy_key_id],
deployments: %w[deployable_id user_id],
deployment_merge_requests: %w[project_id],
description_versions: %w[namespace_id], # namespace_id will be added as an FK after backfill
draft_notes: %w[discussion_id commit_id],
epics: %w[updated_by_id last_edited_by_id state_id],
events: %w[target_id],

View File

@ -19,7 +19,7 @@ describe('Environment Breadcrumb', () => {
},
];
const mountComponent = ($route) => {
const mountComponent = ($route, props = {}) => {
wrapper = mount(EnvironmentBreadcrumb, {
mocks: {
$route,
@ -32,6 +32,7 @@ describe('Environment Breadcrumb', () => {
stubs: {
RouterLink: RouterLinkStub,
},
propsData: props,
});
};
@ -70,4 +71,22 @@ describe('Environment Breadcrumb', () => {
expect(lastLink.text()).toContain(routes[1].params.podName);
});
});
describe('when staticBreadcrumbs are provided', () => {
beforeEach(() => {
mountComponent(routes[0], {
staticBreadcrumbs: {
items: [{ text: 'static', href: '/static' }],
},
});
});
it('contains the static breadcrumbs', () => {
const links = wrapper.findAll('a');
expect(links).toHaveLength(2);
expect(links.at(0).text()).toContain('static');
expect(links.at(1).text()).toContain(environmentName);
});
});
});

View File

@ -0,0 +1,8 @@
# frozen_string_literal: true
require 'spec_helper'
require_migration!
RSpec.describe AddStatusWidgetDefinitionToIssues, :migration, feature_category: :team_planning do
it_behaves_like 'migration that adds widgets to a work item type'
end

View File

@ -64,11 +64,9 @@ RSpec.describe Admin::ImpersonationTokensController, :enable_admin_mode, feature
end
describe '#index', :with_current_organization do
let(:virtual_registry_maven_enabled) { true }
let(:dependency_proxy_enabled) { true }
before do
stub_feature_flags(virtual_registry_maven: virtual_registry_maven_enabled)
stub_config(dependency_proxy: { enabled: dependency_proxy_enabled })
get admin_user_impersonation_tokens_path(user_id: user.username)
@ -85,8 +83,7 @@ RSpec.describe Admin::ImpersonationTokensController, :enable_admin_mode, feature
)
end
context 'with virtual_registry_maven feature flag disabled and dependency proxy disabled' do
let(:virtual_registry_maven_enabled) { false }
context 'with dependency proxy disabled' do
let(:dependency_proxy_enabled) { false }
it 'does not include the virtual registry scopes' do

View File

@ -108,12 +108,8 @@ RSpec.describe Projects::Settings::AccessTokensController, feature_category: :sy
describe '#index' do
let_it_be(:resource_access_tokens) { create_list(:personal_access_token, 3, user: access_token_user) }
let(:virtual_registry_maven_enabled) { true }
let(:dependency_proxy_enabled) { true }
before do
stub_feature_flags(virtual_registry_maven: virtual_registry_maven_enabled)
stub_config(dependency_proxy: { enabled: dependency_proxy_enabled })
stub_config(dependency_proxy: { enabled: true })
get project_settings_access_tokens_path(resource)
end

View File

@ -1,96 +1,111 @@
# frozen_string_literal: true
require 'gitlab/rspec/stub_env'
require 'logger'
require_relative '../../../../../tooling/lib/tooling/events/track_pipeline_events'
RSpec.describe Tooling::Events::TrackPipelineEvents, feature_category: :tooling do
include StubENV
subject(:send_event) { described_class.new(logger: logger).send_event(event_name, **additional_properties) }
let(:event_name) { "e2e_tests_selected_for_execution_gitlab_pipeline" }
let(:additional_properties) { { label: 'label', property: 'property', value: 10 } }
let(:additional_properties) { { label: 'label', value: 10, property: 'property' } }
let(:access_token) { 'test-admin-token' }
let(:logger) { instance_double(Logger, info: nil, error: nil) }
let(:http_client) { instance_double(Net::HTTP, :use_ssl= => true, :request_post => response) }
let(:response) { instance_double(Net::HTTPResponse, code: 200, body: '{}') }
let(:http_client) { instance_double(Net::HTTP) }
let(:http_request) { instance_double(Net::HTTP::Post) }
let(:api_path) { "/api/v4/usage_data/track_event" }
let(:headers) do
{
"PRIVATE-TOKEN" => access_token,
"Content-Type" => "application/json"
}
end
before do
stub_env("CI_INTERNAL_EVENTS_TOKEN", access_token)
stub_env("CI_API_V4_URL", 'https://gitlab.com/api/v4')
allow($stdout).to receive(:puts)
stub_env("CI_SERVER_URL", "https://gitlab.com")
stub_env("CI_PROJECT_NAMESPACE_ID", "1")
stub_env("CI_PROJECT_ID", "2")
end
describe '#send_event' do
subject(:send_event) do
described_class
.new(event_name: event_name, properties: additional_properties).send_event
end
context 'with API request' do
let(:expected_request_body) do
{
event: event_name,
send_to_snowplow: true,
namespace_id: Tooling::Events::TrackPipelineEvents::NAMESPACE_ID,
project_id: Tooling::Events::TrackPipelineEvents::PROJECT_ID,
additional_properties: additional_properties
}
end
let(:uri_double) do
instance_double(URI::HTTPS,
host: 'gitlab.com',
port: 443, path: 'api/v4/usage_data/track_event')
end
before do
allow(URI).to receive(:parse).and_return(uri_double)
allow(Net::HTTP).to receive(:new).and_return(http_client)
allow(http_client).to receive(:use_ssl=).and_return(true)
allow(Net::HTTP::Post).to receive(:new).with(uri_double.path).and_return(http_request)
allow(http_request).to receive(:body=)
allow(http_request).to receive(:[]=)
end
it "sets up correct http client" do
send_event
expect(Net::HTTP).to have_received(:new).with('gitlab.com', 443)
expect(http_client).to have_received(:use_ssl=).with(true)
end
context 'when successful' do
before do
allow(http_client).to receive(:request).and_return(response)
let(:expected_request_body) do
{
event: event_name,
send_to_snowplow: true,
namespace_id: 1,
project_id: 2,
additional_properties: additional_properties
}.to_json
end
it 'sends correct event parameters and success message' do
send_event
expect(http_request).to have_received(:body=).with(expected_request_body.to_json)
expect($stdout).to have_received(:puts).with("Successfully sent data for event: #{event_name}")
expect(http_client).to have_received(:request_post).with(api_path, expected_request_body, headers)
expect(logger).to have_received(:info).with("Successfully sent data for event")
end
end
context 'when error response' do
let(:error_response) do
instance_double(Net::HTTPResponse, code: 422,
body: '{"error":"Invalid parameters"}')
end
before do
allow(http_client).to receive(:request).and_return(error_response)
let(:response) do
instance_double(Net::HTTPResponse, code: 422, body: '{"error":"Invalid parameters"}')
end
it 'checks for failed error message' do
result = send_event
expect($stdout).to have_received(:puts)
.with("Failed event tracking: 422, body: {\"error\":\"Invalid parameters\"}")
expect(result).to eq(error_response)
expect(send_event).to eq(response)
expect(logger).to have_received(:error).with("Failed event tracking: 422, body: #{response.body}")
end
end
context 'when error is raised' do
before do
allow(http_client).to receive(:request_post).and_raise(StandardError, "some error")
end
it 'logs the error' do
send_event
expect(logger).to have_received(:error).with(
"Exception when posting event #{event_name}, error: 'some error'"
)
end
end
context 'without logger configured' do
let(:logger) { nil }
it 'logs to stdout' do
expect { send_event }.to output(/Successfully sent data for event/).to_stdout
end
end
context 'when CI_INTERNAL_EVENTS_TOKEN is not set' do
before do
stub_env("CI_INTERNAL_EVENTS_TOKEN", nil)
allow(http_client).to receive(:request).and_return(response)
end
it 'prints an error message and returns' do
expect do
send_event
end.to output("Error: Cannot send event '#{event_name}'. Missing project access token.\n").to_stderr
send_event
expect(logger).to have_received(:error)
.with("Error: Cannot send event '#{event_name}'. Missing project access token.")
end
end
end

View File

@ -11,10 +11,12 @@ RSpec.describe Tooling::Glci::FailureCategories::ReportJobFailure, feature_categ
let(:job_id) { '12345' }
let(:failure_category) { 'test_failures' }
let(:track_pipeline_events_instance) { instance_double(Tooling::Events::TrackPipelineEvents) }
let(:track_pipeline_events_instance) { instance_double(Tooling::Events::TrackPipelineEvents, send_event: nil) }
before do
stub_env('CI_JOB_ID', nil)
allow(Tooling::Events::TrackPipelineEvents).to receive(:new).and_return(track_pipeline_events_instance)
end
describe '#initialize' do
@ -42,36 +44,14 @@ RSpec.describe Tooling::Glci::FailureCategories::ReportJobFailure, feature_categ
describe '#report' do
subject(:reporter) { described_class.new(job_id: job_id, failure_category: failure_category) }
before do
allow(Tooling::Events::TrackPipelineEvents).to receive(:new).and_return(track_pipeline_events_instance)
allow(track_pipeline_events_instance).to receive(:send_event)
end
it 'initializes TrackPipelineEvents with correct event name' do
it 'sends event with correct attributes' do
reporter.report
expect(Tooling::Events::TrackPipelineEvents).to have_received(:new).with(
hash_including(event_name: "glci_job_failed")
expect(track_pipeline_events_instance).to have_received(:send_event).with(
"glci_job_failed",
label: job_id,
property: failure_category
)
end
it 'passes the correct properties structure to TrackPipelineEvents' do
reporter.report
expect(Tooling::Events::TrackPipelineEvents).to have_received(:new).with(
hash_including(
properties: {
label: job_id,
property: failure_category
}
)
)
end
it 'calls send_event on the TrackPipelineEvents instance' do
reporter.report
expect(track_pipeline_events_instance).to have_received(:send_event)
end
end
end

View File

@ -11,6 +11,7 @@ RSpec.describe Tooling::PredictiveTests, feature_category: :tooling do
let(:instance) { described_class.new }
let(:matching_tests_initial_content) { 'initial_matching_spec' }
let(:fixtures_mapping_content) { '{}' }
let(:event_tracker) { instance_double(Tooling::Events::TrackPipelineEvents, send_event: nil) }
attr_accessor :changed_files, :changed_files_path, :fixtures_mapping,
:matching_js_files, :matching_tests, :views_with_partials
@ -62,6 +63,7 @@ RSpec.describe Tooling::PredictiveTests, feature_category: :tooling do
File.write(fixtures_mapping.path, fixtures_mapping_content)
allow(Gitlab).to receive(:configure)
allow(Tooling::Events::TrackPipelineEvents).to receive(:new).and_return(event_tracker)
end
describe '#execute' do
@ -136,6 +138,17 @@ RSpec.describe Tooling::PredictiveTests, feature_category: :tooling do
expect { subject }.not_to change { File.read(fixtures_mapping.path) }
expect { subject }.not_to change { File.read(matching_js_files.path) }
end
it "sends number of tests selected via internal events" do
subject
expect(event_tracker).to have_received(:send_event).with(
"glci_predictive_tests_count",
label: "test-count",
value: File.read(matching_tests.path).lines.length,
property: "described_class"
)
end
end
end
end

View File

@ -7,69 +7,100 @@ require 'uri'
module Tooling
module Events
class TrackPipelineEvents
API_ENDPOINT = "#{ENV['CI_API_V4_URL']}/usage_data/track_event".freeze
NAMESPACE_ID = 9970 # gitlab-org group
PROJECT_ID = 278964 # gitlab-org/gitlab project
# Initializes a new event tracker
#
# @param [String] event_name The name of the event to track
# @param [Hash] properties A hash of properties to include with the event
# @option properties [String] :label String Event attribute
# @option properties [Integer] :value Numeric Event attribute
# @option properties [String] :property Another String attribute
# @param [Hash] args Additional arguments to pass to the parent class
def initialize(event_name:, properties: {}, **args)
@event_name = event_name
@properties = properties
@args = args
@api_token = ENV["CI_INTERNAL_EVENTS_TOKEN"]
def initialize(api_token: ENV["CI_INTERNAL_EVENTS_TOKEN"], logger: nil)
@api_token = api_token
@logger = logger
end
def send_event
unless api_token
warn "Error: Cannot send event '#{event_name}'. Missing project access token."
return
end
# Send tracking event to usage_data API
#
# @param event_name [String] the name of the event to track
# @param label [String] Event attribute
# @param value [Number] Numeric event attribute
# @param property [String] Optional event attribute
# @return [Net::HTTPResponse]
def send_event(event_name, label:, value: nil, property: nil)
return log(:error, "Error: Cannot send event '#{event_name}'. Missing project access token.") unless api_token
uri = URI.parse(API_ENDPOINT)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
body = {
event: event_name,
send_to_snowplow: true,
namespace_id: namespace_id,
project_id: project_id,
additional_properties: {
label:,
value:,
property:
}.compact
}.to_json
request = Net::HTTP::Post.new(uri.path)
request.body = request_body.to_json
headers.each { |key, value| request[key] = value }
response = http.request(request)
log(:info, "Sending data for event: #{event_name}")
response = client.request_post("/api/v4/usage_data/track_event", body, headers)
if response.code.to_i == 200
puts "Successfully sent data for event: #{event_name}"
log(:info, "Successfully sent data for event")
else
puts "Failed event tracking: #{response.code}, body: #{response.body}"
log(:error, "Failed event tracking: #{response.code}, body: #{response.body}")
end
response
rescue StandardError => e
log(:error, "Exception when posting event #{event_name}, error: '#{e.message}'")
end
private
attr_reader :event_name, :properties, :args, :api_token
attr_reader :api_token, :logger
# Print to stdout/stderr or use logger if defined
#
# @param level [Symbol]
# @param message [String]
# @return [void]
def log(level, message)
return logger.public_send(level, message) if logger.respond_to?(level) # rubocop:disable GitlabSecurity/PublicSend -- CI usage only
%i[warn error].include?(level) ? warn(message) : puts(message)
end
# Http client
#
# @return [Net::HTTP]
def client
@client ||= Net::HTTP.new(uri.host, uri.port).tap do |http|
http.use_ssl = true
end
end
# CI server uri
#
# @return [Uri]
def uri
@uri ||= URI.parse(ENV['CI_SERVER_URL'])
end
# Default request headers
#
# @return [Hash]
def headers
{
@headers ||= {
"PRIVATE-TOKEN" => api_token,
"Content-Type" => "application/json"
}
end
def request_body
{
event: event_name,
send_to_snowplow: true,
namespace_id: NAMESPACE_ID,
project_id: PROJECT_ID,
additional_properties: properties
}
# Project namespace ID
#
# @return [Integer]
def namespace_id
@namespace_id ||= ENV["CI_PROJECT_NAMESPACE_ID"].to_i
end
# Project ID
#
# @return [Integer]
def project_id
@project_id ||= ENV["CI_PROJECT_ID"].to_i
end
end
end

View File

@ -22,13 +22,11 @@ module Tooling
end
def report
Tooling::Events::TrackPipelineEvents.new(
event_name: "glci_job_failed",
properties: {
label: @job_id,
property: @failure_category
}
).send_event
Tooling::Events::TrackPipelineEvents.new.send_event(
"glci_job_failed",
label: @job_id,
property: @failure_category
)
end
end
end

View File

@ -8,6 +8,7 @@ require_relative 'mappings/js_to_system_specs_mappings'
require_relative 'mappings/partial_to_views_mappings'
require_relative 'mappings/view_to_js_mappings'
require_relative 'mappings/view_to_system_specs_mappings'
require_relative 'events/track_pipeline_events'
module Tooling
class PredictiveTests
@ -30,6 +31,7 @@ module Tooling
@rspec_views_including_partials_path = ENV['RSPEC_VIEWS_INCLUDING_PARTIALS_PATH']
@frontend_fixtures_mapping_path = ENV['FRONTEND_FIXTURES_MAPPING_PATH']
@rspec_matching_js_files_path = ENV['RSPEC_MATCHING_JS_FILES_PATH']
@predictive_tests_strategy = ENV['PREDICTIVE_TESTS_STRATEGY'] || 'described_class'
end
def execute
@ -52,11 +54,28 @@ module Tooling
frontend_fixtures_mapping_pathname: frontend_fixtures_mapping_path
).execute
Tooling::Mappings::ViewToJsMappings.new(rspec_changed_files_path, rspec_matching_js_files_path).execute
record_selected_test_count
end
private
attr_reader :rspec_changed_files_path, :rspec_matching_tests_path, :rspec_views_including_partials_path,
:frontend_fixtures_mapping_path, :rspec_matching_js_files_path
attr_reader :rspec_changed_files_path,
:rspec_matching_tests_path,
:rspec_views_including_partials_path,
:frontend_fixtures_mapping_path,
:rspec_matching_js_files_path,
:predictive_tests_strategy
def record_selected_test_count
test_count = File.read(rspec_matching_tests_path).lines.length
Tooling::Events::TrackPipelineEvents.new.send_event(
"glci_predictive_tests_count",
label: "test-count",
value: test_count,
property: predictive_tests_strategy
)
end
end
end