From ce648d7bcd47cf5380e7c707c1f4f168f03d98c5 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 19 Nov 2024 03:31:17 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- GITLAB_KAS_VERSION | 2 +- .../javascripts/diffs/components/app.vue | 11 +- ...quality_and_security_reports.query.graphql | 79 +-------- .../reviewers/uncollapsed_reviewer_list.vue | 17 +- .../bootstrap_migration_components.scss | 2 +- app/assets/stylesheets/color_modes/_dark.scss | 2 - .../components/related_items_list.scss | 4 +- .../stylesheets/framework/breadcrumbs.scss | 2 +- app/assets/stylesheets/framework/buttons.scss | 2 +- app/assets/stylesheets/framework/common.scss | 4 +- .../stylesheets/framework/dropdowns.scss | 6 +- app/assets/stylesheets/framework/filters.scss | 6 - app/assets/stylesheets/framework/lists.scss | 2 +- .../framework/responsive_tables.scss | 2 +- .../secondary_navigation_elements.scss | 2 +- app/assets/stylesheets/framework/sidebar.scss | 10 +- .../stylesheets/framework/typography.scss | 4 +- .../stylesheets/framework/variables.scss | 1 - .../page_bundles/_ide_theme_overrides.scss | 4 +- .../stylesheets/page_bundles/ci_status.scss | 2 +- app/assets/stylesheets/page_bundles/ide.scss | 8 +- .../page_bundles/merge_request.scss | 2 +- .../stylesheets/page_bundles/project.scss | 4 +- .../stylesheets/page_bundles/settings.scss | 2 +- app/assets/stylesheets/pages/commits.scss | 5 +- app/assets/stylesheets/pages/events.scss | 6 +- app/assets/stylesheets/pages/groups.scss | 4 +- app/assets/stylesheets/pages/issues.scss | 14 -- app/assets/stylesheets/pages/pipelines.scss | 4 +- app/controllers/users_controller.rb | 6 +- app/services/merge_requests/merge_service.rb | 6 +- app/views/projects/forks/index.html.haml | 2 +- .../switch_deletion_branch_user.yml | 9 ++ config/initializers/view_component.rb | 5 + config/webpack.vendor.config.js | 6 + ...e_expression_to_compliance_requirements.rb | 22 +++ db/schema_migrations/20241014154409 | 1 + db/structure.sql | 3 + doc/api/graphql/reference/index.md | 5 +- doc/user/compliance/audit_event_types.md | 10 +- doc/user/project/merge_requests/index.md | 3 + gems/activerecord-gitlab/Gemfile.lock | 12 +- gems/click_house-client/Gemfile.lock | 2 +- gems/csv_builder/Gemfile.lock | 2 +- gems/gitlab-backup-cli/Gemfile.lock | 12 +- .../Gemfile.lock | 106 ++++++------- .../gitlab-database-lock_retries/Gemfile.lock | 8 +- gems/gitlab-housekeeper/Gemfile.lock | 12 +- gems/gitlab-http/Gemfile.lock | 28 ++-- gems/gitlab-rspec/Gemfile.lock | 30 ++-- gems/gitlab-rspec_flaky/Gemfile.lock | 18 ++- gems/gitlab-safe_request_store/Gemfile.lock | 2 +- gems/gitlab-schema-validation/Gemfile.lock | 2 +- gems/gitlab-secret_detection/Gemfile.lock | 8 +- gems/gitlab-utils/Gemfile.lock | 28 ++-- gems/ipynbdiff/Gemfile.lock | 2 +- gems/openbao_client/Gemfile.lock | 4 +- lib/gitlab/diff/merge_request_suggestion.rb | 150 ------------------ locale/gitlab.pot | 9 +- package.json | 8 +- scripts/lint-doc.sh | 1 - scripts/lint-docs-metadata.sh | 2 +- spec/features/users/overview_spec.rb | 28 ++-- spec/frontend/diffs/components/app_spec.js | 2 +- .../uncollapsed_reviewer_list_spec.js | 13 +- .../diff/merge_request_suggestion_spec.rb | 84 ---------- .../merge_requests/merge_service_spec.rb | 34 +++- yarn.lock | 96 ++--------- 68 files changed, 342 insertions(+), 652 deletions(-) create mode 100644 config/feature_flags/gitlab_com_derisk/switch_deletion_branch_user.yml create mode 100644 config/initializers/view_component.rb create mode 100644 db/migrate/20241014154409_add_columns_type_expression_to_compliance_requirements.rb create mode 100644 db/schema_migrations/20241014154409 delete mode 100644 lib/gitlab/diff/merge_request_suggestion.rb delete mode 100644 spec/lib/gitlab/diff/merge_request_suggestion_spec.rb diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION index 985656c72ed..226ab703945 100644 --- a/GITLAB_KAS_VERSION +++ b/GITLAB_KAS_VERSION @@ -1 +1 @@ -6911f203db7706af7cd4c8d0e6a6df99ce8eff0b +07871fe7a04606b2ab58f40cdf08e5eabce912dc diff --git a/app/assets/javascripts/diffs/components/app.vue b/app/assets/javascripts/diffs/components/app.vue index 71e1b6ce0e4..be2a2309383 100644 --- a/app/assets/javascripts/diffs/components/app.vue +++ b/app/assets/javascripts/diffs/components/app.vue @@ -25,6 +25,7 @@ import { __ } from '~/locale'; import notesEventHub from '~/notes/event_hub'; import { DynamicScroller, DynamicScrollerItem } from 'vendor/vue-virtual-scroller'; +import getMRCodequalityAndSecurityReports from 'ee_else_ce/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql'; import { sortFindingsByFile } from '../utils/sort_findings_by_file'; import { MR_TREE_SHOW_KEY, @@ -60,7 +61,6 @@ import NoChanges from './no_changes.vue'; import VirtualScrollerScrollSync from './virtual_scroller_scroll_sync'; import DiffsFileTree from './diffs_file_tree.vue'; import DiffAppControls from './diff_app_controls.vue'; -import getMRCodequalityAndSecurityReports from './graphql/get_mr_codequality_and_security_reports.query.graphql'; export const FINDINGS_STATUS_PARSED = 'PARSED'; export const FINDINGS_STATUS_ERROR = 'ERROR'; @@ -181,8 +181,13 @@ export default { return !this.codequalityReportAvailable && !this.sastReportAvailable; }, update(data) { - const { codequalityReportsComparer, sastReport } = data?.project?.mergeRequest || {}; - this.activeProject = data?.project?.mergeRequest?.project; + if (!data?.project?.mergeRequest) { + return; + } + + const { codequalityReportsComparer, sastReport } = data.project.mergeRequest; + this.activeProject = data.project.mergeRequest.project; + if ( (sastReport?.status === FINDINGS_STATUS_PARSED || !this.sastReportAvailable) && (!this.codequalityReportAvailable || diff --git a/app/assets/javascripts/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql b/app/assets/javascripts/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql index bd8f408f5a1..378ecc5b20d 100644 --- a/app/assets/javascripts/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql +++ b/app/assets/javascripts/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql @@ -1,82 +1,5 @@ -query getMRCodequalityAndSecurityReports($fullPath: ID!, $iid: String!) { +query getMRCodequalityAndSecurityReports($fullPath: ID!) { project(fullPath: $fullPath) { id - mergeRequest(iid: $iid) { - id - title - project { - id - nameWithNamespace - fullPath - } - hasSecurityReports - codequalityReportsComparer { - status - report { - status - newErrors { - description - fingerprint - severity - filePath - line - webUrl - engineName - } - resolvedErrors { - description - fingerprint - severity - filePath - line - webUrl - engineName - } - existingErrors { - description - fingerprint - severity - filePath - line - webUrl - engineName - } - summary { - errored - resolved - total - } - } - } - sastReport: findingReportsComparer(reportType: SAST) { - status - report { - added { - identifiers { - externalId - externalType - name - url - } - uuid - title - description - state - severity - foundByPipelineIid - location { - ... on VulnerabilityLocationSast { - file - startLine - endLine - vulnerableClass - vulnerableMethod - blobPath - } - } - } - } - } - } } } diff --git a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue index 1a64a290cb5..a5e6303ee43 100644 --- a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue +++ b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue @@ -11,26 +11,27 @@ const JUST_APPROVED = 'approved'; const REVIEW_STATE_ICONS = { APPROVED: { name: 'check-circle', - class: 'gl-text-green-500', + iconClass: 'gl-fill-icon-success', title: s__('MergeRequest|Reviewer approved changes'), }, REQUESTED_CHANGES: { name: 'error', - class: 'gl-text-red-500', + iconClass: 'gl-fill-icon-danger', title: s__('MergeRequest|Reviewer requested changes'), }, REVIEWED: { name: 'comment-lines', - class: 'gl-text-blue-500', + iconClass: 'gl-fill-icon-info', title: s__('MergeRequest|Reviewer commented'), }, UNREVIEWED: { name: 'dash-circle', + iconClass: 'gl-fill-icon-default', title: s__('MergeRequest|Awaiting review'), }, REVIEW_STARTED: { name: 'comment-dots', - class: 'gl-text-subtle', + iconClass: 'gl-fill-icon-default', title: s__('MergeRequest|Reviewer started review'), }, }; @@ -143,10 +144,7 @@ export default { if (user.mergeRequestInteraction.approved) { return { ...REVIEW_STATE_ICONS.APPROVED, - class: [ - REVIEW_STATE_ICONS.APPROVED.class, - this.loadingStates[user.id] === JUST_APPROVED && 'merge-request-approved-icon', - ], + class: [this.loadingStates[user.id] === JUST_APPROVED && 'merge-request-approved-icon'], }; } return ( @@ -205,13 +203,14 @@ export default { diff --git a/app/assets/stylesheets/bootstrap_migration_components.scss b/app/assets/stylesheets/bootstrap_migration_components.scss index 66c4faef085..7cf3a4cec7f 100644 --- a/app/assets/stylesheets/bootstrap_migration_components.scss +++ b/app/assets/stylesheets/bootstrap_migration_components.scss @@ -47,7 +47,7 @@ input[type='file'] { .text-secondary { // Override Bootstrap's light secondary color // We have to use !important because bootstrap has that set as well - color: $gl-text-color-secondary !important; + @apply gl-text-subtle #{!important}; } .bg-success, diff --git a/app/assets/stylesheets/color_modes/_dark.scss b/app/assets/stylesheets/color_modes/_dark.scss index 4caed0e7aed..00632f4832f 100644 --- a/app/assets/stylesheets/color_modes/_dark.scss +++ b/app/assets/stylesheets/color_modes/_dark.scss @@ -2,8 +2,6 @@ $border-color: #4f4f4f; -$gl-text-color-secondary: $gray-700; - $body-bg: $gray-10; $input-bg: $white; $input-focus-bg: $white; diff --git a/app/assets/stylesheets/components/related_items_list.scss b/app/assets/stylesheets/components/related_items_list.scss index 5a42763c12e..4641f54942e 100644 --- a/app/assets/stylesheets/components/related_items_list.scss +++ b/app/assets/stylesheets/components/related_items_list.scss @@ -79,7 +79,7 @@ $item-remove-button-space: 42px; .item-milestone .milestone-title, .item-due-date, .item-weight .board-card-info-text { - color: $gl-text-color-secondary; + @apply gl-text-subtle; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; @@ -89,7 +89,7 @@ $item-remove-button-space: 42px; .item-meta { flex-basis: 100%; font-size: $gl-font-size; - color: $gl-text-color-secondary; + @apply gl-text-subtle; .item-due-date, .board-card-weight { diff --git a/app/assets/stylesheets/framework/breadcrumbs.scss b/app/assets/stylesheets/framework/breadcrumbs.scss index 2ccaeb19326..81f22630699 100644 --- a/app/assets/stylesheets/framework/breadcrumbs.scss +++ b/app/assets/stylesheets/framework/breadcrumbs.scss @@ -2,7 +2,7 @@ flex: 1; min-width: 0; align-self: center; - color: $gl-text-color-secondary; + @apply gl-text-subtle; .avatar-tile { margin-right: 4px; diff --git a/app/assets/stylesheets/framework/buttons.scss b/app/assets/stylesheets/framework/buttons.scss index d21d192bc9e..13122848b1b 100644 --- a/app/assets/stylesheets/framework/buttons.scss +++ b/app/assets/stylesheets/framework/buttons.scss @@ -126,7 +126,7 @@ } .btn-transparent { - color: $gl-text-color-secondary; + color: var(--gl-button-default-primary-foreground-color-default); background-color: transparent; border: 0; diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index 75e4b4daaae..32899fb7541 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -71,7 +71,7 @@ /** COLORS **/ .text-secondary { - color: $gl-text-color-secondary; + @apply gl-text-subtle; } .text-warning, @@ -414,7 +414,7 @@ li.note { .gl-pseudo-placeholder:empty::before { content: attr(data-placeholder); font-weight: $gl-font-weight-normal; - color: $gl-text-color-secondary; + color: var(--gl-control-placeholder-color); cursor: text; } diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index bf184f51203..8feb4793cbf 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -337,7 +337,7 @@ .unclickable { cursor: not-allowed; padding: 5px 8px; - color: $gl-text-color-secondary; + @apply gl-text-subtle; } .badge.badge-pill + span:not(.badge):not(.badge-pill) { @@ -648,7 +648,7 @@ } .dropdown-info-note { - color: $gl-text-color-secondary; + @apply gl-text-subtle; text-align: center; } @@ -737,7 +737,7 @@ .dropdown-menu-inner-content { display: block; - color: $gl-text-color-secondary; + @apply gl-text-subtle; } .dropdown-toggle-text { diff --git a/app/assets/stylesheets/framework/filters.scss b/app/assets/stylesheets/framework/filters.scss index af7b040eb24..e35ade530aa 100644 --- a/app/assets/stylesheets/framework/filters.scss +++ b/app/assets/stylesheets/framework/filters.scss @@ -272,17 +272,11 @@ .filtered-search-history-dropdown-toggle-button.gl-button { border-radius: $gl-border-radius-base-inner 0 0 $gl-border-radius-base-inner; - color: $gl-text-color-secondary; margin: -1px 0 -1px -1px; box-shadow: inset 0 0 0 1px var(--gl-control-border-color-default); flex: 1; transition: color 0.1s linear; width: auto; - - &:hover, - &:focus { - @apply gl-text-default; - } } .filtered-search-history-dropdown { diff --git a/app/assets/stylesheets/framework/lists.scss b/app/assets/stylesheets/framework/lists.scss index eb0d2907348..f89c252d3f0 100644 --- a/app/assets/stylesheets/framework/lists.scss +++ b/app/assets/stylesheets/framework/lists.scss @@ -162,7 +162,7 @@ ul.content-list { } .badge-secondary { - color: $gl-text-color-secondary; + @apply gl-text-subtle; } } diff --git a/app/assets/stylesheets/framework/responsive_tables.scss b/app/assets/stylesheets/framework/responsive_tables.scss index f8b0c3bddba..80fad094acf 100644 --- a/app/assets/stylesheets/framework/responsive_tables.scss +++ b/app/assets/stylesheets/framework/responsive_tables.scss @@ -136,7 +136,7 @@ .table-mobile-header { @include flex-max-width(40); - color: $gl-text-color-secondary; + @apply gl-text-strong; text-align: left; @include media-breakpoint-up(md) { diff --git a/app/assets/stylesheets/framework/secondary_navigation_elements.scss b/app/assets/stylesheets/framework/secondary_navigation_elements.scss index a9f7bf5a0f1..0b04bb346ae 100644 --- a/app/assets/stylesheets/framework/secondary_navigation_elements.scss +++ b/app/assets/stylesheets/framework/secondary_navigation_elements.scss @@ -16,7 +16,7 @@ padding: $gl-spacing-scale-5 $gl-spacing-scale-4; font-size: $gl-font-size; line-height: $gl-line-height-16; - color: $gl-text-color-secondary; + @apply gl-text-subtle; border: 0; white-space: nowrap; diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss index 65eec861952..60799482f1d 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -254,7 +254,7 @@ padding: 0 $gl-padding; background-color: $gray-10; border: 0; - color: $gl-text-color-secondary; + @apply gl-text-subtle; display: flex; align-items: center; border-bottom: 1px solid $border-color; @@ -522,7 +522,7 @@ } .no-value { - color: $gl-text-color-secondary; + @apply gl-text-subtle; } .sidebar-collapsed-icon { @@ -623,10 +623,10 @@ width: 100%; height: $sidebar-toggle-height; text-align: center; - color: $gl-text-color-secondary; + @apply gl-text-subtle; > svg { - fill: $gl-text-color-secondary; + @apply gl-fill-icon-subtle; } &:hover:not(.disabled), @@ -812,7 +812,7 @@ svg { width: 16px; height: 16px; - fill: $gl-text-color-secondary; + @apply gl-fill-icon-subtle; } &:hover svg { diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss index a5a5620e261..ebfdc9a4bc0 100644 --- a/app/assets/stylesheets/framework/typography.scss +++ b/app/assets/stylesheets/framework/typography.scss @@ -685,7 +685,7 @@ @include email-code-block; &.gl-text-secondary { - color: $gl-text-color-secondary; + @apply gl-text-subtle; p, h1, @@ -694,7 +694,7 @@ h4, h5, table:not(.code) { - color: $gl-text-color-secondary; + @apply gl-text-subtle; } } diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index e49840af36b..0133cf1e596 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -80,7 +80,6 @@ $gl-font-size-large: 16px; $gl-font-weight-normal: 400; $gl-font-weight-bold: 600; $gl-text-color: $gray-900; -$gl-text-color-secondary: $gray-500 !default; $gl-text-color-tertiary: $gray-400; $link-color: var(--gl-text-color-link) !default; $link-hover-color: var(--gl-text-color-link) !default; diff --git a/app/assets/stylesheets/page_bundles/_ide_theme_overrides.scss b/app/assets/stylesheets/page_bundles/_ide_theme_overrides.scss index cea15bee248..7aa5a3183ee 100644 --- a/app/assets/stylesheets/page_bundles/_ide_theme_overrides.scss +++ b/app/assets/stylesheets/page_bundles/_ide_theme_overrides.scss @@ -48,7 +48,7 @@ .dropdown-menu-inner-content, .file-row .file-row-icon svg, .file-row:hover .file-row-icon svg { - color: var(--ide-text-color-secondary, $gl-text-color-secondary); + color: var(--ide-text-color-secondary, var(--gl-text-color-subtle)); } .nav-links li:not(.md-header-toolbar), @@ -78,7 +78,7 @@ } .text-secondary { - color: var(--ide-text-color-secondary, $gl-text-color-secondary) !important; + color: var(--ide-text-color-secondary, var(--gl-text-color-subtle)) !important; } input[type='search']::placeholder, diff --git a/app/assets/stylesheets/page_bundles/ci_status.scss b/app/assets/stylesheets/page_bundles/ci_status.scss index 86d9b13d5d2..ba74276ce0e 100644 --- a/app/assets/stylesheets/page_bundles/ci_status.scss +++ b/app/assets/stylesheets/page_bundles/ci_status.scss @@ -70,7 +70,7 @@ border-color: currentColor; &:not(span):hover { - background-color: rgba($gl-text-color-secondary, 0.07); + @apply gl-bg-alpha-dark-4; } } } diff --git a/app/assets/stylesheets/page_bundles/ide.scss b/app/assets/stylesheets/page_bundles/ide.scss index 30fa7f98ed4..76452d41d53 100644 --- a/app/assets/stylesheets/page_bundles/ide.scss +++ b/app/assets/stylesheets/page_bundles/ide.scss @@ -500,7 +500,7 @@ $ide-commit-header-height: 48px; height: 60px; width: 100%; padding: 0 $gl-padding; - color: var(--ide-text-color-secondary, $gl-text-color-secondary); + color: var(--ide-text-color-secondary, var(--gl-text-color-subtle)); background-color: transparent; border: 0; border-top: 1px solid transparent; @@ -744,7 +744,7 @@ $ide-commit-header-height: 48px; } .ide-review-sub-header { - color: var(--ide-text-color-secondary, $gl-text-color-secondary); + color: var(--ide-text-color-secondary, var(--gl-text-color-subtle)); } .ide-tree-changes { @@ -951,7 +951,7 @@ $ide-commit-header-height: 48px; .ide-merge-request-project-path { font-size: 12px; line-height: 16px; - color: var(--ide-text-color-secondary, $gl-text-color-secondary); + color: var(--ide-text-color-secondary, var(--gl-text-color-subtle)); } .ide-entry-dropdown-toggle { @@ -1033,7 +1033,7 @@ $ide-commit-header-height: 48px; } .folder-icon { - fill: var(--ide-text-color-secondary, $gl-text-color-secondary); + fill: var(--ide-text-color-secondary, var(--gl-icon-color-subtle)); } } diff --git a/app/assets/stylesheets/page_bundles/merge_request.scss b/app/assets/stylesheets/page_bundles/merge_request.scss index 8759547430b..43cfb95d1a0 100644 --- a/app/assets/stylesheets/page_bundles/merge_request.scss +++ b/app/assets/stylesheets/page_bundles/merge_request.scss @@ -152,7 +152,7 @@ $comparison-empty-state-height: 62px; .ci-table { th { background-color: var(--white, $white); - color: var(--gl-gray-700, $gl-text-color-secondary); + @apply gl-text-strong; } } } diff --git a/app/assets/stylesheets/page_bundles/project.scss b/app/assets/stylesheets/page_bundles/project.scss index d1b33365640..eb52624006c 100644 --- a/app/assets/stylesheets/page_bundles/project.scss +++ b/app/assets/stylesheets/page_bundles/project.scss @@ -110,7 +110,7 @@ background-color: transparent; font-size: $gl-font-size; line-height: $gl-btn-line-height; - color: var(--gray-500, $gl-text-color-secondary); + @apply gl-text-subtle; white-space: pre-wrap; } @@ -128,7 +128,7 @@ } .icon { - color: var(--gray-500, $gl-text-color-secondary); + @apply gl-fill-icon-subtle; } } diff --git a/app/assets/stylesheets/page_bundles/settings.scss b/app/assets/stylesheets/page_bundles/settings.scss index 7322be977c9..deeab6f0300 100644 --- a/app/assets/stylesheets/page_bundles/settings.scss +++ b/app/assets/stylesheets/page_bundles/settings.scss @@ -159,7 +159,7 @@ } .settings-list-icon { - color: var(--gray-500, $gl-text-color-secondary); + @apply gl-text-subtle; font-size: $default-icon-size; line-height: 42px; } diff --git a/app/assets/stylesheets/pages/commits.scss b/app/assets/stylesheets/pages/commits.scss index 251d73daf0d..6f342d17dbc 100644 --- a/app/assets/stylesheets/pages/commits.scss +++ b/app/assets/stylesheets/pages/commits.scss @@ -51,7 +51,7 @@ } .committer { - color: $gl-text-color-secondary; + @apply gl-text-subtle; .commit-author-link { @apply gl-text-default; @@ -117,7 +117,6 @@ .btn svg { top: auto; - fill: $gl-text-color-secondary; } :first-child { @@ -166,7 +165,7 @@ height: 14px; width: 14px; vertical-align: middle; - fill: $gl-text-color-secondary; + @apply gl-fill-icon-subtle; } } } diff --git a/app/assets/stylesheets/pages/events.scss b/app/assets/stylesheets/pages/events.scss index 27cf6abc1ae..66597d89d1b 100644 --- a/app/assets/stylesheets/pages/events.scss +++ b/app/assets/stylesheets/pages/events.scss @@ -6,7 +6,7 @@ font-size: $gl-font-size; padding: $gl-padding 0 $gl-padding $gl-spacing-scale-8; border-bottom: 1px solid $gray-50; - color: $gl-text-color-secondary; + @apply gl-text-subtle; position: relative; line-height: $gl-line-height-20; @@ -15,13 +15,13 @@ left: 0; svg { - fill: $gl-text-color-secondary; + @apply gl-fill-icon-subtle; } } .system-note-image-inline { svg { - fill: $gl-text-color-secondary; + @apply gl-fill-icon-subtle; } } diff --git a/app/assets/stylesheets/pages/groups.scss b/app/assets/stylesheets/pages/groups.scss index c8c621ab48d..6460870d519 100644 --- a/app/assets/stylesheets/pages/groups.scss +++ b/app/assets/stylesheets/pages/groups.scss @@ -18,7 +18,7 @@ .group-row { .description p { margin-bottom: 0; - color: $gl-text-color-secondary; + @apply gl-text-subtle; } } @@ -155,7 +155,7 @@ position: relative; min-width: 250px; text-align: right; - color: $gl-text-color-secondary; + @apply gl-text-subtle; } } } diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss index 39fec416bae..c24eb3a08c4 100644 --- a/app/assets/stylesheets/pages/issues.scss +++ b/app/assets/stylesheets/pages/issues.scss @@ -173,20 +173,6 @@ ul.related-merge-requests > li gl-emoji { display: block; } -.issue-sort-dropdown { - .btn-group { - width: 100%; - } - - .reverse-sort-btn { - color: $gl-text-color-secondary; - - &.disabled { - @apply gl-text-disabled; - } - } -} - @include media-breakpoint-up(sm) { .emoji-block .row { display: flex; diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss index 18bcdb1e506..399357e703e 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -36,7 +36,7 @@ vertical-align: middle; &:not(.text-warning) { - fill: $gl-text-color-secondary; + @apply gl-fill-icon-subtle; } } @@ -65,7 +65,7 @@ .duration, .finished-at { - color: $gl-text-color-secondary; + @apply gl-text-subtle; margin: 0; white-space: nowrap; } diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 820831e4e92..c4dfe903755 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -8,6 +8,8 @@ class UsersController < ApplicationController include ControllerWithCrossProjectAccessCheck include Gitlab::NoteableMetadata + FOLLOWERS_FOLLOWING_USERS_PER_PAGE = 21 + requires_cross_project_access show: false, groups: false, projects: false, @@ -130,13 +132,13 @@ class UsersController < ApplicationController def followers present_users do - @user_followers = user.followers.page(params[:page]) + @user_followers = user.followers.page(params[:page]).per(FOLLOWERS_FOLLOWING_USERS_PER_PAGE) end end def following present_users do - @user_following = user.followees.page(params[:page]) + @user_following = user.followees.page(params[:page]).per(FOLLOWERS_FOLLOWING_USERS_PER_PAGE) end end diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb index 2fa9e77e5ca..2a941b3b4a0 100644 --- a/app/services/merge_requests/merge_service.rb +++ b/app/services/merge_requests/merge_service.rb @@ -117,7 +117,11 @@ module MergeRequests end def branch_deletion_user - @merge_request.force_remove_source_branch? ? @merge_request.author : current_user + if Feature.enabled?(:switch_deletion_branch_user, project) + current_user + else + @merge_request.force_remove_source_branch? ? @merge_request.author : current_user + end end # Verify again that the source branch can be removed, since branch may be protected, diff --git a/app/views/projects/forks/index.html.haml b/app/views/projects/forks/index.html.haml index fd245ac5eb3..d5b89946130 100644 --- a/app/views/projects/forks/index.html.haml +++ b/app/views/projects/forks/index.html.haml @@ -14,7 +14,7 @@ = search_field_tag :filter_projects, nil, placeholder: _('Search forks'), class: 'projects-list-filter project-filter-form-field form-control input-short gl-grow', spellcheck: false, data: { 'filter-selector' => 'span.namespace-name' } - .dropdown.gl-inline.md:gl-ml-3.issue-sort-dropdown.gl-mt-3.md:gl-mt-0 + .dropdown.gl-inline.md:gl-ml-3.gl-mt-3.md:gl-mt-0 .btn-group{ role: 'group' } = gl_redirect_listbox_tag [created_at, activity], @sort, class: 'btn-group' = forks_sort_direction_button(sort_value) diff --git a/config/feature_flags/gitlab_com_derisk/switch_deletion_branch_user.yml b/config/feature_flags/gitlab_com_derisk/switch_deletion_branch_user.yml new file mode 100644 index 00000000000..71835be78fe --- /dev/null +++ b/config/feature_flags/gitlab_com_derisk/switch_deletion_branch_user.yml @@ -0,0 +1,9 @@ +--- +name: switch_deletion_branch_user +feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/497498 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/170202 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/500385 +milestone: '17.6' +group: group::code review +type: gitlab_com_derisk +default_enabled: false diff --git a/config/initializers/view_component.rb b/config/initializers/view_component.rb new file mode 100644 index 00000000000..ea852afa247 --- /dev/null +++ b/config/initializers/view_component.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require "view_component/deprecation" + +ViewComponent::Deprecation.silenced = Rails.env.production? || Rails.env.test? diff --git a/config/webpack.vendor.config.js b/config/webpack.vendor.config.js index 6ca54d924e8..3656e509379 100644 --- a/config/webpack.vendor.config.js +++ b/config/webpack.vendor.config.js @@ -64,6 +64,12 @@ module.exports = { rootDirectory: ROOT_PATH, exclude: new RegExp( [ + /* + @gitlab/noop is a tool to remove parts of our dependency tree. By it's + nature it might not be installed into a folder itself and that would + confuse this webpack plugin + */ + '@gitlab/noop', /** * This Webpack plugin complains when packages have the wrong versions. * It doesn't seem like it considers yarn resolutions, so we just do it diff --git a/db/migrate/20241014154409_add_columns_type_expression_to_compliance_requirements.rb b/db/migrate/20241014154409_add_columns_type_expression_to_compliance_requirements.rb new file mode 100644 index 00000000000..df24f9898be --- /dev/null +++ b/db/migrate/20241014154409_add_columns_type_expression_to_compliance_requirements.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class AddColumnsTypeExpressionToComplianceRequirements < Gitlab::Database::Migration[2.2] + milestone '17.6' + disable_ddl_transaction! + + def up + with_lock_retries do + add_column :compliance_requirements, :control_expression, :text, if_not_exists: true + add_column :compliance_requirements, :requirement_type, :smallint, null: false, default: 0, if_not_exists: true + end + + add_text_limit :compliance_requirements, :control_expression, 2048 + end + + def down + with_lock_retries do + remove_column :compliance_requirements, :control_expression, if_exists: true + remove_column :compliance_requirements, :requirement_type, if_exists: true + end + end +end diff --git a/db/schema_migrations/20241014154409 b/db/schema_migrations/20241014154409 new file mode 100644 index 00000000000..9800e13b104 --- /dev/null +++ b/db/schema_migrations/20241014154409 @@ -0,0 +1 @@ +73a7d5a9e65d193b1b299ceb4fbdb1b9c8473fbe9cbbf49418847f6123e67880 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 5e9f8c5f090..437225ef877 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -10259,7 +10259,10 @@ CREATE TABLE compliance_requirements ( namespace_id bigint NOT NULL, name text NOT NULL, description text NOT NULL, + control_expression text, + requirement_type smallint DEFAULT 0 NOT NULL, CONSTRAINT check_71d7c59197 CHECK ((char_length(description) <= 255)), + CONSTRAINT check_be5c3cfc16 CHECK ((char_length(control_expression) <= 2048)), CONSTRAINT check_f1fb6fdd81 CHECK ((char_length(name) <= 255)) ); diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 13f92c535c8..8e53e344910 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -20910,9 +20910,11 @@ Represents a ComplianceRequirement associated with a ComplianceFramework. | Name | Type | Description | | ---- | ---- | ----------- | +| `controlExpression` | [`String!`](#string) | Control expression of the compliance requirement. | | `description` | [`String!`](#string) | Description of the compliance requirement. | | `id` | [`ID!`](#id) | Compliance requirement ID. | | `name` | [`String!`](#string) | Name of the compliance requirement. | +| `requirementType` | [`String!`](#string) | Type of the compliance requirement. | ### `ComplianceStandardsAdherence` @@ -43130,7 +43132,7 @@ see the associated mutation type above. | Name | Type | Description | | ---- | ---- | ----------- | | `resourceId` | [`AiModelID!`](#aimodelid) | Global ID of the resource to mutate. | -| `suggestionMergeRequestId` | [`MergeRequestID`](#mergerequestid) | Global ID of the merge request where resolution will be provided as a suggestion. | +| `vulnerableMergeRequestId` | [`MergeRequestID`](#mergerequestid) | Global ID of the merge request which the merge request containing the vulnerability resolution will target. | ### `AiSummarizeCommentsInput` @@ -43269,6 +43271,7 @@ Attributes for defining a CI/CD variable. | Name | Type | Description | | ---- | ---- | ----------- | +| `controlExpression` | [`String`](#string) | Control expression for the compliance requirement. | | `description` | [`String`](#string) | New description for the compliance requirement. | | `name` | [`String`](#string) | New name for the compliance requirement. | diff --git a/doc/user/compliance/audit_event_types.md b/doc/user/compliance/audit_event_types.md index 3f8ff3c0629..41be7a31163 100644 --- a/doc/user/compliance/audit_event_types.md +++ b/doc/user/compliance/audit_event_types.md @@ -165,7 +165,7 @@ Audit event types belong to the following product categories. | [`merge_request_create`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/90911) | Triggered when a merge request is created | **{dotted-circle}** No | **{check-circle}** Yes | GitLab [15.9](https://gitlab.com/gitlab-org/gitlab/-/issues/367239) | Project | | [`merge_request_merged`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/164846) | When a merge request is merged | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [17.5](https://gitlab.com/gitlab-org/gitlab/-/issues/442279) | Project | | [`omniauth_login_failed`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123080) | Triggered when an OmniAuth login fails | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [16.3](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | -| [`password_reset_requested`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114548) | Triggered when a user requests a password reset using a registered email address | **{check-circle}** Yes | **{dotted-circle}** No | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | +| [`password_reset_requested`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114548) | Triggered when a user requests a password reset using a registered email address | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | | [`personal_access_token_created`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/108952) | Triggered when a user creates a personal access token | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.9](https://gitlab.com/gitlab-org/gitlab/-/issues/374113) | User | | [`personal_access_token_revoked`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/108952) | Triggered when a personal access token is revoked | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.9](https://gitlab.com/gitlab-org/gitlab/-/issues/374113) | User | | [`project_archived`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117528) | Triggered when a project is archived | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374105) | Project | @@ -582,15 +582,15 @@ Audit event types belong to the following product categories. | [`unban_user`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/116221) | Event triggered on user unban action | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/377620) | User | | [`unblock_user`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/115727) | Event triggered on user unblock action | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/377620) | User | | [`user_activate`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121708) | Event triggered on user activate action | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [16.1](https://gitlab.com/gitlab-org/gitlab/-/issues/13473) | User | -| [`user_approved`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user is approved for an instance | **{check-circle}** Yes | **{dotted-circle}** No | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | -| [`user_blocked`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user is blocked | **{check-circle}** Yes | **{dotted-circle}** No | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | +| [`user_approved`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user is approved for an instance | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | +| [`user_blocked`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user is blocked | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | | [`user_created`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user is created | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.10](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | | [`user_deactivate`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117776) | Event triggered on user deactivate action | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [16.0](https://gitlab.com/gitlab-org/gitlab/-/issues/13473) | User | -| [`user_destroyed`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user is scheduled for removal from the instance. Group and Project scopes were [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167021) in GitLab 17.5. | **{check-circle}** Yes | **{dotted-circle}** No | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User, Group, Project | +| [`user_destroyed`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user is scheduled for removal from the instance. Group and Project scopes were [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167021) in GitLab 17.5. | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User, Group, Project | | [`user_email_changed_and_user_signed_in`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106090) | audit when user emailed changed and user signed in | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.8](https://gitlab.com/gitlab-org/gitlab/-/issues/369331) | User | | [`user_impersonation`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/79340) | Triggered when an instance administrator starts or stops impersonating a user | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [14.8](https://gitlab.com/gitlab-org/gitlab/-/issues/300961) | User, Group | | [`user_password_updated`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106086) | audit when user password is updated | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.7](https://gitlab.com/gitlab-org/gitlab/-/issues/369330) | User | -| [`user_rejected`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user registration is rejected | **{check-circle}** Yes | **{dotted-circle}** No | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | +| [`user_rejected`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113784) | Event triggered when a user registration is rejected | **{check-circle}** Yes | **{check-circle}** Yes | GitLab [15.11](https://gitlab.com/gitlab-org/gitlab/-/issues/374107) | User | ### User profile diff --git a/doc/user/project/merge_requests/index.md b/doc/user/project/merge_requests/index.md index bd4edcf00ba..34f3bd1c199 100644 --- a/doc/user/project/merge_requests/index.md +++ b/doc/user/project/merge_requests/index.md @@ -209,6 +209,9 @@ You can delete the source branch for a merge request: An administrator can make this option the default in the project's settings. +The delete-branch action is performed by the user who sets auto-merge, or merges the merge request. +If the user lacks the correct role, such as in a forked project, the source branch deletion fails. + ### Update merge requests when target branch merges DETAILS: diff --git a/gems/activerecord-gitlab/Gemfile.lock b/gems/activerecord-gitlab/Gemfile.lock index 0cd3dfeb429..ad3767a301a 100644 --- a/gems/activerecord-gitlab/Gemfile.lock +++ b/gems/activerecord-gitlab/Gemfile.lock @@ -7,12 +7,12 @@ PATH GEM remote: https://rubygems.org/ specs: - activemodel (7.0.8.4) - activesupport (= 7.0.8.4) - activerecord (7.0.8.4) - activemodel (= 7.0.8.4) - activesupport (= 7.0.8.4) - activesupport (7.0.8.4) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/click_house-client/Gemfile.lock b/gems/click_house-client/Gemfile.lock index 57bc5ca1a53..d3a71b18de3 100644 --- a/gems/click_house-client/Gemfile.lock +++ b/gems/click_house-client/Gemfile.lock @@ -9,7 +9,7 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.0.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/csv_builder/Gemfile.lock b/gems/csv_builder/Gemfile.lock index 0224cb0c4ed..c9fc1e52ed4 100644 --- a/gems/csv_builder/Gemfile.lock +++ b/gems/csv_builder/Gemfile.lock @@ -6,7 +6,7 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.0.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/gitlab-backup-cli/Gemfile.lock b/gems/gitlab-backup-cli/Gemfile.lock index 5515619ce38..ab7b11b3567 100644 --- a/gems/gitlab-backup-cli/Gemfile.lock +++ b/gems/gitlab-backup-cli/Gemfile.lock @@ -31,12 +31,12 @@ PATH GEM remote: https://rubygems.org/ specs: - activemodel (7.0.8.4) - activesupport (= 7.0.8.4) - activerecord (7.0.8.4) - activemodel (= 7.0.8.4) - activesupport (= 7.0.8.4) - activesupport (7.0.8.4) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/gitlab-database-load_balancing/Gemfile.lock b/gems/gitlab-database-load_balancing/Gemfile.lock index 737f657340f..1dd21e78e2d 100644 --- a/gems/gitlab-database-load_balancing/Gemfile.lock +++ b/gems/gitlab-database-load_balancing/Gemfile.lock @@ -39,67 +39,67 @@ PATH GEM remote: https://rubygems.org/ specs: - actioncable (7.0.8.4) - actionpack (= 7.0.8.4) - activesupport (= 7.0.8.4) + actioncable (7.0.8.6) + actionpack (= 7.0.8.6) + activesupport (= 7.0.8.6) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8.4) - actionpack (= 7.0.8.4) - activejob (= 7.0.8.4) - activerecord (= 7.0.8.4) - activestorage (= 7.0.8.4) - activesupport (= 7.0.8.4) + actionmailbox (7.0.8.6) + actionpack (= 7.0.8.6) + activejob (= 7.0.8.6) + activerecord (= 7.0.8.6) + activestorage (= 7.0.8.6) + activesupport (= 7.0.8.6) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.8.4) - actionpack (= 7.0.8.4) - actionview (= 7.0.8.4) - activejob (= 7.0.8.4) - activesupport (= 7.0.8.4) + actionmailer (7.0.8.6) + actionpack (= 7.0.8.6) + actionview (= 7.0.8.6) + activejob (= 7.0.8.6) + activesupport (= 7.0.8.6) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.8.4) - actionview (= 7.0.8.4) - activesupport (= 7.0.8.4) + actionpack (7.0.8.6) + actionview (= 7.0.8.6) + activesupport (= 7.0.8.6) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8.4) - actionpack (= 7.0.8.4) - activerecord (= 7.0.8.4) - activestorage (= 7.0.8.4) - activesupport (= 7.0.8.4) + actiontext (7.0.8.6) + actionpack (= 7.0.8.6) + activerecord (= 7.0.8.6) + activestorage (= 7.0.8.6) + activesupport (= 7.0.8.6) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8.4) - activesupport (= 7.0.8.4) + actionview (7.0.8.6) + activesupport (= 7.0.8.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.8.4) - activesupport (= 7.0.8.4) + activejob (7.0.8.6) + activesupport (= 7.0.8.6) globalid (>= 0.3.6) - activemodel (7.0.8.4) - activesupport (= 7.0.8.4) - activerecord (7.0.8.4) - activemodel (= 7.0.8.4) - activesupport (= 7.0.8.4) - activestorage (7.0.8.4) - actionpack (= 7.0.8.4) - activejob (= 7.0.8.4) - activerecord (= 7.0.8.4) - activesupport (= 7.0.8.4) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) + activestorage (7.0.8.6) + actionpack (= 7.0.8.6) + activejob (= 7.0.8.6) + activerecord (= 7.0.8.6) + activesupport (= 7.0.8.6) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.8.4) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -172,20 +172,20 @@ GEM rack (2.2.10) rack-test (2.1.0) rack (>= 1.3) - rails (7.0.8.4) - actioncable (= 7.0.8.4) - actionmailbox (= 7.0.8.4) - actionmailer (= 7.0.8.4) - actionpack (= 7.0.8.4) - actiontext (= 7.0.8.4) - actionview (= 7.0.8.4) - activejob (= 7.0.8.4) - activemodel (= 7.0.8.4) - activerecord (= 7.0.8.4) - activestorage (= 7.0.8.4) - activesupport (= 7.0.8.4) + rails (7.0.8.6) + actioncable (= 7.0.8.6) + actionmailbox (= 7.0.8.6) + actionmailer (= 7.0.8.6) + actionpack (= 7.0.8.6) + actiontext (= 7.0.8.6) + actionview (= 7.0.8.6) + activejob (= 7.0.8.6) + activemodel (= 7.0.8.6) + activerecord (= 7.0.8.6) + activestorage (= 7.0.8.6) + activesupport (= 7.0.8.6) bundler (>= 1.15.0) - railties (= 7.0.8.4) + railties (= 7.0.8.6) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -193,9 +193,9 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.8.4) - actionpack (= 7.0.8.4) - activesupport (= 7.0.8.4) + railties (7.0.8.6) + actionpack (= 7.0.8.6) + activesupport (= 7.0.8.6) method_source rake (>= 12.2) thor (~> 1.0) diff --git a/gems/gitlab-database-lock_retries/Gemfile.lock b/gems/gitlab-database-lock_retries/Gemfile.lock index eccea123ca7..a054916953d 100644 --- a/gems/gitlab-database-lock_retries/Gemfile.lock +++ b/gems/gitlab-database-lock_retries/Gemfile.lock @@ -6,18 +6,22 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.1.2) + activesupport (7.1.5) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) ast (2.4.2) base64 (0.2.0) + benchmark (0.4.0) bigdecimal (3.1.4) concurrent-ruby (1.2.2) connection_pool (2.4.1) @@ -33,6 +37,7 @@ GEM i18n (1.14.1) concurrent-ruby (~> 1.0) json (2.6.3) + logger (1.6.1) minitest (5.20.0) mutex_m (0.2.0) parallel (1.23.0) @@ -89,6 +94,7 @@ GEM rubocop-factory_bot (~> 2.22) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) + securerandom (0.3.2) tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.5.0) diff --git a/gems/gitlab-housekeeper/Gemfile.lock b/gems/gitlab-housekeeper/Gemfile.lock index b97641dbe01..fbc2e81c3fb 100644 --- a/gems/gitlab-housekeeper/Gemfile.lock +++ b/gems/gitlab-housekeeper/Gemfile.lock @@ -18,12 +18,12 @@ PATH GEM remote: https://rubygems.org/ specs: - activemodel (7.0.8) - activesupport (= 7.0.8) - activerecord (7.0.8) - activemodel (= 7.0.8) - activesupport (= 7.0.8) - activesupport (7.0.8) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/gitlab-http/Gemfile.lock b/gems/gitlab-http/Gemfile.lock index afec8029633..c060b220965 100644 --- a/gems/gitlab-http/Gemfile.lock +++ b/gems/gitlab-http/Gemfile.lock @@ -29,25 +29,25 @@ PATH GEM remote: https://rubygems.org/ specs: - actionpack (7.0.7) - actionview (= 7.0.7) - activesupport (= 7.0.7) + actionpack (7.0.8.6) + actionview (= 7.0.8.6) + activesupport (= 7.0.8.6) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (7.0.7) - activesupport (= 7.0.7) + actionview (7.0.8.6) + activesupport (= 7.0.8.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activemodel (7.0.7) - activesupport (= 7.0.7) - activerecord (7.0.7) - activemodel (= 7.0.7) - activesupport (= 7.0.7) - activesupport (7.0.7) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -115,9 +115,9 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.7) - actionpack (= 7.0.7) - activesupport (= 7.0.7) + railties (7.0.8.6) + actionpack (= 7.0.8.6) + activesupport (= 7.0.8.6) method_source rake (>= 12.2) thor (~> 1.0) diff --git a/gems/gitlab-rspec/Gemfile.lock b/gems/gitlab-rspec/Gemfile.lock index 917665520c9..e04f1e1c351 100644 --- a/gems/gitlab-rspec/Gemfile.lock +++ b/gems/gitlab-rspec/Gemfile.lock @@ -9,25 +9,25 @@ PATH GEM remote: https://rubygems.org/ specs: - actionpack (7.0.4.3) - actionview (= 7.0.4.3) - activesupport (= 7.0.4.3) - rack (~> 2.0, >= 2.2.0) + actionpack (7.0.8.6) + actionview (= 7.0.8.6) + activesupport (= 7.0.8.6) + rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (7.0.4.3) - activesupport (= 7.0.4.3) + actionview (7.0.8.6) + activesupport (= 7.0.8.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activemodel (7.0.4.3) - activesupport (= 7.0.4.3) - activerecord (7.0.4.3) - activemodel (= 7.0.4.3) - activesupport (= 7.0.4.3) - activesupport (7.0.4.3) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -84,9 +84,9 @@ GEM nokogiri (>= 1.6) rails-html-sanitizer (1.5.0) loofah (~> 2.19, >= 2.19.1) - railties (7.0.4.3) - actionpack (= 7.0.4.3) - activesupport (= 7.0.4.3) + railties (7.0.8.6) + actionpack (= 7.0.8.6) + activesupport (= 7.0.8.6) method_source rake (>= 12.2) thor (~> 1.0) diff --git a/gems/gitlab-rspec_flaky/Gemfile.lock b/gems/gitlab-rspec_flaky/Gemfile.lock index bd7e7f1ee55..db14278a3c6 100644 --- a/gems/gitlab-rspec_flaky/Gemfile.lock +++ b/gems/gitlab-rspec_flaky/Gemfile.lock @@ -16,24 +16,28 @@ PATH GEM remote: https://rubygems.org/ specs: - activemodel (7.1.1) - activesupport (= 7.1.1) - activerecord (7.1.1) - activemodel (= 7.1.1) - activesupport (= 7.1.1) + activemodel (7.1.5) + activesupport (= 7.1.5) + activerecord (7.1.5) + activemodel (= 7.1.5) + activesupport (= 7.1.5) timeout (>= 0.4.0) - activesupport (7.1.1) + activesupport (7.1.5) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) ast (2.4.2) base64 (0.2.0) + benchmark (0.4.0) bigdecimal (3.1.4) binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) @@ -53,6 +57,7 @@ GEM i18n (1.14.1) concurrent-ruby (~> 1.0) json (2.6.3) + logger (1.6.1) minitest (5.18.1) mutex_m (0.2.0) parallel (1.23.0) @@ -123,6 +128,7 @@ GEM rubocop-factory_bot (~> 2.22) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) + securerandom (0.3.2) timeout (0.4.1) tzinfo (2.0.6) concurrent-ruby (~> 1.0) diff --git a/gems/gitlab-safe_request_store/Gemfile.lock b/gems/gitlab-safe_request_store/Gemfile.lock index 1e9d24962ea..f97638f772f 100644 --- a/gems/gitlab-safe_request_store/Gemfile.lock +++ b/gems/gitlab-safe_request_store/Gemfile.lock @@ -8,7 +8,7 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.0.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/gitlab-schema-validation/Gemfile.lock b/gems/gitlab-schema-validation/Gemfile.lock index c026c1ed473..81e83636a3c 100644 --- a/gems/gitlab-schema-validation/Gemfile.lock +++ b/gems/gitlab-schema-validation/Gemfile.lock @@ -8,7 +8,7 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.0.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/gitlab-secret_detection/Gemfile.lock b/gems/gitlab-secret_detection/Gemfile.lock index 60185bb932f..71f3da8daa5 100644 --- a/gems/gitlab-secret_detection/Gemfile.lock +++ b/gems/gitlab-secret_detection/Gemfile.lock @@ -9,18 +9,22 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.1.2) + activesupport (7.1.5) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) ast (2.4.2) base64 (0.2.0) + benchmark (0.4.0) benchmark-malloc (0.2.0) benchmark-perf (0.6.0) benchmark-trend (0.4.0) @@ -45,6 +49,7 @@ GEM concurrent-ruby (~> 1.0) json (2.6.3) language_server-protocol (3.17.0.3) + logger (1.6.1) mini_portile2 (2.8.5) minitest (5.20.0) mutex_m (0.2.0) @@ -124,6 +129,7 @@ GEM rubocop-factory_bot (~> 2.22) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) + securerandom (0.3.2) toml-rb (2.2.0) citrus (~> 3.0, > 3.0) tzinfo (2.0.6) diff --git a/gems/gitlab-utils/Gemfile.lock b/gems/gitlab-utils/Gemfile.lock index 6d6755c430c..7fcb117c07f 100644 --- a/gems/gitlab-utils/Gemfile.lock +++ b/gems/gitlab-utils/Gemfile.lock @@ -18,25 +18,25 @@ PATH GEM remote: https://rubygems.org/ specs: - actionpack (7.0.5) - actionview (= 7.0.5) - activesupport (= 7.0.5) + actionpack (7.0.8.6) + actionview (= 7.0.8.6) + activesupport (= 7.0.8.6) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (7.0.5) - activesupport (= 7.0.5) + actionview (7.0.8.6) + activesupport (= 7.0.8.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activemodel (7.0.5) - activesupport (= 7.0.5) - activerecord (7.0.5) - activemodel (= 7.0.5) - activesupport (= 7.0.5) - activesupport (7.0.5) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -98,9 +98,9 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.5) - actionpack (= 7.0.5) - activesupport (= 7.0.5) + railties (7.0.8.6) + actionpack (= 7.0.8.6) + activesupport (= 7.0.8.6) method_source rake (>= 12.2) thor (~> 1.0) diff --git a/gems/ipynbdiff/Gemfile.lock b/gems/ipynbdiff/Gemfile.lock index 28fe0ef299b..2270e9ca69f 100644 --- a/gems/ipynbdiff/Gemfile.lock +++ b/gems/ipynbdiff/Gemfile.lock @@ -8,7 +8,7 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.0.6) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) diff --git a/gems/openbao_client/Gemfile.lock b/gems/openbao_client/Gemfile.lock index cf4d60e6c35..e86712ecd5a 100644 --- a/gems/openbao_client/Gemfile.lock +++ b/gems/openbao_client/Gemfile.lock @@ -7,8 +7,9 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (7.2.1.1) + activesupport (7.2.2) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) @@ -20,6 +21,7 @@ GEM tzinfo (~> 2.0, >= 2.0.5) ast (2.4.2) base64 (0.2.0) + benchmark (0.4.0) bigdecimal (3.1.8) concurrent-ruby (1.3.4) connection_pool (2.4.1) diff --git a/lib/gitlab/diff/merge_request_suggestion.rb b/lib/gitlab/diff/merge_request_suggestion.rb deleted file mode 100644 index 8a90af27e81..00000000000 --- a/lib/gitlab/diff/merge_request_suggestion.rb +++ /dev/null @@ -1,150 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Diff - class MergeRequestSuggestion - include Gitlab::Utils::StrongMemoize - - TargetLineNotFound = Class.new(StandardError) - - SUGGESTION_HEADER = "```suggestion:" - SUGGESTION_FOOTER = "```" - - def initialize(diff, path, merge_request, prepend_text = nil) - @diff = diff - @path = path - @merge_request = merge_request - @project = merge_request.project - @prepend_text = prepend_text - end - - def note_attributes_hash - { - position: position, - note: suggestion, - type: "DiffNote", - noteable_type: MergeRequest, - noteable_id: @merge_request.id - } - end - - private - - def diff_lines - parsed_lines = Gitlab::Diff::Parser.new.parse(@diff.lines) - lines = [] - - parsed_lines.each_with_index do |line, index| - next if line.text.start_with?("diff --git") && index == 0 - next if line.type == 'match' - - lines << line - end - - lines - end - strong_memoize_attr :diff_lines - - def suggestion_start_line - diff_lines.first.old_pos - end - - def suggestion_last_removed_line - diff_lines.reverse.find(&:removed?).old_pos - end - strong_memoize_attr :suggestion_last_removed_line - - def suggestion_line_count - # We subtract the `suggestion_start_line` from `suggestion_last_removed_line` since we'll be - # creating the diff note on the merge_request diff line corresponding to the `suggestion_last_removed_line`. - # This is to ensure that the suggestion will only replace the lines that - # also exist in the supplied diff patch. - suggestion_last_removed_line - suggestion_start_line - end - - def suggestion_last_line - diff_lines.last.old_pos - end - - def suggestion_last_added_line - diff_lines.reverse.find(&:added?).new_pos - end - - def remainder_suggestion_line_count - # We subtract the position of last added line from the last line in - # supplied diff patch so we can get the rest of the lines that will need - # to be replaced by the suggestion. - # - # This is needed so we can include the lines that need to be replaced - # below the line the diff note with suggestion is being posted on. - suggestion_last_line - suggestion_last_added_line - end - - def suggestion_target_line - # We use the `suggestion_last_removed_line` as the line where we will create the note - # so the suggestion will show right on the last line that the suggestion will - # replace. This allows us to show the diff of the lines going to be replaced - # in the `Overview` tab. - # - # We get the `suggestion_last_removed_line` and find the corresponding line in - # the merge request diff of the specific file being suggested on. - # - # This is to ensure we can create the note on the correct line in the merge_request diff. - raise TargetLineNotFound if merge_request_diff_file.nil? - - merge_request_diff_file.diff_lines.find { |line| line.new_line == suggestion_last_removed_line } - end - strong_memoize_attr :suggestion_target_line - - def suggestion_meta - "-#{suggestion_line_count}+#{remainder_suggestion_line_count}" - end - - def suggestion - array = [] - array << @prepend_text if @prepend_text - array << [SUGGESTION_HEADER + suggestion_meta] - - diff_lines.each do |line| - array << line.text(prefix: false) if line.added? || line.unchanged? - end - - array << SUGGESTION_FOOTER - array.join("\n") - end - - def latest_merge_request_diff - @merge_request.latest_merge_request_diff - end - strong_memoize_attr :latest_merge_request_diff - - def position - raise TargetLineNotFound if suggestion_target_line.nil? - - { - position_type: "text", - old_path: @path, - new_path: @path, - base_sha: latest_merge_request_diff.base_commit_sha, - head_sha: latest_merge_request_diff.head_commit_sha, - start_sha: latest_merge_request_diff.start_commit_sha, - old_line: (suggestion_target_line&.old_pos unless suggestion_target_line.added?), - new_line: (suggestion_target_line&.new_pos unless suggestion_target_line.removed?), - ignore_whitespace_change: false - } - end - - def merge_request_diff_file - diff_options = { - paths: [@path], - expanded: true, - include_stats: false, - ignore_whitespace_change: false - } - - @merge_request.diffs(diff_options).diff_files.first - end - strong_memoize_attr :merge_request_diff_file - end - end -end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index ac3da43f22a..ceb752f6723 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -2364,9 +2364,6 @@ msgstr "" msgid "AI|To help improve the quality of the content, send your feedback to GitLab team members." msgstr "" -msgid "AI|Use GitLab Duo to generate a comment with a suggested solution." -msgstr "" - msgid "AI|Use GitLab Duo to generate a merge request with a suggested solution." msgstr "" @@ -55755,9 +55752,6 @@ msgstr "" msgid "The subject will be used as the title of the new issue, and the message will be the description. %{quickActionsLinkStart}Quick actions%{quickActionsLinkEnd} and styling with %{markdownLinkStart}Markdown%{markdownLinkEnd} are supported." msgstr "" -msgid "The suggested code changes were generated by GitLab Duo Vulnerability Resolution, an AI feature. **Use this feature with caution.** Before you apply the code changes, carefully review and test them, to ensure that they solve the vulnerability.%{line_break}The large language model that generated the suggested code changes was provided with the entire file that contains the vulnerable lines of code. It is not aware of any functionality outside of this context. Please see our [documentation](%{docs_link}) for more information about this feature and leave feedback in this [issue](%{feedback_issue_link})." -msgstr "" - msgid "The tag name can't be changed for an existing release." msgstr "" @@ -66892,6 +66886,9 @@ msgstr "" msgid "should be a valid container repository path with optional wildcard characters." msgstr "" +msgid "should be a valid json object." +msgstr "" + msgid "should be an array of %{object_name} objects" msgstr "" diff --git a/package.json b/package.json index 97257b4bbbf..d3b48d92908 100644 --- a/package.json +++ b/package.json @@ -257,6 +257,7 @@ "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.13.0", "@gitlab/eslint-plugin": "20.6.0", + "@gitlab/noop": "^1.0.0", "@gitlab/stylelint-config": "6.2.2", "@graphql-eslint/eslint-plugin": "3.20.1", "@originjs/vite-plugin-commonjs": "^1.0.3", @@ -327,13 +328,12 @@ "bootstrap-vue": "https://docs.gitlab.com/ee/development/fe_guide/dependencies.html#bootstrapvue" }, "resolutions": { + "**/glob/jackspeak": "npm:@gitlab/noop@1.0.0", "**/simple-update-notifier/semver": "^7.0.0", - "chokidar": "^3.5.3", "@types/node": "14.17.5", - "tough-cookie": "4.1.3", + "chokidar": "^3.5.3", "nwsapi": "2.2.2", - "wrap-ansi@^7.0.0": "7.0.0", - "wrap-ansi@^6.2.0": "6.2.0" + "tough-cookie": "4.1.3" }, "engines": { "node": ">=12.22.1", diff --git a/scripts/lint-doc.sh b/scripts/lint-doc.sh index 490fa2243ac..61a93fc76a7 100755 --- a/scripts/lint-doc.sh +++ b/scripts/lint-doc.sh @@ -30,7 +30,6 @@ if ! scripts/lint-docs-metadata.sh then # shellcheck disable=2059 printf "${COLOR_RED}ERROR: These documentation pages need front matter!${COLOR_RESET}" - printf " See https://docs.gitlab.com/ee/development/documentation/index.html#stage-and-group-metadata for how to add it.\n" >&2 ((ERRORCODE++)) fi diff --git a/scripts/lint-docs-metadata.sh b/scripts/lint-docs-metadata.sh index cbf571729f3..e446d48f384 100755 --- a/scripts/lint-docs-metadata.sh +++ b/scripts/lint-docs-metadata.sh @@ -66,7 +66,7 @@ fi if [ "$FAILING_FILES" -gt 0 ]; then # shellcheck disable=SC2059 - printf "\n${COLOR_RED}ERROR: Documentation metadata is missing in ${FAILING_FILES} of ${TOTAL_FILES} documentation files.${COLOR_RESET} For more information, see https://docs.gitlab.com/ee/development/documentation/#metadata.\n" >&2 + printf "\n${COLOR_RED}ERROR: Documentation metadata is missing in ${FAILING_FILES} of ${TOTAL_FILES} documentation files.${COLOR_RESET} For more information, see https://docs.gitlab.com/ee/development/documentation/metadata.html.\n" >&2 exit 1 else # shellcheck disable=SC2059 diff --git a/spec/features/users/overview_spec.rb b/spec/features/users/overview_spec.rb index 97dff26a0b9..b30a6ecc215 100644 --- a/spec/features/users/overview_spec.rb +++ b/spec/features/users/overview_spec.rb @@ -153,7 +153,7 @@ RSpec.describe 'Overview tab on a user profile', :js, feature_category: :user_pr end end - describe 'user has less then 20 followers' do + describe 'followers list without pagination' do let(:follower) { create(:user) } before do @@ -171,10 +171,12 @@ RSpec.describe 'Overview tab on a user profile', :js, feature_category: :user_pr end end - describe 'user has more then 20 followers' do - let(:other_users) { create_list(:user, 21) } + describe 'followers list with pagination' do + let(:other_users) { create_list(:user, 2) } before do + stub_const("UsersController::FOLLOWERS_FOLLOWING_USERS_PER_PAGE", 1) + other_users.each do |follower| follower.follow(user) end @@ -185,11 +187,7 @@ RSpec.describe 'Overview tab on a user profile', :js, feature_category: :user_pr it 'shows paginated followers' do page.within('#js-legacy-tabs-container') do - other_users.each_with_index do |follower, i| - break if i == 20 - - expect(page).to have_content(follower.name) - end + expect(page).to have_content(other_users.first.name) expect(page).to have_selector('.gl-card') expect(page).to have_selector('.gl-pagination') expect(page).to have_selector('.gl-pagination .js-pagination-page', count: 2) @@ -214,7 +212,7 @@ RSpec.describe 'Overview tab on a user profile', :js, feature_category: :user_pr end end - describe 'user is following less then 20 people' do + describe 'following list without pagination' do let(:followee) { create(:user) } before do @@ -232,10 +230,12 @@ RSpec.describe 'Overview tab on a user profile', :js, feature_category: :user_pr end end - describe 'user is following more then 20 people' do - let(:other_users) { create_list(:user, 21) } + describe 'following list with pagination' do + let(:other_users) { create_list(:user, 2) } before do + stub_const("UsersController::FOLLOWERS_FOLLOWING_USERS_PER_PAGE", 1) + other_users.each do |followee| user.follow(followee) end @@ -246,11 +246,7 @@ RSpec.describe 'Overview tab on a user profile', :js, feature_category: :user_pr it 'shows paginated following' do page.within('#js-legacy-tabs-container') do - other_users.each_with_index do |followee, i| - break if i == 20 - - expect(page).to have_content(followee.name) - end + expect(page).to have_content(other_users.first.name) expect(page).to have_selector('.gl-card') expect(page).to have_selector('.gl-pagination') expect(page).to have_selector('.gl-pagination .js-pagination-page', count: 2) diff --git a/spec/frontend/diffs/components/app_spec.js b/spec/frontend/diffs/components/app_spec.js index cfe7b73ff19..4d025aab13a 100644 --- a/spec/frontend/diffs/components/app_spec.js +++ b/spec/frontend/diffs/components/app_spec.js @@ -6,7 +6,7 @@ import VueApollo from 'vue-apollo'; // eslint-disable-next-line no-restricted-imports import Vuex from 'vuex'; import api from '~/api'; -import getMRCodequalityAndSecurityReports from '~/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql'; +import getMRCodequalityAndSecurityReports from 'ee_else_ce/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql'; import createMockApollo from 'helpers/mock_apollo_helper'; import setWindowLocation from 'helpers/set_window_location_helper'; import { mockTracking } from 'helpers/tracking_helper'; diff --git a/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js b/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js index fc72f6d2d68..230cd158ec8 100644 --- a/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js +++ b/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js @@ -226,14 +226,14 @@ describe('UncollapsedReviewerList component', () => { describe('reviewer state icons', () => { it.each` - reviewState | approved | icon - ${'UNREVIEWED'} | ${false} | ${'dash-circle'} - ${'REVIEWED'} | ${true} | ${'check-circle'} - ${'REVIEWED'} | ${false} | ${'comment-lines'} - ${'REQUESTED_CHANGES'} | ${false} | ${'error'} + reviewState | approved | icon | iconClass + ${'UNREVIEWED'} | ${false} | ${'dash-circle'} | ${'gl-fill-icon-default'} + ${'REVIEWED'} | ${true} | ${'check-circle'} | ${'gl-fill-icon-success'} + ${'REVIEWED'} | ${false} | ${'comment-lines'} | ${'gl-fill-icon-info'} + ${'REQUESTED_CHANGES'} | ${false} | ${'error'} | ${'gl-fill-icon-danger'} `( 'renders $icon for reviewState:$reviewState and approved:$approved', - ({ reviewState, approved, icon }) => { + ({ reviewState, approved, icon, iconClass }) => { const user = userDataMock({ approved, reviewState }); createComponent({ @@ -241,6 +241,7 @@ describe('UncollapsedReviewerList component', () => { }); expect(wrapper.find('[data-testid="reviewer-state-icon"]').props('name')).toBe(icon); + expect(wrapper.find('[data-testid="reviewer-state-icon"]').classes()).toEqual([iconClass]); }, ); }); diff --git a/spec/lib/gitlab/diff/merge_request_suggestion_spec.rb b/spec/lib/gitlab/diff/merge_request_suggestion_spec.rb deleted file mode 100644 index 38e38ac9d84..00000000000 --- a/spec/lib/gitlab/diff/merge_request_suggestion_spec.rb +++ /dev/null @@ -1,84 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::Diff::MergeRequestSuggestion, feature_category: :vulnerability_management do - describe '.note_attributes_hash' do - let_it_be(:fixtures_folder) { Rails.root.join('spec/fixtures/lib/gitlab/diff/merge_request_suggestion') } - let_it_be(:filepath) { 'cwe-23.rb' } - - let_it_be(:merge_request_diff) { create(:merge_request_diff) } - let_it_be(:merge_request_diff_file) do - create(:merge_request_diff_file, - merge_request_diff: merge_request_diff, - new_file: false, - a_mode: 100644, - b_mode: 100644, - new_path: filepath, - old_path: filepath, - diff: File.read(File.join(fixtures_folder, 'merge_request.diff')) - ) - end - - let_it_be(:merge_request) do - create(:merge_request, merge_request_diffs: [merge_request_diff], latest_merge_request_diff: merge_request_diff) - end - - let_it_be(:diff) { File.read(File.join(fixtures_folder, 'input.diff')) } - let_it_be(:prepend_text) { nil } - let(:mr_suggestion) { described_class.new(diff, filepath, merge_request, prepend_text) } - - subject(:attributes_hash) { mr_suggestion.note_attributes_hash } - - before do - merge_request.reload - end - - context 'when a valid diff is supplied' do - let_it_be(:suggestion) { File.read(File.join(fixtures_folder, 'suggestion.md')) } - - it 'returns a correctly formatted suggestion request payload' do - position_payload = { - position_type: 'text', - old_path: filepath, - new_path: filepath, - base_sha: merge_request.latest_merge_request_diff.base_commit_sha, - head_sha: merge_request.latest_merge_request_diff.head_commit_sha, - start_sha: merge_request.latest_merge_request_diff.start_commit_sha, - old_line: 10, - new_line: 8, - ignore_whitespace_change: false - } - - expect(attributes_hash[:type]).to eq('DiffNote') - expect(attributes_hash[:noteable_type]).to eq(MergeRequest) - expect(attributes_hash[:noteable_id]).to eq(merge_request.id) - expect(attributes_hash[:position]).to eq(position_payload) - expect(attributes_hash[:note]).to eq(suggestion) - end - - context 'when a prepend text is present' do - let_it_be(:prepend_text) { 'prepend text' } - - it 'returns a correctly formatted suggestion request payload' do - expect(attributes_hash[:note]).to eq("#{prepend_text}\n#{suggestion}") - end - end - end - - context 'when the filepath does not match the diff' do - let_it_be(:filepath) { 'cwe-123.rb' } - - it 'raises an error' do - expect { attributes_hash }.to raise_exception(described_class::TargetLineNotFound) - end - end - - context 'when suggestion_target_line is nil' do - it 'raises an error' do - expect(mr_suggestion).to receive(:suggestion_target_line).and_return(nil) - expect { attributes_hash }.to raise_exception(described_class::TargetLineNotFound) - end - end - end -end diff --git a/spec/services/merge_requests/merge_service_spec.rb b/spec/services/merge_requests/merge_service_spec.rb index 1ce8bfbc38b..5699b45b1ce 100644 --- a/spec/services/merge_requests/merge_service_spec.rb +++ b/spec/services/merge_requests/merge_service_spec.rb @@ -479,15 +479,29 @@ RSpec.describe MergeRequests::MergeService, feature_category: :code_review_workf merge_request.update_attribute(:merge_params, { 'force_remove_source_branch' => '1' }) end - # Not a real use case. When a merger merges a MR , merge param 'should_remove_source_branch' is defined - it 'removes the source branch using the author user' do - expect(::MergeRequests::DeleteSourceBranchWorker).to receive(:perform_async).with(merge_request.id, merge_request.source_branch_sha, merge_request.author.id) + it 'removes the source branch using the current user' do + expect(::MergeRequests::DeleteSourceBranchWorker).to receive(:perform_async).with(merge_request.id, merge_request.source_branch_sha, user.id) service.execute(merge_request) expect(merge_request.reload.should_remove_source_branch?).to be nil end + context 'when switch_deletion_branch_user is false' do + before do + stub_feature_flags(switch_deletion_branch_user: false) + end + + # Not a real use case. When a merger merges a MR , merge param 'should_remove_source_branch' is defined + it 'removes the source branch using the author user' do + expect(::MergeRequests::DeleteSourceBranchWorker).to receive(:perform_async).with(merge_request.id, merge_request.source_branch_sha, merge_request.author.id) + + service.execute(merge_request) + + expect(merge_request.reload.should_remove_source_branch?).to be nil + end + end + context 'when the merger set the source branch not to be removed' do let(:service) { described_class.new(project: project, current_user: user, params: merge_params.merge('should_remove_source_branch' => false)) } @@ -513,6 +527,20 @@ RSpec.describe MergeRequests::MergeService, feature_category: :code_review_workf expect(merge_request.reload.should_remove_source_branch?).to be true end + + context 'when switch_deletion_branch_user is false' do + before do + stub_feature_flags(switch_deletion_branch_user: false) + end + + it 'removes the source branch using the current user' do + expect(::MergeRequests::DeleteSourceBranchWorker).to receive(:perform_async).with(merge_request.id, merge_request.source_branch_sha, user.id) + + service.execute(merge_request) + + expect(merge_request.reload.should_remove_source_branch?).to be true + end + end end end end diff --git a/yarn.lock b/yarn.lock index cf7cf631bd1..e62a25fa78b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1402,6 +1402,12 @@ resolved "https://registry.yarnpkg.com/@gitlab/fonts/-/fonts-1.3.0.tgz#df89c1bb6714e4a8a5d3272568aa4de7fb337267" integrity sha512-DoMUIN3DqjEn7wvcxBg/b7Ite5fTdF5EmuOZoBRo2j0UBGweDXmNBi+9HrTZs4cBU660dOxcf1hATFcG3npbPg== +"@gitlab/noop@^1.0.0", jackspeak@^2.3.5, "jackspeak@npm:@gitlab/noop@1.0.0": + name jackspeak + version "1.0.0" + resolved "https://registry.yarnpkg.com/@gitlab/noop/-/noop-1.0.0.tgz#b1ecb8ae6b2abf9b2e28927e4fbb05b7a1b2704b" + integrity sha512-nOltttik5o2BjBo8LnyeTFzHoLpMY/XcCVOC+lm9ZwU+ivEam8wafacMF0KTbRn1KVrIoHYdo70QnqS+vJiOVw== + "@gitlab/query-language@^0.0.5-a-20241112": version "0.0.5-a-20241112" resolved "https://registry.yarnpkg.com/@gitlab/query-language/-/query-language-0.0.5-a-20241112.tgz#f442477e2728169fba4740a74d10cb887f9f0067" @@ -1704,18 +1710,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.0.tgz#b57438cab2a2381b4b597b0ab17339be381bd755" integrity sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g== -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2107,11 +2101,6 @@ dependencies: vue-demi "^0.14.10" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" @@ -4329,11 +4318,6 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -6786,11 +6770,6 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - echarts@^5.3.2: version "5.3.3" resolved "https://registry.yarnpkg.com/echarts/-/echarts-5.3.3.tgz#df97b09c4c0e2ffcdfb44acf518d50c50e0b838e" @@ -6852,11 +6831,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -9313,15 +9287,6 @@ iterall@^1.2.1: resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jed@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/jed/-/jed-1.1.1.tgz#7a549bbd9ffe1585b0cd0a191e203055bee574b4" @@ -13684,15 +13649,6 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -13702,15 +13658,6 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -13746,13 +13693,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -13767,7 +13707,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1, strip-ansi@^7.1.0: +strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -15479,16 +15419,7 @@ worker-loader@^3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.2.0, wrap-ansi@^6.2.0@6.2.0: +wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== @@ -15497,7 +15428,7 @@ wrap-ansi@^6.2.0, wrap-ansi@^6.2.0@6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0, wrap-ansi@^7.0.0@7.0.0: +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -15506,15 +15437,6 @@ wrap-ansi@^7.0.0, wrap-ansi@^7.0.0@7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"