blob: 9d8e4d361f449aa2c25fd8d94f9c7e5517ff2725 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
module Ci
class RetryPipelineService
include Gitlab::Allowable
def initialize(pipeline, user)
@pipeline = pipeline
@user = user
end
def execute
unless can?(@user, :update_pipeline, @pipeline)
raise Gitlab::Access::AccessDeniedError
end
##
# Reprocess builds in subsequent stages if any
#
# TODO, refactor.
#
@pipeline.builds
.where('stage_idx > ?', resume_stage.index)
.failed_or_canceled.find_each do |build|
Ci::RetryBuildService.new(build, @user).reprocess!
end
##
# Retry builds in the first unsuccessful stage
#
resume_stage.builds.failed_or_canceled.find_each do |build|
Ci::Build.retry(build, @user)
end
end
private
def resume_stage
@resume_stage ||= @pipeline.stages.find do |stage|
stage.failed? || stage.canceled?
end
end
end
end
|