summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci/pipeline/chain/build.rb
blob: a126dded1ae66d5734c738dfc562b05c9d4c4b91 (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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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?
            )

            @pipeline.set_config_source
          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