Discover branches for commit statuses ref-less when doing merge when succeeded
This commit is contained in:
parent
56449cc674
commit
6febe1007e
3 changed files with 41 additions and 11 deletions
|
@ -46,6 +46,7 @@ v 8.5.0 (unreleased)
|
||||||
- Deprecate API "merge_request/:merge_request_id/comments". Use "merge_requests/:merge_request_id/notes" instead
|
- Deprecate API "merge_request/:merge_request_id/comments". Use "merge_requests/:merge_request_id/notes" instead
|
||||||
- Deprecate API "merge_request/:merge_request_id/...". Use "merge_requests/:merge_request_id/..." instead
|
- Deprecate API "merge_request/:merge_request_id/...". Use "merge_requests/:merge_request_id/..." instead
|
||||||
- Prevent parse error when name of project ends with .atom and prevent path issues
|
- Prevent parse error when name of project ends with .atom and prevent path issues
|
||||||
|
- Discover branches for commit statuses ref-less when doing merge when succeeded
|
||||||
- Mark inline difference between old and new paths when a file is renamed
|
- Mark inline difference between old and new paths when a file is renamed
|
||||||
- Support Akismet spam checking for creation of issues via API (Stan Hu)
|
- Support Akismet spam checking for creation of issues via API (Stan Hu)
|
||||||
- API: Allow to set or update a merge-request's milestone (Kirill Skachkov)
|
- API: Allow to set or update a merge-request's milestone (Kirill Skachkov)
|
||||||
|
|
|
@ -19,8 +19,8 @@ module MergeRequests
|
||||||
end
|
end
|
||||||
|
|
||||||
# Triggers the automatic merge of merge_request once the build succeeds
|
# Triggers the automatic merge of merge_request once the build succeeds
|
||||||
def trigger(build)
|
def trigger(commit_status)
|
||||||
merge_requests = merge_request_from(build)
|
merge_requests = merge_request_from(commit_status)
|
||||||
|
|
||||||
merge_requests.each do |merge_request|
|
merge_requests.each do |merge_request|
|
||||||
next unless merge_request.merge_when_build_succeeds?
|
next unless merge_request.merge_when_build_succeeds?
|
||||||
|
@ -45,9 +45,14 @@ module MergeRequests
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def merge_request_from(build)
|
def merge_request_from(commit_status)
|
||||||
merge_requests = @project.origin_merge_requests.opened.where(source_branch: build.ref).to_a
|
branches = commit_status.ref
|
||||||
merge_requests += @project.fork_merge_requests.opened.where(source_branch: build.ref).to_a
|
|
||||||
|
# This is for ref-less builds
|
||||||
|
branches ||= @project.repository.branch_names_contains(commit_status.sha)
|
||||||
|
|
||||||
|
merge_requests = @project.origin_merge_requests.opened.where(source_branch: branches).to_a
|
||||||
|
merge_requests += @project.fork_merge_requests.opened.where(source_branch: branches).to_a
|
||||||
|
|
||||||
merge_requests.uniq.select(&:source_project)
|
merge_requests.uniq.select(&:source_project)
|
||||||
end
|
end
|
||||||
|
|
|
@ -54,14 +54,38 @@ describe MergeRequests::MergeWhenBuildSucceedsService do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#trigger" do
|
describe "#trigger" do
|
||||||
let(:build) { create(:ci_build, ref: mr_merge_if_green_enabled.source_branch, status: "success") }
|
context 'build with ref' do
|
||||||
|
let(:build) { create(:ci_build, ref: mr_merge_if_green_enabled.source_branch, status: "success") }
|
||||||
|
|
||||||
it "merges all merge requests with merge when build succeeds enabled" do
|
it "merges all merge requests with merge when build succeeds enabled" do
|
||||||
allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
|
allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
|
||||||
allow(ci_commit).to receive(:success?).and_return(true)
|
allow(ci_commit).to receive(:success?).and_return(true)
|
||||||
|
|
||||||
expect(MergeWorker).to receive(:perform_async)
|
expect(MergeWorker).to receive(:perform_async)
|
||||||
service.trigger(build)
|
service.trigger(build)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'commit status without ref' do
|
||||||
|
let(:commit_status) { create(:generic_commit_status, status: 'success') }
|
||||||
|
|
||||||
|
it "doesn't merge a requests for status on other branch" do
|
||||||
|
allow(project.repository).to receive(:branch_names_contains).with(commit_status.sha).and_return([])
|
||||||
|
|
||||||
|
expect(MergeWorker).to_not receive(:perform_async)
|
||||||
|
service.trigger(commit_status)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'discovers branches and merges all merge requests when status is success' do
|
||||||
|
allow(project.repository).to receive(:branch_names_contains).
|
||||||
|
with(commit_status.sha).and_return([mr_merge_if_green_enabled.source_branch])
|
||||||
|
allow(ci_commit).to receive(:success?).and_return(true)
|
||||||
|
allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
|
||||||
|
allow(ci_commit).to receive(:success?).and_return(true)
|
||||||
|
|
||||||
|
expect(MergeWorker).to receive(:perform_async)
|
||||||
|
service.trigger(commit_status)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'properly handles multiple stages' do
|
context 'properly handles multiple stages' do
|
||||||
|
|
Loading…
Reference in a new issue