Integrate build seeds with variables expressions policy
This commit is contained in:
parent
8a2bc9b445
commit
b6e4e449fb
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue