summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-07 14:52:30 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-07 14:52:30 +0200
commitf5631ff262fcf84b79c35c34d5a5337440aa4621 (patch)
tree419bcdfe07421b1bda43dee9559747e1954c9b93 /app
parenta17412f0aa9ef9c99a5c136906ea8a585326c27d (diff)
downloadgitlab-ce-f5631ff262fcf84b79c35c34d5a5337440aa4621.tar.gz
Fix ci pipeline processing with async jobs
Diffstat (limited to 'app')
-rw-r--r--app/models/commit_status.rb31
-rw-r--r--app/services/ci/process_pipeline_service.rb2
2 files changed, 19 insertions, 14 deletions
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 9fa8d17e74e..38554e7a0ca 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 36c93dddadb..d3dd30b2588 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