Use CI/CD job policy specification in YAML processor

This commit is contained in:
Grzegorz Bizon 2017-09-14 12:10:09 +02:00
parent 59f87e7317
commit dd784b1518
3 changed files with 26 additions and 9 deletions

View file

@ -0,0 +1,19 @@
module Gitlab
module Ci
module Build
module Policy
def self.fabricate(specs)
specifications = specs.to_h.map do |spec, value|
begin
self.const_get(spec.to_s.camelize).new(value)
rescue NameError
next
end
end
specifications.compact
end
end
end
end
end

View file

@ -18,9 +18,6 @@ module Gitlab
def satisfied_by?(pipeline, **metadata)
raise NotImplementedError
end
def self.fabricate_all(*specs)
end
end
end
end

View file

@ -89,13 +89,14 @@ module Gitlab
builds.select do |build|
job = @jobs[build.fetch(:name).to_sym]
has_kubernetes = pipeline.has_kubernetes_active?
only_kubernetes = job.dig(:only, :kubernetes)
except_kubernetes = job.dig(:except, :kubernetes)
[!only_kubernetes && !except_kubernetes,
only_kubernetes && has_kubernetes,
except_kubernetes && !has_kubernetes].any?
only_specs = Gitlab::Ci::Build::Policy
.fabricate(job.fetch(:only, {}))
except_specs = Gitlab::Ci::Build::Policy
.fabricate(job.fetch(:except, {}))
only_specs.all? { |spec| spec.satisfied_by?(pipeline) } &&
except_specs.none? { |spec| spec.satisfied_by?(pipeline) }
end
end