summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-11-06 18:35:44 +0100
committerMatija Čupić <matteeyah@gmail.com>2018-11-06 18:35:44 +0100
commit4ba960c17d07e5863045c74fb554ebe71575d54d (patch)
tree6b4e7e850bd65725203080f7ae4123123b782cab
parentf48261a409f4f4d73118621330796ed92623f08e (diff)
downloadgitlab-ce-4ba960c17d07e5863045c74fb554ebe71575d54d.tar.gz
Use instance based approach for Normalizer
-rw-r--r--lib/gitlab/ci/config/normalizer.rb76
-rw-r--r--lib/gitlab/ci/yaml_processor.rb2
-rw-r--r--spec/lib/gitlab/ci/config/normalizer_spec.rb2
3 files changed, 41 insertions, 39 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
diff --git a/spec/lib/gitlab/ci/config/normalizer_spec.rb b/spec/lib/gitlab/ci/config/normalizer_spec.rb
index 2e3d3cc1b2b..65718d1a432 100644
--- a/spec/lib/gitlab/ci/config/normalizer_spec.rb
+++ b/spec/lib/gitlab/ci/config/normalizer_spec.rb
@@ -8,7 +8,7 @@ describe Gitlab::Ci::Config::Normalizer do
let(:config) { { job_name => job_config } }
describe '.normalize_jobs' do
- subject { described_class.normalize_jobs(config) }
+ subject { described_class.new(config).normalize_jobs }
it 'does not have original job' do
is_expected.not_to include(job_name)