Reduce stage seeds coupling between pipeline and YAML
This is a first step to decouple pipeline from YAML processing. It reduces the coupling by removing some methods that introduce coupling and by moving logic into separate chain element that is being used to populate pipelines with stages and builds.
This commit is contained in:
parent
585e6a992f
commit
b82de0f008
6 changed files with 32 additions and 58 deletions
|
@ -365,18 +365,10 @@ module Ci
|
|||
@stage_seeds ||= config_processor.stage_seeds(self)
|
||||
end
|
||||
|
||||
def seeds_size
|
||||
@seeds_size ||= stage_seeds.sum(&:size)
|
||||
end
|
||||
|
||||
def has_kubernetes_active?
|
||||
project.deployment_platform&.active?
|
||||
end
|
||||
|
||||
def has_stage_seeds?
|
||||
stage_seeds.any?
|
||||
end
|
||||
|
||||
def has_warnings?
|
||||
builds.latest.failed_but_allowed.any?
|
||||
end
|
||||
|
|
|
@ -21,15 +21,19 @@ module Gitlab
|
|||
pipeline.stages << seed.to_resource
|
||||
end
|
||||
|
||||
if pipeline.stages.none?
|
||||
return error('No stages / jobs for this pipeline.')
|
||||
end
|
||||
|
||||
if pipeline.invalid?
|
||||
error('Failed to build the pipeline!')
|
||||
return error('Failed to build the pipeline!')
|
||||
end
|
||||
|
||||
raise Populate::PopulateError if pipeline.persisted?
|
||||
end
|
||||
|
||||
def break?
|
||||
pipeline.invalid?
|
||||
pipeline.errors.any?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,10 +18,6 @@ module Gitlab
|
|||
|
||||
return error(@pipeline.yaml_errors)
|
||||
end
|
||||
|
||||
unless @pipeline.has_stage_seeds?
|
||||
return error('No stages / jobs for this pipeline.')
|
||||
end
|
||||
end
|
||||
|
||||
def break?
|
||||
|
|
|
@ -42,6 +42,32 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when pipeline is empty' do
|
||||
let(:config) do
|
||||
{ rspec: {
|
||||
script: 'ls',
|
||||
only: ['something']
|
||||
} }
|
||||
end
|
||||
|
||||
let(:pipeline) do
|
||||
build(:ci_pipeline, project: project, config: config)
|
||||
end
|
||||
|
||||
before do
|
||||
step.perform!
|
||||
end
|
||||
|
||||
it 'breaks the chain' do
|
||||
expect(step.break?).to be true
|
||||
end
|
||||
|
||||
it 'appends an error about missing stages' do
|
||||
expect(pipeline.errors.to_a)
|
||||
.to include 'No stages / jobs for this pipeline.'
|
||||
end
|
||||
end
|
||||
|
||||
context 'when pipeline has validation errors' do
|
||||
let(:pipeline) do
|
||||
build(:ci_pipeline, project: project, ref: nil)
|
||||
|
|
|
@ -76,28 +76,6 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when pipeline has no stages / jobs' do
|
||||
let(:config) do
|
||||
{ rspec: {
|
||||
script: 'ls',
|
||||
only: ['something']
|
||||
} }
|
||||
end
|
||||
|
||||
let(:pipeline) do
|
||||
build(:ci_pipeline, project: project, config: config)
|
||||
end
|
||||
|
||||
it 'appends an error about missing stages' do
|
||||
expect(pipeline.errors.to_a)
|
||||
.to include 'No stages / jobs for this pipeline.'
|
||||
end
|
||||
|
||||
it 'breaks the chain' do
|
||||
expect(step.break?).to be true
|
||||
end
|
||||
end
|
||||
|
||||
context 'when pipeline contains configuration validation errors' do
|
||||
let(:config) { { rspec: {} } }
|
||||
|
||||
|
|
|
@ -253,14 +253,6 @@ describe Ci::Pipeline, :mailer do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#seeds_size' do
|
||||
let(:pipeline) { build(:ci_pipeline_with_one_job) }
|
||||
|
||||
it 'returns number of jobs in stage seeds' do
|
||||
expect(pipeline.seeds_size).to eq 1
|
||||
end
|
||||
end
|
||||
|
||||
describe '#legacy_stages' do
|
||||
subject { pipeline.legacy_stages }
|
||||
|
||||
|
@ -590,20 +582,6 @@ describe Ci::Pipeline, :mailer do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#has_stage_seeds?' do
|
||||
context 'when pipeline has stage seeds' do
|
||||
subject { build(:ci_pipeline_with_one_job) }
|
||||
|
||||
it { is_expected.to have_stage_seeds }
|
||||
end
|
||||
|
||||
context 'when pipeline does not have stage seeds' do
|
||||
subject { create(:ci_pipeline_without_jobs) }
|
||||
|
||||
it { is_expected.not_to have_stage_seeds }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#has_warnings?' do
|
||||
subject { pipeline.has_warnings? }
|
||||
|
||||
|
|
Loading…
Reference in a new issue