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
end
end
def satisfied_by?(pipeline, _build = nil)
def satisfied_by?(pipeline, seed = nil)
pipeline.has_kubernetes_active?
end
end
......
......@@ -7,7 +7,7 @@ module Gitlab
@patterns = Array(refs)
end
def satisfied_by?(pipeline, _build = nil)
def satisfied_by?(pipeline, seed = nil)
@patterns.any? do |pattern|
pattern, path = pattern.split('@', 2)
......
......@@ -15,7 +15,7 @@ module Gitlab
@spec = spec
end
def satisfied_by?(pipeline, build = nil)
def satisfied_by?(pipeline, seed = nil)
raise NotImplementedError
end
end
......
......@@ -7,9 +7,9 @@ module Gitlab
@expressions = Array(expressions)
end
def satisfied_by?(pipeline, build)
def satisfied_by?(pipeline, seed)
variables = Gitlab::Ci::Variables::Collection
.new(build.simple_variables)
.new(seed.to_resource.simple_variables)
.to_hash
statements = @expressions.map do |statement|
......
......@@ -11,21 +11,24 @@ module Gitlab
@pipeline = pipeline
@attributes = attributes
@only = attributes.delete(:only)
@except = attributes.delete(:except)
@only = Gitlab::Ci::Build::Policy
.fabricate(attributes.delete(:only))
@except = Gitlab::Ci::Build::Policy
.fabricate(attributes.delete(:except))
end
# TODO, use pipeline.user ?
#
def user=(current_user)
@attributes.merge!(user: current_user)
end
def included?
# TODO specs for passing a seed object for lazy resource evaluation
#
strong_memoize(:inclusion) do
only_specs = Gitlab::Ci::Build::Policy.fabricate(@only)
except_specs = Gitlab::Ci::Build::Policy.fabricate(@except)
only_specs.all? { |spec| spec.satisfied_by?(@pipeline) } &&
except_specs.none? { |spec| spec.satisfied_by?(@pipeline) }
@only.all? { |spec| spec.satisfied_by?(@pipeline, self) } &&
@except.none? { |spec| spec.satisfied_by?(@pipeline, self) }
end
end
......
......@@ -182,22 +182,6 @@ module Gitlab
it 'returns stages seed attributes' do
expect(subject.stages_attributes).to eq attributes
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
describe 'only / except policies validations' do
......
......@@ -346,6 +346,20 @@ describe Ci::Pipeline, :mailer do
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
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