summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-07 09:32:29 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-07 09:32:29 +0200
commita98e4081d1b122d001438d17036f395fc82b9d5c (patch)
tree1a1e00871ee4f35b36fc68851e0a0f8c6c09ce27
parenta43baa056e69827c342e705e2d5ea8cfc67bfd9c (diff)
downloadgitlab-ce-a98e4081d1b122d001438d17036f395fc82b9d5c.tar.gz
Process MWBS in successful pipeline asynchronously
-rw-r--r--app/models/ci/pipeline.rb2
-rw-r--r--app/workers/pipeline_success_worker.rb12
-rw-r--r--spec/workers/pipeline_success_worker_spec.rb24
3 files changed, 37 insertions, 1 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 040ba20eb09..d3a6e0a11f0 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -71,7 +71,7 @@ module Ci
end
after_transition [:created, :pending, :running] => :success do |pipeline|
- MergeRequests::MergeWhenBuildSucceedsService.new(pipeline.project, nil).trigger(pipeline)
+ PipelineSuccessWorker.perform_async(pipeline.id)
end
after_transition do |pipeline, transition|
diff --git a/app/workers/pipeline_success_worker.rb b/app/workers/pipeline_success_worker.rb
new file mode 100644
index 00000000000..5dd443fea59
--- /dev/null
+++ b/app/workers/pipeline_success_worker.rb
@@ -0,0 +1,12 @@
+class PipelineSuccessWorker
+ include Sidekiq::Worker
+ sidekiq_options queue: :default
+
+ def perform(pipeline_id)
+ Ci::Pipeline.find_by(id: pipeline_id).try do |pipeline|
+ MergeRequests::MergeWhenBuildSucceedsService
+ .new(pipeline.project, nil)
+ .trigger(pipeline)
+ end
+ end
+end
diff --git a/spec/workers/pipeline_success_worker_spec.rb b/spec/workers/pipeline_success_worker_spec.rb
new file mode 100644
index 00000000000..5e31cc2c8e7
--- /dev/null
+++ b/spec/workers/pipeline_success_worker_spec.rb
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+describe PipelineSuccessWorker do
+ describe '#perform' do
+ context 'when pipeline exists' do
+ let(:pipeline) { create(:ci_pipeline, status: 'success') }
+
+ it 'performs "merge when pipeline succeeds"' do
+ expect_any_instance_of(
+ MergeRequests::MergeWhenBuildSucceedsService
+ ).to receive(:trigger)
+
+ described_class.new.perform(pipeline.id)
+ end
+ end
+
+ context 'when pipeline does not exist' do
+ it 'does not raise exception' do
+ expect { described_class.new.perform(123) }
+ .not_to raise_error
+ end
+ end
+ end
+end