summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-10-09 13:07:55 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-10-09 13:07:55 +0200
commit9ad48a7438048ca19ff847e5fa7f2ccd7c6d59af (patch)
tree9d459df271cbf453432a419831fbfd75ca4e5ba0
parent8af29c214ce0ac382f85a0e37a2106138ed13f6d (diff)
downloadgitlab-ce-9ad48a7438048ca19ff847e5fa7f2ccd7c6d59af.tar.gz
Extract class responsible for building a pipeline
-rw-r--r--app/services/ci/create_pipeline_service.rb55
-rw-r--r--lib/gitlab/ci/pipeline/chain/build.rb56
2 files changed, 68 insertions, 43 deletions
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb
index 31a712ccc1b..7b9ea223d26 100644
--- a/app/services/ci/create_pipeline_service.rb
+++ b/app/services/ci/create_pipeline_service.rb
@@ -2,27 +2,24 @@ module Ci
class CreatePipelineService < BaseService
attr_reader :pipeline
- SEQUENCE = [Gitlab::Ci::Pipeline::Chain::Validate::Abilities,
+ SEQUENCE = [Gitlab::Ci::Pipeline::Chain::Build,
+ Gitlab::Ci::Pipeline::Chain::Validate::Abilities,
Gitlab::Ci::Pipeline::Chain::Validate::Repository,
Gitlab::Ci::Pipeline::Chain::Validate::Config,
Gitlab::Ci::Pipeline::Chain::Skip,
Gitlab::Ci::Pipeline::Chain::Create].freeze
def execute(source, ignore_skip_ci: false, save_on_errors: true, trigger_request: nil, schedule: nil, &block)
- @pipeline = Ci::Pipeline.new(
- source: source,
- project: project,
- ref: ref,
- sha: sha,
- before_sha: before_sha,
- tag: tag_exists?,
- trigger_requests: Array(trigger_request),
- user: current_user,
- pipeline_schedule: schedule,
- protected: project.protected_for?(ref)
- )
-
- command = OpenStruct.new(ignore_skip_ci: ignore_skip_ci,
+ @pipeline = Ci::Pipeline.new
+
+ command = OpenStruct.new(source: source,
+ origin_ref: params[:ref],
+ checkout_sha: params[:checkout_sha],
+ after_sha: params[:after],
+ before_sha: params[:before],
+ trigger_request: trigger_request,
+ schedule: schedule,
+ ignore_skip_ci: ignore_skip_ci,
save_incompleted: save_on_errors,
seeds_block: block,
project: project,
@@ -45,14 +42,6 @@ module Ci
private
- def commit
- @commit ||= project.commit(origin_sha || origin_ref)
- end
-
- def sha
- commit.try(:id)
- end
-
def update_merge_requests_head_pipeline
return unless pipeline.latest?
@@ -76,26 +65,6 @@ module Ci
.created_or_pending
end
- def before_sha
- params[:checkout_sha] || params[:before] || Gitlab::Git::BLANK_SHA
- end
-
- def origin_sha
- params[:checkout_sha] || params[:after]
- end
-
- def origin_ref
- params[:ref]
- end
-
- def tag_exists?
- project.repository.tag_exists?(ref)
- end
-
- def ref
- @ref ||= Gitlab::Git.ref_name(origin_ref)
- end
-
def pipeline_created_counter
@pipeline_created_counter ||= Gitlab::Metrics
.counter(:pipelines_created_total, "Counter of pipelines created")
diff --git a/lib/gitlab/ci/pipeline/chain/build.rb b/lib/gitlab/ci/pipeline/chain/build.rb
new file mode 100644
index 00000000000..efd1da733c5
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/chain/build.rb
@@ -0,0 +1,56 @@
+module Gitlab
+ module Ci
+ module Pipeline
+ module Chain
+ class Build < Chain::Base
+ include Chain::Helpers
+
+ def perform!
+ @pipeline.assign_attributes(
+ source: @command.source,
+ project: @project,
+ ref: ref,
+ sha: sha,
+ before_sha: before_sha,
+ tag: tag_exists?,
+ trigger_requests: Array(@command.trigger_request),
+ user: @current_user,
+ pipeline_schedule: @command.schedule,
+ protected: protected_ref?
+ )
+ end
+
+ def break?
+ false
+ end
+
+ private
+
+ def ref
+ @ref ||= Gitlab::Git.ref_name(origin_ref)
+ end
+
+ def sha
+ @project.commit(origin_sha || origin_ref).try(:id)
+ end
+
+ def origin_ref
+ @command.origin_ref
+ end
+
+ def origin_sha
+ @command.checkout_sha || @command.after_sha
+ end
+
+ def before_sha
+ @command.checkout_sha || @command.before_sha || Gitlab::Git::BLANK_SHA
+ end
+
+ def protected_ref?
+ @project.protected_for?(ref)
+ end
+ end
+ end
+ end
+ end
+end