diff options
Diffstat (limited to 'lib/bulk_imports')
-rw-r--r-- | lib/bulk_imports/clients/http.rb | 13 | ||||
-rw-r--r-- | lib/bulk_imports/pipeline/runner.rb | 2 | ||||
-rw-r--r-- | lib/bulk_imports/stage.rb | 65 |
3 files changed, 78 insertions, 2 deletions
diff --git a/lib/bulk_imports/clients/http.rb b/lib/bulk_imports/clients/http.rb index ef99122cdfd..c89679f63b5 100644 --- a/lib/bulk_imports/clients/http.rb +++ b/lib/bulk_imports/clients/http.rb @@ -28,6 +28,17 @@ module BulkImports end end + def post(resource, body = {}) + with_error_handling do + Gitlab::HTTP.post( + resource_url(resource), + headers: request_headers, + follow_redirects: false, + body: body + ) + end + end + def each_page(method, resource, query = {}, &block) return to_enum(__method__, method, resource, query) unless block_given? @@ -63,7 +74,7 @@ module BulkImports def with_error_handling response = yield - raise ConnectionError.new("Error #{response.code}") unless response.success? + raise ConnectionError, "Error #{response.code}" unless response.success? response rescue *Gitlab::HTTP::HTTP_ERRORS => e diff --git a/lib/bulk_imports/pipeline/runner.rb b/lib/bulk_imports/pipeline/runner.rb index b756fba3bee..8f515b571a6 100644 --- a/lib/bulk_imports/pipeline/runner.rb +++ b/lib/bulk_imports/pipeline/runner.rb @@ -56,7 +56,7 @@ module BulkImports pipeline_step: step, step_class: class_name ) - rescue => e + rescue StandardError => e log_import_failure(e, step) mark_as_failed if abort_on_failure? diff --git a/lib/bulk_imports/stage.rb b/lib/bulk_imports/stage.rb new file mode 100644 index 00000000000..35b77240ea7 --- /dev/null +++ b/lib/bulk_imports/stage.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +module BulkImports + class Stage + include Singleton + + CONFIG = { + group: { + pipeline: BulkImports::Groups::Pipelines::GroupPipeline, + stage: 0 + }, + subgroups: { + pipeline: BulkImports::Groups::Pipelines::SubgroupEntitiesPipeline, + stage: 1 + }, + members: { + pipeline: BulkImports::Groups::Pipelines::MembersPipeline, + stage: 1 + }, + labels: { + pipeline: BulkImports::Groups::Pipelines::LabelsPipeline, + stage: 1 + }, + milestones: { + pipeline: BulkImports::Groups::Pipelines::MilestonesPipeline, + stage: 1 + }, + badges: { + pipeline: BulkImports::Groups::Pipelines::BadgesPipeline, + stage: 1 + }, + finisher: { + pipeline: BulkImports::Groups::Pipelines::EntityFinisher, + stage: 2 + } + }.freeze + + def self.pipelines + instance.pipelines + end + + def self.pipeline_exists?(name) + pipelines.any? do |(_, pipeline)| + pipeline.to_s == name.to_s + end + end + + def pipelines + @pipelines ||= config + .values + .sort_by { |entry| entry[:stage] } + .map do |entry| + [entry[:stage], entry[:pipeline]] + end + end + + private + + def config + @config ||= CONFIG + end + end +end + +::BulkImports::Stage.prepend_mod_with('BulkImports::Stage') |