diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/ci/config/normalizer.rb | 76 | ||||
-rw-r--r-- | lib/gitlab/ci/yaml_processor.rb | 2 |
2 files changed, 40 insertions, 38 deletions
diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index bfe976c04bf..ef263c4933c 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -4,57 +4,59 @@ module Gitlab module Ci class Config class Normalizer - class << self - def normalize_jobs(jobs_config) - parallelized_jobs = extract_parallelized_jobs(jobs_config) - parallelized_config = parallelize_jobs(jobs_config, parallelized_jobs) - parallelize_dependencies(parallelized_config, parallelized_jobs) - end + def initialize(jobs_config) + @jobs_config = jobs_config + end + + def normalize_jobs + extract_parallelized_jobs + parallelized_config = parallelize_jobs + parallelize_dependencies(parallelized_config) + end - private + private - def extract_parallelized_jobs(jobs_config) - parallelized_jobs = {} + def extract_parallelized_jobs + @parallelized_jobs = {} - jobs_config.each do |job_name, config| - if config[:parallel] - parallelized_jobs[job_name] = parallelize_job_names(job_name, config[:parallel]) - end + @jobs_config.each do |job_name, config| + if config[:parallel] + @parallelized_jobs[job_name] = self.class.parallelize_job_names(job_name, config[:parallel]) end - - parallelized_jobs end - def parallelize_jobs(jobs_config, parallelized_jobs) - jobs_config.each_with_object({}) do |(job_name, config), hash| - if parallelized_jobs.key?(job_name) - parallelized_jobs[job_name].each { |name, index| hash[name.to_sym] = config.merge(name: name, instance: index) } - else - hash[job_name] = config - end + @parallelized_jobs + end - hash + def parallelize_jobs + @jobs_config.each_with_object({}) do |(job_name, config), hash| + if @parallelized_jobs.key?(job_name) + @parallelized_jobs[job_name].each { |name, index| hash[name.to_sym] = config.merge(name: name, instance: index) } + else + hash[job_name] = config end + + hash end + end - def parallelize_dependencies(parallelized_config, parallelized_jobs) - parallelized_config.each_with_object({}) do |(job_name, config), hash| - intersection = config[:dependencies] & parallelized_jobs.keys.map(&:to_s) - if intersection && intersection.any? - deps = intersection.map { |dep| parallelized_jobs[dep.to_sym].map(&:first) }.flatten - hash[job_name] = config.merge(dependencies: deps) - else - hash[job_name] = config - end - - hash + def parallelize_dependencies(parallelized_config) + parallelized_config.each_with_object({}) do |(job_name, config), hash| + intersection = config[:dependencies] & @parallelized_jobs.keys.map(&:to_s) + if intersection && intersection.any? + deps = intersection.map { |dep| @parallelized_jobs[dep.to_sym].map(&:first) }.flatten + hash[job_name] = config.merge(dependencies: deps) + else + hash[job_name] = config end - end - def parallelize_job_names(name, total) - Array.new(total) { |index| ["#{name} #{index + 1}/#{total}", index + 1] } + hash end end + + def self.parallelize_job_names(name, total) + Array.new(total) { |index| ["#{name} #{index + 1}/#{total}", index + 1] } + end end end end diff --git a/lib/gitlab/ci/yaml_processor.rb b/lib/gitlab/ci/yaml_processor.rb index 63b55c57913..f65a4e198cc 100644 --- a/lib/gitlab/ci/yaml_processor.rb +++ b/lib/gitlab/ci/yaml_processor.rb @@ -104,7 +104,7 @@ module Gitlab ## # Jobs # - @jobs = Ci::Config::Normalizer.normalize_jobs(@ci_config.jobs) + @jobs = Ci::Config::Normalizer.new(@ci_config.jobs).normalize_jobs @jobs.each do |name, job| # logical validation for job |