Use CI/CD job policy specification in YAML processor
This commit is contained in:
parent
59f87e7317
commit
dd784b1518
3 changed files with 26 additions and 9 deletions
19
lib/gitlab/ci/build/policy.rb
Normal file
19
lib/gitlab/ci/build/policy.rb
Normal 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
|
|
@ -18,9 +18,6 @@ module Gitlab
|
|||
def satisfied_by?(pipeline, **metadata)
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def self.fabricate_all(*specs)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue