summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2018-08-31 15:20:13 +0200
committerKamil Trzciński <ayufan@ayufan.eu>2018-08-31 15:20:13 +0200
commit4561d3981b7915bf955081f7127848fa30024352 (patch)
tree43cab8c72887f5fe26a5b1b27c686b1d6725d78d
parentf40cf8268cf785e57a37ceb3021840160b280ab7 (diff)
downloadgitlab-ce-kamil-refactor-ci-builds-v2.tar.gz
-rw-r--r--app/models/ci/build.rb1
-rw-r--r--app/models/ci/build_config.rb4
-rw-r--r--app/services/ci/retry_build_service.rb15
3 files changed, 18 insertions, 2 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 869fda99f12..fe5554c3959 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -41,6 +41,7 @@ module Ci
has_one :metadata, class_name: 'Ci::BuildMetadata'
has_one :runner_session, class_name: 'Ci::BuildRunnerSession', validate: true, inverse_of: :build
+ accepts_nested_attributes_for :config, update_only: true
accepts_nested_attributes_for :runner_session
delegate :timeout, to: :metadata, prefix: true, allow_nil: true
diff --git a/app/models/ci/build_config.rb b/app/models/ci/build_config.rb
index bf370d6d977..11ccd797d30 100644
--- a/app/models/ci/build_config.rb
+++ b/app/models/ci/build_config.rb
@@ -9,6 +9,10 @@ module Ci
serialize :yaml_options # rubocop:disable Cop/ActiveRecordSerialize
serialize :yaml_variables, Gitlab::Serializer::Ci::Variables # rubocop:disable Cop/ActiveRecordSerialize
+ def project
+ build.project
+ end
+
def image
self.yaml_options[:image] if self.yaml_options
end
diff --git a/app/services/ci/retry_build_service.rb b/app/services/ci/retry_build_service.rb
index 6ceb59e4780..d3ddb7ed874 100644
--- a/app/services/ci/retry_build_service.rb
+++ b/app/services/ci/retry_build_service.rb
@@ -2,11 +2,13 @@
module Ci
class RetryBuildService < ::BaseService
- CLONE_ACCESSORS = %i[pipeline project ref tag options commands name
+ CLONE_ACCESSORS = %i[pipeline project ref tag name
allow_failure stage stage_id stage_idx trigger_request
- yaml_variables when environment coverage_regex
+ when environment coverage_regex
description tag_list protected].freeze
+ CONFIG_ACCESSORS = %i[yaml_options yaml_variables].freeze
+
def execute(build)
reprocess!(build).tap do |new_build|
build.pipeline.mark_as_processable_after_stage(build.stage_idx)
@@ -24,11 +26,20 @@ module Ci
raise Gitlab::Access::AccessDeniedError
end
+ unless build.config
+ raise Gitlab::Access::AccessDeniedError
+ end
+
attributes = CLONE_ACCESSORS.map do |attribute|
[attribute, build.public_send(attribute)] # rubocop:disable GitlabSecurity/PublicSend
end
+ config_attributes = CONFIG_ACCESSORS.map do |attribute|
+ [attribute, build.config.public_send(attribute)] # rubocop:disable GitlabSecurity/PublicSend
+ end
+
attributes.push([:user, current_user])
+ attributes.push([:config_attributes, Hash[config_attributes]])
build.retried = true