- · {{ commit.short_id }}
+ · {{ commit.short_id }}
diff --git a/app/assets/javascripts/environments/folder/environments_folder_view.vue b/app/assets/javascripts/environments/folder/environments_folder_view.vue
index 2e01ae49422..5b9b110c8c9 100644
--- a/app/assets/javascripts/environments/folder/environments_folder_view.vue
+++ b/app/assets/javascripts/environments/folder/environments_folder_view.vue
@@ -69,6 +69,7 @@ export default {
+
+
+
{{ item.name }}
-
+
Updated
diff --git a/app/assets/javascripts/ide/components/merge_requests/item.vue b/app/assets/javascripts/ide/components/merge_requests/item.vue
index 5e05db2c87b..2f2bfd40821 100644
--- a/app/assets/javascripts/ide/components/merge_requests/item.vue
+++ b/app/assets/javascripts/ide/components/merge_requests/item.vue
@@ -46,7 +46,7 @@ export default {
{{ item.title }}
- {{ pathWithID }}
+ {{ pathWithID }}
diff --git a/app/assets/javascripts/issuable/components/issue_assignees.vue b/app/assets/javascripts/issuable/components/issue_assignees.vue
index 1fb7a27feda..bf4d7170d0e 100644
--- a/app/assets/javascripts/issuable/components/issue_assignees.vue
+++ b/app/assets/javascripts/issuable/components/issue_assignees.vue
@@ -92,7 +92,7 @@ export default {
data-testid="assignee-link"
>
- {{ s__('Label|Assignee') }} {{ assignee.name }}
+ {{ s__('Label|Assignee') }} {{ assignee.name }}
@{{ assignee.username }}
diff --git a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue
index b8974842e97..73a44a82350 100644
--- a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue
+++ b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue
@@ -765,7 +765,7 @@ export default {
"
>
-
+
{{ content }}
diff --git a/app/assets/javascripts/projects/project_new.js b/app/assets/javascripts/projects/project_new.js
index f6250bea863..2919a8afa67 100644
--- a/app/assets/javascripts/projects/project_new.js
+++ b/app/assets/javascripts/projects/project_new.js
@@ -262,7 +262,7 @@ const bindEvents = () => {
const selectedTemplate = DEFAULT_PROJECT_TEMPLATES[value];
$selectedTemplateText.textContent = selectedTemplate.text;
const clone = document.querySelector(selectedTemplate.icon).cloneNode(true);
- clone.classList.add('d-block');
+ clone.classList.add('gl-block');
$selectedIcon.append(clone);
diff --git a/app/assets/javascripts/projects/settings/branch_rules/components/view/index.vue b/app/assets/javascripts/projects/settings/branch_rules/components/view/index.vue
index 45e1743096a..3d217d3a9c9 100644
--- a/app/assets/javascripts/projects/settings/branch_rules/components/view/index.vue
+++ b/app/assets/javascripts/projects/settings/branch_rules/components/view/index.vue
@@ -451,12 +451,14 @@ export default {
+
+
diff --git a/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees_widget.vue b/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees_widget.vue
index d59de46cc51..5ea43b30cd7 100644
--- a/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees_widget.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees_widget.vue
@@ -101,6 +101,9 @@ export default {
update(data) {
return data.workspace?.issuable;
},
+ skip() {
+ return !this.iid;
+ },
result({ data }) {
if (!data) {
return;
diff --git a/app/assets/javascripts/sidebar/components/confidential/sidebar_confidentiality_widget.vue b/app/assets/javascripts/sidebar/components/confidential/sidebar_confidentiality_widget.vue
index ecccb0abfd1..23c2d7b80f6 100644
--- a/app/assets/javascripts/sidebar/components/confidential/sidebar_confidentiality_widget.vue
+++ b/app/assets/javascripts/sidebar/components/confidential/sidebar_confidentiality_widget.vue
@@ -66,6 +66,9 @@ export default {
update(data) {
return data.workspace?.issuable?.confidential || false;
},
+ skip() {
+ return !this.iid;
+ },
result({ data }) {
if (!data) {
return;
diff --git a/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue b/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue
index 89bc4b126d6..32f75bd9dc2 100644
--- a/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue
+++ b/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue
@@ -87,6 +87,9 @@ export default {
iid: String(this.iid),
};
},
+ skip() {
+ return !this.iid;
+ },
update(data) {
return data.workspace?.issuable || {};
},
diff --git a/app/assets/javascripts/sidebar/components/labels/labels_select_widget/labels_select_root.vue b/app/assets/javascripts/sidebar/components/labels/labels_select_widget/labels_select_root.vue
index 7f672ab1abb..f1d76633193 100644
--- a/app/assets/javascripts/sidebar/components/labels/labels_select_widget/labels_select_root.vue
+++ b/app/assets/javascripts/sidebar/components/labels/labels_select_widget/labels_select_root.vue
@@ -182,7 +182,7 @@ export default {
return issuableLabelsQueries[this.issuableType].issuableQuery;
},
skip() {
- return !isDropdownVariantSidebar(this.variant);
+ return !isDropdownVariantSidebar(this.variant) || !this.iid;
},
variables() {
const queryVariables = {
diff --git a/app/assets/javascripts/sidebar/components/participants/sidebar_participants_widget.vue b/app/assets/javascripts/sidebar/components/participants/sidebar_participants_widget.vue
index c80354ab038..cd7a57afa85 100644
--- a/app/assets/javascripts/sidebar/components/participants/sidebar_participants_widget.vue
+++ b/app/assets/javascripts/sidebar/components/participants/sidebar_participants_widget.vue
@@ -43,6 +43,9 @@ export default {
update(data) {
return data.workspace?.issuable?.participants.nodes || [];
},
+ skip() {
+ return !this.iid;
+ },
error(error) {
this.$emit('fetch-error', {
message: this.$options.i18n.fetchingError,
diff --git a/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue b/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue
index feff2c2007a..42cce5424d3 100644
--- a/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue
+++ b/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue
@@ -118,6 +118,9 @@ export default {
this.hasCurrentAttribute = data?.workspace?.issuable.hasEpic;
}
},
+ skip() {
+ return !this.iid;
+ },
error(error) {
createAlert({
message: this.i18n.currentFetchError,
diff --git a/app/assets/javascripts/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue b/app/assets/javascripts/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue
index 39bfd021564..783d0760f20 100644
--- a/app/assets/javascripts/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue
+++ b/app/assets/javascripts/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue
@@ -75,6 +75,9 @@ export default {
iid: String(this.iid),
};
},
+ skip() {
+ return !this.iid;
+ },
update(data) {
return data.workspace?.issuable?.subscribed || false;
},
diff --git a/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue b/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue
index af1621c90d9..d315326c960 100644
--- a/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue
+++ b/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue
@@ -62,6 +62,9 @@ export default {
iid: String(this.issuableIid),
};
},
+ skip() {
+ return !this.issuableIid;
+ },
update(data) {
return data.workspace?.issuable?.currentUserTodos.nodes[0]?.id;
},
diff --git a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
index 3777633a861..3b3c632d7ce 100644
--- a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
+++ b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
@@ -45,7 +45,7 @@ export default {
return `${getCommitIconMap(this.file).icon}${suffix}`;
},
changedIconClass() {
- return `${this.changedIcon} float-left d-block`;
+ return `${this.changedIcon} float-left gl-block`;
},
tooltipTitle() {
if (!this.showTooltip) {
diff --git a/app/assets/javascripts/vue_shared/components/code_block.vue b/app/assets/javascripts/vue_shared/components/code_block.vue
index 4a69845d3a4..23f5c41a005 100644
--- a/app/assets/javascripts/vue_shared/components/code_block.vue
+++ b/app/assets/javascripts/vue_shared/components/code_block.vue
@@ -33,5 +33,5 @@ export default {
class="code-block rounded code"
:class="$options.userColorScheme"
:style="styleObject"
- >{{ code }}
+ >{{ code }}
diff --git a/app/assets/javascripts/vue_shared/components/color_select_dropdown/color_select_root.vue b/app/assets/javascripts/vue_shared/components/color_select_dropdown/color_select_root.vue
index 2f28ae5e0e2..ba945cdf405 100644
--- a/app/assets/javascripts/vue_shared/components/color_select_dropdown/color_select_root.vue
+++ b/app/assets/javascripts/vue_shared/components/color_select_dropdown/color_select_root.vue
@@ -79,7 +79,7 @@ export default {
issuableColor: {
query: epicColorQuery,
skip() {
- return !isDropdownVariantSidebar(this.variant);
+ return !isDropdownVariantSidebar(this.variant) || !this.iid;
},
variables() {
return {
diff --git a/app/assets/stylesheets/framework/super_sidebar.scss b/app/assets/stylesheets/framework/super_sidebar.scss
index f5e5610e0f4..36fc15928d0 100644
--- a/app/assets/stylesheets/framework/super_sidebar.scss
+++ b/app/assets/stylesheets/framework/super_sidebar.scss
@@ -44,7 +44,7 @@ $command-palette-spacing: px-to-rem(14px);
--super-sidebar-nav-item-current-bg: #{$t-gray-a-08};
--super-sidebar-nav-item-icon-color: #{$gray-500};
- --super-sidebar-hr-mix-blend-mode: normal;
+ --super-sidebar-hr-mix-blend-mode: multiply;
.gl-dark & {
--super-sidebar-border-color: #{$t-white-a-08};
@@ -61,6 +61,8 @@ $command-palette-spacing: px-to-rem(14px);
--super-sidebar-nav-item-active-bg: #{$t-white-a-16};
--super-sidebar-nav-item-current-bg: #{$t-white-a-08};
--super-sidebar-nav-item-icon-color: #{$gray-600};
+
+ --super-sidebar-hr-mix-blend-mode: screen;
}
}
@@ -90,8 +92,6 @@ $command-palette-spacing: px-to-rem(14px);
--super-sidebar-user-bar-button-icon-color: #{$user-bar-button-icon-color};
--super-sidebar-user-bar-button-icon-hover-color: #{$user-bar-button-icon-color};
--super-sidebar-user-bar-button-icon-mix-blend-mode: screen;
-
- --super-sidebar-hr-mix-blend-mode: multiply;
}
}
diff --git a/app/controllers/concerns/wiki_actions.rb b/app/controllers/concerns/wiki_actions.rb
index 0dbbdbd561e..14bc3743f83 100644
--- a/app/controllers/concerns/wiki_actions.rb
+++ b/app/controllers/concerns/wiki_actions.rb
@@ -240,6 +240,7 @@ module WikiActions
# rubocop:disable Gitlab/ModuleWithInstanceVariables
def history
if page
+ @commits_count = page.count_versions
@commits = Kaminari.paginate_array(page.versions(page: params[:page].to_i), total_count: page.count_versions)
.page(params[:page])
diff --git a/app/views/groups/settings/_general.html.haml b/app/views/groups/settings/_general.html.haml
index 56ee2af1562..5880b0157eb 100644
--- a/app/views/groups/settings/_general.html.haml
+++ b/app/views/groups/settings/_general.html.haml
@@ -29,7 +29,7 @@
.form-group.gl-mt-3.gl-mb-6
= render Pajamas::AvatarComponent.new(@group, size: 96, alt: '', class: 'gl-float-left gl-mr-5')
- = f.label :avatar, s_('Groups|Group avatar'), class: 'label-bold d-block'
+ = f.label :avatar, s_('Groups|Group avatar'), class: 'label-bold gl-block'
= render 'shared/choose_avatar_button', f: f
- if @group.avatar?
%hr
diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml
index 16950e2ddd4..499507d3e6d 100644
--- a/app/views/projects/commits/_commit.html.haml
+++ b/app/views/projects/commits/_commit.html.haml
@@ -54,7 +54,7 @@
= render_if_exists 'projects/commits/project_namespace', show_project_name: show_project_name, project: project
- if commit.description?
- %pre{ class: ["commit-row-description gl-mb-3 gl-white-space-pre-wrap", (collapsible ? "js-toggle-content" : "d-block")] }
+ %pre{ class: ["commit-row-description gl-mb-3 gl-white-space-pre-wrap", (collapsible ? "js-toggle-content" : "!gl-block")] }
= preserve(markdown_field(commit, :description))
.commit-actions.flex-row
diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml
index 9fa4c4a0a65..a33413907ed 100644
--- a/app/views/projects/empty.html.haml
+++ b/app/views/projects/empty.html.haml
@@ -15,7 +15,7 @@
#js-project-show-empty-page.project-page-layout
.project-page-layout-content.gl-mt-5
.project-buttons.gl-mb-5{ data: { testid: 'quick-actions-container' } }
- .project-clone-holder.d-block.d-sm-none
+ .project-clone-holder.gl-block.sm:gl-hidden
= render "shared/mobile_clone_panel"
.project-clone-holder.gl-hidden.sm:gl-flex.gl-justify-content-end.gl-w-full
diff --git a/app/views/projects/settings/_general.html.haml b/app/views/projects/settings/_general.html.haml
index 47ea2f1a544..2d15805b88e 100644
--- a/app/views/projects/settings/_general.html.haml
+++ b/app/views/projects/settings/_general.html.haml
@@ -31,7 +31,7 @@
.form-group.gl-mt-3.gl-mb-3
= render Pajamas::AvatarComponent.new(@project, size: 96, alt: '', class: 'gl-float-left gl-mr-5')
- = f.label :avatar, _('Project avatar'), class: 'label-bold d-block'
+ = f.label :avatar, _('Project avatar'), class: 'label-bold gl-block'
= render 'shared/choose_avatar_button', f: f
- if @project.avatar?
%hr
diff --git a/app/views/shared/wikis/history.html.haml b/app/views/shared/wikis/history.html.haml
index 240a52eddd3..05608416047 100644
--- a/app/views/shared/wikis/history.html.haml
+++ b/app/views/shared/wikis/history.html.haml
@@ -2,7 +2,7 @@
- wiki_page_title @page, _('History')
- add_page_specific_style 'page_bundles/wiki'
-.wiki-page-header.top-area.has-sidebar-toggle.flex-column.flex-lg-row
+.wiki-page-header.top-area.has-sidebar-toggle.flex-column.flex-lg-row.gl-border-b-0
= wiki_sidebar_toggle_button
%h1.page-title.gl-font-size-h-display
@@ -12,28 +12,38 @@
= _('History')
.prepend-top-default.gl-mb-3
- .table-holder{ data: { testid: 'wiki-history-table' } }
- %table.table.wiki-history
- %thead
- %tr
- %th= @page.template? ? s_('Wiki|Template version') : s_('Wiki|Page version')
- %th= _('Author')
- %th= _('Changes')
- %th= _('Last updated')
- %tbody
- - @commits.each do |commit|
- %tr
- %td
- = link_to wiki_page_path(@wiki, @page, version_id: commit.id) do
- = truncate_sha(commit.id)
- %td
- = commit.author_name
- %td
- .commit-content
- = link_to wiki_page_path(@wiki, @page, action: :diff, version_id: commit.id), { title: commit.message } do
- = commit.message
- %td
- = time_ago_with_tooltip(commit.authored_date)
+ = render Pajamas::CardComponent.new(card_options: { class: 'gl-new-card gl-mt-0 gl-mb-5' }, header_options: { class: 'gl-new-card-header gl-border-b-0' }, body_options: { class: 'gl-new-card-body gl-px-0' }) do |c|
+ - c.with_header do
+ .gl-new-card-title-wrapper.gl-flex-col
+ %h3.gl-new-card-title
+ = _('Versions')
+ .gl-new-card-count
+ = sprite_icon('history', css_class: 'gl-mr-2')
+ = @commits_count
+ - c.with_body do
+ .table-holder{ data: { testid: 'wiki-history-table' } }
+ %table.table.wiki-history{ class: '!gl-mb-0' }
+ %thead
+ %tr
+ %th= _('Version')
+ %th= _('Author')
+ %th= _('Diff')
+ %th= _('Last updated')
+ %tbody
+ - @commits.each_with_index do |commit, i|
+ %tr
+ %td
+ = link_to wiki_page_path(@wiki, @page, version_id: commit.id) do
+ v#{@commits_count - i}
+ %td
+ = commit.author_name
+ %td
+ .commit-content
+ = link_to wiki_page_path(@wiki, @page, action: :diff, version_id: commit.id), { title: commit.message } do
+ = commit.message
+ %td
+ = time_ago_with_tooltip(commit.authored_date)
+
= paginate @commits, theme: 'gitlab'
= render 'shared/wikis/sidebar'
diff --git a/doc/administration/raketasks/maintenance.md b/doc/administration/raketasks/maintenance.md
index 4c665dcafc8..5cae556ba66 100644
--- a/doc/administration/raketasks/maintenance.md
+++ b/doc/administration/raketasks/maintenance.md
@@ -436,6 +436,17 @@ To determine if there are any differences:
Select the branch that matches your GitLab version. For example, the file for GitLab 16.2: .
1. Compare `/tmp/structure.sql` with the `db/structure.sql` file for your version.
+## Check the database for schema inconsistencies
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390719) in GitLab 15.11.
+
+This Rake task checks the database schema for any inconsistencies
+and prints them in the terminal.
+
+```shell
+gitlab-rake gitlab:db:schema_checker:run
+```
+
## Import common metrics
Sometimes you may need to re-import the common metrics that power the Metrics dashboards.
diff --git a/doc/api/project_packages_protection_rules.md b/doc/api/project_packages_protection_rules.md
index d4eaad99270..0d7cb9d3af6 100644
--- a/doc/api/project_packages_protection_rules.md
+++ b/doc/api/project_packages_protection_rules.md
@@ -60,14 +60,14 @@ Example response:
"project_id": 7,
"package_name_pattern": "@flightjs/flight-package-0",
"package_type": "npm",
- "push_protected_up_to_access_level": "maintainer"
+ "minimum_access_level_for_push": "maintainer"
},
{
"id": 2,
"project_id": 7,
"package_name_pattern": "@flightjs/flight-package-1",
"package_type": "npm",
- "push_protected_up_to_access_level": "maintainer"
+ "minimum_access_level_for_push": "maintainer"
}
]
```
diff --git a/doc/editor_extensions/index.md b/doc/editor_extensions/index.md
index e870adacf81..0446be35c78 100644
--- a/doc/editor_extensions/index.md
+++ b/doc/editor_extensions/index.md
@@ -1,7 +1,6 @@
---
stage: Create
group: Editor Extensions
-description: Visual Studio Code, JetBrains, Neovim, GitLab CLI.
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
description: "Extend the features of GitLab to Visual Studio Code, JetBrains IDEs, Visual Studio, and Neovim."
---
diff --git a/lib/api/entities/projects/packages/protection/rule.rb b/lib/api/entities/projects/packages/protection/rule.rb
index 6f6e38da0aa..3cc5f9a6bd7 100644
--- a/lib/api/entities/projects/packages/protection/rule.rb
+++ b/lib/api/entities/projects/packages/protection/rule.rb
@@ -10,7 +10,7 @@ module API
expose :project_id, documentation: { type: 'integer', example: 1 }
expose :package_name_pattern, documentation: { type: 'string', example: 'flightjs/flight' }
expose :package_type, documentation: { type: 'string', example: 'npm' }
- expose :push_protected_up_to_access_level, documentation: { type: 'string', example: 'maintainer' }
+ expose :minimum_access_level_for_push, documentation: { type: 'string', example: 'maintainer' }
end
end
end
diff --git a/lib/gitlab/error_tracking.rb b/lib/gitlab/error_tracking.rb
index 0ad2d19be5b..a4e481472dc 100644
--- a/lib/gitlab/error_tracking.rb
+++ b/lib/gitlab/error_tracking.rb
@@ -82,7 +82,8 @@ module Gitlab
raise exception if should_raise_for_dev?
end
- # This should be used when you only want to track the exception.
+ # This should be used when you want to track the exception and not raise
+ # with the default trackers (Sentry and Logger).
#
# If the exception implements the method `sentry_extra_data` and that method
# returns a Hash, then the return value of that method will be merged into
@@ -93,7 +94,7 @@ module Gitlab
end
# This should be used when you only want to log the exception,
- # but not send it to Sentry.
+ # but not send it to Sentry or raise.
#
# If the exception implements the method `sentry_extra_data` and that method
# returns a Hash, then the return value of that method will be merged into
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 8cc3d24ca89..1ccbbf312bb 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -18722,6 +18722,9 @@ msgstr ""
msgid "Didn't receive unlock instructions?"
msgstr ""
+msgid "Diff"
+msgstr ""
+
msgid "Diff files surpassing this limit will be presented as 'too large' and won't be expandable."
msgstr ""
@@ -57715,6 +57718,9 @@ msgstr ""
msgid "VersionCheck|You are currently on version %{currentVersion}! We strongly recommend upgrading your GitLab installation to one of the following versions immediately: %{latestStableVersions}."
msgstr ""
+msgid "Versions"
+msgstr ""
+
msgid "View File Metadata"
msgstr ""
@@ -59255,18 +59261,12 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
-msgid "Wiki|Page version"
-msgstr ""
-
msgid "Wiki|Pages"
msgstr ""
msgid "Wiki|Template history"
msgstr ""
-msgid "Wiki|Template version"
-msgstr ""
-
msgid "Wiki|Templates"
msgstr ""
diff --git a/package.json b/package.json
index 1b8c08d6a4d..768e9ae4c9f 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,7 @@
"@gitlab/cluster-client": "^2.2.0",
"@gitlab/favicon-overlay": "2.0.0",
"@gitlab/fonts": "^1.3.0",
- "@gitlab/ui": "80.16.1",
+ "@gitlab/ui": "80.19.0",
"@gitlab/svgs": "3.101.0",
"@gitlab/web-ide": "^0.0.1-dev-20240531032328",
"@mattiasbuelens/web-streams-adapter": "^0.1.0",
@@ -290,7 +290,7 @@
"swagger-cli": "^4.0.4",
"tailwindcss": "^3.4.1",
"timezone-mock": "^1.0.8",
- "vite": "^5.2.12",
+ "vite": "^5.2.13",
"vite-plugin-ruby": "^5.0.0",
"vue-loader-vue3": "npm:vue-loader@17.4.2",
"vue-test-utils-compat": "0.0.14",
diff --git a/scripts/frontend/lib/tailwind_migration.mjs b/scripts/frontend/lib/tailwind_migration.mjs
index c0f10b845ec..3d3616ea97a 100644
--- a/scripts/frontend/lib/tailwind_migration.mjs
+++ b/scripts/frontend/lib/tailwind_migration.mjs
@@ -46,6 +46,12 @@ export const mismatchAllowList = [
'.border-l\\!',
'.border-r\\!',
'.border-t\\!',
+ // Tailwindy transparent border utils now leverage design tokens, the mismatches are expected.
+ '.border-transparent',
+ '.border-t-transparent',
+ '.border-r-transparent',
+ '.border-b-transparent',
+ '.border-l-transparent',
// Tailwind's line-clamp utils don't set `white-space: normal`, while our custom utils did.
// We have added `gl-whitespace-normal` wherever line-clamp utils were being used, so these
// mismatches can be ignored.
diff --git a/spec/features/boards/sidebar_labels_spec.rb b/spec/features/boards/sidebar_labels_spec.rb
index 83a98f898c1..45b0163dfb6 100644
--- a/spec/features/boards/sidebar_labels_spec.rb
+++ b/spec/features/boards/sidebar_labels_spec.rb
@@ -14,10 +14,16 @@ RSpec.describe 'Project issue boards sidebar labels', :js, feature_category: :po
let_it_be(:stretch) { create(:label, project: project, name: 'Stretch') }
let_it_be(:issue1) { create(:labeled_issue, project: project, labels: [development], relative_position: 2) }
let_it_be(:issue2) { create(:labeled_issue, project: project, labels: [development, stretch], relative_position: 1) }
+ let_it_be(:issue3) { create(:issue, project: project) }
let_it_be(:board) { create(:board, project: project) }
- let_it_be(:list) { create(:list, board: board, label: development, position: 0) }
+ let_it_be(:list1) { create(:list, board: board, label: development, position: 0) }
+ let_it_be(:list2) { create(:list, board: board, label: bug, position: 1) }
- let(:card) { find('.board:nth-child(2)').first('.board-card') }
+ let(:backlog_list) { find('.board:nth-child(1)') }
+ let(:development_list) { find('.board:nth-child(2)') }
+ let(:bug_list) { find('.board:nth-child(3)') }
+ let(:card) { development_list.first('.board-card') }
+ let(:backlog_card) { backlog_list.first('.board-card') }
before do
project.add_maintainer(user)
@@ -65,9 +71,20 @@ RSpec.describe 'Project issue boards sidebar labels', :js, feature_category: :po
end
end
+ click_button 'Close drawer'
+
+ wait_for_requests
+
# 'Development' label does not show since the card is in a 'Development' list label
expect(card).to have_selector('.gl-label', count: 2)
expect(card).to have_content(bug.title)
+
+ # Card is duplicated in the 'Bug' list
+ page.within(bug_list) do
+ expect(page).to have_selector('.board-card', count: 1)
+ expect(page).to have_content(issue2.title)
+ expect(find('.board-card')).to have_content(development.title)
+ end
end
it 'adds a multiple labels' do
@@ -99,6 +116,69 @@ RSpec.describe 'Project issue boards sidebar labels', :js, feature_category: :po
expect(card).to have_content(regression.title)
end
+ it 'removes a label and moves card to backlog' do
+ click_card(card)
+
+ page.within('.labels') do
+ click_button 'Edit'
+
+ wait_for_requests
+
+ click_button development.title
+
+ click_button 'Close'
+
+ wait_for_requests
+ end
+
+ click_button 'Close drawer'
+
+ wait_for_requests
+
+ # Card is moved to the 'Backlog' list
+ page.within(backlog_list) do
+ expect(page).to have_selector('.board-card', count: 2)
+ expect(page).to have_content(issue2.title)
+ end
+
+ # Card is moved away from the 'Development' list
+ page.within(development_list) do
+ expect(page).to have_selector('.board-card', count: 1)
+ expect(page).not_to have_content(issue2.title)
+ end
+ end
+
+ it 'adds a label to backlog card and moves the card to the list' do
+ click_card(backlog_card)
+
+ page.within('.labels') do
+ click_button 'Edit'
+
+ wait_for_requests
+
+ click_on development.title
+
+ click_button 'Close'
+
+ wait_for_requests
+ end
+
+ click_button 'Close drawer'
+
+ wait_for_requests
+
+ # Card is removed from backlog
+ page.within(backlog_list) do
+ expect(page).to have_selector('.board-card', count: 0)
+ end
+
+ # Card is shown in the 'Development' list
+ page.within(development_list) do
+ expect(page).to have_selector('.board-card', count: 3)
+ expect(page).to have_content(issue3.title)
+ end
+ end
+
it 'removes a label' do
click_card(card)
@@ -139,7 +219,7 @@ RSpec.describe 'Project issue boards sidebar labels', :js, feature_category: :po
expect(page).to have_button 'test label'
end
- expect(page).to have_selector('.board', count: 3)
+ expect(page).to have_selector('.board', count: 4)
end
end
end
diff --git a/spec/frontend/vue_shared/components/code_block_spec.js b/spec/frontend/vue_shared/components/code_block_spec.js
index 1bcf0c3938c..db9fce6c79f 100644
--- a/spec/frontend/vue_shared/components/code_block_spec.js
+++ b/spec/frontend/vue_shared/components/code_block_spec.js
@@ -33,7 +33,7 @@ describe('Code Block', () => {
class="code code-block rounded"
>
`);
@@ -47,7 +47,7 @@ describe('Code Block', () => {
class="code code-block rounded"
>
test-code
@@ -64,7 +64,7 @@ describe('Code Block', () => {
style="max-height: 200px; overflow-y: auto;"
>
test-code
diff --git a/spec/lib/api/entities/projects/packages/protection/rule_spec.rb b/spec/lib/api/entities/projects/packages/protection/rule_spec.rb
index f18626a053e..14d4a4cc7b9 100644
--- a/spec/lib/api/entities/projects/packages/protection/rule_spec.rb
+++ b/spec/lib/api/entities/projects/packages/protection/rule_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe API::Entities::Projects::Packages::Protection::Rule, feature_cate
:project_id,
:package_name_pattern,
:package_type,
- :push_protected_up_to_access_level
+ :minimum_access_level_for_push
]
end
end
diff --git a/spec/lib/banzai/pipeline/plain_markdown_pipeline_spec.rb b/spec/lib/banzai/pipeline/plain_markdown_pipeline_spec.rb
index b3ca8334fcb..10deb54d7ab 100644
--- a/spec/lib/banzai/pipeline/plain_markdown_pipeline_spec.rb
+++ b/spec/lib/banzai/pipeline/plain_markdown_pipeline_spec.rb
@@ -105,7 +105,7 @@ RSpec.describe Banzai::Pipeline::PlainMarkdownPipeline, feature_category: :team_
end
it 'does not have a polynomial regex' do
- markdown = "x \\#\n\n#{'mliteralcmliteral-' * 1550000}mliteral"
+ markdown = "x \\#\n\n#{'mliteralcmliteral-' * 450000}mliteral"
expect do
Timeout.timeout(2.seconds) { described_class.to_html(markdown, project: project) }
diff --git a/yarn.lock b/yarn.lock
index b74578637a0..c32e43bdc53 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1331,10 +1331,10 @@
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-3.101.0.tgz#a8769490eecd03b8cc2403f5b7faab34a4ad0d82"
integrity sha512-X/3oLr969A9dzVaTD2JfG6EmxadEQwCPXcfn1A6Y+AAI0PLkBgjDXUz0yo1tXJOF6nqOmYpBiUM6uOon3i5N4A==
-"@gitlab/ui@80.16.1":
- version "80.16.1"
- resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-80.16.1.tgz#87ed3cf6dd6a1da123422dfa339734440ad35d1f"
- integrity sha512-j7yYTvdIXQsznIKmrIwX7G3e67b3s2qt4KbIR+fq78Yko+9FO38t4bceVZo33cpHu26Sx0wqbjq3xAVnE9D/ug==
+"@gitlab/ui@80.19.0":
+ version "80.19.0"
+ resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-80.19.0.tgz#b6e6018d27939a7ac2451b6a41cf49071977aa95"
+ integrity sha512-aswSSLDkHzjvWdHDKZH5ZPZYiX821+fZ2yPLoN+0OYyA75XzAr5daaV2os4y6PLPtWJHiHF3nWbZSF80wMF68A==
dependencies:
"@floating-ui/dom" "1.4.3"
bootstrap-vue "2.23.1"
@@ -14156,10 +14156,10 @@ vite-plugin-ruby@^5.0.0:
debug "^4.3.4"
fast-glob "^3.3.2"
-vite@^5.2.12:
- version "5.2.12"
- resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.12.tgz#3536c93c58ba18edea4915a2ac573e6537409d97"
- integrity sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==
+vite@^5.2.13:
+ version "5.2.13"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.13.tgz#945ababcbe3d837ae2479c29f661cd20bc5e1a80"
+ integrity sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==
dependencies:
esbuild "^0.20.1"
postcss "^8.4.38"