From d9b56bc13b94bdc69a14a2b4201e25e141a62ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Fri, 26 Oct 2018 22:02:09 +0200 Subject: Add parallel keyword to CI config --- lib/gitlab/ci/config/entry/job.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/entry/job.rb b/lib/gitlab/ci/config/entry/job.rb index f290ff3a565..368b5eb2a89 100644 --- a/lib/gitlab/ci/config/entry/job.rb +++ b/lib/gitlab/ci/config/entry/job.rb @@ -12,7 +12,7 @@ module Gitlab ALLOWED_KEYS = %i[tags script only except type image services allow_failure type stage when start_in artifacts cache dependencies before_script after_script variables - environment coverage retry extends].freeze + environment coverage retry parallel extends].freeze validations do validates :config, allowed_keys: ALLOWED_KEYS @@ -27,6 +27,8 @@ module Gitlab validates :retry, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: 2 } + validates :parallel, numericality: { only_integer: true, + greater_than_or_equal_to: 1 } validates :when, inclusion: { in: %w[on_success on_failure always manual delayed], message: 'should be on_success, on_failure, ' \ @@ -77,17 +79,18 @@ module Gitlab description: 'Artifacts configuration for this job.' entry :environment, Entry::Environment, - description: 'Environment configuration for this job.' + description: 'Environment configuration for this job.' entry :coverage, Entry::Coverage, - description: 'Coverage configuration for this job.' + description: 'Coverage configuration for this job.' helpers :before_script, :script, :stage, :type, :after_script, :cache, :image, :services, :only, :except, :variables, - :artifacts, :commands, :environment, :coverage, :retry + :artifacts, :commands, :environment, :coverage, :retry, + :parallel attributes :script, :tags, :allow_failure, :when, :dependencies, - :retry, :extends, :start_in + :retry, :parallel, :extends, :start_in def compose!(deps = nil) super do @@ -156,6 +159,7 @@ module Gitlab environment_name: environment_defined? ? environment_value[:name] : nil, coverage: coverage_defined? ? coverage_value : nil, retry: retry_defined? ? retry_value.to_i : nil, + parallel: parallel_defined? ? parallel_value.to_i : nil, artifacts: artifacts_value, after_script: after_script_value, ignore: ignored? } -- cgit v1.2.1 From 9ba72fe09aaf3bf903494f09fe8896012e962c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sat, 27 Oct 2018 19:06:46 +0200 Subject: Change minimum parallel value to 2 --- lib/gitlab/ci/config/entry/job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/entry/job.rb b/lib/gitlab/ci/config/entry/job.rb index 368b5eb2a89..c73c88583b0 100644 --- a/lib/gitlab/ci/config/entry/job.rb +++ b/lib/gitlab/ci/config/entry/job.rb @@ -28,7 +28,7 @@ module Gitlab greater_than_or_equal_to: 0, less_than_or_equal_to: 2 } validates :parallel, numericality: { only_integer: true, - greater_than_or_equal_to: 1 } + greater_than_or_equal_to: 2 } validates :when, inclusion: { in: %w[on_success on_failure always manual delayed], message: 'should be on_success, on_failure, ' \ -- cgit v1.2.1 From 8f8a89f98edc4cb901f4107cbf38288576849d9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Wed, 31 Oct 2018 15:27:39 +0100 Subject: Implement POC config based parallelization --- lib/gitlab/ci/config/entry/jobs.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/entry/jobs.rb b/lib/gitlab/ci/config/entry/jobs.rb index 96b6f2e5d6c..fc4b8637ee2 100644 --- a/lib/gitlab/ci/config/entry/jobs.rb +++ b/lib/gitlab/ci/config/entry/jobs.rb @@ -29,6 +29,16 @@ module Gitlab # rubocop: disable CodeReuse/ActiveRecord def compose!(deps = nil) super do + @config = @config.map do |name, config| + total = config[:parallel] + if total + Array.new(total) { { name => config } } + .each_with_index { |build, idx| build["#{name} #{idx + 1}/#{total}".to_sym] = build.delete(name) } + else + { name => config } + end + end.flatten.reduce(:merge) + @config.each do |name, config| node = hidden?(name) ? Entry::Hidden : Entry::Job -- cgit v1.2.1 From 3c8dd4ccbfcbb20de88005d43c93cd476de6d5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Wed, 31 Oct 2018 16:40:52 +0100 Subject: Move parallelization to Ci::Config::Normalizer --- lib/gitlab/ci/config/entry/jobs.rb | 10 +------- lib/gitlab/ci/config/normalizer.rb | 51 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 lib/gitlab/ci/config/normalizer.rb (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/entry/jobs.rb b/lib/gitlab/ci/config/entry/jobs.rb index fc4b8637ee2..1eab5927b56 100644 --- a/lib/gitlab/ci/config/entry/jobs.rb +++ b/lib/gitlab/ci/config/entry/jobs.rb @@ -29,15 +29,7 @@ module Gitlab # rubocop: disable CodeReuse/ActiveRecord def compose!(deps = nil) super do - @config = @config.map do |name, config| - total = config[:parallel] - if total - Array.new(total) { { name => config } } - .each_with_index { |build, idx| build["#{name} #{idx + 1}/#{total}".to_sym] = build.delete(name) } - else - { name => config } - end - end.flatten.reduce(:merge) + @config = Ci::Config::Normalizer.normalize_jobs(@config) @config.each do |name, config| node = hidden?(name) ? Entry::Hidden : Entry::Job diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb new file mode 100644 index 00000000000..aa69dd44c5f --- /dev/null +++ b/lib/gitlab/ci/config/normalizer.rb @@ -0,0 +1,51 @@ +module Gitlab + module Ci + class Config + class Normalizer + class << self + def normalize_jobs(jobs_config) + parallelized_jobs = {} + + parallelized_config = jobs_config.map do |name, config| + if config&.[](:parallel) + total = config[:parallel] + names = parallelize_job_names(name, total) + parallelized_jobs[name] = names + Hash[names.collect { |job_name| [job_name.to_sym, config] }] + else + { name => config } + end + end.reduce(:merge) + + parallelized_config.each do |name, config| + next unless config[:dependencies] + + deps = config[:dependencies].map do |dep| + if parallelized_jobs.keys.include?(dep.to_sym) + config[:dependencies].delete(dep) + parallelized_jobs[dep.to_sym] + else + dep + end + end.flatten + + config[:dependencies] = deps + end + end + + private + + def parallelize_job_names(name, total) + jobs = [] + + total.times do |idx| + jobs << "#{name} #{idx + 1}/#{total}" + end + + jobs + end + end + end + end + end +end -- cgit v1.2.1 From 56a08d233fe18892ae7a7c723662007e260a2c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 1 Nov 2018 01:05:42 +0100 Subject: Parallelize jobs in Gitlab::Ci::YamlProcessor --- lib/gitlab/ci/config/entry/jobs.rb | 2 -- lib/gitlab/ci/config/normalizer.rb | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/entry/jobs.rb b/lib/gitlab/ci/config/entry/jobs.rb index 1eab5927b56..96b6f2e5d6c 100644 --- a/lib/gitlab/ci/config/entry/jobs.rb +++ b/lib/gitlab/ci/config/entry/jobs.rb @@ -29,8 +29,6 @@ module Gitlab # rubocop: disable CodeReuse/ActiveRecord def compose!(deps = nil) super do - @config = Ci::Config::Normalizer.normalize_jobs(@config) - @config.each do |name, config| node = hidden?(name) ? Entry::Hidden : Entry::Job diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index aa69dd44c5f..55efc7439c1 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -7,11 +7,11 @@ module Gitlab parallelized_jobs = {} parallelized_config = jobs_config.map do |name, config| - if config&.[](:parallel) + if config[:parallel] total = config[:parallel] names = parallelize_job_names(name, total) parallelized_jobs[name] = names - Hash[names.collect { |job_name| [job_name.to_sym, config] }] + Hash[names.collect { |job_name| [job_name.to_sym, config.merge(name: job_name)] }] else { name => config } end -- cgit v1.2.1 From 73e17446ef400a8f2a4e629c79749d7feb9866f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 1 Nov 2018 16:17:08 +0100 Subject: Move parallelized node index to job options --- lib/gitlab/ci/config/normalizer.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index 55efc7439c1..fc1efb67560 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -10,8 +10,8 @@ module Gitlab if config[:parallel] total = config[:parallel] names = parallelize_job_names(name, total) - parallelized_jobs[name] = names - Hash[names.collect { |job_name| [job_name.to_sym, config.merge(name: job_name)] }] + parallelized_jobs[name] = names.map(&:first) + Hash[names.collect { |job_name, index| [job_name.to_sym, config.merge(name: job_name, instance: index)] }] else { name => config } end @@ -39,7 +39,7 @@ module Gitlab jobs = [] total.times do |idx| - jobs << "#{name} #{idx + 1}/#{total}" + jobs << ["#{name} #{idx + 1}/#{total}", idx + 1] end jobs -- cgit v1.2.1 From 8a6a312db8148433fca78da0b5c9db8f966e16fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Fri, 2 Nov 2018 14:20:27 +0100 Subject: Make Rubocop and Danger happy --- lib/gitlab/ci/config/normalizer.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index fc1efb67560..2dc408ac392 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Gitlab module Ci class Config -- cgit v1.2.1 From a8da5238474f8f7ad4dab5461c5c5605894535db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Fri, 2 Nov 2018 15:48:25 +0100 Subject: Refactor Gitlab::Ci::Config::Normalizer --- lib/gitlab/ci/config/normalizer.rb | 44 +++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 17 deletions(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index 2dc408ac392..43331b28e2b 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -6,6 +6,13 @@ module Gitlab class Normalizer class << self def normalize_jobs(jobs_config) + parallelized_config, parallelized_jobs = parallelize_jobs(jobs_config) + parallelize_dependencies(parallelized_config, parallelized_jobs) + end + + private + + def parallelize_jobs(jobs_config) parallelized_jobs = {} parallelized_config = jobs_config.map do |name, config| @@ -19,29 +26,32 @@ module Gitlab end end.reduce(:merge) - parallelized_config.each do |name, config| - next unless config[:dependencies] - - deps = config[:dependencies].map do |dep| - if parallelized_jobs.keys.include?(dep.to_sym) - config[:dependencies].delete(dep) - parallelized_jobs[dep.to_sym] - else - dep - end - end.flatten - - config[:dependencies] = deps - end + [parallelized_config, parallelized_jobs] end - private + 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 = [] - total.times do |idx| - jobs << ["#{name} #{idx + 1}/#{total}", idx + 1] + 1.upto(total) do |idx| + jobs << ["#{name} #{idx}/#{total}", idx] end jobs -- cgit v1.2.1 From 5fd8933d97b694fb8ae6a57acaae8fb4e7922e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Mon, 5 Nov 2018 14:36:52 +0100 Subject: Use instance based approach for Normalizer --- lib/gitlab/ci/config/normalizer.rb | 96 ++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 50 deletions(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index 43331b28e2b..0eae6b9770b 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -4,58 +4,54 @@ module Gitlab module Ci class Config class Normalizer - class << self - def normalize_jobs(jobs_config) - parallelized_config, parallelized_jobs = parallelize_jobs(jobs_config) - parallelize_dependencies(parallelized_config, parallelized_jobs) - end - - private - - def parallelize_jobs(jobs_config) - parallelized_jobs = {} - - parallelized_config = jobs_config.map do |name, config| - if config[:parallel] - total = config[:parallel] - names = parallelize_job_names(name, total) - parallelized_jobs[name] = names.map(&:first) - Hash[names.collect { |job_name, index| [job_name.to_sym, config.merge(name: job_name, instance: index)] }] - else - { name => config } - end - end.reduce(:merge) - - [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] + def initialize(jobs_config) + @jobs_config = jobs_config + end + + def normalize_jobs + parallelized_jobs = parallelize_jobs + parallelize_dependencies(parallelized_jobs) + end + + private + + def parallelize_jobs + parallelized_jobs = {} + + @jobs_config = @jobs_config.map do |name, config| + if config[:parallel] + total = config[:parallel] + names = self.class.parallelize_job_names(name, total) + parallelized_jobs[name] = names.map(&:first) + Hash[names.collect { |job_name, index| [job_name.to_sym, config.merge(name: job_name, instance: index)] }] + else + { name => config } 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 - end + def self.parallelize_job_names(name, total) + Array.new(total) { |index| ["#{name} #{index + 1}/#{total}", index + 1] } end end end -- cgit v1.2.1 From 4b2b154c4e5ddfc397bc59f3a38b8f09d44903e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Mon, 5 Nov 2018 15:53:37 +0100 Subject: Refactor Gitlab::Ci::Config::Normalizer Use Hash#each_with_object to manipulate job hashes. --- lib/gitlab/ci/config/normalizer.rb | 86 +++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 42 deletions(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index 0eae6b9770b..7bd0e08e817 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -4,54 +4,56 @@ module Gitlab module Ci class Config class Normalizer - def initialize(jobs_config) - @jobs_config = jobs_config - end - - def normalize_jobs - parallelized_jobs = parallelize_jobs - parallelize_dependencies(parallelized_jobs) - end + 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 + + private + + def extract_parallelized_jobs(jobs_config) + parallelized_jobs = {} + + jobs_config.each do |job_name, config| + if config[:parallel] + parallelized_jobs[job_name] = parallelize_job_names(job_name, config[:parallel]) + end + end - private + parallelized_jobs + end - def parallelize_jobs - parallelized_jobs = {} + def parallelize_jobs(jobs_config, parallelized_jobs) + jobs_config.each_with_object({}) do |(job_name, config), hash| + if parallelized_jobs.keys.include?(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 - @jobs_config = @jobs_config.map do |name, config| - if config[:parallel] - total = config[:parallel] - names = self.class.parallelize_job_names(name, total) - parallelized_jobs[name] = names.map(&:first) - Hash[names.collect { |job_name, index| [job_name.to_sym, config.merge(name: job_name, instance: index)] }] - else - { name => config } + hash 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 + + 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 end - end.reduce(:merge) - end + end - def self.parallelize_job_names(name, total) - Array.new(total) { |index| ["#{name} #{index + 1}/#{total}", index + 1] } + def parallelize_job_names(name, total) + Array.new(total) { |index| ["#{name} #{index + 1}/#{total}", index + 1] } + end end end end -- cgit v1.2.1 From f48261a409f4f4d73118621330796ed92623f08e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Tue, 6 Nov 2018 18:23:45 +0100 Subject: Refactor Normalizer specs --- lib/gitlab/ci/config/normalizer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index 7bd0e08e817..bfe976c04bf 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -27,7 +27,7 @@ module Gitlab def parallelize_jobs(jobs_config, parallelized_jobs) jobs_config.each_with_object({}) do |(job_name, config), hash| - if parallelized_jobs.keys.include?(job_name) + 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 -- cgit v1.2.1 From 4ba960c17d07e5863045c74fb554ebe71575d54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Tue, 6 Nov 2018 18:35:44 +0100 Subject: Use instance based approach for Normalizer --- lib/gitlab/ci/config/normalizer.rb | 76 +++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 37 deletions(-) (limited to 'lib/gitlab/ci/config') 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 -- cgit v1.2.1 From 2adfbf1c663e3cf1aa4ec82a90eed12e72c87309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Tue, 6 Nov 2018 18:44:01 +0100 Subject: Avoid creating intersection if there's no array --- lib/gitlab/ci/config/normalizer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/gitlab/ci/config') diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb index ef263c4933c..969ae093e8b 100644 --- a/lib/gitlab/ci/config/normalizer.rb +++ b/lib/gitlab/ci/config/normalizer.rb @@ -42,8 +42,8 @@ module Gitlab 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? + parallelized_job_names = @parallelized_jobs.keys.map(&:to_s) + if config[:dependencies] && (intersection = config[:dependencies] & parallelized_job_names).any? deps = intersection.map { |dep| @parallelized_jobs[dep.to_sym].map(&:first) }.flatten hash[job_name] = config.merge(dependencies: deps) else -- cgit v1.2.1