Commit b6e4e449 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Integrate build seeds with variables expressions policy

parent 8a2bc9b4
...@@ -9,7 +9,7 @@ module Gitlab ...@@ -9,7 +9,7 @@ module Gitlab
end end
end end
def satisfied_by?(pipeline, _build = nil) def satisfied_by?(pipeline, seed = nil)
pipeline.has_kubernetes_active? pipeline.has_kubernetes_active?
end end
end end
......
...@@ -7,7 +7,7 @@ module Gitlab ...@@ -7,7 +7,7 @@ module Gitlab
@patterns = Array(refs) @patterns = Array(refs)
end end
def satisfied_by?(pipeline, _build = nil) def satisfied_by?(pipeline, seed = nil)
@patterns.any? do |pattern| @patterns.any? do |pattern|
pattern, path = pattern.split('@', 2) pattern, path = pattern.split('@', 2)
......
...@@ -15,7 +15,7 @@ module Gitlab ...@@ -15,7 +15,7 @@ module Gitlab
@spec = spec @spec = spec
end end
def satisfied_by?(pipeline, build = nil) def satisfied_by?(pipeline, seed = nil)
raise NotImplementedError raise NotImplementedError
end end
end end
......
...@@ -7,9 +7,9 @@ module Gitlab ...@@ -7,9 +7,9 @@ module Gitlab
@expressions = Array(expressions) @expressions = Array(expressions)
end end
def satisfied_by?(pipeline, build) def satisfied_by?(pipeline, seed)
variables = Gitlab::Ci::Variables::Collection variables = Gitlab::Ci::Variables::Collection
.new(build.simple_variables) .new(seed.to_resource.simple_variables)
.to_hash .to_hash
statements = @expressions.map do |statement| statements = @expressions.map do |statement|
......
...@@ -11,21 +11,24 @@ module Gitlab ...@@ -11,21 +11,24 @@ module Gitlab
@pipeline = pipeline @pipeline = pipeline
@attributes = attributes @attributes = attributes
@only = attributes.delete(:only) @only = Gitlab::Ci::Build::Policy
@except = attributes.delete(:except) .fabricate(attributes.delete(:only))
@except = Gitlab::Ci::Build::Policy
.fabricate(attributes.delete(:except))
end end
# TODO, use pipeline.user ?
#
def user=(current_user) def user=(current_user)
@attributes.merge!(user: current_user) @attributes.merge!(user: current_user)
end end
def included? def included?
# TODO specs for passing a seed object for lazy resource evaluation
#
strong_memoize(:inclusion) do strong_memoize(:inclusion) do
only_specs = Gitlab::Ci::Build::Policy.fabricate(@only) @only.all? { |spec| spec.satisfied_by?(@pipeline, self) } &&
except_specs = Gitlab::Ci::Build::Policy.fabricate(@except) @except.none? { |spec| spec.satisfied_by?(@pipeline, self) }
only_specs.all? { |spec| spec.satisfied_by?(@pipeline) } &&
except_specs.none? { |spec| spec.satisfied_by?(@pipeline) }
end end
end end
......
...@@ -182,22 +182,6 @@ module Gitlab ...@@ -182,22 +182,6 @@ module Gitlab
it 'returns stages seed attributes' do it 'returns stages seed attributes' do
expect(subject.stages_attributes).to eq attributes expect(subject.stages_attributes).to eq attributes
end end
context 'when variables policy is specified' do
let(:config) do
YAML.dump(unit: { script: 'minitest', only: { variables: ['$CI_PIPELINE_SOURCE'] } },
feature: { script: 'spinach', only: { variables: ['$UNDEFINED'] } })
end
let(:pipeline) { create(:ci_empty_pipeline) }
it 'returns stage seeds only when variables expression is truthy' do
seeds = subject.stage_seeds(pipeline)
expect(seeds.size).to eq 1
expect(seeds.first.builds.dig(0, :name)).to eq 'unit'
end
end
end end
describe 'only / except policies validations' do describe 'only / except policies validations' do
......
...@@ -346,6 +346,20 @@ describe Ci::Pipeline, :mailer do ...@@ -346,6 +346,20 @@ describe Ci::Pipeline, :mailer do
end end
end end
end end
context 'when variables policy is specified' do
let(:config) do
{ unit: { script: 'minitest', only: { variables: ['$CI_PIPELINE_SOURCE'] } },
feature: { script: 'spinach', only: { variables: ['$UNDEFINED'] } } }
end
it 'returns stage seeds only when variables expression is truthy' do
seeds = pipeline.stage_seeds
expect(seeds.size).to eq 1
expect(seeds.dig(0, 0, :name)).to eq 'unit'
end
end
end end
describe '#seeds_size' do describe '#seeds_size' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment