summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-08-18 14:12:40 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-08-18 14:12:40 +0200
commit22f1b04637a22c44c4f3ae591d180f5335d3ae16 (patch)
tree3ec9ee7a819952a09e3db534a54be63dc2d78798
parentaccaf7eaf268b340b39b6ef9b949cc78988b0e33 (diff)
downloadgitlab-ce-22f1b04637a22c44c4f3ae591d180f5335d3ae16.tar.gz
Update merge request pipeline even if if has errors
-rw-r--r--app/services/ci/create_pipeline_service.rb11
-rw-r--r--spec/services/ci/create_pipeline_service_spec.rb20
2 files changed, 27 insertions, 4 deletions
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb
index 884b681ff81..d0ba9f89460 100644
--- a/app/services/ci/create_pipeline_service.rb
+++ b/app/services/ci/create_pipeline_service.rb
@@ -176,9 +176,14 @@ module Ci
end
def error(message, save: false)
- pipeline.errors.add(:base, message)
- pipeline.drop if save
- pipeline
+ pipeline.tap do
+ pipeline.errors.add(:base, message)
+
+ if save
+ pipeline.drop
+ update_merge_requests_head_pipeline
+ end
+ end
end
def pipeline_created_counter
diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb
index bf68ee0e64d..8465a6f99bd 100644
--- a/spec/services/ci/create_pipeline_service_spec.rb
+++ b/spec/services/ci/create_pipeline_service_spec.rb
@@ -110,11 +110,29 @@ describe Ci::CreatePipelineService do
allow_any_instance_of(Ci::Pipeline)
.to receive(:latest?).and_return(false)
- pipeline
+ execute_service
expect(merge_request.reload.head_pipeline).to be_nil
end
end
+
+ context 'when pipeline has errors' do
+ before do
+ stub_ci_pipeline_yaml_file('some invalid syntax')
+ end
+
+ it 'updates merge request head pipeline reference' do
+ merge_request = create(:merge_request, source_branch: 'master',
+ target_branch: 'feature',
+ source_project: project)
+
+ head_pipeline = execute_service
+
+ expect(head_pipeline).to be_persisted
+ expect(head_pipeline.yaml_errors).to be_present
+ expect(merge_request.reload.head_pipeline).to eq head_pipeline
+ end
+ end
end
context 'auto-cancel enabled' do