Module: Bard::CLI::CI

Defined in:
lib/bard/cli/ci.rb

Class Method Summary collapse

Class Method Details

.included(mod) ⇒ Object



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
59
60
61
62
63
64
# File 'lib/bard/cli/ci.rb', line 5

def self.included mod
  mod.class_eval do

    option :"local-ci", type: :boolean
    option :status, type: :boolean
    option :resume, type: :boolean
    desc "ci [branch=HEAD]", "runs ci against BRANCH"
    def ci branch=Bard::Git.current_branch
      ci = Bard::CI.new(project_name, branch, local: options["local-ci"])
      if ci.exists?
        return puts ci.status if options["status"]

        if options["resume"]
          puts "Continuous integration: resuming build..."
          success = ci.resume do |elapsed_time, last_time|
            if last_time
              percentage = (elapsed_time.to_f / last_time.to_f * 100).to_i
              output = "  Estimated completion: #{percentage}%"
            else
              output = "  No estimated completion time. Elapsed time: #{elapsed_time} sec"
            end
            print "\x08" * output.length
            print output
            $stdout.flush
          end
        else
          puts "Continuous integration: starting build on #{branch}..."

          success = ci.run do |elapsed_time, last_time|
            if last_time
              percentage = (elapsed_time.to_f / last_time.to_f * 100).to_i
              output = "  Estimated completion: #{percentage}%"
            else
              output = "  No estimated completion time. Elapsed time: #{elapsed_time} sec"
            end
            print "\x08" * output.length
            print output
            $stdout.flush
          end
        end

        if success
          puts
          puts "Continuous integration: success!"
        else
          puts
          puts ci.console
          puts red("Automated tests failed!")
          exit 1
        end

      else
        puts red("No CI found for #{project_name}!")
        puts "Re-run with --skip-ci to bypass CI, if you absolutely must, and know what you're doing."
        exit 1
      end
    end

  end
end