Commit ca2c4e2f authored by Grzegorz Bizon's avatar Grzegorz Bizon

Merge branch '200016-display-downstream-pipeline-errors' into 'master'

Implement displaying downstream pipeline error details

See merge request gitlab-org/gitlab!32844
parents 432add1d ce068023
...@@ -47,6 +47,7 @@ module Ci ...@@ -47,6 +47,7 @@ module Ci
# and update the status when the downstream pipeline completes. # and update the status when the downstream pipeline completes.
subject.success! unless subject.dependent? subject.success! unless subject.dependent?
else else
subject.options[:downstream_errors] = pipeline.errors.full_messages
subject.drop!(:downstream_pipeline_creation_failed) subject.drop!(:downstream_pipeline_creation_failed)
end end
end end
......
---
title: Implement displaying downstream pipeline error details
merge_request: 32844
author:
type: fixed
...@@ -5,6 +5,14 @@ module Gitlab ...@@ -5,6 +5,14 @@ module Gitlab
module Status module Status
module Bridge module Bridge
class Failed < Status::Build::Failed class Failed < Status::Build::Failed
private
def failure_reason_message
[
self.class.reasons.fetch(subject.failure_reason.to_sym),
subject.options[:downstream_errors]
].flatten.compact.join(', ')
end
end end
end end
end end
......
...@@ -59,12 +59,13 @@ describe Gitlab::Ci::Status::Bridge::Factory do ...@@ -59,12 +59,13 @@ describe Gitlab::Ci::Status::Bridge::Factory do
context 'failed with downstream_pipeline_creation_failed' do context 'failed with downstream_pipeline_creation_failed' do
before do before do
bridge.options = { downstream_errors: ['No stages / jobs for this pipeline.', 'other error'] }
bridge.failure_reason = 'downstream_pipeline_creation_failed' bridge.failure_reason = 'downstream_pipeline_creation_failed'
end end
it 'fabricates correct status_tooltip' do it 'fabricates correct status_tooltip' do
expect(status.status_tooltip).to eq( expect(status.status_tooltip).to eq(
"#{s_('CiStatusText|failed')} - (downstream pipeline can not be created)" "#{s_('CiStatusText|failed')} - (downstream pipeline can not be created, No stages / jobs for this pipeline., other error)"
) )
end end
end end
......
...@@ -487,10 +487,11 @@ describe Ci::CreateCrossProjectPipelineService, '#execute' do ...@@ -487,10 +487,11 @@ describe Ci::CreateCrossProjectPipelineService, '#execute' do
end end
it 'does not create a pipeline and drops the bridge' do it 'does not create a pipeline and drops the bridge' do
service.execute(bridge) expect { service.execute(bridge) }.not_to change(downstream_project.ci_pipelines, :count)
expect(bridge.reload).to be_failed expect(bridge.reload).to be_failed
expect(bridge.failure_reason).to eq('downstream_pipeline_creation_failed') expect(bridge.failure_reason).to eq('downstream_pipeline_creation_failed')
expect(bridge.options[:downstream_errors]).to eq(['Reference not found'])
end end
end end
...@@ -509,10 +510,35 @@ describe Ci::CreateCrossProjectPipelineService, '#execute' do ...@@ -509,10 +510,35 @@ describe Ci::CreateCrossProjectPipelineService, '#execute' do
end end
it 'does not create a pipeline and drops the bridge' do it 'does not create a pipeline and drops the bridge' do
service.execute(bridge) expect { service.execute(bridge) }.not_to change(downstream_project.ci_pipelines, :count)
expect(bridge.reload).to be_failed
expect(bridge.failure_reason).to eq('downstream_pipeline_creation_failed')
expect(bridge.options[:downstream_errors]).to eq(['No stages / jobs for this pipeline.'])
end
end
context 'when downstream pipeline has invalid YAML' do
before do
stub_ci_pipeline_yaml_file(config)
end
let(:config) do
<<-EOY
test:
stage: testx
script: echo 1
EOY
end
it 'creates the pipeline but drops the bridge' do
expect { service.execute(bridge) }.to change(downstream_project.ci_pipelines, :count).by(1)
expect(bridge.reload).to be_failed expect(bridge.reload).to be_failed
expect(bridge.failure_reason).to eq('downstream_pipeline_creation_failed') expect(bridge.failure_reason).to eq('downstream_pipeline_creation_failed')
expect(bridge.options[:downstream_errors]).to eq(
['test job: chosen stage does not exist; available stages are .pre, build, test, deploy, .post']
)
end end
end end
end end
......
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