Make it possible to fabricate CI/CD bridge jobs
This commit is contained in:
parent
5692c282af
commit
5d85a04927
5 changed files with 70 additions and 11 deletions
|
@ -38,9 +38,17 @@ module Gitlab
|
|||
)
|
||||
end
|
||||
|
||||
def bridge?
|
||||
@attributes.to_h.dig(:options, :trigger).present?
|
||||
end
|
||||
|
||||
def to_resource
|
||||
strong_memoize(:resource) do
|
||||
::Ci::Build.new(attributes)
|
||||
if bridge?
|
||||
::Ci::Bridge.new(attributes)
|
||||
else
|
||||
::Ci::Build.new(attributes)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -39,7 +39,13 @@ module Gitlab
|
|||
def to_resource
|
||||
strong_memoize(:stage) do
|
||||
::Ci::Stage.new(attributes).tap do |stage|
|
||||
seeds.each { |seed| stage.builds << seed.to_resource }
|
||||
seeds.each do |seed|
|
||||
if seed.bridge?
|
||||
stage.statuses << seed.to_resource
|
||||
else
|
||||
stage.builds << seed.to_resource
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -33,7 +33,7 @@ module Gitlab
|
|||
|
||||
{ stage_idx: @stages.index(job[:stage]),
|
||||
stage: job[:stage],
|
||||
tag_list: job[:tags] || [],
|
||||
tag_list: job[:tags],
|
||||
name: job[:name].to_s,
|
||||
allow_failure: job[:ignore],
|
||||
when: job[:when] || 'on_success',
|
||||
|
@ -53,7 +53,8 @@ module Gitlab
|
|||
retry: job[:retry],
|
||||
parallel: job[:parallel],
|
||||
instance: job[:instance],
|
||||
start_in: job[:start_in]
|
||||
start_in: job[:start_in],
|
||||
trigger: job[:trigger]
|
||||
}.compact }
|
||||
end
|
||||
|
||||
|
|
|
@ -5,8 +5,7 @@ describe Gitlab::Ci::Pipeline::Seed::Build do
|
|||
let(:pipeline) { create(:ci_empty_pipeline, project: project) }
|
||||
|
||||
let(:attributes) do
|
||||
{ name: 'rspec',
|
||||
ref: 'master' }
|
||||
{ name: 'rspec', ref: 'master' }
|
||||
end
|
||||
|
||||
subject do
|
||||
|
@ -21,10 +20,45 @@ describe Gitlab::Ci::Pipeline::Seed::Build do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#bridge?' do
|
||||
context 'when job is a bridge' do
|
||||
let(:attributes) do
|
||||
{ name: 'rspec', ref: 'master', options: { trigger: 'my/project' } }
|
||||
end
|
||||
|
||||
it { is_expected.to be_bridge }
|
||||
end
|
||||
|
||||
context 'when trigger definition is empty' do
|
||||
let(:attributes) do
|
||||
{ name: 'rspec', ref: 'master', options: { trigger: '' } }
|
||||
end
|
||||
|
||||
it { is_expected.not_to be_bridge }
|
||||
end
|
||||
|
||||
context 'when job is not a bridge' do
|
||||
it { is_expected.not_to be_bridge }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#to_resource' do
|
||||
it 'returns a valid build resource' do
|
||||
expect(subject.to_resource).to be_a(::Ci::Build)
|
||||
expect(subject.to_resource).to be_valid
|
||||
context 'when job is not a bridge' do
|
||||
it 'returns a valid build resource' do
|
||||
expect(subject.to_resource).to be_a(::Ci::Build)
|
||||
expect(subject.to_resource).to be_valid
|
||||
end
|
||||
end
|
||||
|
||||
context 'when job is a bridge' do
|
||||
let(:attributes) do
|
||||
{ name: 'rspec', ref: 'master', options: { trigger: 'my/project' } }
|
||||
end
|
||||
|
||||
it 'returns a valid bridge resource' do
|
||||
expect(subject.to_resource).to be_a(::Ci::Bridge)
|
||||
expect(subject.to_resource).to be_valid
|
||||
end
|
||||
end
|
||||
|
||||
it 'memoizes a resource object' do
|
||||
|
|
|
@ -62,8 +62,18 @@ describe Gitlab::Ci::Pipeline::Seed::Stage do
|
|||
expect(subject.seeds.map(&:attributes)).to all(include(ref: 'master'))
|
||||
expect(subject.seeds.map(&:attributes)).to all(include(tag: false))
|
||||
expect(subject.seeds.map(&:attributes)).to all(include(project: pipeline.project))
|
||||
expect(subject.seeds.map(&:attributes))
|
||||
.to all(include(trigger_request: pipeline.trigger_requests.first))
|
||||
end
|
||||
|
||||
context 'when a legacy trigger exists' do
|
||||
before do
|
||||
create(:ci_trigger_request, pipeline: pipeline)
|
||||
end
|
||||
|
||||
it 'returns build seeds including legacy trigger' do
|
||||
expect(pipeline.legacy_trigger).not_to be_nil
|
||||
expect(subject.seeds.map(&:attributes))
|
||||
.to all(include(trigger_request: pipeline.legacy_trigger))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a ref is protected' do
|
||||
|
|
Loading…
Reference in a new issue