Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-05-09 09:11:19 +00:00
parent bf76d94f5a
commit dc7a582810
47 changed files with 695 additions and 430 deletions

View File

@ -429,7 +429,7 @@ gem 'cloud_profiler_agent', '~> 0.0.0', path: 'vendor/gems/cloud_profiler_agent'
gem 'snowplow-tracker', '~> 0.8.0', feature_category: :product_analytics
# Metrics
gem 'webrick', '~> 1.8.1', require: false, feature_category: :shared
gem 'webrick', '~> 1.9.0', require: false, feature_category: :shared
gem 'prometheus-client-mmap', '~> 1.2.8', require: 'prometheus/client', feature_category: :shared
# Event-driven reactor for Ruby

View File

@ -802,7 +802,7 @@
{"name":"webauthn","version":"3.0.0","platform":"ruby","checksum":"3f77d422c2a8a4b31e56cf42f83414bd066e0506e9896936e1730262dc4a20e6"},
{"name":"webfinger","version":"2.1.3","platform":"ruby","checksum":"567a52bde77fb38ca6b67e55db755f988766ec4651c1d24916a65aa70540695c"},
{"name":"webmock","version":"3.25.0","platform":"ruby","checksum":"573c23fc4887008c830f22da588db339ca38b6d59856fd57f5a068959474198e"},
{"name":"webrick","version":"1.8.2","platform":"ruby","checksum":"431746a349199546ff9dd272cae10849c865f938216e41c402a6489248f12f21"},
{"name":"webrick","version":"1.9.1","platform":"ruby","checksum":"b42d3c94f166f3fb73d87e9b359def9b5836c426fc8beacf38f2184a21b2a989"},
{"name":"websocket","version":"1.2.10","platform":"ruby","checksum":"2cc1a4a79b6e63637b326b4273e46adcddf7871caa5dc5711f2ca4061a629fa8"},
{"name":"websocket-driver","version":"0.7.6","platform":"java","checksum":"bc894b9e9d5aee55ac04b61003e1957c4ef411a5a048199587d0499785b505c3"},
{"name":"websocket-driver","version":"0.7.6","platform":"ruby","checksum":"f69400be7bc197879726ad8e6f5869a61823147372fd8928836a53c2c741d0db"},

View File

@ -2035,7 +2035,7 @@ GEM
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
webrick (1.8.2)
webrick (1.9.1)
websocket (1.2.10)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
@ -2426,7 +2426,7 @@ DEPENDENCIES
warning (~> 1.5.0)
webauthn (~> 3.0)
webmock (~> 3.25.0)
webrick (~> 1.8.1)
webrick (~> 1.9.0)
wikicloth (= 0.8.1)
yajl-ruby (~> 1.4.3)
yard (~> 0.9)

View File

@ -802,7 +802,7 @@
{"name":"webauthn","version":"3.0.0","platform":"ruby","checksum":"3f77d422c2a8a4b31e56cf42f83414bd066e0506e9896936e1730262dc4a20e6"},
{"name":"webfinger","version":"2.1.3","platform":"ruby","checksum":"567a52bde77fb38ca6b67e55db755f988766ec4651c1d24916a65aa70540695c"},
{"name":"webmock","version":"3.25.0","platform":"ruby","checksum":"573c23fc4887008c830f22da588db339ca38b6d59856fd57f5a068959474198e"},
{"name":"webrick","version":"1.8.2","platform":"ruby","checksum":"431746a349199546ff9dd272cae10849c865f938216e41c402a6489248f12f21"},
{"name":"webrick","version":"1.9.1","platform":"ruby","checksum":"b42d3c94f166f3fb73d87e9b359def9b5836c426fc8beacf38f2184a21b2a989"},
{"name":"websocket","version":"1.2.10","platform":"ruby","checksum":"2cc1a4a79b6e63637b326b4273e46adcddf7871caa5dc5711f2ca4061a629fa8"},
{"name":"websocket-driver","version":"0.7.6","platform":"java","checksum":"bc894b9e9d5aee55ac04b61003e1957c4ef411a5a048199587d0499785b505c3"},
{"name":"websocket-driver","version":"0.7.6","platform":"ruby","checksum":"f69400be7bc197879726ad8e6f5869a61823147372fd8928836a53c2c741d0db"},

View File

@ -2035,7 +2035,7 @@ GEM
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
webrick (1.8.2)
webrick (1.9.1)
websocket (1.2.10)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
@ -2426,7 +2426,7 @@ DEPENDENCIES
warning (~> 1.5.0)
webauthn (~> 3.0)
webmock (~> 3.25.0)
webrick (~> 1.8.1)
webrick (~> 1.9.0)
wikicloth (= 0.8.1)
yajl-ruby (~> 1.4.3)
yard (~> 0.9)

View File

@ -39,26 +39,26 @@ export default {
:class="{ 'settings-section-no-bottom': noBottomBorder }"
data-testid="settings-section"
>
<div v-if="hasHeading || hasDescription" class="settings-sticky-header">
<div class="settings-sticky-header-inner">
<h2
v-if="hasHeading"
class="gl-heading-2 !gl-mb-3"
:class="headingClasses"
data-testid="settings-section-heading"
>
<slot v-if="$scopedSlots.heading" name="heading"></slot>
<template v-else>{{ heading }}</template>
</h2>
<p
v-if="hasDescription"
class="gl-mb-3 gl-text-subtle"
data-testid="settings-section-description"
>
<slot v-if="$scopedSlots.description" name="description"></slot>
<template v-else>{{ description }}</template>
</p>
</div>
<div
v-if="hasHeading || hasDescription"
class="settings-sticky-header"
:class="{ 'gl-mb-4': !hasDescription }"
>
<h2
v-if="hasHeading"
class="gl-heading-2 gl-mb-0"
:class="headingClasses"
data-testid="settings-section-heading"
>
<slot v-if="$scopedSlots.heading" name="heading"></slot>
<template v-else>{{ heading }}</template>
</h2>
</div>
<div v-if="hasDescription" class="settings-sticky-header-description gl-mb-6">
<p class="gl-mb-0 gl-text-subtle" data-testid="settings-section-description">
<slot v-if="$scopedSlots.description" name="description"></slot>
<template v-else>{{ description }}</template>
</p>
</div>
<div class="gl-mt-3">
<slot></slot>

View File

@ -255,7 +255,7 @@ export default {
data-testid="work-item-drawer"
:header-height="getDrawerHeight"
header-sticky
class="gl-w-full gl-leading-reset lg:gl-w-[480px] xl:gl-w-[768px] min-[1440px]:gl-w-[912px]"
class="work-item-drawer gl-w-full gl-leading-reset lg:gl-w-[480px] xl:gl-w-[768px] min-[1440px]:gl-w-[912px]"
@close="handleClose"
@opened="$emit('opened')"
>

View File

@ -261,6 +261,10 @@
}
}
.rd-line-text {
all: unset;
}
// Select text only within one side of the parallel diff
.rd-diff-file:has([data-position=new]:where(:active, :focus)) [data-position=old],
.rd-diff-file:has([data-position=old]:where(:active, :focus)) [data-position=new] {

View File

@ -437,3 +437,18 @@
background: var(--ci-job-item-failed);
}
/**
* Translucent glass background
*
* Sets background color to semi transparent
* with a glass shine though apperance
*
* Respects user preference setting for transparency
*/
@mixin translucent-glass-background {
@media (prefers-reduced-transparency: no-preference) {
background-color: rgb(from var(--gl-background-color-default) r g b / 92%) !important;
backdrop-filter: blur(24px);
}
}

View File

@ -19,6 +19,8 @@
@media (prefers-reduced-motion: no-preference) {
@apply gl-transition-[width,left,right];
}
@include translucent-glass-background;
}
.top-app-header {

View File

@ -15,6 +15,10 @@ $super-sidebar-z-index: 600;
$super-sidebar-skip-to-z-index: 601;
$super-sidebar-overlay-z-index: 599;
$top-bar-z-index: 210;
$settings-sticky-header-height: 3rem;
$settings-sticky-header-z-index: 98;
$settings-sticky-footer-height: 3rem;
$settings-sticky-footer-z-index: #{$settings-sticky-header-z-index +1};
/**
🚨 Do not use this spacing scale it is deprecated and being removed. 🚨

View File

@ -15,6 +15,7 @@
.top-bar {
@include job-log-top-bar;
@include translucent-glass-background;
&.has-archived-block {
top: calc(#{$calc-application-header-height} + 28px);

View File

@ -880,6 +880,7 @@ $diff-file-header-top: 11px;
.merge-request-sticky-header {
z-index: calc($top-bar-z-index - 1);
height: $mr-sticky-header-height;
@include translucent-glass-background;
}
.merge-request-notification-toggle {

View File

@ -209,6 +209,12 @@ ul.related-merge-requests > li gl-emoji {
top: $calc-application-header-height;
}
// stylelint-disable-next-line gitlab/no-gl-class
.work-item-drawer .gl-drawer-header-sticky,
.issue-sticky-header {
@include translucent-glass-background;
}
.limit-container-width {
.issue-sticky-header-text {
max-width: $limited-layout-width;

View File

@ -32,7 +32,7 @@
.settings-section::after {
content: '';
display: block;
margin-bottom: $gl-spacing-scale-7;
padding-bottom: $gl-spacing-scale-7;
}
.settings-section,
@ -42,56 +42,60 @@
// Fix for sticky header when there is no search bar.
.flash-container + .settings-section {
padding-top: $gl-spacing-scale-3;
@apply gl-pt-3;
}
.settings-section:not(.settings-section-no-bottom) ~ .settings-section {
@apply gl-border-t;
padding-top: $gl-spacing-scale-6;
@apply gl-border-t gl-pt-6;
}
.settings-section-no-bottom::after {
padding-bottom: 0 !important;
@include media-breakpoint-up(sm) {
padding-bottom: $gl-spacing-scale-5;
@apply gl-pb-5;
}
}
$sticky-header-z-index: 98;
.settings-sticky-header,
.settings-sticky-footer {
position: sticky;
@apply gl-bg-default;
}
.settings-sticky-header {
z-index: $sticky-header-z-index;
z-index: $settings-sticky-header-z-index;
position: sticky;
top: $calc-application-header-height;
min-height: $settings-sticky-header-height;
@apply gl-bg-default gl-py-3;
&::before {
content: '';
z-index: -1;
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: calc(100% - 1px);
@apply gl-bg-default;
}
&::after {
content: '';
z-index: -2;
display: block;
height: $gl-padding-8;
position: sticky;
top: calc(#{$calc-application-header-height} + 36px);
box-shadow: 0 1px 0 var(--gl-border-color-default);
top: calc(#{$calc-application-header-height} + #{$settings-sticky-header-height - $gl-spacing-scale-3});
left: 0;
margin-top: -1px;
width: 100%;
height: 1px;
box-shadow: 0 #{$gl-spacing-scale-3} 0 var(--gl-border-color-default);
}
}
.settings-sticky-header-inner {
position: sticky;
padding: $gl-padding-12 $gl-padding $gl-padding-8;
margin: #{-$gl-padding} #{-$gl-padding} 0;
@apply gl-bg-default;
}
.settings-sticky-footer {
z-index: #{$sticky-header-z-index +1};
z-index: $settings-sticky-footer-z-index;
position: sticky;
bottom: 0;
padding: $gl-padding-8 0;
box-shadow: 0 -1px 0 var(--gl-border-color-default);
min-height: $settings-sticky-footer-height;
@apply gl-bg-default gl-py-3 gl-border-t;
}
// Header shouldn't be sticky if only one section on page

View File

@ -1,10 +1,10 @@
%section.settings-section.js-search-settings-section{ options_attrs }
.settings-sticky-header
.settings-sticky-header-inner
%h2.gl-heading-2{ class: '!gl-mb-3' }
= heading || @heading
- if description || @description
%p.gl-text-subtle.gl-mb-3
= description || @description
.settings-sticky-header{ class: ('gl-mb-4' if !description && !@description) }
%h2.gl-heading-2.gl-mb-0
= heading || @heading
- if description || @description
.settings-sticky-header-description.gl-mb-6
%p.gl-text-subtle.gl-mb-0
= description || @description
.gl-mt-3{ data: { testid: 'settings-section-body' } }
= body

View File

@ -1 +1,2 @@
%td.rd-line-content{ data: { change: change_type, position: @position }, tabindex: '-1' }= @line.text_content if @line
%td.rd-line-content{ data: { change: change_type, position: @position }, tabindex: '-1' }><
%pre.rd-line-text= @line.text_content if @line

View File

@ -84,8 +84,6 @@ class Admin::ImpersonationTokensController < Admin::ApplicationController
def set_index_vars
@scopes = Gitlab::Auth.available_scopes_for(current_user)
@scopes = ::VirtualRegistries.filter_token_scopes(@scopes, current_user)
@impersonation_token ||= finder.build
@active_impersonation_tokens = active_impersonation_tokens
end

View File

@ -99,8 +99,6 @@ module AccessTokensActions
@scopes = Gitlab::Auth.available_scopes_for(resource)
@scopes = ::VirtualRegistries.filter_token_scopes(@scopes, current_user)
@active_access_tokens, @active_access_tokens_size = active_access_tokens
@inactive_access_tokens_size = inactive_access_tokens.size
end

View File

@ -125,8 +125,6 @@ module UserSettings
def set_index_vars
@scopes = Gitlab::Auth.available_scopes_for(current_user)
@scopes = ::VirtualRegistries.filter_token_scopes(@scopes, current_user)
@active_access_tokens, @active_access_tokens_size = active_access_tokens
end

View File

@ -38,7 +38,7 @@ class Milestone < ApplicationRecord
else
active
.where('(milestones.start_date <= CURRENT_DATE OR milestones.start_date IS NULL) AND
(milestones.due_date IS NULL OR milestones.due_date > CURRENT_DATE) AND
(milestones.due_date IS NULL OR milestones.due_date >= CURRENT_DATE) AND
NOT (milestones.start_date IS NULL AND milestones.due_date IS NULL)')
end
end

View File

@ -1,13 +0,0 @@
# frozen_string_literal: true
# Remove this file when virtual_registry_maven *and* dependency_proxy_read_write_scopes are removed
module VirtualRegistries
def self.filter_token_scopes(scopes, current_user)
return scopes if Feature.enabled?(:virtual_registry_maven, current_user) ||
Feature.enabled?(:dependency_proxy_read_write_scopes, current_user)
scopes - ::Gitlab::Auth.virtual_registry_scopes
end
end
VirtualRegistries.prepend_mod

View File

@ -0,0 +1,24 @@
---
description: Command is executed from the GitLab CLI
internal_events: true
action: gitlab_cli_command_used
identifiers:
- project
- namespace
- user
additional_properties:
label:
description: Command used - e.g. 'mr'
property:
description: Subcommand used - e.g. 'view'
command_and_subcommand:
description: Command and subcommand used - e.g. 'mr view'
product_group: code_review
product_categories:
- gitlab_cli
milestone: '18.0'
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185183
tiers:
- free
- premium
- ultimate

View File

@ -1,9 +0,0 @@
---
name: dependency_proxy_read_write_scopes
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/336800
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/180333
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/517249
milestone: '17.9'
group: group::container registry
type: wip
default_enabled: false

View File

@ -52,10 +52,4 @@ if Gitlab::Metrics.enabled? && Gitlab::Runtime.application?
Labkit::NetHttpPublisher.labkit_prepend!
Labkit::ExconPublisher.labkit_prepend!
Labkit::HTTPClientPublisher.labkit_prepend!
Rails.application.configure do
config.after_initialize do
Metrics::PatchedFilesWorker.perform_async
end
end
end

View File

@ -1,8 +1,9 @@
---
migration_job_name: BackfillProtectedBranchMergeAccessLevelsProtectedBranchProjectId
description: Backfills sharding key `protected_branch_merge_access_levels.protected_branch_project_id` from `protected_branches`.
description: Backfills sharding key `protected_branch_merge_access_levels.protected_branch_project_id`
from `protected_branches`.
feature_category: source_code_management
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/174564
milestone: '17.7'
queued_migration_version: 20241204130225
finalized_by: # version of the migration that finalized this BBM
finalized_by: '20250507231811'

View File

@ -9,6 +9,5 @@ feature_categories:
description: Routing table for CI runner managers
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/168131
milestone: '17.6'
gitlab_schema: gitlab_ci
exempt_from_sharding: true
gitlab_schema: gitlab_ci_cell_local
table_size: small

View File

@ -9,6 +9,5 @@ feature_categories:
description: Routing table for CI runners
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/166308
milestone: '17.6'
gitlab_schema: gitlab_ci
exempt_from_sharding: true
gitlab_schema: gitlab_ci_cell_local
table_size: small

View File

@ -0,0 +1,21 @@
# frozen_string_literal: true
class FinalizeHkBackfillProtectedBranchMergeAccessLevelsProtectedBranch90859 < Gitlab::Database::Migration[2.3]
milestone '18.0'
disable_ddl_transaction!
restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
def up
ensure_batched_background_migration_is_finished(
job_class_name: 'BackfillProtectedBranchMergeAccessLevelsProtectedBranchProjectId',
table_name: :protected_branch_merge_access_levels,
column_name: :id,
job_arguments: [:protected_branch_project_id, :protected_branches, :project_id, :protected_branch_id],
finalize: true
)
end
def down; end
end

View File

@ -0,0 +1 @@
afa6b970a7149b3c9b3fa6a0055348e4c0f8226e0be66fdae2456046332aef3b

View File

@ -62,8 +62,9 @@ Prerequisites:
To configure a self-hosted model:
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **GitLab Duo Self-Hosted**.
- If the **GitLab Duo Self-Hosted** menu item is not available, synchronize your
1. Select **GitLab Duo**.
1. Select **Configure GitLab Duo Self-Hosted**.
- If the **Configure GitLab Duo Self-Hosted** button is not available, synchronize your
subscription after purchase:
1. On the left sidebar, select **Subscription**.
1. In **Subscription details**, to the right of **Last sync**, select
@ -141,8 +142,9 @@ Prerequisites:
### View configured features
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **GitLab Duo Self-Hosted**.
- If the **GitLab Duo Self-Hosted** menu item is not available, synchronize your
1. Select **GitLab Duo**.
1. Select **Configure GitLab Duo Self-Hosted**.
- If the **Configure GitLab Duo Self-Hosted** button is not available, synchronize your
subscription after purchase:
1. On the left sidebar, select **Subscription**.
1. In **Subscription details**, to the right of **Last sync**, select
@ -154,7 +156,8 @@ Prerequisites:
Configure the GitLab Duo feature and sub-feature to send queries to the configured self-hosted model:
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **GitLab Duo Self-Hosted**.
1. Select **GitLab Duo**.
1. Select **Configure GitLab Duo Self-Hosted**.
1. Select the **AI-powered features** tab.
1. For the feature and sub-feature you want to configure, from the dropdown list, choose the self-hosted model you want to use.
@ -180,7 +183,8 @@ To disable a feature, you must explicitly select **Disabled** when configuring a
To disable a GitLab Duo feature or sub-feature:
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **GitLab Duo Self-Hosted**.
1. Select **GitLab Duo**.
1. Select **Configure GitLab Duo Self-Hosted**.
1. Select the **AI-powered features** tab.
1. For the feature or sub-feature you want to disable, from the dropdown list, select **Disabled**.

View File

@ -1257,14 +1257,14 @@ It contains JSON-formatted logs of product usage events tracked through Snowplow
}
```
To analyze these logs, you can use the `scripts/product_usage_data_event_formatter.rb` tool which formats the JSON output and decodes base64-encoded context data for better readability:
To inspect these logs, you can use the [Rake task](../../raketasks/_index.md) `product_usage_data:format` which formats the JSON output and decodes base64-encoded context data for better readability:
```shell
scripts/product_usage_data_event_formatter.rb log/product_usage_data.log
gitlab-rake "product_usage_data:format[log/product_usage_data.log]"
# or pipe the logs directly
cat log/product_usage_data.log | scripts/product_usage_data_event_formatter.rb
cat log/product_usage_data.log | gitlab-rake product_usage_data:format
# or tail the logs in real-time
tail -f log/product_usage_data.log | scripts/product_usage_data_event_formatter.rb
tail -f log/product_usage_data.log | gitlab-rake product_usage_data:format
```
You can disable this log by setting the `GITLAB_DISABLE_PRODUCT_USAGE_EVENT_LOGGING` environment variable to any value.

View File

@ -71,3 +71,18 @@ Events are transmitted to GitLab almost immediately after they occur. The system
### Payload size and compression
Each event is approximately 10 kB in JSON format. Batches of 10 events result in an uncompressed payload size of about 100 kB. Before transmission, the payload is compressed to minimize data transfer size and optimize performance.
### Event data logs
Event-level tracking data is logged in the `product_usage_data.log` file. This log contains JSON-formatted entries of tracked product usage events, including payload information and context data. Each line represents a separate tracking event and all the data that was sent.
The log file is located at:
- `/var/log/gitlab/gitlab-rails/product_usage_data.log` on Linux package installations
- `/home/git/gitlab/log/product_usage_data.log` on self-compiled installations
While these logs provide thorough visibility into data transmission, they're designed specifically for inspection by security teams rather than feature usage analysis. For more detailed information about logging system, see the [Log system documentation](../logs/_index.md#product-usage-data-log).
### Frequently asked questions on event data
You can access frequently asked questions on event data [here](https://handbook.gitlab.com/handbook/legal/privacy/product-usage-events-faq/).

View File

@ -283,7 +283,7 @@ Enabling Duo for just the root user is sufficient for initial setup and testing.
1. Access GitLab Duo Self-Hosted Configuration
- Navigate to Admin Area > GitLab Duo > "Self-hosted models"
- Navigate to Admin Area > GitLab Duo > "Configure GitLab Duo Self-hosted"
- Click "Add self-hosted model" button
![Configure Self-Hosted Model](img/self_hosted_model/self-hosted-model-initial_v17_10.png)

View File

@ -35,19 +35,6 @@ 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.
Before you start using Chat, decide which of the following methods you want to use to manage Chat:
- On GitLab.com or GitLab Self-Managed, the default GitLab AI vendor models and
cloud-based AI gateway that is hosted by GitLab.
- On GitLab Self-Managed, in GitLab 17.9 and later, [GitLab Duo Self-Hosted with a supported self-hosted model](../../administration/gitlab_duo_self_hosted/_index.md). Self-hosted models maximize
security and privacy by making sure nothing is sent to an external model.
{{< alert type="note" >}}
You cannot use all Chat features with GitLab Duo Self-Hosted. For more information, see [supported Chat features](../../administration/gitlab_duo_self_hosted/_index.md#supported-duo-chat-features).
{{< /alert >}}
## Supported editor extensions
You can use GitLab Duo Chat in:
@ -412,6 +399,21 @@ Prerequisites:
- **Expire conversation based on time conversation was created.**
1. Select **Save changes**.
## Available language models
Different language models can be the source for GitLab Duo Chat.
- On GitLab.com or GitLab Self-Managed, the default GitLab AI vendor models and
cloud-based AI gateway that is hosted by GitLab.
- On GitLab Self-Managed, in GitLab 17.9 and later, [GitLab Duo Self-Hosted with a supported self-hosted model](../../administration/gitlab_duo_self_hosted/_index.md). Self-hosted models maximize
security and privacy by making sure nothing is sent to an external model.
{{< alert type="note" >}}
You cannot use all Chat features with GitLab Duo Self-Hosted. For more information, see [supported Chat features](../../administration/gitlab_duo_self_hosted/_index.md#supported-duo-chat-features).
{{< /alert >}}
## Give feedback
Your feedback is important to us as we continually enhance your GitLab Duo Chat experience.

View File

@ -78,6 +78,7 @@ Prerequisites:
- [Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/276777) the feature flag `dependency_proxy_for_private_groups` in GitLab 15.0.
- Support for group access tokens [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/362991) in GitLab 16.3.
- Deploy token scopes `read_virtual_registry` and `write_virtual_registry` [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/336800) in GitLab 17.11 with a flag named `dependency_proxy_read_write_scopes`. Disabled by default.
- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/517249) in GitLab 18.0. Feature flag `dependency_proxy_read_write_scopes` removed.
{{< /history >}}

View File

@ -147,6 +147,70 @@ you can use the `CI_COMMIT_TAG` variable to control pipelines for new tags:
- At the job level with [`rules:if`](../../../../ci/yaml/_index.md#rulesif).
- At the pipeline level with the [`workflow`](../../../../ci/yaml/workflow.md) keyword.
## Trigger security scans in tag pipelines
By default, scan execution policies only run on branches, not tags. However, you can
configure pipeline execution policies to run security scans on tags.
To run security scans on tags:
1. Create a CI/CD configuration YAML file with custom jobs that extend the security scanner
templates and include rules to run on tags.
1. Create a pipeline execution policy that injects this configuration into your pipelines.
### Example pipeline execution policy
This example shows how to create a pipeline execution policy that runs dependency scanning
and SAST scans on tags:
```yaml
pipeline_execution_policy:
- name: Pipeline Execution Policy
description: Run security scans on tags
enabled: true
pipeline_config_strategy: inject_policy
content:
include:
- project: <Project path to YAML>
file: tag-security-scans.yml
skip_ci:
allowed: false
```
### Example CI/CD configuration
This example shows how to extend security scanner jobs to run on tags:
```yaml
include:
- template: Jobs/Dependency-Scanning.gitlab-ci.yml
- template: Jobs/SAST.gitlab-ci.yml
# Extend dependency scanning to run on tags
gemnasium-python-dependency_scanning_tags:
extends: gemnasium-python-dependency_scanning
rules:
- if: $CI_COMMIT_TAG
# Extend SAST scanning to run on tags
semgrep-sast_tags:
extends: semgrep-sast
rules:
- if: $CI_COMMIT_TAG
# Example of a custom job that runs only on tags
policy_job_for_tags:
script:
- echo "This job runs only on tags"
rules:
- if: $CI_COMMIT_TAG
# Example of a job that runs on all pipelines
policy_job_always:
script:
- echo "This policy job runs always."
```
## Related topics
- [Tagging (Git reference page)](https://git-scm.com/book/en/v2/Git-Basics-Tagging)

View File

@ -58,6 +58,7 @@ Updating any of these settings, except `enabled`, does not affect existing works
| [`labels`](#labels) | Labels to apply to Kubernetes objects. | Map of key-value pairs. Valid Kubernetes label format | `{}` | No |
| [`max_active_hours_before_stop`](#max_active_hours_before_stop) | Maximum number of hours a workspace can be active before it is stopped. | Integer | `36` | No |
| [`max_stopped_hours_before_termination`](#max_stopped_hours_before_termination) | Maximum number of hours a workspace can be stopped before it is terminated. | Integer | `744` | No |
| [`shared_namespace`](#shared_namespace) | Indicates whether to use a shared Kubernetes namespace. | String | `""` | No |
### `enabled`
@ -233,6 +234,14 @@ For more information about possible CPU and memory values, see:
Workspaces fail when they exceed the values you set for `requests` and `limits`.
{{< alert type="note" >}}
If [`shared_namespace`](#shared_namespace) is set, `max_resources_per_workspace` must be an
empty hash. Users can create a Kubernetes [Resource quota](https://kubernetes.io/docs/concepts/policy/resource-quotas/)
in the `shared_namespace` to achieve the same result as specifying this value here.
{{< /alert >}}
Example configuration:
```yaml
@ -429,6 +438,7 @@ In this example, the secret `image-pull-secret-name` from the namespace
For `image_pull_secrets`, the `name` and `namespace` attributes are required.
The name of the secret must be unique.
If [`shared_namespace`](#shared_namespace) is set, the namespace of the secret must be the same as the `shared_namespace`.
If the secret you've specified does not exist in the Kubernetes cluster, the secret is ignored.
When you delete or update the secret, the secret is deleted or updated
@ -578,6 +588,41 @@ A valid value:
The automatic termination is only triggered on a full reconciliation, which happens every hour.
This means that the workspace might stop for up to one hour longer than the configured value.
### `shared_namespace`
{{< history >}}
- [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/12327) in GitLab 18.0.
{{< /history >}}
Use this setting to specify a shared Kubernetes namespace for all workspaces.
The default value is `""`, which creates each new workspace in its own separate Kubernetes namespace.
When you specify a value, all workspaces exist in that Kubernetes namespace instead of individual namespaces.
Setting a value for `shared_namespace` imposes restrictions on the acceptable values for [`image_pull_secrets`](#image_pull_secrets) and [`max_resources_per_workspace`](#max_resources_per_workspace).
Example configuration:
```yaml
remote_development:
# NOTE: This is a partial example.
# Some required fields are not included.
shared_namespace: "example-shared-namespace"
```
A valid value:
- Contains at most 63 characters.
- Contains only lowercase alphanumeric characters or '-'.
- Starts with an alphanumeric character.
- Ends with an alphanumeric character.
For more information about Kubernetes namespaces, see
[Namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/).
## Complete example configuration
The following configuration is a complete, example configuration.
@ -636,4 +681,5 @@ remote_development:
max_active_hours_before_stop: 60
max_stopped_hours_before_termination: 4332
shared_namespace: ""
```

View File

@ -13,9 +13,9 @@ PATH
GEM
remote: https://rubygems.org/
specs:
actionpack (8.0.1)
actionview (= 8.0.1)
activesupport (= 8.0.1)
actionpack (8.0.2)
actionview (= 8.0.2)
activesupport (= 8.0.2)
nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
@ -23,19 +23,19 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
actionview (8.0.1)
activesupport (= 8.0.1)
actionview (8.0.2)
activesupport (= 8.0.2)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
activemodel (8.0.1)
activesupport (= 8.0.1)
activerecord (8.0.1)
activemodel (= 8.0.1)
activesupport (= 8.0.1)
activemodel (8.0.2)
activesupport (= 8.0.2)
activerecord (8.0.2)
activemodel (= 8.0.2)
activesupport (= 8.0.2)
timeout (>= 0.4.0)
activesupport (8.0.1)
activesupport (8.0.2)
base64
benchmark (>= 0.3)
bigdecimal
@ -50,42 +50,43 @@ GEM
uri (>= 0.13.1)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
ast (2.4.2)
aws-eventstream (1.3.0)
aws-partitions (1.1001.0)
aws-sdk-core (3.214.0)
ast (2.4.3)
aws-eventstream (1.3.2)
aws-partitions (1.1099.0)
aws-sdk-core (3.223.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
jmespath (~> 1, >= 1.6.1)
aws-sigv4 (1.9.1)
logger
aws-sigv4 (1.11.0)
aws-eventstream (~> 1, >= 1.0.2)
base64 (0.2.0)
benchmark (0.4.0)
bigdecimal (3.1.8)
bigdecimal (3.1.9)
builder (3.3.0)
byebug (11.1.3)
concurrent-ruby (1.3.4)
connection_pool (2.4.1)
byebug (12.0.0)
concurrent-ruby (1.3.5)
connection_pool (2.5.3)
crack (1.0.0)
bigdecimal
rexml
crass (1.0.6)
date (3.4.1)
diff-lcs (1.5.1)
diff-lcs (1.6.1)
docile (1.4.1)
drb (2.2.1)
elasticsearch (7.17.11)
elasticsearch-api (= 7.17.11)
elasticsearch-transport (= 7.17.11)
elasticsearch-api (7.17.11)
elastic-transport (8.4.0)
faraday (< 3)
multi_json
elasticsearch-transport (7.17.11)
base64
faraday (>= 1, < 3)
elasticsearch (9.0.2)
elastic-transport (~> 8.3)
elasticsearch-api (= 9.0.2)
elasticsearch-api (9.0.2)
multi_json
erubi (1.13.0)
faraday (2.12.2)
erubi (1.13.1)
faraday (2.13.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
@ -94,8 +95,8 @@ GEM
faraday_middleware-aws-sigv4 (1.0.1)
aws-sigv4 (~> 1.0)
faraday (>= 2.0, < 3)
gitlab-styles (13.0.2)
rubocop (~> 1.68.0)
gitlab-styles (13.1.0)
rubocop (= 1.71.1)
rubocop-capybara (~> 2.21.0)
rubocop-factory_bot (~> 2.26.1)
rubocop-graphql (~> 1.5.4)
@ -104,56 +105,60 @@ GEM
rubocop-rspec (~> 3.0.4)
rubocop-rspec_rails (~> 2.30.0)
hashdiff (1.1.2)
i18n (1.14.6)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
io-console (0.8.0)
irb (1.14.1)
irb (1.15.2)
pp (>= 0.6.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jmespath (1.6.2)
json (2.9.0)
language_server-protocol (3.17.0.3)
logger (1.6.2)
loofah (2.23.1)
json (2.11.3)
language_server-protocol (3.17.0.4)
logger (1.7.0)
loofah (2.24.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mini_portile2 (2.8.8)
minitest (5.25.4)
minitest (5.25.5)
multi_json (1.15.0)
net-http (0.6.0)
uri
nokogiri (1.17.1)
nokogiri (1.18.8)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.17.1-aarch64-linux)
nokogiri (1.18.8-aarch64-linux-gnu)
racc (~> 1.4)
nokogiri (1.17.1-arm-linux)
nokogiri (1.18.8-arm-linux-gnu)
racc (~> 1.4)
nokogiri (1.17.1-arm64-darwin)
nokogiri (1.18.8-arm64-darwin)
racc (~> 1.4)
nokogiri (1.17.1-x86-linux)
nokogiri (1.18.8-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.17.1-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.17.1-x86_64-linux)
nokogiri (1.18.8-x86_64-linux-gnu)
racc (~> 1.4)
opensearch-ruby (3.4.0)
faraday (>= 1.0, < 3)
multi_json (>= 1.0)
parallel (1.26.3)
parser (3.3.6.0)
parallel (1.27.0)
parser (3.3.8.0)
ast (~> 2.4.1)
racc
pg (1.5.9)
psych (5.2.1)
pp (0.6.2)
prettyprint
prettyprint (0.2.0)
prism (1.4.0)
psych (5.2.4)
date
stringio
public_suffix (6.0.1)
public_suffix (6.0.2)
racc (1.8.1)
rack (3.1.8)
rack-session (2.0.0)
rack (3.1.14)
rack-session (2.1.1)
base64 (>= 0.1.0)
rack (>= 3.0.0)
rack-test (2.1.0)
rack-test (2.2.0)
rack (>= 1.3)
rackup (2.2.1)
rack (>= 3)
@ -161,12 +166,12 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.6.1)
rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
railties (8.0.1)
actionpack (= 8.0.1)
activesupport (= 8.0.1)
railties (8.0.2)
actionpack (= 8.0.2)
activesupport (= 8.0.2)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
@ -174,49 +179,50 @@ GEM
zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.2.1)
rdoc (6.8.1)
rdoc (6.13.1)
psych (>= 4.0.0)
redis (5.3.0)
redis (5.4.0)
redis-client (>= 0.22.0)
redis-client (0.23.1)
redis-client (0.24.0)
connection_pool
regexp_parser (2.9.3)
reline (0.5.12)
regexp_parser (2.10.0)
reline (0.6.1)
io-console (~> 0.5)
rexml (3.3.9)
rexml (3.4.1)
rspec (3.13.0)
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.2)
rspec-core (3.13.3)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.3)
rspec-expectations (3.13.4)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-mocks (3.13.2)
rspec-mocks (3.13.4)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (7.1.0)
actionpack (>= 7.0)
activesupport (>= 7.0)
railties (>= 7.0)
rspec-rails (8.0.0)
actionpack (>= 7.2)
activesupport (>= 7.2)
railties (>= 7.2)
rspec-core (~> 3.13)
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
rspec-support (~> 3.13)
rspec-support (3.13.2)
rubocop (1.68.0)
rspec-support (3.13.3)
rubocop (1.71.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.4, < 3.0)
rubocop-ast (>= 1.32.2, < 2.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.38.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.36.2)
parser (>= 3.3.1.0)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.44.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
rubocop-capybara (2.21.0)
rubocop (~> 1.41)
rubocop-factory_bot (2.26.1)
@ -237,26 +243,28 @@ GEM
rubocop (~> 1.61)
rubocop-rspec (~> 3, >= 3.0.1)
ruby-progressbar (1.13.0)
securerandom (0.4.0)
securerandom (0.4.1)
simplecov (0.22.0)
docile (~> 1.1)
simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1)
simplecov-html (0.13.1)
simplecov_json_formatter (0.1.4)
stringio (3.1.2)
stringio (3.1.7)
thor (1.3.2)
timeout (0.4.3)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.6.0)
uri (1.0.2)
unicode-display_width (3.1.4)
unicode-emoji (~> 4.0, >= 4.0.4)
unicode-emoji (4.0.4)
uri (1.0.3)
useragent (0.16.11)
webmock (3.24.0)
webmock (3.25.1)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
zeitwerk (2.7.1)
zeitwerk (2.7.2)
PLATFORMS
aarch64-linux
@ -284,89 +292,91 @@ DEPENDENCIES
webmock
CHECKSUMS
actionpack (8.0.1) sha256=c764e4bfc0ad9d3505c09ef9b6fbf9eca4292793550c6b7e2ea93167181bfcba
actionview (8.0.1) sha256=3005e3de5ca49ea789bf1ad46002d63fe5aa543c61c341239d3c533757e64f8a
activemodel (8.0.1) sha256=f46292fd6dcc128e18d588854298a933fd9eb22544c412b414ec02821062dc78
activerecord (8.0.1) sha256=34a7f0610660bb704f0363025d4b8d35ffe8ddc8f5b8147e0809171f724b5306
activesupport (8.0.1) sha256=fd5bc74641c24ac3541055c2879789198ff42adee3e39c2933289ba008912e37
actionpack (8.0.2) sha256=93e703064f3815295ccf820f57acbca719aec836749597da9262781c9b2f4b78
actionview (8.0.2) sha256=e038e1405cdfc18f04f17243da4fb8eeda3a4992f63a6d70a7281d255cf7cebb
activemodel (8.0.2) sha256=0ae1fb7fa1fae0699ba041a9e97702df42ea3b13f2d39f2d0fde51fca5f0656c
activerecord (8.0.2) sha256=793470b92c44e4198d0262ac60086b7822f0ea585079ad67e32a6e4c86f2d90a
activesupport (8.0.2) sha256=8565cddba31b900cdc17682fd66ecd020441e3eef320a9930285394e8c07a45e
addressable (2.8.7) sha256=462986537cf3735ab5f3c0f557f14155d778f4b43ea4f485a9deb9c8f7c58232
ast (2.4.2) sha256=1e280232e6a33754cde542bc5ef85520b74db2aac73ec14acef453784447cc12
aws-eventstream (1.3.0) sha256=f1434cc03ab2248756eb02cfa45e900e59a061d7fbdc4a9fd82a5dd23d796d3f
aws-partitions (1.1001.0) sha256=2979f3317d3a757508d35d0f322839f422cbc8459589b7cc4a3889d0085a8307
aws-sdk-core (3.214.0) sha256=24f2a0f29dc3b5d9ee38d6ff8341a66fba48a4ebca2424688f7bac9952d8488b
aws-sigv4 (1.9.1) sha256=7753e320c39f80f82f9e0883b30de0e7b99e756adbaedc80c50b6ad59d49c379
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
aws-eventstream (1.3.2) sha256=7e2c3a55ca70d7861d5d3c98e47daa463ed539c349caba22b48305b8919572d7
aws-partitions (1.1099.0) sha256=fcf3be05a7bc026e294653cc4b98d79ec3675c47018b3052b5aaad80e4a8a212
aws-sdk-core (3.223.0) sha256=d8c309116787cd24fb32095da4fa94d1f76e26baea705eabb66aa4585e8d8c77
aws-sigv4 (1.11.0) sha256=50a8796991a862324442036ad7a395920572b84bb6cd29b945e5e1800e8da1db
base64 (0.2.0) sha256=0f25e9b21a02a0cc0cea8ef92b2041035d39350946e8789c562b2d1a3da01507
benchmark (0.4.0) sha256=0f12f8c495545e3710c3e4f0480f63f06b4c842cc94cec7f33a956f5180e874a
bigdecimal (3.1.8) sha256=a89467ed5a44f8ae01824af49cbc575871fa078332e8f77ea425725c1ffe27be
bigdecimal (3.1.9) sha256=2ffc742031521ad69c2dfc815a98e426a230a3d22aeac1995826a75dabfad8cc
builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
byebug (11.1.3) sha256=2485944d2bb21283c593d562f9ae1019bf80002143cc3a255aaffd4e9cf4a35b
concurrent-ruby (1.3.4) sha256=d4aa926339b0a86b5b5054a0a8c580163e6f5dcbdfd0f4bb916b1a2570731c32
connection_pool (2.4.1) sha256=0f40cf997091f1f04ff66da67eabd61a9fe0d4928b9a3645228532512fab62f4
byebug (12.0.0) sha256=d4a150d291cca40b66ec9ca31f754e93fed8aa266a17335f71bb0afa7fca1a1e
concurrent-ruby (1.3.5) sha256=813b3e37aca6df2a21a3b9f1d497f8cbab24a2b94cab325bffe65ee0f6cbebc6
connection_pool (2.5.3) sha256=cfd74a82b9b094d1ce30c4f1a346da23ee19dc8a062a16a85f58eab1ced4305b
crack (1.0.0) sha256=c83aefdb428cdc7b66c7f287e488c796f055c0839e6e545fec2c7047743c4a49
crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d
date (3.4.1) sha256=bf268e14ef7158009bfeaec40b5fa3c7271906e88b196d958a89d4b408abe64f
diff-lcs (1.5.1) sha256=273223dfb40685548436d32b4733aa67351769c7dea621da7d9dd4813e63ddfe
diff-lcs (1.6.1) sha256=12a5a83f3e37a8e2f4427268e305914d5f1879f22b4e73bb1a09f76a3dd86cd4
docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
drb (2.2.1) sha256=e9d472bf785f558b96b25358bae115646da0dbfd45107ad858b0bc0d935cb340
elasticsearch (7.17.11) sha256=ed080f085d939f21d07f424ebcea95326e4bdb5f770a8f33aac699374f2ffc86
elasticsearch-api (7.17.11) sha256=fed8f7b64493c97cf3984a33396a798204b54b8e1b01c5b6c099fa3fd4209107
elasticsearch-transport (7.17.11) sha256=d18057d5295e4c39fe80084ede9e00e9c0e0d74580348985f8677b2fb7f70f03
erubi (1.13.0) sha256=fca61b47daefd865d0fb50d168634f27ad40181867445badf6427c459c33cd62
faraday (2.12.2) sha256=157339c25c7b8bcb739f5cf1207cb0cefe8fa1c65027266bcbc34c90c84b9ad6
elastic-transport (8.4.0) sha256=b5e9e406c98a867dc73a9c7c2f29faf619de3ade94aa1b7f5a8dcf45ffc0e577
elasticsearch (9.0.2) sha256=96c85216518391893ca55403d6510d3182a7a38a333e5fbf111bb461d36edce8
elasticsearch-api (9.0.2) sha256=c1ab0da25f61efb6e504b3b6223cdf25b4aa0254d01e85fbf965dac300260af0
erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
faraday (2.13.1) sha256=cc531eb5467e7d74d4517630fa96f1a7003647cbf20a9a3e067d098941217b75
faraday-net_http (3.4.0) sha256=a1f1e4cd6a2cf21599c8221595e27582d9936819977bbd4089a601f24c64e54a
faraday_middleware-aws-sigv4 (1.0.1) sha256=a001ea4f687ca1c60bad8f2a627196905ce3dbf285e461dc153240e92eaabe8f
gitlab-active-context (0.0.1)
gitlab-styles (13.0.2) sha256=e662b9334643763b55a861f9e26091096547f98179bd89b0fa8d6c6fb8cec861
gitlab-styles (13.1.0) sha256=46c7c5729616355868b7b40a4ffcd052b36346076042abe8cafaee1688cbf2c1
hashdiff (1.1.2) sha256=2c30eeded6ed3dce8401d2b5b99e6963fe5f14ed85e60dd9e33c545a44b71a77
i18n (1.14.6) sha256=dc229a74f5d181f09942dd60ab5d6e667f7392c4ee826f35096db36d1fe3614c
i18n (1.14.7) sha256=ceba573f8138ff2c0915427f1fc5bdf4aa3ab8ae88c8ce255eb3ecf0a11a5d0f
io-console (0.8.0) sha256=cd6a9facbc69871d69b2cb8b926fc6ea7ef06f06e505e81a64f14a470fddefa2
irb (1.14.1) sha256=5975003b58d36efaf492380baa982ceedf5aed36967a4d5b40996bc5c66e80f8
irb (1.15.2) sha256=222f32952e278da34b58ffe45e8634bf4afc2dc7aa9da23fed67e581aa50fdba
jmespath (1.6.2) sha256=238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1
json (2.9.0) sha256=7c0ebdad9d030e6d572cd6f1b4e93d1d81b32c4c7dff611c1ef7825110fc6bcf
language_server-protocol (3.17.0.3) sha256=3d5c58c02f44a20d972957a9febe386d7e7468ab3900ce6bd2b563dd910c6b3f
logger (1.6.2) sha256=9dfe7ced6d81c3a26b8ab0695b43d5ac0dceb87cc7079570136976fc2fa93261
loofah (2.23.1) sha256=d0a07422cb3b69272e124afa914ef6d517e30d5496b7f1c1fc5b95481f13f75e
json (2.11.3) sha256=9a10f658a2de67c0eb837eb795dd48132ce797c403e52b5ebef87dcdc7f9ccc1
language_server-protocol (3.17.0.4) sha256=c484626478664fd13482d8180947c50a8590484b1258b99b7aedb3b69df89669
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
loofah (2.24.0) sha256=61e6a710883abb8210887f3dc868cf3ed66594c509d9ff6987621efa6651ee1e
mini_portile2 (2.8.8) sha256=8e47136cdac04ce81750bb6c09733b37895bf06962554e4b4056d78168d70a75
minitest (5.25.4) sha256=9cf2cae25ac4dfc90c988ebc3b917f53c054978b673273da1bd20bcb0778f947
minitest (5.25.5) sha256=391b6c6cb43a4802bfb7c93af1ebe2ac66a210293f4a3fb7db36f2fc7dc2c756
multi_json (1.15.0) sha256=1fd04138b6e4a90017e8d1b804c039031399866ff3fbabb7822aea367c78615d
net-http (0.6.0) sha256=9621b20c137898af9d890556848c93603716cab516dc2c89b01a38b894e259fb
nokogiri (1.17.1) sha256=910fe0f194db99677f7ddb21b19a1d071ceffc4a0e39d44c08736d9b1e558cfc
nokogiri (1.17.1-aarch64-linux) sha256=b3fce09bddfab61ae587f83af97bf0d0834352bcd23ad99831f2993d978627bd
nokogiri (1.17.1-arm-linux) sha256=b8e9909ff893b257a58066e6bfc39456be18b87f4af1e22ca18d7c0dbc9925e5
nokogiri (1.17.1-arm64-darwin) sha256=0e79badf832783e81439c3211562ed904a5c8eaaa0038c8fdfdb3778e873f3d0
nokogiri (1.17.1-x86-linux) sha256=d09565316ffc8f8bb522bd6d1b460dec2a57d23d6e479c2d0d49d9ccbb11076c
nokogiri (1.17.1-x86_64-darwin) sha256=94bcacacd123379229a8ece0d31c38af36d0ef6f86f399d5813be5ca0f566c88
nokogiri (1.17.1-x86_64-linux) sha256=2234250605b03433747e8d21de947b38b79f33a4280930e58bec179fd95d415d
nokogiri (1.18.8) sha256=8c7464875d9ca7f71080c24c0db7bcaa3940e8be3c6fc4bcebccf8b9a0016365
nokogiri (1.18.8-aarch64-linux-gnu) sha256=36badd2eb281fca6214a5188e24a34399b15d89730639a068d12931e2adc210e
nokogiri (1.18.8-arm-linux-gnu) sha256=17de01ca3adf9f8e187883ed73c672344d3dbb3c260f88ffa1008e8dc255a28e
nokogiri (1.18.8-arm64-darwin) sha256=483b5b9fb33653f6f05cbe00d09ea315f268f0e707cfc809aa39b62993008212
nokogiri (1.18.8-x86_64-darwin) sha256=024cdfe7d9ae3466bba6c06f348fb2a8395d9426b66a3c82f1961b907945cc0c
nokogiri (1.18.8-x86_64-linux-gnu) sha256=4a747875db873d18a2985ee2c320a6070c4a414ad629da625fbc58d1a20e5ecc
opensearch-ruby (3.4.0) sha256=0a8621686bed3c59b4c23e08cbaef873685a3fe4568e9d2703155ca92b8ca05d
parallel (1.26.3) sha256=d86babb7a2b814be9f4b81587bf0b6ce2da7d45969fab24d8ae4bf2bb4d4c7ef
parser (3.3.6.0) sha256=25d4e67cc4f0f7cab9a2ae1f38e2005b6904d2ea13c34734511d0faad038bc3b
parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130
parser (3.3.8.0) sha256=2476364142b307fa5a1b1ece44f260728be23858a9c71078e956131a75453c45
pg (1.5.9) sha256=761efbdf73b66516f0c26fcbe6515dc7500c3f0aa1a1b853feae245433c64fdc
psych (5.2.1) sha256=f6c8441d21e9df3f9790586eaf80ea472d7c98d1e89c92e68e1b6a85fb6eab66
public_suffix (6.0.1) sha256=61d44e1cab5cbbbe5b31068481cf16976dd0dc1b6b07bd95617ef8c5e3e00c6f
pp (0.6.2) sha256=947ec3120c6f92195f8ee8aa25a7b2c5297bb106d83b41baa02983686577b6ff
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.4.0) sha256=dc0e3e00e93160213dc2a65519d9002a4a1e7b962db57d444cf1a71565bb703e
psych (5.2.4) sha256=f2d9810f7f383a6b0fbc705202851e1a55b236bcb8e168ab5dfa5741842ec7c5
public_suffix (6.0.2) sha256=bfa7cd5108066f8c9602e0d6d4114999a5df5839a63149d3e8b0f9c1d3558394
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rack (3.1.8) sha256=d3fbcbca43dc2b43c9c6d7dfbac01667ae58643c42cea10013d0da970218a1b1
rack-session (2.0.0) sha256=db04b2063e180369192a9046b4559af311990af38c6a93d4c600cee4eb6d4e81
rack-test (2.1.0) sha256=0c61fc61904049d691922ea4bb99e28004ed3f43aa5cfd495024cc345f125dfb
rack (3.1.14) sha256=84613c2a8df193bb6711d9c14ecc6d5a65a7cb4312379a65e793562608944b44
rack-session (2.1.1) sha256=0b6dc07dea7e4b583f58a48e8b806d4c9f1c6c9214ebc202ec94562cbea2e4e9
rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463
rackup (2.2.1) sha256=f737191fd5c5b348b7f0a4412a3b86383f88c43e13b8217b63d4c8d90b9e798d
rails-dom-testing (2.2.0) sha256=e515712e48df1f687a1d7c380fd7b07b8558faa26464474da64183a7426fa93b
rails-html-sanitizer (1.6.1) sha256=e3d2fb10339f03b802e39c7f6cac28c54fd404d3f65ae39c31cca9d150c5cbf0
railties (8.0.1) sha256=8f653c6b1b0721b553045bd0deda1f22074b9ddc2209526e6f7285fcf607ac51
rails-html-sanitizer (1.6.2) sha256=35fce2ca8242da8775c83b6ba9c1bcaad6751d9eb73c1abaa8403475ab89a560
railties (8.0.2) sha256=0d7c3f40c49ba74980f1bac1d4bb153a9331c5ee8a9631d89c7bf79db82e5cf9
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.2.1) sha256=46cb38dae65d7d74b6020a4ac9d48afed8eb8149c040eccf0523bec91907059d
rdoc (6.8.1) sha256=0128002d1bfc4892bdd780940841e4ca41275f63781fd832d11bc8ba4461462c
redis (5.3.0) sha256=6bf810c5ae889187f0c45f77db503310980310afa57cf1640d57f419ccda72b1
redis-client (0.23.1) sha256=da8c8d327e41ac0a5f5fa6916539dfc4675997a968791a5acb44df9c710e8cf5
regexp_parser (2.9.3) sha256=4b620657ed8349d82e1331a076415c79b9dd714a5546162ddd790ea9988f6379
reline (0.5.12) sha256=41ab36d3fd2aaa169e99f8b82a93b9585f51130529360e24388fcccc20a055a2
rexml (3.3.9) sha256=d71875b85299f341edf47d44df0212e7658cbdf35aeb69cefdb63f57af3137c9
rdoc (6.13.1) sha256=62a0dac99493c94e8eb7a3fb44e55aefcb4cecb119f7991f25bddc5ed8d472f7
redis (5.4.0) sha256=798900d869418a9fc3977f916578375b45c38247a556b61d58cba6bb02f7d06b
redis-client (0.24.0) sha256=ee65ee39cb2c38608b734566167fd912384f3c1241f59075e22858f23a085dbb
regexp_parser (2.10.0) sha256=cb6f0ddde88772cd64bff1dbbf68df66d376043fe2e66a9ef77fcb1b0c548c61
reline (0.6.1) sha256=1afcc9d7cb1029cdbe780d72f2f09251ce46d3780050f3ec39c3ccc6b60675fb
rexml (3.4.1) sha256=c74527a9a0a04b4ec31dbe0dc4ed6004b960af943d8db42e539edde3a871abca
rspec (3.13.0) sha256=d490914ac1d5a5a64a0e1400c1d54ddd2a501324d703b8cfe83f458337bab993
rspec-core (3.13.2) sha256=94fbda6e4738e478f1c7532b7cc241272fcdc8b9eac03a97338b1122e4573300
rspec-expectations (3.13.3) sha256=0e6b5af59b900147698ea0ff80456c4f2e69cac4394fbd392fbd1ca561f66c58
rspec-mocks (3.13.2) sha256=2327335def0e1665325a9b617e3af9ae20272741d80ac550336309a7c59abdef
rspec-rails (7.1.0) sha256=94585b69c4086ca79afae5cc8d2c5e314f6ad32a88c927f9c065b99596e3ee47
rspec-support (3.13.2) sha256=cea3a2463fd9b84b9dcc9685efd80ea701aa8f7b3decb3b3ce795ed67737dbec
rubocop (1.68.0) sha256=07df508504d81e97174e8d21030f25d52c1be7ee8615939db43f3b377ea6c12b
rubocop-ast (1.36.2) sha256=566405b7f983eb9aa3b91d28aca6bc6566e356a97f59e89851dd910aef1dd1ca
rspec-core (3.13.3) sha256=25136507f4f9cf2e8977a2851e64e438b4331646054e345998714108745cdfe4
rspec-expectations (3.13.4) sha256=4e43459765dfee900b25aa1361e106ab0799895ede65fc57872069feb559ecd8
rspec-mocks (3.13.4) sha256=6bb158a0719c53d522104ed34c0777b884b2c9dc775ce64eaa10207df02ab993
rspec-rails (8.0.0) sha256=977a508cd94d152db2068c6585470db5d0cd47eef56d5410b9531034fb9d97bf
rspec-support (3.13.3) sha256=2a61e393f6e18b7228726e0c6869c5d5a1419d37206116c4d917d145276b3f43
rubocop (1.71.1) sha256=d3dfd1e484a3a619dcf76c6a4fba694cd833921e4fd254d111845c26bcecfcfa
rubocop-ast (1.44.1) sha256=e3cc04203b2ef04f6d6cf5f85fe6d643f442b18cc3b23e3ada0ce5b6521b8e92
rubocop-capybara (2.21.0) sha256=5d264efdd8b6c7081a3d4889decf1451a1cfaaec204d81534e236bc825b280ab
rubocop-factory_bot (2.26.1) sha256=8de13cd4edcee5ca800f255188167ecef8dbfc3d1fae9f15734e9d2e755392aa
rubocop-graphql (1.5.4) sha256=2d888d40b08577daf1e74ca4623be1e3058c1a93543d5a7220818f561a254192
@ -375,19 +385,20 @@ CHECKSUMS
rubocop-rspec (3.0.5) sha256=c6a8e29fb1b00d227c32df159e92f5ebb9e0ff734e52955fb13aff5c74977e0f
rubocop-rspec_rails (2.30.0) sha256=888112e83f9d7ef7ad2397e9d69a0b9614a4bae24f072c399804a180f80c4c46
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
securerandom (0.4.0) sha256=37a844aa4fe4dac8e47c5bc35f91531d4dc636ccee54a1ba1629087dda0a53a8
securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
simplecov-html (0.13.1) sha256=5dab0b7ee612e60e9887ad57693832fdf4695b4c0c859eaea5f95c18791ef10b
simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
stringio (3.1.2) sha256=204f1828f85cdb39d57cac4abc6dc44b04505a223f131587f2e20ae3729ba131
stringio (3.1.7) sha256=5b78b7cb242a315fb4fca61a8255d62ec438f58da2b90be66048546ade4507fa
thor (1.3.2) sha256=eef0293b9e24158ccad7ab383ae83534b7ad4ed99c09f96f1a6b036550abbeda
timeout (0.4.3) sha256=9509f079b2b55fe4236d79633bd75e34c1c1e7e3fb4b56cb5fda61f80a0fe30e
tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a
uri (1.0.2) sha256=b303504ceb7e5905771fa7fa14b649652fa949df18b5880d69cfb12494791e27
unicode-display_width (3.1.4) sha256=8caf2af1c0f2f07ec89ef9e18c7d88c2790e217c482bfc78aaa65eadd5415ac1
unicode-emoji (4.0.4) sha256=2c2c4ef7f353e5809497126285a50b23056cc6e61b64433764a35eff6c36532a
uri (1.0.3) sha256=e9f2244608eea2f7bc357d954c65c910ce0399ca5e18a7a29207ac22d8767011
useragent (0.16.11) sha256=700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844
webmock (3.24.0) sha256=be01357f6fc773606337ca79f3ba332b7d52cbe5c27587671abc0572dbec7122
zeitwerk (2.7.1) sha256=0945986050e4907140895378e74df1fe882a2271ed087cc6c6d6b00d415a2756
webmock (3.25.1) sha256=ab9d5d9353bcbe6322c83e1c60a7103988efc7b67cd72ffb9012629c3d396323
zeitwerk (2.7.2) sha256=842e067cb11eb923d747249badfb5fcdc9652d6f20a1f06453317920fdcd4673
BUNDLED WITH
2.6.5

View File

@ -27860,90 +27860,6 @@ msgstr ""
msgid "Get started!"
msgstr ""
msgid "GetStarted|Add code owners"
msgstr ""
msgid "GetStarted|Add code to a repository"
msgstr ""
msgid "GetStarted|Analyze your application for vulnerabilities with DAST"
msgstr ""
msgid "GetStarted|Assign a GitLab Duo seat to your colleagues"
msgstr ""
msgid "GetStarted|Complete these tasks first so you can enjoy GitLab's features to their fullest."
msgstr ""
msgid "GetStarted|Configure a project"
msgstr ""
msgid "GetStarted|Create a repository"
msgstr ""
msgid "GetStarted|Create a workflow, and learn how GitLab features work together."
msgstr ""
msgid "GetStarted|Create an issue"
msgstr ""
msgid "GetStarted|Enable require merge approvals"
msgstr ""
msgid "GetStarted|Follow these steps to get familiar with the GitLab workflow."
msgstr ""
msgid "GetStarted|Get started"
msgstr ""
msgid "GetStarted|GitLab University"
msgstr ""
msgid "GetStarted|Included in trial"
msgstr ""
msgid "GetStarted|Included in trial. Use GitLab to deploy your application, monitor its health, and keep it secure."
msgstr ""
msgid "GetStarted|Invite your colleagues"
msgstr ""
msgid "GetStarted|Plan and execute work together"
msgstr ""
msgid "GetStarted|Quick start"
msgstr ""
msgid "GetStarted|Scan dependencies for licenses"
msgstr ""
msgid "GetStarted|Scan dependencies for vulnerabilities"
msgstr ""
msgid "GetStarted|Secure your deployment"
msgstr ""
msgid "GetStarted|Set up your code"
msgstr ""
msgid "GetStarted|Set up your first project's CI/CD"
msgstr ""
msgid "GetStarted|Start a free trial of GitLab Ultimate"
msgstr ""
msgid "GetStarted|Submit a merge request (MR)"
msgstr ""
msgid "GetStarted|Use the Web IDE or upload code using your preferred method."
msgstr ""
msgid "GetStarted|You don't have sufficient access to perform this action"
msgstr ""
msgid "GetStarted|You don't have sufficient access to perform this action: "
msgstr ""
msgid "GiB"
msgstr ""
@ -35866,21 +35782,33 @@ msgstr ""
msgid "LearnGitLab|Add code owners"
msgstr ""
msgid "LearnGitLab|Add code to a repository"
msgstr ""
msgid "LearnGitLab|Analyze your application for vulnerabilities with DAST"
msgstr ""
msgid "LearnGitLab|Assign a GitLab Duo seat to your colleagues"
msgstr ""
msgid "LearnGitLab|Complete these tasks first so you can enjoy GitLab's features to their fullest."
msgstr ""
msgid "LearnGitLab|Complete these tasks first so you can enjoy GitLab's features to their fullest:"
msgstr ""
msgid "LearnGitLab|Configure a project"
msgstr ""
msgid "LearnGitLab|Configure your project"
msgstr ""
msgid "LearnGitLab|Create a repository"
msgstr ""
msgid "LearnGitLab|Create a workflow, and learn how GitLab features work together."
msgstr ""
msgid "LearnGitLab|Create a workflow, and learn how GitLab features work together:"
msgstr ""
@ -35902,9 +35830,18 @@ msgstr ""
msgid "LearnGitLab|Get started"
msgstr ""
msgid "LearnGitLab|GitLab University"
msgstr ""
msgid "LearnGitLab|GitLab works best as a team. Invite your colleague to enjoy all features."
msgstr ""
msgid "LearnGitLab|Included in trial"
msgstr ""
msgid "LearnGitLab|Included in trial. Use GitLab to deploy your application, monitor its health, and keep it secure."
msgstr ""
msgid "LearnGitLab|Invite your colleagues"
msgstr ""
@ -35920,6 +35857,9 @@ msgstr ""
msgid "LearnGitLab|Prevent unexpected changes to important assets by assigning ownership of files and paths."
msgstr ""
msgid "LearnGitLab|Quick start"
msgstr ""
msgid "LearnGitLab|Review and edit proposed changes to source code."
msgstr ""
@ -35962,12 +35902,21 @@ msgstr ""
msgid "LearnGitLab|Use GitLab to deploy your application, monitor its health, and keep it secure:"
msgstr ""
msgid "LearnGitLab|Use the Web IDE or upload code using your preferred method."
msgstr ""
msgid "LearnGitLab|Use the built-in editor, WebIDE, or upload code using your preferred method."
msgstr ""
msgid "LearnGitLab|You completed all tasks!"
msgstr ""
msgid "LearnGitLab|You don't have sufficient access to perform this action"
msgstr ""
msgid "LearnGitLab|You don't have sufficient access to perform this action: "
msgstr ""
msgid "LearnGitLab|Your team is growing! You've successfully invited new team members to the %{projectName} project."
msgstr ""

View File

@ -196,30 +196,34 @@ RSpec.describe UserSettings::PersonalAccessTokensController, feature_category: :
expect(assigns(:scopes)).to eq(Gitlab::Auth.available_scopes_for(access_token_user))
end
context 'with feature flags virtual_registry_maven and dependency_proxy_read_write_scopes disabled' do
context 'with dependency proxy enabled' do
before do
stub_feature_flags(virtual_registry_maven: false, dependency_proxy_read_write_scopes: false)
stub_config(dependency_proxy: { enabled: true })
end
it 'includes the virtual registry scopes' do
get :index
expect(assigns(:scopes)).to include(
Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE,
Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE
)
end
end
context 'with virtual_registry_maven feature flag disabled and dependency proxy disabled' do
before do
stub_feature_flags(virtual_registry_maven: false)
stub_config(dependency_proxy: { enabled: false })
end
it 'does not include the virtual registry scopes' do
expect(assigns(:scopes)).not_to include(Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE)
expect(assigns(:scopes)).not_to include(Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE)
end
get :index
%i[virtual_registry_maven dependency_proxy_read_write_scopes].each do |feature_flag|
context "with feature flag #{feature_flag} enabled" do
before do
stub_feature_flags(feature_flag => true)
end
it 'includes the virtual registry scopes' do
expect(assigns(:scopes)).not_to include(::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE)
expect(assigns(:scopes)).not_to include(::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE)
end
end
expect(assigns(:scopes)).not_to include(
Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE,
Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE
)
end
end
end

View File

@ -137,7 +137,7 @@ RSpec.describe "Admin manages runners in admin runner list", :freeze_time, :js,
end
end
describe 'filter by paused' do
describe 'filter by paused', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/541224' do
before_all do
create(:ci_runner, :instance, description: 'runner-active')
create(:ci_runner, :instance, :paused, description: 'runner-paused')
@ -173,7 +173,7 @@ RSpec.describe "Admin manages runners in admin runner list", :freeze_time, :js,
end
end
describe 'filter by version prefix' do
describe 'filter by version prefix', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/541227' do
before_all do
runner_v15 = create(:ci_runner, :instance, description: 'runner-v15')
runner_v14 = create(:ci_runner, :instance, description: 'runner-v14')
@ -203,7 +203,7 @@ RSpec.describe "Admin manages runners in admin runner list", :freeze_time, :js,
end
end
describe 'filter by creator' do
describe 'filter by creator', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/541229' do
before_all do
create(:ci_runner, :instance, description: 'runner-creator-admin', creator: admin)
create(:ci_runner, :instance, description: 'runner-creator-user', creator: user)
@ -238,7 +238,7 @@ RSpec.describe "Admin manages runners in admin runner list", :freeze_time, :js,
end
end
describe 'filter by status' do
describe 'filter by status', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/541232' do
before_all do
freeze_time # Freeze time before `let_it_be` runs, so that runner statuses are frozen during execution
@ -320,7 +320,7 @@ RSpec.describe "Admin manages runners in admin runner list", :freeze_time, :js,
end
end
describe 'filter by type' do
describe 'filter by type', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/541237' do
before_all do
create(:ci_runner, :project, description: 'runner-project', projects: [project])
create(:ci_runner, :group, description: 'runner-group', groups: [group])
@ -422,7 +422,7 @@ RSpec.describe "Admin manages runners in admin runner list", :freeze_time, :js,
end
end
describe 'filter by tag' do
describe 'filter by tag', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/541243' do
let_it_be(:runner_1) { create(:ci_runner, :instance, description: 'runner-blue', tag_list: ['blue']) }
let_it_be(:runner_2) { create(:ci_runner, :instance, description: 'runner-2-blue', tag_list: ['blue']) }
let_it_be(:runner_3) { create(:ci_runner, :instance, description: 'runner-red', tag_list: ['red']) }

View File

@ -0,0 +1,134 @@
# frozen_string_literal: true
require "spec_helper"
RSpec.describe "User sorts work items", :js, feature_category: :team_planning do
include Features::SortingHelpers
include SortingHelper
include FilteredSearchHelpers
include IssueHelpers
let_it_be(:user) { create(:user) }
let_it_be(:user2) { create(:user) }
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project_empty_repo, :public, group: group) }
let_it_be_with_reload(:issue) { create(:issue, title: 'issue', created_at: Time.zone.now, project: project) }
let_it_be_with_reload(:task) do
create(:work_item, :task, title: 'task', created_at: Time.zone.now - 60, project: project)
end
let_it_be_with_reload(:incident) do
create(:incident, title: 'incident', created_at: Time.zone.now - 120, project: project)
end
before_all do
project.add_owner(user)
project.add_developer(user2)
end
before do
sign_in(user)
end
it 'sorts by newest' do
visit project_work_items_path(project)
expect(first_issue).to include('issue')
expect(last_issue).to include('incident')
end
it 'sorts by most recently updated' do
task.updated_at = Time.zone.now
task.save!
visit project_work_items_path(project)
pajamas_sort_by 'Updated date', from: 'Created date'
expect(first_issue).to include('task')
end
describe 'sorting by dates' do
before do
task.update!(due_date: 1.day.from_now)
issue.update!(due_date: 6.days.from_now)
incident.update!(start_date: 8.days.from_now)
end
it 'sorts by start date' do
visit project_work_items_path(project)
pajamas_sort_by 'Start date', from: 'Created date'
expect(first_issue).to include('incident')
end
it 'sorts by due date' do
visit project_work_items_path(project)
pajamas_sort_by 'Due date', from: 'Created date'
expect(first_issue).to include('issue')
end
it 'sorts by due date reverse order' do
visit project_work_items_path(project)
pajamas_sort_by 'Due date', from: 'Created date'
click_button _('Sort direction: Descending')
expect(first_issue).to include('task')
end
it 'sorts by due date by excluding nil due dates' do
task.update!(due_date: nil)
visit project_work_items_path(project)
pajamas_sort_by 'Due date', from: 'Created date'
expect(first_issue).to include('issue')
end
end
describe 'sorting by title' do
it 'sorts by ascending' do
visit project_work_items_path(project)
pajamas_sort_by 'Title', from: 'Created date'
click_button _('Sort direction: Descending')
expect(first_issue).to include('incident')
end
it 'sorts by descending' do
visit project_work_items_path(project)
pajamas_sort_by 'Title', from: 'Created date'
expect(first_issue).to include('task')
end
end
describe 'combine filter and sort', :js do
before do
issue.assignees << user2
issue.save!
task.assignees << user2
task.save!
end
it 'sorts with a filter applied' do
visit project_work_items_path(project)
select_tokens 'Assignee', '=', user2.username, submit: true
pajamas_sort_by 'Title', from: 'Created date'
expect(first_issue).to include('task')
expect(last_issue).to include('issue')
expect(page).not_to have_content('incident')
end
end
end

View File

@ -38,7 +38,7 @@ describe('Settings section', () => {
mountComponent();
expect(findHeading().text()).toBe('Heading');
expect(findHeading().classes()).toEqual(['gl-heading-2', '!gl-mb-3']);
expect(findHeading().classes()).toEqual(['gl-heading-2', 'gl-mb-0']);
});
it('has a description slot', () => {
@ -52,7 +52,7 @@ describe('Settings section', () => {
expect(findDescription().text()).toBe('Description');
expect(findDescription().classes()).toEqual(
expect.arrayContaining(['gl-text-subtle', 'gl-mb-3']),
expect.arrayContaining(['gl-text-subtle', 'gl-mb-0']),
);
});

View File

@ -491,6 +491,7 @@ RSpec.describe Milestone, feature_category: :team_planning do
let_it_be(:previous_milestone) { create(:milestone, start_date: Time.current - 4.days, due_date: Time.current - 2.days) }
let_it_be(:milestone_start_after_current_date) { create(:milestone, start_date: Time.current + 2.days) }
let_it_be(:milestone_due_before_current_date) { create(:milestone, due_date: Time.current - 2.days) }
let_it_be(:milestone_ending_today) { create(:milestone, due_date: Time.current) }
end
describe '#started' do
@ -504,7 +505,8 @@ RSpec.describe Milestone, feature_category: :team_planning do
expect(milestone_ids).to contain_exactly(
milestone_no_start_date.id,
milestone_no_due_date.id,
current_milestone.id
current_milestone.id,
milestone_ending_today.id
)
end

View File

@ -64,37 +64,35 @@ RSpec.describe Admin::ImpersonationTokensController, :enable_admin_mode, feature
end
describe '#index', :with_current_organization do
it 'sets available scopes' do
get admin_user_impersonation_tokens_path(user_id: user.username)
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)
end
it 'sets available scopes' do
expect(assigns(:scopes)).to include(::Gitlab::Auth::API_SCOPE)
end
context 'with feature flags virtual_registry_maven and dependency_proxy_read_write_scopes disabled' do
before do
stub_feature_flags(virtual_registry_maven: false, dependency_proxy_read_write_scopes: false)
stub_config(dependency_proxy: { enabled: true })
it 'includes the virtual registry scopes' do
expect(assigns(:scopes)).to include(
::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE,
::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE
)
end
get admin_user_impersonation_tokens_path(user_id: user.username)
end
context 'with virtual_registry_maven feature flag disabled and dependency proxy disabled' do
let(:virtual_registry_maven_enabled) { false }
let(:dependency_proxy_enabled) { false }
it 'does not include the virtual registry scopes' do
expect(assigns(:scopes)).not_to include(Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE)
expect(assigns(:scopes)).not_to include(Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE)
end
%i[virtual_registry_maven dependency_proxy_read_write_scopes].each do |feature_flag|
context "with feature flag #{feature_flag} enabled" do
before do
stub_feature_flags(feature_flag => true)
end
it 'includes the virtual registry scopes' do
expect(assigns(:scopes)).not_to include(::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE)
expect(assigns(:scopes)).not_to include(::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE)
end
end
end
end
end
end

View File

@ -108,7 +108,13 @@ 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 })
get project_settings_access_tokens_path(resource)
end
@ -124,31 +130,11 @@ RSpec.describe Projects::Settings::AccessTokensController, feature_category: :sy
expect(assigns(:scopes)).to include(Gitlab::Auth::SELF_ROTATE_SCOPE)
end
context 'with feature flags virtual_registry_maven and dependency_proxy_read_write_scopes disabled' do
before do
stub_feature_flags(virtual_registry_maven: false, dependency_proxy_read_write_scopes: false)
stub_config(dependency_proxy: { enabled: true })
get project_settings_access_tokens_path(resource)
end
it 'does not include the virtual registry scopes' do
expect(assigns(:scopes)).not_to include(Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE)
expect(assigns(:scopes)).not_to include(Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE)
end
%i[virtual_registry_maven dependency_proxy_read_write_scopes].each do |feature_flag|
context "with feature flag #{feature_flag} enabled" do
before do
stub_feature_flags(feature_flag => true)
end
it 'includes the virtual registry scopes' do
expect(assigns(:scopes)).not_to include(::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE)
expect(assigns(:scopes)).not_to include(::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE)
end
end
end
it 'does not include the virtual registry scopes' do
expect(assigns(:scopes)).not_to include(
::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE,
::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE
)
end
end
end