Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-24 15:08:01 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-24 15:08:01 +0300
commitc6373a2cec855c6543a1e035c52099e102dd05ef (patch)
tree507c4d975e1bf559a008d997ad4b07dad14f397e /app/models/ci/build.rb
parent6593f1f627938f22090dec5221476772d3ed581d (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models/ci/build.rb')
-rw-r--r--app/models/ci/build.rb62
1 files changed, 54 insertions, 8 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index f0930705a3f..5324d59c155 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -206,9 +206,25 @@ module Ci
state_machine :status do
event :enqueue do
+ transition [:created, :skipped, :manual, :scheduled] => :waiting_for_resource, if: :requires_resource?
transition [:created, :skipped, :manual, :scheduled] => :preparing, if: :any_unmet_prerequisites?
end
+ event :enqueue_scheduled do
+ transition scheduled: :waiting_for_resource, if: :requires_resource?
+ transition scheduled: :preparing, if: :any_unmet_prerequisites?
+ transition scheduled: :pending
+ end
+
+ event :enqueue_waiting_for_resource do
+ transition waiting_for_resource: :preparing, if: :any_unmet_prerequisites?
+ transition waiting_for_resource: :pending
+ end
+
+ event :enqueue_preparing do
+ transition preparing: :pending
+ end
+
event :actionize do
transition created: :manual
end
@@ -221,14 +237,8 @@ module Ci
transition scheduled: :manual
end
- event :enqueue_scheduled do
- transition scheduled: :preparing, if: ->(build) do
- build.scheduled_at&.past? && build.any_unmet_prerequisites?
- end
-
- transition scheduled: :pending, if: ->(build) do
- build.scheduled_at&.past? && !build.any_unmet_prerequisites?
- end
+ before_transition on: :enqueue_scheduled do |build|
+ build.scheduled_at.nil? || build.scheduled_at.past? # If false is returned, it stops the transition
end
before_transition scheduled: any do |build|
@@ -239,6 +249,27 @@ module Ci
build.scheduled_at = build.options_scheduled_at
end
+ before_transition any => :waiting_for_resource do |build|
+ build.waiting_for_resource_at = Time.now
+ end
+
+ before_transition on: :enqueue_waiting_for_resource do |build|
+ next unless build.requires_resource?
+
+ build.resource_group.assign_resource_to(build) # If false is returned, it stops the transition
+ end
+
+ after_transition any => :waiting_for_resource do |build|
+ build.run_after_commit do
+ Ci::ResourceGroups::AssignResourceFromResourceGroupWorker
+ .perform_async(build.resource_group_id)
+ end
+ end
+
+ before_transition on: :enqueue_preparing do |build|
+ build.any_unmet_prerequisites? # If false is returned, it stops the transition
+ end
+
after_transition created: :scheduled do |build|
build.run_after_commit do
Ci::BuildScheduleWorker.perform_at(build.scheduled_at, build.id)
@@ -267,6 +298,16 @@ module Ci
end
end
+ after_transition any => ::Ci::Build.completed_statuses do |build|
+ next unless build.resource_group_id.present?
+ next unless build.resource_group.release_resource_from(build)
+
+ build.run_after_commit do
+ Ci::ResourceGroups::AssignResourceFromResourceGroupWorker
+ .perform_async(build.resource_group_id)
+ end
+ end
+
after_transition any => [:success, :failed, :canceled] do |build|
build.run_after_commit do
BuildFinishedWorker.perform_async(id)
@@ -439,6 +480,11 @@ module Ci
end
end
+ def requires_resource?
+ Feature.enabled?(:ci_resource_group, project) &&
+ self.resource_group_id.present?
+ end
+
def has_environment?
environment.present?
end