Commit 552e9f74 authored by Ash McKenzie's avatar Ash McKenzie

Merge branch 'fix-schedule-head-pipeline-update-method' into 'master'

Fix update head pipeline process of Pipelines for merge requests

See merge request gitlab-org/gitlab-ce!28057
parents b32798ac 7c2b1cb0
...@@ -104,17 +104,11 @@ module Ci ...@@ -104,17 +104,11 @@ module Ci
end end
def schedule_head_pipeline_update def schedule_head_pipeline_update
related_merge_requests.each do |merge_request| pipeline.all_merge_requests.opened.each do |merge_request|
UpdateHeadPipelineForMergeRequestWorker.perform_async(merge_request.id) UpdateHeadPipelineForMergeRequestWorker.perform_async(merge_request.id)
end end
end end
# rubocop: disable CodeReuse/ActiveRecord
def related_merge_requests
pipeline.project.source_of_merge_requests.opened.where(source_branch: pipeline.ref)
end
# rubocop: enable CodeReuse/ActiveRecord
def extra_options(options = {}) def extra_options(options = {})
# In Ruby 2.4, even when options is empty, f(**options) doesn't work when f # In Ruby 2.4, even when options is empty, f(**options) doesn't work when f
# doesn't have any parameters. We reproduce the Ruby 2.5 behavior by # doesn't have any parameters. We reproduce the Ruby 2.5 behavior by
......
---
title: Fix update head pipeline process of Pipelines for merge requests
merge_request: 28057
author:
type: fixed
...@@ -773,7 +773,7 @@ describe Ci::CreatePipelineService do ...@@ -773,7 +773,7 @@ describe Ci::CreatePipelineService do
end end
end end
describe 'Merge request pipelines' do describe 'Pipelines for merge requests' do
let(:pipeline) do let(:pipeline) do
execute_service(source: source, execute_service(source: source,
merge_request: merge_request, merge_request: merge_request,
...@@ -817,12 +817,14 @@ describe Ci::CreatePipelineService do ...@@ -817,12 +817,14 @@ describe Ci::CreatePipelineService do
let(:merge_request) do let(:merge_request) do
create(:merge_request, create(:merge_request,
source_project: project, source_project: project,
source_branch: Gitlab::Git.ref_name(ref_name), source_branch: 'feature',
target_project: project, target_project: project,
target_branch: 'master') target_branch: 'master')
end end
it 'creates a merge request pipeline' do let(:ref_name) { merge_request.ref_path }
it 'creates a detached merge request pipeline' do
expect(pipeline).to be_persisted expect(pipeline).to be_persisted
expect(pipeline).to be_merge_request_event expect(pipeline).to be_merge_request_event
expect(pipeline.merge_request).to eq(merge_request) expect(pipeline.merge_request).to eq(merge_request)
...@@ -837,6 +839,13 @@ describe Ci::CreatePipelineService do ...@@ -837,6 +839,13 @@ describe Ci::CreatePipelineService do
expect(pipeline.target_sha).to be_nil expect(pipeline.target_sha).to be_nil
end end
it 'schedules update for the head pipeline of the merge request' do
expect(UpdateHeadPipelineForMergeRequestWorker)
.to receive(:perform_async).with(merge_request.id)
pipeline
end
context 'when target sha is specified' do context 'when target sha is specified' do
let(:target_sha) { merge_request.target_branch_sha } let(:target_sha) { merge_request.target_branch_sha }
...@@ -858,15 +867,16 @@ describe Ci::CreatePipelineService do ...@@ -858,15 +867,16 @@ describe Ci::CreatePipelineService do
let(:merge_request) do let(:merge_request) do
create(:merge_request, create(:merge_request,
source_project: project, source_project: project,
source_branch: Gitlab::Git.ref_name(ref_name), source_branch: 'feature',
target_project: target_project, target_project: target_project,
target_branch: 'master') target_branch: 'master')
end end
let(:ref_name) { 'refs/heads/feature' }
let!(:project) { fork_project(target_project, nil, repository: true) } let!(:project) { fork_project(target_project, nil, repository: true) }
let!(:target_project) { create(:project, :repository) } let!(:target_project) { create(:project, :repository) }
it 'creates a merge request pipeline in the forked project' do it 'creates a legacy detached merge request pipeline in the forked project' do
expect(pipeline).to be_persisted expect(pipeline).to be_persisted
expect(project.ci_pipelines).to eq([pipeline]) expect(project.ci_pipelines).to eq([pipeline])
expect(target_project.ci_pipelines).to be_empty expect(target_project.ci_pipelines).to be_empty
...@@ -884,7 +894,7 @@ describe Ci::CreatePipelineService do ...@@ -884,7 +894,7 @@ describe Ci::CreatePipelineService do
} }
end end
it 'does not create a merge request pipeline' do it 'does not create a detached merge request pipeline' do
expect(pipeline).not_to be_persisted expect(pipeline).not_to be_persisted
expect(pipeline.errors[:base]).to eq(["No stages / jobs for this pipeline."]) expect(pipeline.errors[:base]).to eq(["No stages / jobs for this pipeline."])
end end
...@@ -894,7 +904,7 @@ describe Ci::CreatePipelineService do ...@@ -894,7 +904,7 @@ describe Ci::CreatePipelineService do
context 'when merge request is not specified' do context 'when merge request is not specified' do
let(:merge_request) { nil } let(:merge_request) { nil }
it 'does not create a merge request pipeline' do it 'does not create a detached merge request pipeline' do
expect(pipeline).not_to be_persisted expect(pipeline).not_to be_persisted
expect(pipeline.errors[:merge_request]).to eq(["can't be blank"]) expect(pipeline.errors[:merge_request]).to eq(["can't be blank"])
end end
...@@ -928,7 +938,7 @@ describe Ci::CreatePipelineService do ...@@ -928,7 +938,7 @@ describe Ci::CreatePipelineService do
target_branch: 'master') target_branch: 'master')
end end
it 'does not create a merge request pipeline' do it 'does not create a detached merge request pipeline' do
expect(pipeline).not_to be_persisted expect(pipeline).not_to be_persisted
expect(pipeline.errors[:base]) expect(pipeline.errors[:base])
...@@ -939,7 +949,7 @@ describe Ci::CreatePipelineService do ...@@ -939,7 +949,7 @@ describe Ci::CreatePipelineService do
context 'when merge request is not specified' do context 'when merge request is not specified' do
let(:merge_request) { nil } let(:merge_request) { nil }
it 'does not create a merge request pipeline' do it 'does not create a detached merge request pipeline' do
expect(pipeline).not_to be_persisted expect(pipeline).not_to be_persisted
expect(pipeline.errors[:base]) expect(pipeline.errors[:base])
...@@ -968,7 +978,7 @@ describe Ci::CreatePipelineService do ...@@ -968,7 +978,7 @@ describe Ci::CreatePipelineService do
target_branch: 'master') target_branch: 'master')
end end
it 'does not create a merge request pipeline' do it 'does not create a detached merge request pipeline' do
expect(pipeline).not_to be_persisted expect(pipeline).not_to be_persisted
expect(pipeline.errors[:base]) expect(pipeline.errors[:base])
...@@ -999,7 +1009,7 @@ describe Ci::CreatePipelineService do ...@@ -999,7 +1009,7 @@ describe Ci::CreatePipelineService do
target_branch: 'master') target_branch: 'master')
end end
it 'does not create a merge request pipeline' do it 'does not create a detached merge request pipeline' do
expect(pipeline).not_to be_persisted expect(pipeline).not_to be_persisted
expect(pipeline.errors[:base]) expect(pipeline.errors[:base])
...@@ -1028,7 +1038,7 @@ describe Ci::CreatePipelineService do ...@@ -1028,7 +1038,7 @@ describe Ci::CreatePipelineService do
target_branch: 'master') target_branch: 'master')
end end
it 'does not create a merge request pipeline' do it 'does not create a detached merge request pipeline' do
expect(pipeline).not_to be_persisted expect(pipeline).not_to be_persisted
expect(pipeline.errors[:base]) expect(pipeline.errors[:base])
......
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