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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-05-17 19:05:49 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-05-17 19:05:49 +0300
commit43a25d93ebdabea52f99b05e15b06250cd8f07d7 (patch)
treedceebdc68925362117480a5d672bcff122fb625b /lib/gitlab/database_importers
parent20c84b99005abd1c82101dfeff264ac50d2df211 (diff)
Add latest changes from gitlab-org/gitlab@16-0-stable-eev16.0.0-rc42
Diffstat (limited to 'lib/gitlab/database_importers')
-rw-r--r--lib/gitlab/database_importers/instance_administrators/create_group.rb133
-rw-r--r--lib/gitlab/database_importers/security/training_providers/importer.rb9
-rw-r--r--lib/gitlab/database_importers/self_monitoring/helpers.rb25
-rw-r--r--lib/gitlab/database_importers/self_monitoring/project/create_service.rb171
-rw-r--r--lib/gitlab/database_importers/self_monitoring/project/delete_service.rb46
-rw-r--r--lib/gitlab/database_importers/work_items/base_type_importer.rb41
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