mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-07-25 16:03:48 +00:00
67 lines
1.8 KiB
Ruby
67 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Ci
|
|
module PipelineCreation
|
|
class PushOptions
|
|
def self.fabricate(push_options)
|
|
if push_options.is_a?(self)
|
|
push_options
|
|
elsif push_options.is_a?(Hash)
|
|
new(push_options)
|
|
elsif push_options.blank?
|
|
new({})
|
|
else
|
|
raise ArgumentError, 'Unknown type of push_option'
|
|
end
|
|
end
|
|
|
|
def initialize(push_options)
|
|
@push_options = push_options&.deep_symbolize_keys || {}
|
|
end
|
|
|
|
def skips_ci?
|
|
push_options.dig(:ci, :skip).present?
|
|
end
|
|
|
|
def variables
|
|
raw_push_options_variables = push_options.dig(:ci, :variable)
|
|
return [] unless raw_push_options_variables
|
|
|
|
raw_vars = extract_key_value_pairs_from_push_option(raw_push_options_variables)
|
|
|
|
raw_vars.map do |key, value|
|
|
{ "key" => key, "variable_type" => "env_var", "secret_value" => value }
|
|
end
|
|
end
|
|
|
|
def inputs
|
|
raw_push_options_inputs = push_options.dig(:ci, :input)
|
|
return {} unless raw_push_options_inputs
|
|
|
|
extract_key_value_pairs_from_push_option(raw_push_options_inputs).to_h
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :push_options
|
|
|
|
def extract_key_value_pairs_from_push_option(push_option)
|
|
# When extracting variables and encountering a missing `key` or `value`, this is valid:
|
|
# "ABC=" -> `key` would be `ABC` and value an empty string
|
|
# These formats are invalid and will be ignored:
|
|
# "=123" -> `key` would be an empty string
|
|
# "ABC" -> `value` would be nil
|
|
|
|
return [] unless push_option
|
|
|
|
push_option.each_with_object([]) do |(raw_value, _), result|
|
|
key, value = raw_value.to_s.split("=", 2)
|
|
next if key.blank? || value.nil?
|
|
|
|
result << [key, value]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|