From eaf211c2e393a2eeb5999b9ffec17112cdd52a0c Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon <grzesiek.bizon@gmail.com> Date: Thu, 25 Aug 2016 13:49:15 +0200 Subject: [PATCH] Expose compose method in the ci config entry nodes --- lib/gitlab/ci/config.rb | 2 +- lib/gitlab/ci/config/node/configurable.rb | 10 ++++++-- lib/gitlab/ci/config/node/entry.rb | 17 ++++++-------- lib/gitlab/ci/config/node/global.rb | 14 ++++-------- lib/gitlab/ci/config/node/job.rb | 20 ++++++++-------- lib/gitlab/ci/config/node/jobs.rb | 28 +++++++++++++---------- 6 files changed, 47 insertions(+), 44 deletions(-) diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb index ae82c0db3f1..bbfa6cf7d05 100644 --- a/lib/gitlab/ci/config.rb +++ b/lib/gitlab/ci/config.rb @@ -14,7 +14,7 @@ module Gitlab @config = Loader.new(config).load! @global = Node::Global.new(@config) - @global.process! + @global.compose! end def valid? diff --git a/lib/gitlab/ci/config/node/configurable.rb b/lib/gitlab/ci/config/node/configurable.rb index fb3604edac2..530f95a6251 100644 --- a/lib/gitlab/ci/config/node/configurable.rb +++ b/lib/gitlab/ci/config/node/configurable.rb @@ -23,9 +23,9 @@ module Gitlab end end - private + def compose!(deps) + return unless valid? - def compose!(_deps) self.class.nodes.each do |key, factory| factory .value(@config[key]) @@ -33,6 +33,12 @@ module Gitlab @entries[key] = factory.create! end + + yield if block_given? + + @entries.each_value do |entry| + entry.compose!(deps) + end end class_methods do diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb index 40ffa85d6da..e02f4bf0a05 100644 --- a/lib/gitlab/ci/config/node/entry.rb +++ b/lib/gitlab/ci/config/node/entry.rb @@ -20,14 +20,16 @@ module Gitlab @validator.validate(:new) end + # Temporary method + # def process!(deps = nil) - return unless valid? - compose!(deps) + end - descendants.each do |entry| - entry.process!(deps) - end + def compose!(deps = nil) + return unless valid? + + yield if block_given? end def leaf? @@ -76,11 +78,6 @@ module Gitlab def self.validator Validator end - - private - - def compose!(_deps) - end end end end diff --git a/lib/gitlab/ci/config/node/global.rb b/lib/gitlab/ci/config/node/global.rb index 4d65309cf44..2a2943c9288 100644 --- a/lib/gitlab/ci/config/node/global.rb +++ b/lib/gitlab/ci/config/node/global.rb @@ -36,19 +36,15 @@ module Gitlab helpers :before_script, :image, :services, :after_script, :variables, :stages, :types, :cache, :jobs - def process!(_deps = nil) - super(self) + def compose!(_deps = nil) + super(self) do + compose_jobs! + compose_deprecated_entries! + end end private - def compose!(_deps) - super - - compose_jobs! - compose_deprecated_entries! - end - def compose_jobs! factory = Node::Factory.new(Node::Jobs) .value(@config.except(*self.class.nodes.keys)) diff --git a/lib/gitlab/ci/config/node/job.rb b/lib/gitlab/ci/config/node/job.rb index 55f34b446e5..9317bb40f50 100644 --- a/lib/gitlab/ci/config/node/job.rb +++ b/lib/gitlab/ci/config/node/job.rb @@ -82,6 +82,16 @@ module Gitlab :cache, :image, :services, :only, :except, :variables, :artifacts + def compose!(deps) + super do + if type_defined? && !stage_defined? + @entries[:stage] = @entries[:type] + end + + @entries.delete(:type) + end + end + def name @metadata[:name] end @@ -106,16 +116,6 @@ module Gitlab artifacts: artifacts, after_script: after_script } end - - def compose!(_deps) - super - - if type_defined? && !stage_defined? - @entries[:stage] = @entries[:type] - end - - @entries.delete(:type) - end end end end diff --git a/lib/gitlab/ci/config/node/jobs.rb b/lib/gitlab/ci/config/node/jobs.rb index a2a8554ed19..45865825e46 100644 --- a/lib/gitlab/ci/config/node/jobs.rb +++ b/lib/gitlab/ci/config/node/jobs.rb @@ -26,19 +26,23 @@ module Gitlab name.to_s.start_with?('.') end - private - - def compose!(_deps) - @config.each do |name, config| - node = hidden?(name) ? Node::HiddenJob : Node::Job - - factory = Node::Factory.new(node) - .value(config || {}) - .metadata(name: name) - .with(key: name, parent: self, - description: "#{name} job definition.") + def compose!(deps = nil) + super do + @config.each do |name, config| + node = hidden?(name) ? Node::HiddenJob : Node::Job + + factory = Node::Factory.new(node) + .value(config || {}) + .metadata(name: name) + .with(key: name, parent: self, + description: "#{name} job definition.") + + @entries[name] = factory.create! + end - @entries[name] = factory.create! + @entries.each_value do |entry| + entry.compose!(deps) + end end end end -- GitLab