Merge branch 'fix/gb/fix-head-pipeline-when-pipeline-has-errors' into 'master'
Fix merge request head pipeline when pipeline has errors Closes #36657 See merge request !13664
This commit is contained in:
commit
6017e3b90d
|
@ -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
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix merge request pipeline status when pipeline has errors
|
||||
merge_request: 13664
|
||||
author:
|
||||
type: fixed
|
|
@ -55,10 +55,15 @@ describe Ci::CreatePipelineService do
|
|||
|
||||
context 'when merge requests already exist for this source branch' do
|
||||
it 'updates head pipeline of each merge request' do
|
||||
merge_request_1 = create(:merge_request, source_branch: 'master', target_branch: "branch_1", source_project: project)
|
||||
merge_request_2 = create(:merge_request, source_branch: 'master', target_branch: "branch_2", source_project: project)
|
||||
merge_request_1 = create(:merge_request, source_branch: 'master',
|
||||
target_branch: "branch_1",
|
||||
source_project: project)
|
||||
|
||||
head_pipeline = pipeline
|
||||
merge_request_2 = create(:merge_request, source_branch: 'master',
|
||||
target_branch: "branch_2",
|
||||
source_project: project)
|
||||
|
||||
head_pipeline = execute_service
|
||||
|
||||
expect(merge_request_1.reload.head_pipeline).to eq(head_pipeline)
|
||||
expect(merge_request_2.reload.head_pipeline).to eq(head_pipeline)
|
||||
|
@ -66,9 +71,11 @@ describe Ci::CreatePipelineService do
|
|||
|
||||
context 'when there is no pipeline for source branch' do
|
||||
it "does not update merge request head pipeline" do
|
||||
merge_request = create(:merge_request, source_branch: 'feature', target_branch: "branch_1", source_project: project)
|
||||
merge_request = create(:merge_request, source_branch: 'feature',
|
||||
target_branch: "branch_1",
|
||||
source_project: project)
|
||||
|
||||
head_pipeline = pipeline
|
||||
head_pipeline = execute_service
|
||||
|
||||
expect(merge_request.reload.head_pipeline).not_to eq(head_pipeline)
|
||||
end
|
||||
|
@ -76,13 +83,19 @@ describe Ci::CreatePipelineService do
|
|||
|
||||
context 'when merge request target project is different from source project' do
|
||||
let!(:target_project) { create(:project, :repository) }
|
||||
let!(:forked_project_link) { create(:forked_project_link, forked_to_project: project, forked_from_project: target_project) }
|
||||
|
||||
let!(:forked_project_link) do
|
||||
create(:forked_project_link, forked_to_project: project,
|
||||
forked_from_project: target_project)
|
||||
end
|
||||
|
||||
it 'updates head pipeline for merge request' do
|
||||
merge_request =
|
||||
create(:merge_request, source_branch: 'master', target_branch: "branch_1", source_project: project, target_project: target_project)
|
||||
merge_request = create(:merge_request, source_branch: 'master',
|
||||
target_branch: "branch_1",
|
||||
source_project: project,
|
||||
target_project: target_project)
|
||||
|
||||
head_pipeline = pipeline
|
||||
head_pipeline = execute_service
|
||||
|
||||
expect(merge_request.reload.head_pipeline).to eq(head_pipeline)
|
||||
end
|
||||
|
@ -90,15 +103,36 @@ describe Ci::CreatePipelineService do
|
|||
|
||||
context 'when the pipeline is not the latest for the branch' do
|
||||
it 'does not update merge request head pipeline' do
|
||||
merge_request = create(:merge_request, source_branch: 'master', target_branch: "branch_1", source_project: project)
|
||||
merge_request = create(:merge_request, source_branch: 'master',
|
||||
target_branch: "branch_1",
|
||||
source_project: project)
|
||||
|
||||
allow_any_instance_of(Ci::Pipeline).to receive(:latest?).and_return(false)
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue