summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci/pipeline
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 /lib/gitlab/ci/pipeline
parent8af29c214ce0ac382f85a0e37a2106138ed13f6d (diff)
downloadgitlab-ce-9ad48a7438048ca19ff847e5fa7f2ccd7c6d59af.tar.gz
Extract class responsible for building a pipeline
Diffstat (limited to 'lib/gitlab/ci/pipeline')
-rw-r--r--lib/gitlab/ci/pipeline/chain/build.rb56
1 files changed, 56 insertions, 0 deletions
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