summaryrefslogtreecommitdiff
path: root/app/models/commit_status.rb
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-08-11 20:54:02 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2016-08-11 20:58:32 +0200
commitd0aafe71ea9f01996c1ec1656ca7381a714325be (patch)
treee2d5a0ce710e5962229a155091afa3443e3d805e /app/models/commit_status.rb
parentd983c5bd4671d989edf3741d0db0a54dcef9c3b6 (diff)
downloadgitlab-ce-fix-pipeline-processing.tar.gz
Use state machine for pipeline event processingfix-pipeline-processing
Conflicts: app/models/ci/pipeline.rb spec/models/ci/pipeline_spec.rb
Diffstat (limited to 'app/models/commit_status.rb')
-rw-r--r--app/models/commit_status.rb28
1 files changed, 24 insertions, 4 deletions
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 3ab44461179..5773545a602 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -74,13 +74,33 @@ class CommitStatus < ActiveRecord::Base
around_transition any => [:success, :failed, :canceled] do |commit_status, block|
block.call
- commit_status.pipeline.process! if commit_status.pipeline
+ commit_status.pipeline.try(:process!)
end
- around_transition any => [:pending, :running] do |commit_status, block|
- block.call
+ # Try to update the pipeline status
+
+ after_transition any => :pending do |commit_status|
+ commit_status.pipeline.try(:start)
+ end
+
+ after_transition any => :running do |commit_status|
+ commit_status.pipeline.try(:run)
+ end
+
+ after_transition any => :success do |commit_status|
+ commit_status.pipeline.try(:succeed)
+ end
+
+ after_transition any => :failed do |commit_status|
+ commit_status.pipeline.try(:drop)
+ end
+
+ after_transition any => :skipped do |commit_status|
+ commit_status.pipeline.try(:skip)
+ end
- commit_status.pipeline.reload_status! if commit_status.pipeline
+ after_transition any => :canceled do |commit_status|
+ commit_status.pipeline.try(:cancel)
end
end