diff options
Diffstat (limited to 'app/services/ci/play_build_service.rb')
-rw-r--r-- | app/services/ci/play_build_service.rb | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/app/services/ci/play_build_service.rb b/app/services/ci/play_build_service.rb index fbf2aad1991..b7aec57f3e3 100644 --- a/app/services/ci/play_build_service.rb +++ b/app/services/ci/play_build_service.rb @@ -5,21 +5,27 @@ module Ci def execute(build, job_variables_attributes = nil) check_access!(build, job_variables_attributes) - # Try to enqueue the build, otherwise create a duplicate. - # - if build.enqueue - build.tap do |build| - build.update!(user: current_user, job_variables_attributes: job_variables_attributes || []) - - AfterRequeueJobService.new(project, current_user).execute(build) - end + if build.can_enqueue? + build.user = current_user + build.job_variables_attributes = job_variables_attributes || [] + build.enqueue! + + AfterRequeueJobService.new(project, current_user).execute(build) + + build else - Ci::RetryJobService.new(project, current_user).execute(build)[:job] + retry_build(build) end + rescue StateMachines::InvalidTransition + retry_build(build.reset) end private + def retry_build(build) + Ci::RetryJobService.new(project, current_user).execute(build)[:job] + end + def check_access!(build, job_variables_attributes) raise Gitlab::Access::AccessDeniedError unless can?(current_user, :play_job, build) |