diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-17 19:05:49 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-17 19:05:49 +0300 |
commit | 43a25d93ebdabea52f99b05e15b06250cd8f07d7 (patch) | |
tree | dceebdc68925362117480a5d672bcff122fb625b /lib/gitlab/database_importers | |
parent | 20c84b99005abd1c82101dfeff264ac50d2df211 (diff) |
Add latest changes from gitlab-org/gitlab@16-0-stable-eev16.0.0-rc42
Diffstat (limited to 'lib/gitlab/database_importers')
6 files changed, 41 insertions, 384 deletions
diff --git a/lib/gitlab/database_importers/instance_administrators/create_group.rb b/lib/gitlab/database_importers/instance_administrators/create_group.rb deleted file mode 100644 index bb489ced3d2..00000000000 --- a/lib/gitlab/database_importers/instance_administrators/create_group.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module DatabaseImporters - module InstanceAdministrators - class CreateGroup < ::BaseService - include Stepable - - NAME = 'GitLab Instance' - PATH_PREFIX = 'gitlab-instance' - VISIBILITY_LEVEL = Gitlab::VisibilityLevel::INTERNAL - - steps :validate_application_settings, - :validate_admins, - :create_group, - :save_group_id, - :add_group_members, - :track_event - - def initialize - super(nil) - end - - def execute - execute_steps - end - - private - - def validate_application_settings(result) - return success(result) if application_settings - - log_error('No application_settings found') - error(_('No application_settings found')) - end - - def validate_admins(result) - unless instance_admins.any? - log_error('No active admin user found') - return error(_('No active admin user found')) - end - - success(result) - end - - def create_group(result) - if group_created? - log_info(_('Instance administrators group already exists')) - result[:group] = instance_administrators_group - return success(result) - end - - result[:group] = ::Groups::CreateService.new(instance_admins.first, create_group_params).execute - - if result[:group].persisted? - success(result) - else - log_error("Could not create instance administrators group. Errors: %{errors}" % { errors: result[:group].errors.full_messages }) - error(_('Could not create group')) - end - end - - def save_group_id(result) - return success(result) if group_created? - - response = application_settings.update( - instance_administrators_group_id: result[:group].id - ) - - if response - success(result) - else - log_error("Could not save instance administrators group ID, errors: %{errors}" % { errors: application_settings.errors.full_messages }) - error(_('Could not save group ID')) - end - end - - def add_group_members(result) - group = result[:group] - members = group.add_members(members_to_add(group), Gitlab::Access::MAINTAINER) - errors = members.flat_map { |member| member.errors.full_messages } - - if errors.any? - log_error('Could not add admins as members to self-monitoring project. Errors: %{errors}' % { errors: errors }) - error(_('Could not add admins as members')) - else - success(result) - end - end - - def track_event(result) - ::Gitlab::Tracking.event("instance_administrators_group", "group_created", namespace: result[:group]) - - success(result) - end - - def group_created? - instance_administrators_group.present? - end - - def application_settings - @application_settings ||= ApplicationSetting.current_without_cache - end - - def instance_administrators_group - application_settings.instance_administrators_group - end - - def instance_admins - @instance_admins ||= User.admins.active - end - - def members_to_add(group) - # Exclude admins who are already members of group because - # `group.add_members(users)` returns an error if the users parameter contains - # users who are already members of the group. - instance_admins - group.members.collect(&:user) - end - - def create_group_params - { - name: NAME, - visibility_level: VISIBILITY_LEVEL, - - # The 8 random characters at the end are so that the path does not - # clash with any existing group that the user might have created. - path: "#{PATH_PREFIX}-#{SecureRandom.hex(4)}" - } - end - end - end - end -end diff --git a/lib/gitlab/database_importers/security/training_providers/importer.rb b/lib/gitlab/database_importers/security/training_providers/importer.rb index aa6a9f29c6d..87bef6400fa 100644 --- a/lib/gitlab/database_importers/security/training_providers/importer.rb +++ b/lib/gitlab/database_importers/security/training_providers/importer.rb @@ -20,6 +20,13 @@ module Gitlab url: "https://integration-api.securecodewarrior.com/api/v1/trial" }.freeze + SECUREFLAG_DATA = { + name: 'SecureFlag', + description: "Get remediation advice with example code and recommended hands-on labs in a fully + interactive virtualised environment.", + url: "https://knowledge-base-api.secureflag.com/gitlab" + }.freeze + module Security class TrainingProvider < ApplicationRecord self.table_name = 'security_training_providers' @@ -31,7 +38,7 @@ module Gitlab timestamps = { created_at: current_time, updated_at: current_time } Security::TrainingProvider.upsert_all( - [KONTRA_DATA.merge(timestamps), SCW_DATA.merge(timestamps)], + [KONTRA_DATA.merge(timestamps), SCW_DATA.merge(timestamps), SECUREFLAG_DATA.merge(timestamps)], unique_by: :index_security_training_providers_on_unique_name ) end diff --git a/lib/gitlab/database_importers/self_monitoring/helpers.rb b/lib/gitlab/database_importers/self_monitoring/helpers.rb deleted file mode 100644 index 6956401e20d..00000000000 --- a/lib/gitlab/database_importers/self_monitoring/helpers.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module DatabaseImporters - module SelfMonitoring - module Helpers - def application_settings - @application_settings ||= ApplicationSetting.current_without_cache - end - - def project_created? - self_monitoring_project.present? - end - - def self_monitoring_project - application_settings.self_monitoring_project - end - - def self_monitoring_project_id - application_settings.self_monitoring_project_id - end - end - end - end -end diff --git a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb b/lib/gitlab/database_importers/self_monitoring/project/create_service.rb deleted file mode 100644 index be500171bef..00000000000 --- a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb +++ /dev/null @@ -1,171 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module DatabaseImporters - module SelfMonitoring - module Project - class CreateService < ::BaseService - include Stepable - include SelfMonitoring::Helpers - - VISIBILITY_LEVEL = Gitlab::VisibilityLevel::INTERNAL - PROJECT_NAME = 'Monitoring' - - steps :validate_application_settings, - :create_group, - :create_project, - :save_project_id, - :create_environment, - :add_prometheus_manual_configuration, - :track_event - - def initialize - super(nil) - end - - def execute - execute_steps - end - - private - - def validate_application_settings(_result) - return success if application_settings - - log_error('No application_settings found') - error(_('No application_settings found')) - end - - def create_group(result) - create_group_response = - Gitlab::DatabaseImporters::InstanceAdministrators::CreateGroup.new.execute - - if create_group_response[:status] == :success - success(result.merge(create_group_response)) - else - error(create_group_response[:message]) - end - end - - def create_project(result) - if project_created? - log_info('Instance administration project already exists') - result[:project] = self_monitoring_project - return success(result) - end - - owner = result[:group].owners.first - - result[:project] = ::Projects::CreateService.new(owner, create_project_params(result[:group])).execute - - if result[:project].persisted? - success(result) - else - log_error("Could not create instance administration project. Errors: %{errors}" % { errors: result[:project].errors.full_messages }) - error(_('Could not create project')) - end - end - - def save_project_id(result) - return success(result) if project_created? - - response = application_settings.update( - self_monitoring_project_id: result[:project].id - ) - - if response - # In the add_prometheus_manual_configuration method, the Prometheus - # server_address config is saved as an api_url in the Integrations::Prometheus - # model. There are validates hooks in the Integrations::Prometheus model that - # check if the project associated with the Integrations::Prometheus is the - # self_monitoring project. It checks - # Gitlab::CurrentSettings.self_monitoring_project_id, which is why the - # Gitlab::CurrentSettings cache needs to be expired here, so that - # Integrations::Prometheus sees the latest self_monitoring_project_id. - Gitlab::CurrentSettings.expire_current_application_settings - success(result) - else - log_error("Could not save instance administration project ID, errors: %{errors}" % { errors: application_settings.errors.full_messages }) - error(_('Could not save project ID')) - end - end - - def create_environment(result) - return success(result) if result[:project].environments.exists? - - environment = ::Environment.new(project_id: result[:project].id, name: 'production') - - if environment.save - success(result) - else - log_error("Could not create environment for the Self-monitoring project. Errors: %{errors}" % { errors: environment.errors.full_messages }) - error(_('Could not create environment')) - end - end - - def add_prometheus_manual_configuration(result) - return success(result) unless prometheus_enabled? - return success(result) unless prometheus_server_address.present? - - prometheus = result[:project].find_or_initialize_integration('prometheus') - - unless prometheus.update(prometheus_integration_attributes) - log_error('Could not save prometheus manual configuration for self-monitoring project. Errors: %{errors}' % { errors: prometheus.errors.full_messages }) - return error(_('Could not save prometheus manual configuration')) - end - - success(result) - end - - def track_event(result) - project = result[:project] - ::Gitlab::Tracking.event("self_monitoring", "project_created", project: project, namespace: project.namespace) - - success(result) - end - - def parse_url(uri_string) - Addressable::URI.parse(uri_string) - rescue Addressable::URI::InvalidURIError, TypeError - end - - def prometheus_enabled? - ::Gitlab::Prometheus::Internal.prometheus_enabled? - end - - def prometheus_server_address - ::Gitlab::Prometheus::Internal.server_address - end - - def docs_path - Rails.application.routes.url_helpers.help_page_path( - 'administration/monitoring/gitlab_self_monitoring_project/index' - ) - end - - def create_project_params(group) - { - initialize_with_readme: true, - visibility_level: VISIBILITY_LEVEL, - name: PROJECT_NAME, - description: "This project is automatically generated and helps monitor this GitLab instance. [Learn more](#{docs_path}).", - namespace_id: group.id - } - end - - def internal_prometheus_server_address_uri - ::Gitlab::Prometheus::Internal.uri - end - - def prometheus_integration_attributes - { - api_url: internal_prometheus_server_address_uri, - manual_configuration: true, - active: true - } - end - end - end - end - end -end diff --git a/lib/gitlab/database_importers/self_monitoring/project/delete_service.rb b/lib/gitlab/database_importers/self_monitoring/project/delete_service.rb deleted file mode 100644 index d5bed94d735..00000000000 --- a/lib/gitlab/database_importers/self_monitoring/project/delete_service.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module DatabaseImporters - module SelfMonitoring - module Project - class DeleteService < ::BaseService - include Stepable - include SelfMonitoring::Helpers - - steps :validate_self_monitoring_project_exists, - :destroy_project - - def initialize - super(nil) - end - - def execute - execute_steps - end - - private - - def validate_self_monitoring_project_exists(result) - unless project_created? || self_monitoring_project_id.present? - return error(_('Self-monitoring project does not exist')) - end - - success(result) - end - - def destroy_project(result) - return success(result) unless project_created? - - if self_monitoring_project.destroy - success(result) - else - log_error(self_monitoring_project.errors.full_messages) - error(_('Error deleting project. Check logs for error details.')) - end - end - end - end - end - end -end diff --git a/lib/gitlab/database_importers/work_items/base_type_importer.rb b/lib/gitlab/database_importers/work_items/base_type_importer.rb index 9796a5905e3..8f8f44e8392 100644 --- a/lib/gitlab/database_importers/work_items/base_type_importer.rb +++ b/lib/gitlab/database_importers/work_items/base_type_importer.rb @@ -18,7 +18,10 @@ module Gitlab progress: 'Progress', status: 'Status', requirement_legacy: 'Requirement legacy', - test_reports: 'Test reports' + test_reports: 'Test reports', + notifications: 'Notifications', + current_user_todos: "Current user todos", + award_emoji: 'Award emoji' }.freeze WIDGETS_FOR_TYPE = { @@ -32,23 +35,36 @@ module Gitlab :notes, :iteration, :weight, - :health_status + :health_status, + :notifications, + :current_user_todos, + :award_emoji ], incident: [ + :assignees, :description, :hierarchy, - :notes + :notes, + :notifications, + :current_user_todos, + :award_emoji ], test_case: [ :description, - :notes + :notes, + :notifications, + :current_user_todos, + :award_emoji ], requirement: [ :description, :notes, :status, :requirement_legacy, - :test_reports + :test_reports, + :notifications, + :current_user_todos, + :award_emoji ], task: [ :assignees, @@ -59,7 +75,10 @@ module Gitlab :milestone, :notes, :iteration, - :weight + :weight, + :notifications, + :current_user_todos, + :award_emoji ], objective: [ :assignees, @@ -69,7 +88,10 @@ module Gitlab :milestone, :notes, :health_status, - :progress + :progress, + :notifications, + :current_user_todos, + :award_emoji ], key_result: [ :assignees, @@ -79,7 +101,10 @@ module Gitlab :start_and_due_date, :notes, :health_status, - :progress + :progress, + :notifications, + :current_user_todos, + :award_emoji ] }.freeze |