Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
bf76d94f5a
commit
dc7a582810
2
Gemfile
2
Gemfile
|
@ -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
|
||||
|
|
|
@ -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"},
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"},
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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')"
|
||||
>
|
||||
|
|
|
@ -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] {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
@media (prefers-reduced-motion: no-preference) {
|
||||
@apply gl-transition-[width,left,right];
|
||||
}
|
||||
|
||||
@include translucent-glass-background;
|
||||
}
|
||||
|
||||
.top-app-header {
|
||||
|
|
|
@ -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. 🚨
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
afa6b970a7149b3c9b3fa6a0055348e4c0f8226e0be66fdae2456046332aef3b
|
|
@ -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**.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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/).
|
||||
|
|
|
@ -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
|
||||
|
||||

|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 >}}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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: ""
|
||||
```
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ""
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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']) }
|
||||
|
|
|
@ -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
|
|
@ -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']),
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue