diff options
Diffstat (limited to 'lib/gitlab/ci/variables/helpers.rb')
-rw-r--r-- | lib/gitlab/ci/variables/helpers.rb | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/lib/gitlab/ci/variables/helpers.rb b/lib/gitlab/ci/variables/helpers.rb index 300b2708e6d..7cc727bb3ea 100644 --- a/lib/gitlab/ci/variables/helpers.rb +++ b/lib/gitlab/ci/variables/helpers.rb @@ -6,24 +6,26 @@ module Gitlab module Helpers class << self def merge_variables(current_vars, new_vars) - return current_vars if new_vars.blank? + current_vars = transform_from_yaml_variables(current_vars) + new_vars = transform_from_yaml_variables(new_vars) - current_vars = transform_to_array(current_vars) if current_vars.is_a?(Hash) - new_vars = transform_to_array(new_vars) if new_vars.is_a?(Hash) - - (new_vars + current_vars).uniq { |var| var[:key] } + transform_to_yaml_variables( + current_vars.merge(new_vars) + ) end - def transform_to_array(vars) - vars.to_h.map do |key, data| - if data.is_a?(Hash) - { key: key.to_s, **data.except(:key) } - else - { key: key.to_s, value: data } - end + def transform_to_yaml_variables(vars) + vars.to_h.map do |key, value| + { key: key.to_s, value: value, public: true } end end + def transform_from_yaml_variables(vars) + return vars.stringify_keys.transform_values(&:to_s) if vars.is_a?(Hash) + + vars.to_a.to_h { |var| [var[:key].to_s, var[:value]] } + end + def inherit_yaml_variables(from:, to:, inheritance:) merge_variables(apply_inheritance(from, inheritance), to) end @@ -33,7 +35,7 @@ module Gitlab def apply_inheritance(variables, inheritance) case inheritance when true then variables - when false then [] + when false then {} when Array then variables.select { |var| inheritance.include?(var[:key]) } end end |