From a26916d18cab6bc3ed2e6846d130fcd5e36fb313 Mon Sep 17 00:00:00 2001 From: Fabio Pitino Date: Fri, 21 Jun 2019 09:46:58 +0100 Subject: Require pipeline if "Pipeline must succeed" is set When a user sets only_allow_merge_if_pipeline_succeeds, also named as "Pipeline must succeed" project setting, we require the pipeline to be present. This solves race condition issues especially with external CI providers when a build is triggered externally but no pipelines are created in GitLab yet. Document that a head pipeline is expected when using "Pipeline must succeed" setting. Also explain limitations with the use of only/except where there may not be any jobs created and the merge request will not be allowed to be merged. --- app/models/merge_request.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models') diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index df2dc9c49eb..c9079b9897a 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -1030,7 +1030,7 @@ class MergeRequest < ApplicationRecord def mergeable_ci_state? return true unless project.only_allow_merge_if_pipeline_succeeds? - return true unless head_pipeline + return false unless head_pipeline actual_head_pipeline&.success? || actual_head_pipeline&.skipped? end -- cgit v1.2.1 From e236fbdb25ee710566d455851238b5ed85b894d7 Mon Sep 17 00:00:00 2001 From: Fabio Pitino Date: Tue, 25 Jun 2019 14:07:34 +0100 Subject: Use actual_head_pipeline to enforce presence --- app/models/merge_request.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/models') diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index c9079b9897a..82034f5946b 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -1030,9 +1030,9 @@ class MergeRequest < ApplicationRecord def mergeable_ci_state? return true unless project.only_allow_merge_if_pipeline_succeeds? - return false unless head_pipeline + return false unless actual_head_pipeline - actual_head_pipeline&.success? || actual_head_pipeline&.skipped? + actual_head_pipeline.success? || actual_head_pipeline.skipped? end def environments_for(current_user) -- cgit v1.2.1