summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-03-23 13:56:16 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-03-23 13:56:16 +0100
commitb6e4e449fbd2f844736e9121067c3cfea2cb2933 (patch)
treed86a28273a5ad8c5ad66335109997b823203a72e
parent8a2bc9b4457903dfdb0efc88c5ba816f4ba3141e (diff)
downloadgitlab-ce-b6e4e449fbd2f844736e9121067c3cfea2cb2933.tar.gz
Integrate build seeds with variables expressions policy
-rw-r--r--lib/gitlab/ci/build/policy/kubernetes.rb2
-rw-r--r--lib/gitlab/ci/build/policy/refs.rb2
-rw-r--r--lib/gitlab/ci/build/policy/specification.rb2
-rw-r--r--lib/gitlab/ci/build/policy/variables.rb4
-rw-r--r--lib/gitlab/ci/pipeline/seed/build.rb17
-rw-r--r--spec/lib/gitlab/ci/yaml_processor_spec.rb16
-rw-r--r--spec/models/ci/pipeline_spec.rb14
7 files changed, 29 insertions, 28 deletions
diff --git a/lib/gitlab/ci/build/policy/kubernetes.rb b/lib/gitlab/ci/build/policy/kubernetes.rb
index 5d2c1163665..782f6c4c0af 100644
--- a/lib/gitlab/ci/build/policy/kubernetes.rb
+++ b/lib/gitlab/ci/build/policy/kubernetes.rb
@@ -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
diff --git a/lib/gitlab/ci/build/policy/refs.rb b/lib/gitlab/ci/build/policy/refs.rb
index 9bee5ba43c0..4aa5dc89f47 100644
--- a/lib/gitlab/ci/build/policy/refs.rb
+++ b/lib/gitlab/ci/build/policy/refs.rb
@@ -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)
diff --git a/lib/gitlab/ci/build/policy/specification.rb b/lib/gitlab/ci/build/policy/specification.rb
index 937d8504ef7..f09ba42c074 100644
--- a/lib/gitlab/ci/build/policy/specification.rb
+++ b/lib/gitlab/ci/build/policy/specification.rb
@@ -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
diff --git a/lib/gitlab/ci/build/policy/variables.rb b/lib/gitlab/ci/build/policy/variables.rb
index e5fec4469b3..2c7d8aba43b 100644
--- a/lib/gitlab/ci/build/policy/variables.rb
+++ b/lib/gitlab/ci/build/policy/variables.rb
@@ -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|
diff --git a/lib/gitlab/ci/pipeline/seed/build.rb b/lib/gitlab/ci/pipeline/seed/build.rb
index 7cd7c864448..dd2b277e5ad 100644
--- a/lib/gitlab/ci/pipeline/seed/build.rb
+++ b/lib/gitlab/ci/pipeline/seed/build.rb
@@ -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
diff --git a/spec/lib/gitlab/ci/yaml_processor_spec.rb b/spec/lib/gitlab/ci/yaml_processor_spec.rb
index e1cc826e0d9..88d8fe2c661 100644
--- a/spec/lib/gitlab/ci/yaml_processor_spec.rb
+++ b/spec/lib/gitlab/ci/yaml_processor_spec.rb
@@ -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
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index 92f00cfbc19..dd94515b0a4 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -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