You need to sign in or sign up before continuing.
Follow-up from "Resolve "`parallel` job keyword MVC""
The following discussion from !22631 (merged) should be addressed:
-
@grzesiek started a discussion: (+2 comments) @matteeyah What do you think about my version of this implementation? Just to make it clear, I'm not sure which one is better, I just wonder what is you opinion about it.
module Gitlab module Ci class Config class Normalizer def initialize(config) @original = config @normalized = config.deep_dup end def normalize_jobs @normalized.tap do parallelize_jobs! parallelize_dependencies! end end private def parallelize_jobs! parallelizable.each do |original, config| parallelize(original, config[:parallel]) do |name, index| @normalized.store(name, config.merge(name: name, instance: index)) @normalized.delete(original) end end end def parallelize_dependencies! non_parallelizable.each do |name, config| config[:dependencies].to_a.each do |dependency| parallelizable[dependency.to_sym].try do |original| @normalized.dig(name, :dependencies).tap do |deps| deps.delete(dependency) parallelize(dependency, original[:parallel]) do |name| deps.push(name.to_s) end end end end end end private def parallelizable @parallelizable ||= @original.select do |name, config| config[:parallel].present? && config[:parallel].positive? end end def non_parallelizable @original.reject { |name| parallelizable.key?(name) } end def parallelize(name, total) total.to_i.times do |index| yield "#{name} #{index + 1}/#{total}".to_sym, index + 1 end end end end end end