From d0aafe71ea9f01996c1ec1656ca7381a714325be Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Thu, 11 Aug 2016 20:54:02 +0200 Subject: Use state machine for pipeline event processing Conflicts: app/models/ci/pipeline.rb spec/models/ci/pipeline_spec.rb --- app/models/commit_status.rb | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'app/models/commit_status.rb') 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 -- cgit v1.2.1