summaryrefslogtreecommitdiff
path: root/app/models/ci/pipeline.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/ci/pipeline.rb')
-rw-r--r--app/models/ci/pipeline.rb15
1 files changed, 10 insertions, 5 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 42a40e06240..4cecf6f3fe4 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -97,10 +97,14 @@ module Ci
state_machine :status, initial: :created do
event :enqueue do
- transition [:created, :preparing, :skipped, :scheduled] => :pending
+ transition [:created, :waiting_for_resource, :preparing, :skipped, :scheduled] => :pending
transition [:success, :failed, :canceled] => :running
end
+ event :request_resource do
+ transition any - [:waiting_for_resource] => :waiting_for_resource
+ end
+
event :prepare do
transition any - [:preparing] => :preparing
end
@@ -137,7 +141,7 @@ module Ci
# Do not add any operations to this state_machine
# Create a separate worker for each new operation
- before_transition [:created, :preparing, :pending] => :running do |pipeline|
+ before_transition [:created, :waiting_for_resource, :preparing, :pending] => :running do |pipeline|
pipeline.started_at = Time.now
end
@@ -160,7 +164,7 @@ module Ci
end
end
- after_transition [:created, :preparing, :pending] => :running do |pipeline|
+ after_transition [:created, :waiting_for_resource, :preparing, :pending] => :running do |pipeline|
pipeline.run_after_commit { PipelineMetricsWorker.perform_async(pipeline.id) }
end
@@ -168,7 +172,7 @@ module Ci
pipeline.run_after_commit { PipelineMetricsWorker.perform_async(pipeline.id) }
end
- after_transition [:created, :preparing, :pending, :running] => :success do |pipeline|
+ after_transition [:created, :waiting_for_resource, :preparing, :pending, :running] => :success do |pipeline|
pipeline.run_after_commit { PipelineSuccessWorker.perform_async(pipeline.id) }
end
@@ -319,7 +323,7 @@ module Ci
end
def self.bridgeable_statuses
- ::Ci::Pipeline::AVAILABLE_STATUSES - %w[created preparing pending]
+ ::Ci::Pipeline::AVAILABLE_STATUSES - %w[created waiting_for_resource preparing pending]
end
def stages_count
@@ -578,6 +582,7 @@ module Ci
new_status = latest_builds_status.to_s
case new_status
when 'created' then nil
+ when 'waiting_for_resource' then request_resource
when 'preparing' then prepare
when 'pending' then enqueue
when 'running' then run