diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-28 15:14:07 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-28 15:14:07 +0300 |
commit | 22ecb1e3fc02bb923c3e9941b1baa849348a036f (patch) | |
tree | c01d9e91564f50e790a63c71675dd0f6e7735153 /lib | |
parent | 5eab6dcdd923ca375b86d6993f20a3e37dbd7a51 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r-- | lib/api/entities/ci/job_request/response.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/ci/config/entry/job.rb | 6 | ||||
-rw-r--r-- | lib/gitlab/database/migrations/test_batched_background_runner.rb | 2 | ||||
-rw-r--r-- | lib/sidebars/concerns/super_sidebar_panel.rb | 53 | ||||
-rw-r--r-- | lib/sidebars/menu.rb | 11 | ||||
-rw-r--r-- | lib/sidebars/menu_item.rb | 6 | ||||
-rw-r--r-- | lib/sidebars/projects/menus/issues_menu.rb | 15 | ||||
-rw-r--r-- | lib/sidebars/projects/menus/merge_requests_menu.rb | 10 | ||||
-rw-r--r-- | lib/sidebars/projects/menus/project_information_menu.rb | 10 | ||||
-rw-r--r-- | lib/sidebars/projects/menus/scope_menu.rb | 9 | ||||
-rw-r--r-- | lib/sidebars/projects/menus/wiki_menu.rb | 7 | ||||
-rw-r--r-- | lib/sidebars/projects/panel.rb | 9 | ||||
-rw-r--r-- | lib/sidebars/projects/super_sidebar_menus/plan_menu.rb | 19 | ||||
-rw-r--r-- | lib/sidebars/projects/super_sidebar_panel.rb | 41 | ||||
-rw-r--r-- | lib/sidebars/static_menu.rb | 13 | ||||
-rw-r--r-- | lib/sidebars/uncategorized_menu.rb | 19 |
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 |