summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-14 12:53:51 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-14 14:45:14 +0200
commit5904793ad8ba88d3dfc9c973bcffd1d426db5a33 (patch)
treecd2362b9793d698a3bf2e8de467bc2a9a3a8ada0
parentb8003aa012843fac1745c94788b993c36570fbd9 (diff)
downloadgitlab-ce-5904793ad8ba88d3dfc9c973bcffd1d426db5a33.tar.gz
Add build finished worker that creates a workflow
-rw-r--r--app/models/ci/build.rb3
-rw-r--r--app/workers/build_finished_worker.rb12
-rw-r--r--spec/workers/build_finished_worker_spec.rb30
3 files changed, 43 insertions, 2 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 23119c5ed61..87475119b23 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -83,8 +83,7 @@ module Ci
after_transition any => [:success, :failed, :canceled] do |build|
build.run_after_commit do
- BuildCoverageWorker.perform_async(id)
- BuildHooksWorker.perform_async(id)
+ BuildFinishedWorker.perform_async(id)
end
end
diff --git a/app/workers/build_finished_worker.rb b/app/workers/build_finished_worker.rb
new file mode 100644
index 00000000000..f1267ab92fc
--- /dev/null
+++ b/app/workers/build_finished_worker.rb
@@ -0,0 +1,12 @@
+class BuildFinishedWorker
+ include Sidekiq::Worker
+
+ def perform(build_id)
+ Ci::Build.find_by(id: build_id).try do |build|
+ build.with_lock do
+ BuildCoverageWorker.new.perform(build.id)
+ BuildHooksWorker.new.perform(build.id)
+ end
+ end
+ end
+end
diff --git a/spec/workers/build_finished_worker_spec.rb b/spec/workers/build_finished_worker_spec.rb
new file mode 100644
index 00000000000..2868167c7d4
--- /dev/null
+++ b/spec/workers/build_finished_worker_spec.rb
@@ -0,0 +1,30 @@
+require 'spec_helper'
+
+describe BuildFinishedWorker do
+ describe '#perform' do
+ context 'when build exists' do
+ let(:build) { create(:ci_build) }
+
+ it 'calculates coverage and calls hooks' do
+ expect(BuildCoverageWorker)
+ .to receive(:new).ordered.and_call_original
+ expect(BuildHooksWorker)
+ .to receive(:new).ordered.and_call_original
+
+ expect_any_instance_of(BuildCoverageWorker)
+ .to receive(:perform)
+ expect_any_instance_of(BuildHooksWorker)
+ .to receive(:perform)
+
+ described_class.new.perform(build.id)
+ end
+ end
+
+ context 'when build does not exist' do
+ it 'does not raise exception' do
+ expect { described_class.new.perform(123) }
+ .not_to raise_error
+ end
+ end
+ end
+end