diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 966a2449d2c..09aec6b40d0 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -78,10 +78,14 @@ class CommitStatus < ActiveRecord::Base end after_transition do |commit_status, transition| - if commit_status.pipeline && !transition.loopback? - ProcessPipelineWorker.perform_async( - commit_status.pipeline.id, process: commit_status.complete? - ) + return if transition.loopback? + + commit_status.pipeline.try(:id).try do |pipeline_id| + if commit_status.complete? + ProcessPipelineWorker.perform_async(pipeline_id) + end + + UpdatePipelineWorker.perform_async(pipeline_id) end true diff --git a/app/workers/process_pipeline_worker.rb b/app/workers/process_pipeline_worker.rb index fa1251b8e9f..9aad8cf818f 100644 --- a/app/workers/process_pipeline_worker.rb +++ b/app/workers/process_pipeline_worker.rb @@ -3,15 +3,10 @@ class ProcessPipelineWorker sidekiq_options queue: :default - def perform(pipeline_id, params) - begin - pipeline = Ci::Pipeline.find(pipeline_id) - rescue ActiveRecord::RecordNotFound - return - end + def perform(pipeline_id) + pipeline = Ci::Pipeline.find_by(id: pipeline_id) + return unless pipeline - pipeline.process! if params['process'] - - pipeline.update_status + pipeline.process! end end diff --git a/app/workers/update_pipeline_worker.rb b/app/workers/update_pipeline_worker.rb new file mode 100644 index 00000000000..31d29d0ab1c --- /dev/null +++ b/app/workers/update_pipeline_worker.rb @@ -0,0 +1,12 @@ +class UpdatePipelineWorker + include Sidekiq::Worker + + sidekiq_options queue: :default + + def perform(pipeline_id) + pipeline = Ci::Pipeline.find_by(id: pipeline_id) + return unless pipeline + + pipeline.update_status + end +end