d434af46f4
We extracted implementation of build/bridge metadata attributes to a separate concern, because in EE `Ci::Bridge` also has metadata attributes, and we want to build abstraction for storing values in build metadata table.
69 lines
1.8 KiB
Ruby
69 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Ci
|
|
##
|
|
# This module implements methods that need to read and write
|
|
# metadata for CI/CD entities.
|
|
#
|
|
module Metadatable
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
has_one :metadata, class_name: 'Ci::BuildMetadata',
|
|
foreign_key: :build_id,
|
|
inverse_of: :build,
|
|
autosave: true
|
|
|
|
delegate :timeout, to: :metadata, prefix: true, allow_nil: true
|
|
before_create :ensure_metadata
|
|
end
|
|
|
|
def ensure_metadata
|
|
metadata || build_metadata(project: project)
|
|
end
|
|
|
|
def degenerated?
|
|
self.options.blank?
|
|
end
|
|
|
|
def degenerate!
|
|
self.class.transaction do
|
|
self.update!(options: nil, yaml_variables: nil)
|
|
self.metadata&.destroy
|
|
end
|
|
end
|
|
|
|
def options
|
|
read_metadata_attribute(:options, :config_options, {})
|
|
end
|
|
|
|
def yaml_variables
|
|
read_metadata_attribute(:yaml_variables, :config_variables, [])
|
|
end
|
|
|
|
def options=(value)
|
|
write_metadata_attribute(:options, :config_options, value)
|
|
end
|
|
|
|
def yaml_variables=(value)
|
|
write_metadata_attribute(:yaml_variables, :config_variables, value)
|
|
end
|
|
|
|
private
|
|
|
|
def read_metadata_attribute(legacy_key, metadata_key, default_value = nil)
|
|
read_attribute(legacy_key) || metadata&.read_attribute(metadata_key) || default_value
|
|
end
|
|
|
|
def write_metadata_attribute(legacy_key, metadata_key, value)
|
|
# save to metadata or this model depending on the state of feature flag
|
|
if Feature.enabled?(:ci_build_metadata_config)
|
|
ensure_metadata.write_attribute(metadata_key, value)
|
|
write_attribute(legacy_key, nil)
|
|
else
|
|
write_attribute(legacy_key, value)
|
|
metadata&.write_attribute(metadata_key, nil)
|
|
end
|
|
end
|
|
end
|
|
end
|