34 lines
961 B
Ruby
34 lines
961 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Ci
|
|
class ExtractSectionsFromBuildTraceService < BaseService
|
|
def execute(build)
|
|
return false unless build.trace_sections.empty?
|
|
|
|
Gitlab::Database.bulk_insert(BuildTraceSection.table_name, extract_sections(build)) # rubocop:disable Gitlab/BulkInsert
|
|
true
|
|
end
|
|
|
|
private
|
|
|
|
# rubocop: disable CodeReuse/ActiveRecord
|
|
def find_or_create_name(name)
|
|
project.build_trace_section_names.find_or_create_by!(name: name)
|
|
rescue ActiveRecord::RecordInvalid
|
|
project.build_trace_section_names.find_by!(name: name)
|
|
end
|
|
# rubocop: enable CodeReuse/ActiveRecord
|
|
|
|
def extract_sections(build)
|
|
build.trace.extract_sections.map do |attr|
|
|
name = attr.delete(:name)
|
|
name_record = find_or_create_name(name)
|
|
|
|
attr.merge(
|
|
build_id: build.id,
|
|
project_id: project.id,
|
|
section_name_id: name_record.id)
|
|
end
|
|
end
|
|
end
|
|
end
|