Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-02-28 15:14:07 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-02-28 15:14:07 +0300
commit22ecb1e3fc02bb923c3e9941b1baa849348a036f (patch)
treec01d9e91564f50e790a63c71675dd0f6e7735153 /lib
parent5eab6dcdd923ca375b86d6993f20a3e37dbd7a51 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r--lib/api/entities/ci/job_request/response.rb4
-rw-r--r--lib/gitlab/ci/config/entry/job.rb6
-rw-r--r--lib/gitlab/database/migrations/test_batched_background_runner.rb2
-rw-r--r--lib/sidebars/concerns/super_sidebar_panel.rb53
-rw-r--r--lib/sidebars/menu.rb11
-rw-r--r--lib/sidebars/menu_item.rb6
-rw-r--r--lib/sidebars/projects/menus/issues_menu.rb15
-rw-r--r--lib/sidebars/projects/menus/merge_requests_menu.rb10
-rw-r--r--lib/sidebars/projects/menus/project_information_menu.rb10
-rw-r--r--lib/sidebars/projects/menus/scope_menu.rb9
-rw-r--r--lib/sidebars/projects/menus/wiki_menu.rb7
-rw-r--r--lib/sidebars/projects/panel.rb9
-rw-r--r--lib/sidebars/projects/super_sidebar_menus/plan_menu.rb19
-rw-r--r--lib/sidebars/projects/super_sidebar_panel.rb41
-rw-r--r--lib/sidebars/static_menu.rb13
-rw-r--r--lib/sidebars/uncategorized_menu.rb19
16 files changed, 214 insertions, 20 deletions
diff --git a/lib/api/entities/ci/job_request/response.rb b/lib/api/entities/ci/job_request/response.rb
index cfdbeed79b6..e07bba1e850 100644
--- a/lib/api/entities/ci/job_request/response.rb
+++ b/lib/api/entities/ci/job_request/response.rb
@@ -23,9 +23,7 @@ module API
expose :runner_variables, as: :variables
expose :steps, using: Entities::Ci::JobRequest::Step
- expose :runtime_hooks, as: :hooks,
- using: Entities::Ci::JobRequest::Hook,
- if: ->(job) { ::Feature.enabled?(:ci_hooks_pre_get_sources_script, job.project) }
+ expose :runtime_hooks, as: :hooks, using: Entities::Ci::JobRequest::Hook
expose :image, using: Entities::Ci::JobRequest::Image
expose :services, using: Entities::Ci::JobRequest::Service
expose :artifacts, using: Entities::Ci::JobRequest::Artifacts
diff --git a/lib/gitlab/ci/config/entry/job.rb b/lib/gitlab/ci/config/entry/job.rb
index 7c49b59a7f0..2390ba05916 100644
--- a/lib/gitlab/ci/config/entry/job.rb
+++ b/lib/gitlab/ci/config/entry/job.rb
@@ -164,7 +164,7 @@ module Gitlab
artifacts: artifacts_value,
release: release_value,
after_script: after_script_value,
- hooks: hooks_pre_get_sources_script_enabled? ? hooks_value : nil,
+ hooks: hooks_value,
ignore: ignored?,
allow_failure_criteria: allow_failure_criteria,
needs: needs_defined? ? needs_value : nil,
@@ -194,10 +194,6 @@ module Gitlab
allow_failure_value
end
-
- def hooks_pre_get_sources_script_enabled?
- YamlProcessor::FeatureFlags.enabled?(:ci_hooks_pre_get_sources_script)
- end
end
end
end
diff --git a/lib/gitlab/database/migrations/test_batched_background_runner.rb b/lib/gitlab/database/migrations/test_batched_background_runner.rb
index 01fdba22c19..af853c933ba 100644
--- a/lib/gitlab/database/migrations/test_batched_background_runner.rb
+++ b/lib/gitlab/database/migrations/test_batched_background_runner.rb
@@ -27,7 +27,7 @@ module Gitlab
table_max_value = define_batchable_model(migration.table_name, connection: connection)
.maximum(migration.column_name)
- largest_batch_start = table_max_value - migration.batch_size
+ largest_batch_start = [table_max_value - migration.batch_size, smallest_batch_start].max
# variance is the portion of the batch range that we shrink between variance * 0 and variance * 1
# to pick actual batches to sample.
diff --git a/lib/sidebars/concerns/super_sidebar_panel.rb b/lib/sidebars/concerns/super_sidebar_panel.rb
new file mode 100644
index 00000000000..9303d91c0e7
--- /dev/null
+++ b/lib/sidebars/concerns/super_sidebar_panel.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+module Sidebars
+ module Concerns
+ # Contains helper methods aid conversion of a "normal" panel
+ # into a Super Sidebar Panel
+ module SuperSidebarPanel
+ # Picks an element from the given list and adds it to the current menus
+ # Used for menus which behave the same in the old nav and Supersidebar
+ def pick_from_old_menus(old_menus, element)
+ add_menu(remove_element(old_menus, element))
+ end
+
+ def transform_old_menus(current_menus, *old_menus)
+ old_menus.each do |menu|
+ next unless menu.render?
+
+ menu.renderable_items.each { |item| add_menu_item_to_super_sidebar_parent(current_menus, item) }
+
+ menu_item_args = menu.serialize_as_menu_item_args
+
+ next if menu_item_args.nil?
+
+ add_menu_item_to_super_sidebar_parent(
+ current_menus, ::Sidebars::MenuItem.new(**menu_item_args)
+ )
+ end
+ end
+
+ private
+
+ # Finds a menu_items super sidebar parent and adds the item to that menu
+ # Handles:
+ # - menu_item.super_sidebar_before, adding before a certain item
+ # - parent == nil, or parent not being part of the panel:
+ # we assume that the menu item hasn't been categorized yet
+ # - parent == ::Sidebars::NilMenuItem, the item explicitly is supposed to be removed
+ def add_menu_item_to_super_sidebar_parent(menus, menu_item)
+ parent = menu_item.super_sidebar_parent || ::Sidebars::UncategorizedMenu
+ return if parent == ::Sidebars::NilMenuItem
+
+ idx = index_of(menus, parent) || index_of(menus, ::Sidebars::UncategorizedMenu)
+ return unless idx
+
+ if menu_item.super_sidebar_before
+ menus[idx].insert_item_before(menu_item.super_sidebar_before, menu_item)
+ else
+ menus[idx].add_item(menu_item)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/sidebars/menu.rb b/lib/sidebars/menu.rb
index d0fd8212671..defc9848bf9 100644
--- a/lib/sidebars/menu.rb
+++ b/lib/sidebars/menu.rb
@@ -122,6 +122,17 @@ module Sidebars
end
end
+ # Sometimes we want to convert a top-level Menu (e.g. Wiki/Snippets)
+ # to a MenuItem. This serializer is used in order to enable that conversion
+ def serialize_as_menu_item_args
+ {
+ title: title,
+ link: link,
+ active_routes: active_routes,
+ container_html_options: container_html_options
+ }
+ end
+
private
override :index_of
diff --git a/lib/sidebars/menu_item.rb b/lib/sidebars/menu_item.rb
index 9cdde9acc0d..0e50c704695 100644
--- a/lib/sidebars/menu_item.rb
+++ b/lib/sidebars/menu_item.rb
@@ -4,11 +4,11 @@ module Sidebars
class MenuItem
include ::Sidebars::Concerns::LinkWithHtmlOptions
- attr_reader :title, :link, :active_routes, :item_id, :container_html_options, :sprite_icon, :sprite_icon_html_options, :hint_html_options, :has_pill, :pill_count
+ attr_reader :title, :link, :active_routes, :item_id, :container_html_options, :sprite_icon, :sprite_icon_html_options, :hint_html_options, :has_pill, :pill_count, :super_sidebar_parent, :super_sidebar_before
alias_method :has_pill?, :has_pill
# rubocop: disable Metrics/ParameterLists
- def initialize(title:, link:, active_routes:, item_id: nil, container_html_options: {}, sprite_icon: nil, sprite_icon_html_options: {}, hint_html_options: {}, has_pill: false, pill_count: nil)
+ def initialize(title:, link:, active_routes:, item_id: nil, container_html_options: {}, sprite_icon: nil, sprite_icon_html_options: {}, hint_html_options: {}, has_pill: false, pill_count: nil, super_sidebar_parent: nil, super_sidebar_before: nil)
@title = title
@link = link
@active_routes = active_routes
@@ -19,6 +19,8 @@ module Sidebars
@hint_html_options = hint_html_options
@has_pill = has_pill
@pill_count = pill_count
+ @super_sidebar_before = super_sidebar_before
+ @super_sidebar_parent = super_sidebar_parent
end
# rubocop: enable Metrics/ParameterLists
diff --git a/lib/sidebars/projects/menus/issues_menu.rb b/lib/sidebars/projects/menus/issues_menu.rb
index 51eea3d850d..21d42fa3879 100644
--- a/lib/sidebars/projects/menus/issues_menu.rb
+++ b/lib/sidebars/projects/menus/issues_menu.rb
@@ -68,6 +68,16 @@ module Sidebars
}
end
+ override :serialize_as_menu_item_args
+ def serialize_as_menu_item_args
+ super.merge({
+ sprite_icon: sprite_icon,
+ pill_count: pill_count,
+ has_pill: has_pill?,
+ super_sidebar_parent: ::Sidebars::StaticMenu
+ })
+ end
+
private
def show_issues_menu_items?
@@ -78,6 +88,7 @@ module Sidebars
::Sidebars::MenuItem.new(
title: _('List'),
link: project_issues_path(context.project),
+ super_sidebar_parent: ::Sidebars::NilMenuItem,
active_routes: { path: 'projects/issues#index' },
container_html_options: { aria: { label: _('Issues') } },
item_id: :issue_list
@@ -90,6 +101,7 @@ module Sidebars
::Sidebars::MenuItem.new(
title: title,
link: project_boards_path(context.project),
+ super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
active_routes: { controller: :boards },
item_id: :boards
)
@@ -99,6 +111,7 @@ module Sidebars
::Sidebars::MenuItem.new(
title: _('Service Desk'),
link: service_desk_project_issues_path(context.project),
+ super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
active_routes: { path: 'issues#service_desk' },
item_id: :service_desk
)
@@ -108,6 +121,8 @@ module Sidebars
::Sidebars::MenuItem.new(
title: _('Milestones'),
link: project_milestones_path(context.project),
+ super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
+ super_sidebar_before: :service_desk,
active_routes: { controller: :milestones },
item_id: :milestones
)
diff --git a/lib/sidebars/projects/menus/merge_requests_menu.rb b/lib/sidebars/projects/menus/merge_requests_menu.rb
index 3e543872d36..1695d759ed2 100644
--- a/lib/sidebars/projects/menus/merge_requests_menu.rb
+++ b/lib/sidebars/projects/menus/merge_requests_menu.rb
@@ -64,6 +64,16 @@ module Sidebars
{ controller: ['projects/merge_requests', :milestones] }
end
end
+
+ override :serialize_as_menu_item_args
+ def serialize_as_menu_item_args
+ super.merge({
+ sprite_icon: sprite_icon,
+ pill_count: pill_count,
+ has_pill: has_pill?,
+ super_sidebar_parent: ::Sidebars::StaticMenu
+ })
+ end
end
end
end
diff --git a/lib/sidebars/projects/menus/project_information_menu.rb b/lib/sidebars/projects/menus/project_information_menu.rb
index 44b94ee3522..020de2ff65f 100644
--- a/lib/sidebars/projects/menus/project_information_menu.rb
+++ b/lib/sidebars/projects/menus/project_information_menu.rb
@@ -33,12 +33,18 @@ module Sidebars
'project'
end
+ override :serialize_as_menu_item_args
+ def serialize_as_menu_item_args
+ nil
+ end
+
private
def activity_menu_item
::Sidebars::MenuItem.new(
title: _('Activity'),
link: activity_project_path(context.project),
+ super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
active_routes: { path: 'projects#activity' },
item_id: :activity,
container_html_options: { class: 'shortcuts-project-activity' }
@@ -53,6 +59,8 @@ module Sidebars
::Sidebars::MenuItem.new(
title: _('Labels'),
link: project_labels_path(context.project),
+ super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
+ super_sidebar_before: :activity,
active_routes: { controller: :labels },
item_id: :labels
)
@@ -66,6 +74,8 @@ module Sidebars
::Sidebars::MenuItem.new(
title: _('Members'),
link: project_project_members_path(context.project),
+ super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
+ super_sidebar_before: :labels,
active_routes: { controller: :project_members },
item_id: :members,
container_html_options: {
diff --git a/lib/sidebars/projects/menus/scope_menu.rb b/lib/sidebars/projects/menus/scope_menu.rb
index 35502c7ea09..77da695d49c 100644
--- a/lib/sidebars/projects/menus/scope_menu.rb
+++ b/lib/sidebars/projects/menus/scope_menu.rb
@@ -39,6 +39,15 @@ module Sidebars
def render?
true
end
+
+ override :serialize_as_menu_item_args
+ def serialize_as_menu_item_args
+ super.merge({
+ title: _('Project overview'),
+ sprite_icon: 'project',
+ super_sidebar_parent: ::Sidebars::StaticMenu
+ })
+ end
end
end
end
diff --git a/lib/sidebars/projects/menus/wiki_menu.rb b/lib/sidebars/projects/menus/wiki_menu.rb
index 3980b193fd1..8bf223da4da 100644
--- a/lib/sidebars/projects/menus/wiki_menu.rb
+++ b/lib/sidebars/projects/menus/wiki_menu.rb
@@ -35,6 +35,13 @@ module Sidebars
def active_routes
{ controller: :wikis }
end
+
+ override :serialize_as_menu_item_args
+ def serialize_as_menu_item_args
+ super.merge({
+ super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu
+ })
+ end
end
end
end
diff --git a/lib/sidebars/projects/panel.rb b/lib/sidebars/projects/panel.rb
index a47095bd665..9d0f5eb87bd 100644
--- a/lib/sidebars/projects/panel.rb
+++ b/lib/sidebars/projects/panel.rb
@@ -15,15 +15,6 @@ module Sidebars
_('Project navigation')
end
- override :super_sidebar_context_header
- def super_sidebar_context_header
- @super_sidebar_context_header ||= {
- title: context.project.name,
- avatar: context.project.avatar_url,
- id: context.project.id
- }
- end
-
private
def add_menus
diff --git a/lib/sidebars/projects/super_sidebar_menus/plan_menu.rb b/lib/sidebars/projects/super_sidebar_menus/plan_menu.rb
new file mode 100644
index 00000000000..ae9b2d826b7
--- /dev/null
+++ b/lib/sidebars/projects/super_sidebar_menus/plan_menu.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Sidebars
+ module Projects
+ module SuperSidebarMenus
+ class PlanMenu < ::Sidebars::Menu
+ override :title
+ def title
+ _('Plan')
+ end
+
+ override :sprite_icon
+ def sprite_icon
+ 'planning'
+ end
+ end
+ end
+ end
+end
diff --git a/lib/sidebars/projects/super_sidebar_panel.rb b/lib/sidebars/projects/super_sidebar_panel.rb
new file mode 100644
index 00000000000..f0ebea92525
--- /dev/null
+++ b/lib/sidebars/projects/super_sidebar_panel.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module Sidebars
+ module Projects
+ class SuperSidebarPanel < ::Sidebars::Projects::Panel
+ include ::Sidebars::Concerns::SuperSidebarPanel
+ extend ::Gitlab::Utils::Override
+
+ override :configure_menus
+ def configure_menus
+ super
+ old_menus = @menus
+ @menus = []
+
+ add_menu(Sidebars::StaticMenu.new(context))
+ add_menu(Sidebars::Projects::SuperSidebarMenus::PlanMenu.new(context))
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::RepositoryMenu)
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::CiCdMenu)
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::SecurityComplianceMenu)
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::DeploymentsMenu)
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::PackagesRegistriesMenu)
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::InfrastructureMenu)
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::MonitorMenu)
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::AnalyticsMenu)
+ add_menu(Sidebars::UncategorizedMenu.new(context))
+ pick_from_old_menus(old_menus, Sidebars::Projects::Menus::SettingsMenu)
+
+ transform_old_menus(@menus, @scope_menu, *old_menus)
+ end
+
+ override :super_sidebar_context_header
+ def super_sidebar_context_header
+ {
+ title: context.project.name,
+ avatar: context.project.avatar_url,
+ id: context.project.id
+ }
+ end
+ end
+ end
+end
diff --git a/lib/sidebars/static_menu.rb b/lib/sidebars/static_menu.rb
new file mode 100644
index 00000000000..b7ba69b1717
--- /dev/null
+++ b/lib/sidebars/static_menu.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Sidebars
+ # This is a special menu which does not serialize as
+ # a section and instead hoists all of menu items
+ # to be top-level items
+ class StaticMenu < ::Sidebars::Menu
+ override :serialize_for_super_sidebar
+ def serialize_for_super_sidebar
+ serialize_items_for_super_sidebar
+ end
+ end
+end
diff --git a/lib/sidebars/uncategorized_menu.rb b/lib/sidebars/uncategorized_menu.rb
new file mode 100644
index 00000000000..dc9ed8308fa
--- /dev/null
+++ b/lib/sidebars/uncategorized_menu.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Sidebars
+ # This Menu is a temporary help while we implement the new menu
+ # categories for everything. Once every Menu Item is categorized,
+ # we can remove this. This should be done before the Super Sidebar
+ # moves out of Alpha.
+ class UncategorizedMenu < ::Sidebars::Menu
+ override :title
+ def title
+ _('Uncategorized')
+ end
+
+ override :sprite_icon
+ def sprite_icon
+ 'question'
+ end
+ end
+end