circleci-cli 0.6.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +21 -19
  4. data/bin/circle +2 -2
  5. data/bin/console +1 -1
  6. data/{circler.gemspec → circleci-cli.gemspec} +3 -3
  7. data/exe/{circle → circleci-cli} +2 -2
  8. data/lib/circleci/cli.rb +77 -0
  9. data/lib/circleci/cli/command.rb +16 -0
  10. data/lib/circleci/cli/command/base_command.rb +45 -0
  11. data/lib/circleci/cli/command/browse_command.rb +24 -0
  12. data/lib/circleci/cli/command/build_command.rb +19 -0
  13. data/lib/circleci/cli/command/builds_command.rb +25 -0
  14. data/lib/circleci/cli/command/cancel_command.rb +23 -0
  15. data/lib/circleci/cli/command/projects_command.rb +16 -0
  16. data/lib/circleci/cli/command/retry_command.rb +23 -0
  17. data/lib/circleci/cli/command/watch_command.rb +77 -0
  18. data/lib/circleci/cli/networking.rb +9 -0
  19. data/lib/circleci/cli/networking/pusher_client.rb +62 -0
  20. data/lib/circleci/cli/printer.rb +11 -0
  21. data/lib/circleci/cli/printer/build_printer.rb +63 -0
  22. data/lib/circleci/cli/printer/project_printer.rb +37 -0
  23. data/lib/circleci/cli/printer/step_printer.rb +57 -0
  24. data/lib/circleci/cli/response.rb +13 -0
  25. data/lib/circleci/cli/response/account.rb +21 -0
  26. data/lib/circleci/cli/response/action.rb +39 -0
  27. data/lib/circleci/cli/response/build.rb +104 -0
  28. data/lib/circleci/cli/response/project.rb +21 -0
  29. data/lib/circleci/cli/response/step.rb +22 -0
  30. data/lib/circleci/cli/version.rb +7 -0
  31. data/lib/circleci_cli.rb +7 -0
  32. metadata +29 -25
  33. data/lib/circler.rb +0 -6
  34. data/lib/circler/cli.rb +0 -88
  35. data/lib/circler/command/base_command.rb +0 -41
  36. data/lib/circler/command/browse_command.rb +0 -20
  37. data/lib/circler/command/build_command.rb +0 -15
  38. data/lib/circler/command/builds_command.rb +0 -21
  39. data/lib/circler/command/cancel_command.rb +0 -19
  40. data/lib/circler/command/projects_command.rb +0 -12
  41. data/lib/circler/command/retry_command.rb +0 -19
  42. data/lib/circler/command/watch_command.rb +0 -73
  43. data/lib/circler/networking/pusher_client.rb +0 -56
  44. data/lib/circler/printer/build_printer.rb +0 -59
  45. data/lib/circler/printer/project_printer.rb +0 -33
  46. data/lib/circler/printer/step_printer.rb +0 -53
  47. data/lib/circler/response/account.rb +0 -17
  48. data/lib/circler/response/action.rb +0 -35
  49. data/lib/circler/response/build.rb +0 -100
  50. data/lib/circler/response/project.rb +0 -17
  51. data/lib/circler/response/step.rb +0 -18
  52. data/lib/circler/version.rb +0 -5
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class BuildPrinter
5
- def initialize(builds, pretty: true)
6
- @builds = builds
7
- @pretty = pretty
8
- end
9
-
10
- def to_s
11
- @pretty ? print_pretty : print_compact
12
- end
13
-
14
- private
15
-
16
- def print_compact
17
- rows.map { |row| pad_columns_by_space(row, max_row_widths) }.join("\n")
18
- end
19
-
20
- def print_pretty
21
- Terminal::Table.new(title: title, headings: headings, rows: rows).to_s
22
- end
23
-
24
- def title
25
- build = @builds.first
26
- "Recent Builds / #{build.project_name}".green
27
- end
28
-
29
- def headings
30
- %w[Number Status Branch Author Commit Duration StartTime]
31
- end
32
-
33
- def rows
34
- @builds.map(&:information)
35
- end
36
-
37
- def max_row_widths
38
- @builds
39
- .map(&:information)
40
- .map { |array| array.map(&:to_s).map(&:size) }
41
- .transpose
42
- .map(&:max)
43
- end
44
-
45
- def pad_columns_by_space(columns, max_widths)
46
- columns
47
- .map
48
- .with_index { |column, i| pad_column_by_space(column, max_widths, i) }
49
- .join(' ')
50
- .to_s
51
- end
52
-
53
- def pad_column_by_space(column, max_widths, index)
54
- column_string = column.to_s
55
- spaces = ' ' * (max_widths[index] - column_string.size)
56
- column_string + spaces
57
- end
58
- end
59
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class ProjectPrinter
5
- attr_accessor :compact
6
- def initialize(projects, pretty: true)
7
- @projects = projects
8
- @pretty = pretty
9
- end
10
-
11
- def to_s
12
- @pretty ? print_pretty : print_compact
13
- end
14
-
15
- private
16
-
17
- def print_compact
18
- @projects
19
- .map(&:information)
20
- .map { |array| array.join('/').to_s }
21
- .sort
22
- .join("\n")
23
- end
24
-
25
- def print_pretty
26
- Terminal::Table.new(
27
- title: 'Projects'.green,
28
- headings: ['User name', 'Repository name'],
29
- rows: @projects.map(&:information)
30
- ).to_s
31
- end
32
- end
33
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class StepPrinter
5
- def initialize(steps, pretty: true)
6
- @steps = steps
7
- @pretty = pretty
8
- end
9
-
10
- def to_s
11
- Terminal::Table.new do |t|
12
- @steps
13
- .group_by(&:type)
14
- .each do |key, steps|
15
- t << :separator
16
- t << [{ value: key.green, alignment: :center, colspan: 2 }]
17
- steps.each { |s| print_actions(t, s) }
18
- end
19
- end.to_s
20
- end
21
-
22
- private
23
-
24
- def colorize_by_status(string, status)
25
- case status
26
- when 'success', 'fixed' then string.green
27
- when 'canceled' then string.yellow
28
- when 'failed', 'timedout' then string.red
29
- when 'no_tests', 'not_run' then string.light_black
30
- else string
31
- end
32
- end
33
-
34
- def format_time(time)
35
- return '' unless time
36
-
37
- minute = format('%02d', time / 1000 / 60)
38
- second = format('%02d', (time / 1000) % 60)
39
- "#{minute}:#{second}"
40
- end
41
-
42
- def print_actions(table, step)
43
- table << :separator
44
- step.actions.each do |a|
45
- table << [
46
- colorize_by_status(a.name.slice(0..120), a.status),
47
- format_time(a.run_time_millis)
48
- ]
49
- table << [{ value: a.log, alignment: :left, colspan: 2 }] if a.failed? && a.log
50
- end
51
- end
52
- end
53
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class Account
5
- def initialize(hash)
6
- @hash = hash
7
- end
8
-
9
- def user_name
10
- @hash['name']
11
- end
12
-
13
- def self.me
14
- Account.new(CircleCi::User.me.body)
15
- end
16
- end
17
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class Action
5
- attr_reader :name, :status, :run_time_millis
6
- def initialize(hash)
7
- @hash = hash
8
- @name = hash['name']
9
- @status = hash['status']
10
- @run_time_millis = hash['run_time_millis']
11
- end
12
-
13
- def log
14
- request(@hash['output_url'])
15
- .map do |r|
16
- r['message']
17
- .gsub(/\r\n/, "\n")
18
- .gsub(/\e\[A\r\e\[2K/, '')
19
- .scan(/.{1,120}/)
20
- .join("\n")
21
- end
22
- .join("\n")
23
- end
24
-
25
- def failed?
26
- @status == 'timedout' || @status == 'failed'
27
- end
28
-
29
- private
30
-
31
- def request(url)
32
- JSON.parse(Faraday.new(url).get.body)
33
- end
34
- end
35
- end
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class Build
5
- class << self
6
- def all(username, reponame)
7
- CircleCi::Project.new(username, reponame, 'github').recent_builds
8
- .body
9
- .map { |b| Build.new(b) }
10
- end
11
-
12
- def branch(username, reponame, branch)
13
- CircleCi::Project.new(username, reponame, 'github').recent_builds_branch(branch)
14
- .body
15
- .map { |b| Build.new(b) }
16
- end
17
-
18
- def get(username, reponame, number)
19
- Build.new(CircleCi::Build.new(username, reponame, 'github', number).get.body)
20
- end
21
-
22
- def retry(username, reponame, number)
23
- Build.new(CircleCi::Build.new(username, reponame, 'github', number).retry.body)
24
- end
25
-
26
- def cancel(username, reponame, number)
27
- Build.new(CircleCi::Build.new(username, reponame, 'github', number).cancel.body)
28
- end
29
- end
30
-
31
- def initialize(hash)
32
- @hash = hash
33
- end
34
-
35
- def username
36
- @hash['username']
37
- end
38
-
39
- def reponame
40
- @hash['reponame']
41
- end
42
-
43
- def status
44
- @hash['status']
45
- end
46
-
47
- def build_number
48
- @hash['build_num']
49
- end
50
-
51
- def running?
52
- status == 'running'
53
- end
54
-
55
- def channel_name
56
- "private-#{username}@#{reponame}@#{build_number}@vcs-github@0"
57
- end
58
-
59
- def project_name
60
- "#{username}/#{reponame}"
61
- end
62
-
63
- def information
64
- [
65
- @hash['build_num'],
66
- colorize_by_status(@hash['status'], @hash['status']),
67
- colorize_by_status(@hash['branch'], @hash['status']),
68
- @hash['author_name'],
69
- (@hash['subject'] || '').slice(0..60),
70
- format_time(@hash['build_time_millis']),
71
- @hash['start_time']
72
- ]
73
- end
74
-
75
- def steps
76
- hash = @hash['steps'].group_by { |s| s['actions'].first['type'] }
77
- hash.flat_map { |type, value| value.map { |v| Step.new(type, v) } }
78
- end
79
-
80
- private
81
-
82
- def colorize_by_status(string, status)
83
- case status
84
- when 'success', 'fixed' then string.green
85
- when 'canceled' then string.yellow
86
- when 'failed' then string.red
87
- when 'no_tests', 'not_run' then string.light_black
88
- else string
89
- end
90
- end
91
-
92
- def format_time(time)
93
- return '' unless time
94
-
95
- minute = format('%02d', time / 1000 / 60)
96
- second = format('%02d', (time / 1000) % 60)
97
- "#{minute}:#{second}"
98
- end
99
- end
100
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class Project
5
- def initialize(hash)
6
- @hash = hash
7
- end
8
-
9
- def information
10
- [@hash['username'], @hash['reponame']]
11
- end
12
-
13
- def self.all
14
- CircleCi::Projects.new.get.body.map { |p| Project.new(p) }
15
- end
16
- end
17
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- class Step
5
- attr_reader :type
6
- attr_reader :status
7
-
8
- def initialize(type, hash)
9
- @type = type
10
- @status = hash['status']
11
- @hash = hash
12
- end
13
-
14
- def actions
15
- @hash['actions'].map { |a| Action.new(a) }
16
- end
17
- end
18
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Circler
4
- VERSION = '0.6.3'
5
- end