Commit fc3d2141 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Add a feature flag for switching pipeline stages

parent 8a3aa3a6
......@@ -250,13 +250,17 @@ module Ci
end
##
# TODO consider switching to persisted stages only in pipelines table
# (not necessairly in the show pipeline page because of #23257.
# Hide this behind two feature flags - enabled / disabled and only
# gitlab-ce / everywhere.
# TODO We do not completely switch to persisted stages because of
# race conditions with setting statuses gitlab-ce#23257.
#
def stages
super
def ordered_stages
return legacy_stages unless complete?
if Feature.enabled?('ci_pipeline_persisted_stages')
stages
else
legacy_stages
end
end
def legacy_stages
......
class PipelineDetailsEntity < PipelineEntity
expose :details do
expose :stages, using: StageEntity
expose :ordered_stages, as: :stages, using: StageEntity
expose :artifacts, using: BuildArtifactEntity
expose :manual_actions, using: BuildActionEntity
end
......
......@@ -500,6 +500,87 @@ describe Ci::Pipeline, :mailer do
end
end
end
describe '#stages' do
before do
create(:ci_stage_entity, project: project,
pipeline: pipeline,
name: 'build')
end
it 'returns persisted stages' do
expect(pipeline.stages).not_to be_empty
expect(pipeline.stages).to all(be_persisted)
end
end
describe '#ordered_stages' do
before do
create(:ci_stage_entity, project: project,
pipeline: pipeline,
position: 4,
name: 'deploy')
create(:ci_build, project: project,
pipeline: pipeline,
stage: 'test',
stage_idx: 3,
name: 'test')
create(:ci_build, project: project,
pipeline: pipeline,
stage: 'build',
stage_idx: 2,
name: 'build')
create(:ci_stage_entity, project: project,
pipeline: pipeline,
position: 1,
name: 'sanity')
create(:ci_stage_entity, project: project,
pipeline: pipeline,
position: 5,
name: 'cleanup')
end
subject { pipeline.ordered_stages }
context 'when using legacy stages' do
before do
stub_feature_flags(ci_pipeline_persisted_stages: false)
end
it 'returns legacy stages in valid order' do
expect(subject.map(&:name)).to eq %w[build test]
end
end
context 'when using persisted stages' do
before do
stub_feature_flags(ci_pipeline_persisted_stages: true)
end
context 'when pipelines is not complete' do
it 'still returns legacy stages' do
expect(subject).to all(be_a Ci::LegacyStage)
expect(subject.map(&:name)).to eq %w[build test]
end
end
context 'when pipeline is complete' do
before do
pipeline.succeed!
end
it 'returns stages in valid order' do
expect(subject).to all(be_a Ci::Stage)
expect(subject.map(&:name))
.to eq %w[sanity build test deploy cleanup]
end
end
end
end
end
describe 'state machine' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment