diff options
Diffstat (limited to 'app/services/ci/process_build_service.rb')
-rw-r--r-- | app/services/ci/process_build_service.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/app/services/ci/process_build_service.rb b/app/services/ci/process_build_service.rb new file mode 100644 index 00000000000..d9f8e7cb452 --- /dev/null +++ b/app/services/ci/process_build_service.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +module Ci + class ProcessBuildService < BaseService + def execute(build, current_status) + if valid_statuses_for_when(build.when).include?(current_status) + if build.schedulable? + build.schedule + elsif build.action? + build.actionize + else + enqueue(build) + end + + true + else + build.skip + false + end + end + + private + + def enqueue(build) + build.enqueue + end + + def valid_statuses_for_when(value) + case value + when 'on_success' + %w[success skipped] + when 'on_failure' + %w[failed] + when 'always' + %w[success failed skipped] + when 'manual' + %w[success skipped] + when 'delayed' + %w[success skipped] + else + [] + end + end + end +end |