Skip to content
Snippets Groups Projects
Commit d79ad28f authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Do not pass project path from YAML processor

Use project full path that can be received from a pipeline object
parent 6681ea9c
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -31,6 +31,7 @@ module Ci
has_many :auto_canceled_jobs, class_name: 'CommitStatus', foreign_key: 'auto_canceled_by_id'
 
delegate :id, to: :project, prefix: true
delegate :full_path, to: :project, prefix: true
 
validates :source, exclusion: { in: %w(unknown), unless: :importing? }, on: :create
validates :sha, presence: { unless: :importing? }
Loading
Loading
Loading
Loading
@@ -9,7 +9,7 @@ module Gitlab
end
end
 
def satisfied_by?(pipeline, **_)
def satisfied_by?(pipeline)
pipeline.has_kubernetes_active?
end
end
Loading
Loading
Loading
Loading
@@ -7,21 +7,21 @@ module Gitlab
@patterns = Array(refs)
end
 
def satisfied_by?(pipeline, path: nil)
def satisfied_by?(pipeline)
@patterns.any? do |pattern|
pattern, ref_path = pattern.split('@', 2)
pattern, path = pattern.split('@', 2)
 
matches_path?(ref_path, path) &&
matches_path?(path, pipeline) &&
matches_pattern?(pattern, pipeline)
end
end
 
private
 
def matches_path?(ref_path, expected_path)
return true unless ref_path
def matches_path?(path, pipeline)
return true unless path
 
expected_path == ref_path
pipeline.project_full_path == path
end
 
def matches_pattern?(pattern, pipeline)
Loading
Loading
Loading
Loading
@@ -3,7 +3,7 @@ module Gitlab
module Build
module Policy
##
# Abstract class that defines an intereface of job policy
# Abstract class that defines an interface of job policy
# specification.
#
# Used for job's only/except policy configuration.
Loading
Loading
@@ -15,7 +15,7 @@ module Gitlab
@spec = spec
end
 
def satisfied_by?(pipeline, **metadata)
def satisfied_by?(pipeline)
raise NotImplementedError
end
end
Loading
Loading
Loading
Loading
@@ -63,8 +63,8 @@ module Gitlab
except_specs = Gitlab::Ci::Build::Policy
.fabricate(job.fetch(:except, {}))
 
only_specs.all? { |spec| spec.satisfied_by?(pipeline, path: @path) } &&
except_specs.none? { |spec| spec.satisfied_by?(pipeline, path: @path) }
only_specs.all? { |spec| spec.satisfied_by?(pipeline) } &&
except_specs.none? { |spec| spec.satisfied_by?(pipeline) }
end
 
selected_jobs.map { |_, job| build_attributes(job[:name]) }
Loading
Loading
Loading
Loading
@@ -46,13 +46,13 @@ describe Gitlab::Ci::Build::Policy::Refs do
end
 
it 'is satisfied when provided patch matches specified one' do
expect(described_class.new(%w[master@some/repository]))
.to be_satisfied_by(pipeline, path: 'some/repository')
expect(described_class.new(%W[master@#{pipeline.project_full_path}]))
.to be_satisfied_by(pipeline)
end
 
it 'is not satisfied when path differs' do
expect(described_class.new(%w[master@some/fork/repository]))
.not_to be_satisfied_by(pipeline, path: 'some/repository')
.not_to be_satisfied_by(pipeline)
end
end
 
Loading
Loading
Loading
Loading
@@ -340,14 +340,20 @@ module Gitlab
end
 
it "returns builds if only has current repository path" do
seed_pipeline = pipeline(ref: 'deploy')
config = YAML.dump({
before_script: ["pwd"],
rspec: { script: "rspec", type: type, only: ["branches@path"] }
rspec: {
script: "rspec",
type: type,
only: ["branches@#{seed_pipeline.project_full_path}"]
}
})
 
config_processor = Gitlab::Ci::YamlProcessor.new(config, path)
 
expect(config_processor.pipeline_stage_builds(type, pipeline(ref: "deploy")).size).to eq(1)
expect(config_processor.pipeline_stage_builds(type, seed_pipeline).size).to eq(1)
end
 
it "does not return builds if only has different repository path" do
Loading
Loading
@@ -517,14 +523,19 @@ module Gitlab
end
 
it "does not return builds if except has current repository path" do
seed_pipeline = pipeline(ref: 'deploy')
config = YAML.dump({
before_script: ["pwd"],
rspec: { script: "rspec", type: type, except: ["branches@path"] }
rspec: {
script: "rspec",
type: type,
except: ["branches@#{seed_pipeline.project_full_path}"] }
})
 
config_processor = Gitlab::Ci::YamlProcessor.new(config, path)
 
expect(config_processor.pipeline_stage_builds(type, pipeline(ref: "deploy")).size).to eq(0)
expect(config_processor.pipeline_stage_builds(type, seed_pipeline).size).to eq(0)
end
 
it "returns builds if except has different repository path" do
Loading
Loading
@@ -539,18 +550,22 @@ module Gitlab
end
 
it "returns build except specified type" do
master_pipeline = pipeline(ref: 'master')
test_pipeline = pipeline(ref: 'test')
deploy_pipeline = pipeline(ref: 'deploy')
config = YAML.dump({
before_script: ["pwd"],
rspec: { script: "rspec", type: "test", except: ["master", "deploy", "test@fork"] },
rspec: { script: "rspec", type: "test", except: ["master", "deploy", "test@#{test_pipeline.project_full_path}"] },
staging: { script: "deploy", type: "deploy", except: ["master"] },
production: { script: "deploy", type: "deploy", except: ["master@fork"] }
production: { script: "deploy", type: "deploy", except: ["master@#{master_pipeline.project_full_path}"] }
})
 
config_processor = Gitlab::Ci::YamlProcessor.new(config, 'fork')
 
expect(config_processor.pipeline_stage_builds("deploy", pipeline(ref: "deploy")).size).to eq(2)
expect(config_processor.pipeline_stage_builds("test", pipeline(ref: "test")).size).to eq(0)
expect(config_processor.pipeline_stage_builds("deploy", pipeline(ref: "master")).size).to eq(0)
expect(config_processor.pipeline_stage_builds("deploy", deploy_pipeline).size).to eq(2)
expect(config_processor.pipeline_stage_builds("test", test_pipeline).size).to eq(0)
expect(config_processor.pipeline_stage_builds("deploy", master_pipeline).size).to eq(0)
end
 
context 'for invalid value' do
Loading
Loading
Loading
Loading
@@ -26,6 +26,7 @@ describe Ci::Pipeline, :mailer do
it { is_expected.to respond_to :git_author_name }
it { is_expected.to respond_to :git_author_email }
it { is_expected.to respond_to :short_sha }
it { is_expected.to delegate_method(:full_path).to(:project).with_prefix }
 
describe '#source' do
context 'when creating new pipeline' do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment