diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 9fa8d17e74ec9ba6fb5fb5f86438dcb11a4e2d65..38554e7a0ca23b713b08261c307519516803f24a 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -1,6 +1,7 @@ class CommitStatus < ActiveRecord::Base include HasStatus include Importable + include AfterCommitQueue self.table_name = 'ci_builds' @@ -84,20 +85,6 @@ class CommitStatus < ActiveRecord::Base commit_status.update_attributes finished_at: Time.now end - after_transition do |commit_status, transition| - commit_status.pipeline.try do |pipeline| - break if transition.loopback? - - if commit_status.complete? - ProcessPipelineWorker.perform_async(pipeline.id) - end - - UpdatePipelineWorker.perform_async(pipeline.id) - end - - true - end - after_transition [:created, :pending, :running] => :success do |commit_status| MergeRequests::MergeWhenBuildSucceedsService.new(commit_status.pipeline.project, nil).trigger(commit_status) end @@ -105,10 +92,26 @@ class CommitStatus < ActiveRecord::Base after_transition any => :failed do |commit_status| MergeRequests::AddTodoWhenBuildFailsService.new(commit_status.pipeline.project, nil).execute(commit_status) end + + after_transition do: :schedule_pipeline_update end delegate :sha, :short_sha, to: :pipeline + def schedule_pipeline_update + run_after_commit(:process_pipeline!) + end + + def process_pipeline! + pipeline.try do |pipeline| + if complete? + ProcessPipelineWorker.perform_async(pipeline.id) + else + UpdatePipelineWorker.perform_async(pipeline.id) + end + end + end + def before_sha pipeline.before_sha || Gitlab::Git::BLANK_SHA end diff --git a/app/services/ci/process_pipeline_service.rb b/app/services/ci/process_pipeline_service.rb index 36c93dddadbde82ae28d3ac96eac9c13d9af259c..d3dd30b2588fb0af2fa338cef66af59823bd53a5 100644 --- a/app/services/ci/process_pipeline_service.rb +++ b/app/services/ci/process_pipeline_service.rb @@ -16,6 +16,8 @@ module Ci process_stage(index) end + @pipeline.update_status + # Return a flag if a when builds got enqueued new_builds.flatten.any? end