diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 8c1b076c2d7ae48b147900a4c7e630c78d9b3976..db0cf032087411fc875bad8fa046d033e83bd35d 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -63,32 +63,7 @@ module Ci end def retry(build, user = nil) - new_build = Ci::Build.create( - ref: build.ref, - tag: build.tag, - options: build.options, - commands: build.commands, - tag_list: build.tag_list, - project: build.project, - pipeline: build.pipeline, - name: build.name, - allow_failure: build.allow_failure, - stage: build.stage, - stage_idx: build.stage_idx, - trigger_request: build.trigger_request, - yaml_variables: build.yaml_variables, - when: build.when, - user: user, - environment: build.environment, - status_event: 'enqueue' - ) - - MergeRequests::AddTodoWhenBuildFailsService - .new(build.project, nil) - .close(new_build) - - build.pipeline.mark_as_processable_after_stage(build.stage_idx) - new_build + Ci::RetryBuildService.new(build, user).retry! end end diff --git a/app/services/ci/retry_build_service.rb b/app/services/ci/retry_build_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..92006cb331c6a4cad3134703da5f5233f06869c9 --- /dev/null +++ b/app/services/ci/retry_build_service.rb @@ -0,0 +1,43 @@ +module Ci + class RetryBuildService + def initialize(build, user) + @build = build + @user = user + @pipeline = build.pipeline + end + + def retry! + clone_build.tap do |new_build| + new_build.enqueue! + + MergeRequests::AddTodoWhenBuildFailsService + .new(@build.project, @user) + .close(new_build) + + @pipeline.mark_as_processable_after_stage(@build.stage_idx) + end + end + + private + + def clone_build + Ci::Build.create( + ref: @build.ref, + tag: @build.tag, + options: @build.options, + commands: @build.commands, + tag_list: @build.tag_list, + project: @build.project, + pipeline: @build.pipeline, + name: @build.name, + allow_failure: @build.allow_failure, + stage: @build.stage, + stage_idx: @build.stage_idx, + trigger_request: @build.trigger_request, + yaml_variables: @build.yaml_variables, + when: @build.when, + environment: @build.environment, + user: @user) + end + end +end