From 9202b1f4dfc65df9daff3797b3012840f6359f03 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Fri, 10 Feb 2017 15:43:15 +0100 Subject: [PATCH] Extract CI/CD build retry code to separate service --- app/models/ci/build.rb | 27 +--------------- app/services/ci/retry_build_service.rb | 43 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 26 deletions(-) create mode 100644 app/services/ci/retry_build_service.rb diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 8c1b076c2d7..db0cf032087 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 00000000000..92006cb331c --- /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