summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci/build/step.rb
blob: 1877429ac464c98bfae2e5bb8ed9c3af946fe1fb (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
module Gitlab
  module Ci
    module Build
      class Step
        WHEN_ON_FAILURE = 'on_failure'.freeze
        WHEN_ON_SUCCESS = 'on_success'.freeze
        WHEN_ALWAYS = 'always'.freeze

        attr_reader :name
        attr_writer :script
        attr_accessor :timeout, :when, :allow_failure

        class << self
          def from_commands(job)
            self.new(:script).tap do |step|
              step.script = job.commands
              step.timeout = job.timeout
              step.when = WHEN_ON_SUCCESS
            end
          end

          def from_after_script(job)
            after_script = job.options[:after_script]
            return unless after_script

            self.new(:after_script).tap do |step|
              step.script = after_script
              step.timeout = job.timeout
              step.when = WHEN_ALWAYS
              step.allow_failure = true
            end
          end
        end

        def initialize(name)
          @name = name
          @allow_failure = false
        end

        def script
          @script.split("\n")
        end
      end
    end
  end
end