Commit 5fd8933d authored by Matija Čupić's avatar Matija Čupić

Use instance based approach for Normalizer

parent a8da5238
...@@ -4,58 +4,54 @@ module Gitlab ...@@ -4,58 +4,54 @@ module Gitlab
module Ci module Ci
class Config class Config
class Normalizer class Normalizer
class << self def initialize(jobs_config)
def normalize_jobs(jobs_config) @jobs_config = jobs_config
parallelized_config, parallelized_jobs = parallelize_jobs(jobs_config) end
parallelize_dependencies(parallelized_config, parallelized_jobs)
end def normalize_jobs
parallelized_jobs = parallelize_jobs
private parallelize_dependencies(parallelized_jobs)
end
def parallelize_jobs(jobs_config)
parallelized_jobs = {} private
parallelized_config = jobs_config.map do |name, config| def parallelize_jobs
if config[:parallel] parallelized_jobs = {}
total = config[:parallel]
names = parallelize_job_names(name, total) @jobs_config = @jobs_config.map do |name, config|
parallelized_jobs[name] = names.map(&:first) if config[:parallel]
Hash[names.collect { |job_name, index| [job_name.to_sym, config.merge(name: job_name, instance: index)] }] total = config[:parallel]
else names = self.class.parallelize_job_names(name, total)
{ name => config } parallelized_jobs[name] = names.map(&:first)
end Hash[names.collect { |job_name, index| [job_name.to_sym, config.merge(name: job_name, instance: index)] }]
end.reduce(:merge) else
{ name => config }
[parallelized_config, parallelized_jobs]
end
def parallelize_dependencies(jobs_config, parallelized_jobs)
jobs_config.map do |name, config|
if config[:dependencies]
deps = config[:dependencies].map do |dep|
if parallelized_jobs.keys.include?(dep.to_sym)
parallelized_jobs[dep.to_sym]
else
dep
end
end.flatten
{ name => config.merge(dependencies: deps) }
else
{ name => config }
end
end.reduce(:merge)
end
def parallelize_job_names(name, total)
jobs = []
1.upto(total) do |idx|
jobs << ["#{name} #{idx}/#{total}", idx]
end end
end.reduce(:merge)
parallelized_jobs
end
def parallelize_dependencies(parallelized_jobs)
@jobs_config.map do |name, config|
if config[:dependencies]
deps = config[:dependencies].map do |dep|
if parallelized_jobs.keys.include?(dep.to_sym)
parallelized_jobs[dep.to_sym]
else
dep
end
end.flatten
{ name => config.merge(dependencies: deps) }
else
{ name => config }
end
end.reduce(:merge)
end
jobs def self.parallelize_job_names(name, total)
end Array.new(total) { |index| ["#{name} #{index + 1}/#{total}", index + 1] }
end end
end end
end end
......
...@@ -104,7 +104,7 @@ module Gitlab ...@@ -104,7 +104,7 @@ module Gitlab
## ##
# Jobs # 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| @jobs.each do |name, job|
# logical validation for job # logical validation for job
......
...@@ -8,7 +8,7 @@ describe Gitlab::Ci::Config::Normalizer do ...@@ -8,7 +8,7 @@ describe Gitlab::Ci::Config::Normalizer do
let(:config) { { job_name => job_config } } let(:config) { { job_name => job_config } }
describe '.normalize_jobs' do describe '.normalize_jobs' do
subject { described_class.normalize_jobs(config) } subject { described_class.new(config).normalize_jobs }
it 'does not have original job' do it 'does not have original job' do
is_expected.not_to include(job_name) is_expected.not_to include(job_name)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment