diff options
Diffstat (limited to 'app/services/auto_merge/merge_when_pipeline_succeeds_service.rb')
-rw-r--r-- | app/services/auto_merge/merge_when_pipeline_succeeds_service.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/app/services/auto_merge/merge_when_pipeline_succeeds_service.rb b/app/services/auto_merge/merge_when_pipeline_succeeds_service.rb new file mode 100644 index 00000000000..c41073a73e9 --- /dev/null +++ b/app/services/auto_merge/merge_when_pipeline_succeeds_service.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module AutoMerge + class MergeWhenPipelineSucceedsService < AutoMerge::BaseService + def execute(merge_request) + super do + if merge_request.saved_change_to_auto_merge_enabled? + SystemNoteService.merge_when_pipeline_succeeds(merge_request, project, current_user, merge_request.diff_head_commit) + end + end + end + + def process(merge_request) + return unless merge_request.actual_head_pipeline&.success? + return unless merge_request.mergeable? + + merge_request.merge_async(merge_request.merge_user_id, merge_request.merge_params) + end + + def cancel(merge_request) + super do + SystemNoteService.cancel_merge_when_pipeline_succeeds(merge_request, @project, @current_user) + end + end + + def available_for?(merge_request) + merge_request.actual_head_pipeline&.active? + end + end +end |