Commit 40ac9e33 authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch 'fix-merge-request-relations-with-pipeline-on-mwps' into 'master'

Fix MWPS doesn't work for merge request pipelines

See merge request gitlab-org/gitlab-ce!26906
parents 43713d97 fa73f4ee
...@@ -7,7 +7,7 @@ module MergeRequests ...@@ -7,7 +7,7 @@ module MergeRequests
def execute(commit_status) def execute(commit_status)
return if commit_status.allow_failure? || commit_status.retried? return if commit_status.allow_failure? || commit_status.retried?
commit_status_merge_requests(commit_status) do |merge_request| pipeline_merge_requests(commit_status.pipeline) do |merge_request|
todo_service.merge_request_build_failed(merge_request) todo_service.merge_request_build_failed(merge_request)
end end
end end
...@@ -16,7 +16,7 @@ module MergeRequests ...@@ -16,7 +16,7 @@ module MergeRequests
# build is retried # build is retried
# #
def close(commit_status) def close(commit_status)
commit_status_merge_requests(commit_status) do |merge_request| pipeline_merge_requests(commit_status.pipeline) do |merge_request|
todo_service.merge_request_build_retried(merge_request) todo_service.merge_request_build_retried(merge_request)
end end
end end
......
...@@ -99,22 +99,11 @@ module MergeRequests ...@@ -99,22 +99,11 @@ module MergeRequests
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
def pipeline_merge_requests(pipeline) def pipeline_merge_requests(pipeline)
merge_requests_for(pipeline.ref).each do |merge_request| pipeline.all_merge_requests.opened.each do |merge_request|
next unless pipeline == merge_request.head_pipeline next unless pipeline == merge_request.head_pipeline
yield merge_request yield merge_request
end end
end end
def commit_status_merge_requests(commit_status)
merge_requests_for(commit_status.ref).each do |merge_request|
pipeline = merge_request.head_pipeline
next unless pipeline
next unless pipeline.sha == commit_status.sha
yield merge_request
end
end
end end
end end
---
title: Fix MWPS does not work for merge request pipelines
merge_request: 26906
author:
type: fixed
...@@ -3216,7 +3216,7 @@ describe Ci::Build do ...@@ -3216,7 +3216,7 @@ describe Ci::Build do
it 'does not try to create a todo' do it 'does not try to create a todo' do
project.add_developer(user) project.add_developer(user)
expect(service).not_to receive(:commit_status_merge_requests) expect(service).not_to receive(:pipeline_merge_requests)
subject.drop! subject.drop!
end end
...@@ -3252,7 +3252,23 @@ describe Ci::Build do ...@@ -3252,7 +3252,23 @@ describe Ci::Build do
end end
context 'when build is not configured to be retried' do context 'when build is not configured to be retried' do
subject { create(:ci_build, :running, project: project, user: user) } subject { create(:ci_build, :running, project: project, user: user, pipeline: pipeline) }
let(:pipeline) do
create(:ci_pipeline,
project: project,
ref: 'feature',
sha: merge_request.diff_head_sha,
merge_requests_as_head_pipeline: [merge_request])
end
let(:merge_request) do
create(:merge_request, :opened,
source_branch: 'feature',
source_project: project,
target_branch: 'master',
target_project: project)
end
it 'does not retry build' do it 'does not retry build' do
expect(described_class).not_to receive(:retry) expect(described_class).not_to receive(:retry)
...@@ -3271,7 +3287,10 @@ describe Ci::Build do ...@@ -3271,7 +3287,10 @@ describe Ci::Build do
it 'creates a todo' do it 'creates a todo' do
project.add_developer(user) project.add_developer(user)
expect(service).to receive(:commit_status_merge_requests) expect_next_instance_of(TodoService) do |todo_service|
expect(todo_service)
.to receive(:merge_request_build_failed).with(merge_request)
end
subject.drop! subject.drop!
end end
......
...@@ -77,6 +77,22 @@ describe MergeRequests::AddTodoWhenBuildFailsService do ...@@ -77,6 +77,22 @@ describe MergeRequests::AddTodoWhenBuildFailsService do
service.execute(commit_status) service.execute(commit_status)
end end
end end
context 'when build belongs to a merge request pipeline' do
let(:pipeline) do
create(:ci_pipeline, source: :merge_request_event,
ref: merge_request.merge_ref_path,
merge_request: merge_request,
merge_requests_as_head_pipeline: [merge_request])
end
let(:commit_status) { create(:ci_build, ref: merge_request.merge_ref_path, pipeline: pipeline) }
it 'notifies the todo service' do
expect(todo_service).to receive(:merge_request_build_failed).with(merge_request)
service.execute(commit_status)
end
end
end end
describe '#close' do describe '#close' do
...@@ -106,6 +122,22 @@ describe MergeRequests::AddTodoWhenBuildFailsService do ...@@ -106,6 +122,22 @@ describe MergeRequests::AddTodoWhenBuildFailsService do
service.close(commit_status) service.close(commit_status)
end end
end end
context 'when build belongs to a merge request pipeline' do
let(:pipeline) do
create(:ci_pipeline, source: :merge_request_event,
ref: merge_request.merge_ref_path,
merge_request: merge_request,
merge_requests_as_head_pipeline: [merge_request])
end
let(:commit_status) { create(:ci_build, ref: merge_request.merge_ref_path, pipeline: pipeline) }
it 'notifies the todo service' do
expect(todo_service).to receive(:merge_request_build_retried).with(merge_request)
service.close(commit_status)
end
end
end end
describe '#close_all' do describe '#close_all' do
......
...@@ -112,6 +112,21 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do ...@@ -112,6 +112,21 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do
service.trigger(unrelated_pipeline) service.trigger(unrelated_pipeline)
end end
end end
context 'when pipeline is merge request pipeline' do
let(:pipeline) do
create(:ci_pipeline, :success,
source: :merge_request_event,
ref: mr_merge_if_green_enabled.merge_ref_path,
merge_request: mr_merge_if_green_enabled,
merge_requests_as_head_pipeline: [mr_merge_if_green_enabled])
end
it 'merges the associated merge request' do
expect(MergeWorker).to receive(:perform_async)
service.trigger(pipeline)
end
end
end end
describe "#cancel" do describe "#cancel" 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