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:
Diffstat (limited to 'app/services/bulk_imports/create_pipeline_trackers_service.rb')
-rw-r--r--app/services/bulk_imports/create_pipeline_trackers_service.rb68
1 files changed, 68 insertions, 0 deletions
diff --git a/app/services/bulk_imports/create_pipeline_trackers_service.rb b/app/services/bulk_imports/create_pipeline_trackers_service.rb
new file mode 100644
index 00000000000..5c9c68e62b5
--- /dev/null
+++ b/app/services/bulk_imports/create_pipeline_trackers_service.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+module BulkImports
+ class CreatePipelineTrackersService
+ def initialize(entity)
+ @entity = entity
+ end
+
+ def execute!
+ entity.class.transaction do
+ entity.pipelines.each do |pipeline|
+ status = skip_pipeline?(pipeline) ? -2 : 0
+
+ entity.trackers.create!(
+ stage: pipeline[:stage],
+ pipeline_name: pipeline[:pipeline],
+ status: status
+ )
+ end
+ end
+ end
+
+ private
+
+ attr_reader :entity
+
+ def skip_pipeline?(pipeline)
+ return false unless source_version.valid?
+
+ minimum_version, maximum_version = pipeline.values_at(:minimum_source_version, :maximum_source_version)
+
+ if minimum_version && non_patch_source_version < Gitlab::VersionInfo.parse(minimum_version)
+ log_skipped_pipeline(pipeline, minimum_version, maximum_version)
+ return true
+ end
+
+ if maximum_version && non_patch_source_version > Gitlab::VersionInfo.parse(maximum_version)
+ log_skipped_pipeline(pipeline, minimum_version, maximum_version)
+ return true
+ end
+
+ false
+ end
+
+ def source_version
+ @source_version ||= entity.bulk_import.source_version_info
+ end
+
+ def non_patch_source_version
+ Gitlab::VersionInfo.new(source_version.major, source_version.minor, 0)
+ end
+
+ def log_skipped_pipeline(pipeline, minimum_version, maximum_version)
+ logger.info(
+ message: 'Pipeline skipped as source instance version not compatible with pipeline',
+ entity_id: entity.id,
+ pipeline_name: pipeline[:pipeline],
+ minimum_source_version: minimum_version,
+ maximum_source_version: maximum_version,
+ source_version: source_version.to_s
+ )
+ end
+
+ def logger
+ @logger ||= Gitlab::Import::Logger.build
+ end
+ end
+end