gitlab-org--gitlab-foss/lib/gitlab/background_migration/migrate_build_stage.rb

66 lines
1.5 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
# rubocop:disable Metrics/AbcSize
# rubocop:disable Style/Documentation
module Gitlab
module BackgroundMigration
class MigrateBuildStage
def perform(id)
Ci::Build.find_by(id: id).try do |build|
Stage.new(build).tap do |stage|
break if stage.exists?
stage.ensure!
stage.migrate_reference!
stage.migrate_status!
end
end
end
class Ci::Stage < ActiveRecord::Base
self.table_name = 'ci_stages'
end
class Ci::Build < ActiveRecord::Base
self.table_name = 'ci_builds'
end
class Stage
def initialize(build)
@build = build
end
def exists?
@build.reload.stage_id.present?
end
def ensure!
find || create!
end
def find
Ci::Stage.find_by(name: @build.stage,
pipeline_id: @build.commit_id,
project_id: @build.project_id)
end
def create!
Ci::Stage.create!(name: @build.stage,
pipeline_id: @build.commit_id,
project_id: @build.project_id)
end
def migrate_reference!
MigrateBuildStageIdReference.new.perform(@build.id, @build.id)
end
def migrate_status!
raise ArgumentError unless exists?
MigrateStageStatus.new.perform(@build.stage_id, @build.stage_id)
end
end
end
end
end