circle-cli 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c7b71e8a9731de1a586b5547cf637195ff8053c
4
- data.tar.gz: eab8f75eaa33e854fd61523348626a095b54c60b
3
+ metadata.gz: 6a8e9e402d8f93f06dc69380fbc21bcd66f46e7d
4
+ data.tar.gz: e9bab525b120127053b0c89a10799b79b96466bd
5
5
  SHA512:
6
- metadata.gz: 18aab504787d372931578fa9664cdcd73ee61b67755b50cd3402edc577d19b4b27341c19d6366233efe19b3bbec72c5a083cb3a00a05e46beaf16c5aef8eee4d
7
- data.tar.gz: 007039abd28f5f96339e6735deb99ae29c5560fac3e5be39d4d2165df8ecc6742a380b462c2cf2a2ea33434e5ed033062e141a608c2becd961c92248e88d8c88
6
+ metadata.gz: f2046a64dd9d596cc7276f1c74bd2a8d2e0da36b29f4375778c261260def341d45b8998daed5dc7a823aba947011c4307737be16ab0fa22e98eb19533f235c92
7
+ data.tar.gz: e09a6cfa6436cb27d43b2d879246497f903fecd0c0f6e180912c15d011b3ad22c38ab7fc47a874e681fe8088239916dbc5bd8230ea587385b940f26fb9f299c4
data/README.md CHANGED
@@ -44,7 +44,7 @@ Command line tools for Circle CI
44
44
  - Watch the most recent CI build for your current branch
45
45
 
46
46
  ```
47
- $ circle watch
47
+ $ circle --watch
48
48
  ```
49
49
 
50
50
  - Cancel the most recent CI build for your current branch
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ['derek@codeurge.com', 'jean.boussier@gmail.com']
11
11
  spec.summary = %q{Command line tools for Circle CI}
12
12
  spec.description = %q{A bunch of commands useful to deal with Circle CI without leaving your terminal.}
13
- spec.homepage = ''
13
+ spec.homepage = 'https://github.com/circle-cli/circle-cli'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split
@@ -18,16 +18,16 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'circleci'
22
- spec.add_dependency 'rugged', '>= 0.23'
23
- spec.add_dependency 'gitable'
24
- spec.add_dependency 'launchy'
25
- spec.add_dependency 'thor'
21
+ spec.add_dependency 'circleci', '~> 1.0.3', '>= 1.0.3'
22
+ spec.add_dependency 'git', '~> 1.3.0', '>= 1.3.0'
23
+ spec.add_dependency 'gitable', '~> 0.3.1', '>=0.3.1'
24
+ spec.add_dependency 'launchy', '~> 2.4.3', '>= 2.4.3'
25
+ spec.add_dependency 'thor', '~> 0.19.1', '>= 0.19.1'
26
26
 
27
- spec.add_development_dependency 'bundler', '~> 1.5'
28
- spec.add_development_dependency 'rake'
29
- spec.add_development_dependency 'rspec'
30
- spec.add_development_dependency 'vcr'
31
- spec.add_development_dependency 'webmock'
32
- spec.add_development_dependency 'simplecov'
27
+ spec.add_development_dependency 'bundler', '~> 1.5', '>= 1.5'
28
+ spec.add_development_dependency 'rake', '~> 11.2.2', '>= 11.2.2'
29
+ spec.add_development_dependency 'rspec', '~> 3.5.0', '>= 3.5.0'
30
+ spec.add_development_dependency 'vcr', '~> 3.0.3', '>= 3.0.3'
31
+ spec.add_development_dependency 'webmock', '~> 2.1.0', '>= 2.1.0'
32
+ spec.add_development_dependency 'simplecov', '~> 0.12.0', '>= 0.12.0'
33
33
  end
@@ -1,6 +1,7 @@
1
1
  require 'launchy'
2
2
  require 'circle/cli/repo'
3
3
  require 'circle/cli/project'
4
+ require 'circle/cli/watcher'
4
5
 
5
6
  module Circle
6
7
  module CLI
@@ -26,35 +27,53 @@ CircleCI token hasn't been configured. Run the following command to login:
26
27
 
27
28
  desc 'status', 'show CircleCI build result'
28
29
  method_option :branch, desc: 'branch name'
30
+ method_option :watch, desc: 'watch the build', type: :boolean, default: false
31
+ method_option :poll, default: 5, desc: 'polling frequency', type: :numeric
29
32
  def status
30
33
  validate_repo!
31
34
  validate_latest!
32
- display_status
33
- end
34
35
 
35
- desc 'watch', 'watch your build'
36
- method_option :branch, desc: 'branch name'
37
- method_option :poll, default: 5, desc: 'polling frequency', type: :numeric
38
- def watch
39
- validate_repo!
40
- validate_latest!
41
- watching -> { project.latest.preload } do
36
+ watcher = Watcher.new do
42
37
  display_status
43
38
  end
39
+
40
+ watcher.to_preload do
41
+ project.clear_cache!
42
+ project.latest.preload
43
+ end
44
+
45
+ if options[:watch]
46
+ watcher.poll(options[:poll])
47
+ else
48
+ watcher.display
49
+ end
50
+ end
51
+
52
+ desc 'watch', 'an alias for `circle --watch`', hide: true
53
+ def watch
54
+ invoke :status, [], watch: true
44
55
  end
45
56
 
46
57
  desc 'overview', 'list recent builds and their statuses for all branches'
47
- method_option :watch, desc: 'watch the list of builds'
58
+ method_option :watch, desc: 'watch the list of builds', type: :boolean, default: false
48
59
  method_option :poll, default: 5, desc: 'polling frequency', type: :numeric
49
60
  def overview
50
61
  validate_repo!
51
62
  abort! 'No recent builds.' if project.recent_builds.empty?
52
- show_overview = -> { display_builds(project.recent_builds) }
63
+
64
+ watcher = Watcher.new do
65
+ display_builds(project.recent_builds)
66
+ end
67
+
68
+ watcher.to_preload do
69
+ project.clear_cache!
70
+ project.recent_builds
71
+ end
53
72
 
54
73
  if options[:watch]
55
- watching(-> { project.recent_builds }, &show_overview)
74
+ watcher.poll(options[:poll])
56
75
  else
57
- show_overview
76
+ watcher.display
58
77
  end
59
78
  end
60
79
 
@@ -72,7 +91,7 @@ CircleCI token hasn't been configured. Run the following command to login:
72
91
  validate_repo!
73
92
  project.build!
74
93
  say "A build has been triggered.\n\n", :green
75
- invoke :watch
94
+ invoke :status, [], watch: true
76
95
  end
77
96
 
78
97
  desc 'cancel', 'cancel most recent build'
@@ -133,18 +152,6 @@ CircleCI token hasn't been configured. Run the following command to login:
133
152
  abort set_color(message, :red)
134
153
  end
135
154
 
136
- def watching(preloader)
137
- loop do
138
- yield
139
- sleep options[:poll]
140
- project.clear_cache!
141
- preloader.call
142
- system('clear') || system('cls')
143
- end
144
- rescue Interrupt
145
- exit 0
146
- end
147
-
148
155
  def display(description, value, color)
149
156
  status = set_color description.ljust(15), :bold
150
157
  result = set_color value.to_s, color
@@ -1,3 +1,5 @@
1
+ require 'time'
2
+
1
3
  module Circle
2
4
  module CLI
3
5
  class Model
@@ -16,11 +16,11 @@ module Circle
16
16
  end
17
17
 
18
18
  def builds
19
- @builds ||= to_builds(request(CircleCi::Project, :recent_builds_branch, repo.branch_name))
19
+ @builds ||= request_builds(CircleCi::Project, :recent_builds_branch, repo.branch_name)
20
20
  end
21
21
 
22
22
  def recent_builds
23
- @recent_builds ||= to_builds(request(CircleCi::Project, :recent_builds))
23
+ @recent_builds ||= request_builds(CircleCi::Project, :recent_builds)
24
24
  end
25
25
 
26
26
  def latest
@@ -38,13 +38,7 @@ module Circle
38
38
  if response.success?
39
39
  response.body
40
40
  else
41
- $stderr.puts 'One or more errors occurred:'
42
-
43
- response.errors.each do |error|
44
- $stderr.puts "+ #{error.message}"
45
- end
46
-
47
- exit 1
41
+ abort "The following error occurred: #{response.body['message']}"
48
42
  end
49
43
  end
50
44
 
@@ -56,8 +50,8 @@ module Circle
56
50
  end
57
51
  end
58
52
 
59
- def to_builds(arr)
60
- arr.to_a.map { |build| Build.new(self, build) }
53
+ def request_builds(*args)
54
+ request(*args).to_a.map { |build| Build.new(self, build) }
61
55
  end
62
56
  end
63
57
  end
@@ -1,5 +1,5 @@
1
1
  require 'gitable'
2
- require 'rugged'
2
+ require 'git'
3
3
 
4
4
  module Circle
5
5
  module CLI
@@ -23,30 +23,29 @@ module Circle
23
23
  end
24
24
 
25
25
  def branch_name
26
- options.fetch 'branch' do
27
- repo.head.name.sub(/^refs\/heads\//, '')
28
- end
26
+ options.fetch('branch') { repo.current_branch }
29
27
  end
30
28
 
31
29
  def circle_token
32
- repo.config['circleci.token'] || ENV['CIRCLE_CLI_TOKEN']
30
+ token = repo.config('circleci.token') || ENV['CIRCLE_CLI_TOKEN']
31
+ token if token && !token.empty?
33
32
  end
34
33
 
35
34
  def circle_token=(token)
36
- repo.config['circleci.token'] = token
35
+ repo.config('circleci.token', token)
37
36
  end
38
37
 
39
38
  private
40
39
 
41
40
  def repo
42
- @repo ||= Rugged::Repository.new(options[:repo])
43
- rescue Rugged::RepositoryError
41
+ @repo ||= Git.open(options[:repo])
42
+ rescue ArgumentError
44
43
  full_path = File.expand_path(options[:repo])
45
44
  abort "#{full_path} is not a git repository."
46
45
  end
47
46
 
48
47
  def origin
49
- @origin ||= repo.remotes.find { |r| r.name == 'origin' }
48
+ @origin ||= repo.remote('origin')
50
49
  end
51
50
  end
52
51
  end
@@ -1,5 +1,5 @@
1
1
  module Circle
2
2
  module CLI
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
5
5
  end
@@ -0,0 +1,41 @@
1
+ module Circle
2
+ module CLI
3
+ class Watcher
4
+ attr_reader :displayer, :preloader
5
+
6
+ def initialize(&displayer)
7
+ @displayer = displayer
8
+ @preloader = -> {}
9
+ end
10
+
11
+ def to_preload(&preloader)
12
+ @preloader = preloader
13
+ end
14
+
15
+ def preload
16
+ preloader.call
17
+ end
18
+
19
+ def display
20
+ displayer.call
21
+ end
22
+
23
+ def poll(polling_frequency)
24
+ loop do
25
+ display
26
+ sleep polling_frequency
27
+ preload
28
+ clear
29
+ end
30
+ rescue Interrupt
31
+ exit 0
32
+ end
33
+
34
+ private
35
+
36
+ def clear
37
+ system('clear') || system('cls')
38
+ end
39
+ end
40
+ end
41
+ end
@@ -2,70 +2,105 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://circleci.com/api/v1/project/mtchavez/rb-array-sorting/5?circle-token=123
5
+ uri: https://circleci.com/api/v1/project/mtchavez/circleci/140?circle-token=123
6
6
  body:
7
- encoding: US-ASCII
8
- string: ''
7
+ encoding: UTF-8
8
+ string: "{}"
9
9
  headers:
10
- accept:
10
+ Accept:
11
11
  - application/json
12
- accept-encoding:
13
- - gzip, deflate
14
- content-type:
12
+ Content-Type:
15
13
  - application/json
16
- user-agent:
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ User-Agent:
17
17
  - Ruby
18
+ Host:
19
+ - circleci.com
18
20
  response:
19
21
  status:
20
22
  code: 200
21
- message: !binary |-
22
- T0s=
23
+ message: OK
23
24
  headers:
24
- !binary "Y29udGVudC1lbmNvZGluZw==":
25
- - !binary |-
26
- Z3ppcA==
27
- !binary "Y29udGVudC10eXBl":
28
- - !binary |-
29
- YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
30
- !binary "ZGF0ZQ==":
31
- - !binary |-
32
- V2VkLCAxNyBBcHIgMjAxMyAwNTowODozNCBHTVQ=
33
- !binary "c2VydmVy":
34
- - !binary |-
35
- bmdpbngvMS4xLjE5
36
- !binary "c2V0LWNvb2tpZQ==":
37
- - !binary |-
38
- cmluZy1zZXNzaW9uPTcwNDY1OWFhLTU1NmQtNDA4NC1iZTJmLWU5NDgyYTk0
39
- MTc5ZDtQYXRoPS87SHR0cE9ubHk7RXhwaXJlcz1XZWQsIDE2IEFwciAyMDE0
40
- IDE0OjQ5OjM1ICswMDAwO01heC1BZ2U9MzE1MzYwMDA7U2VjdXJl
41
- !binary "Y29udGVudC1sZW5ndGg=":
42
- - !binary |-
43
- Nzg3
44
- !binary "Y29ubmVjdGlvbg==":
45
- - !binary |-
46
- a2VlcC1hbGl2ZQ==
25
+ Access-Control-Allow-Origin:
26
+ - "*"
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Date:
30
+ - Sun, 25 Sep 2016 17:42:16 GMT
31
+ Server:
32
+ - nginx
33
+ Set-Cookie:
34
+ - ab_test_user_seed=0.6341920666598763;Expires=Mon, 25 Sep 2017 17:42:15 +0000;Path=/;Secure
35
+ - ring-session=aI%2BT%2B38FYMY0Zei4y9L9JlOcd0Fo1ymsoyLtmRxlv8V9ppwly3RnNyvA8FfiRjJlhbYzwHEHp36iz21bff%2Fs61%2FHDXi6w1xm9%2FPij4wOSVy9gVYlWKvgRFY8CBdopzqeQgOoLPxJSxSxEE2nhF8ErjAIsrHL5b4gBXoCZ%2Bg%2FC%2Fe4Py9%2FrbXiO28Z7HcO1lTHibvQeTlrvDmdO29pV5r0%2FDgcLAX9iAQfAJoAycT0Zto%3D--kil2VsZOz%2Brz0c4EIM%2FsbYoXgXDiDdLvh9T%2BrxDlgRg%3D;Path=/;HttpOnly;Expires=Mon,
36
+ 25 Sep 2017 00:18:12 +0000;Max-Age=31536000;Secure
37
+ Strict-Transport-Security:
38
+ - max-age=15724800
39
+ X-Circleci-Identity:
40
+ - i-99b8bf8e
41
+ X-Circleci-Request-Id:
42
+ - d014ef61-fc2d-482c-8f68-7ef5621f9c04
43
+ X-Circleci-Scopes:
44
+ - ":none"
45
+ - ":status"
46
+ - ":view-builds"
47
+ X-Frame-Options:
48
+ - DENY
49
+ X-Route:
50
+ - "/"
51
+ - ":build_num"
52
+ - "\\d+"
53
+ Content-Length:
54
+ - '2699'
55
+ Connection:
56
+ - keep-alive
47
57
  body:
48
58
  encoding: ASCII-8BIT
49
- string: !binary |-
50
- H4sIAAAAAAAAAJWUS2/UMBDHv4rlSy/7SPbVNgIEAg4cuAAnHoocZ5KYOnaw
51
- x11C1e/OONlsdysK4rRZz3jmN4+/73hpDeZFULrkmQlaz7i0basQweVGtMAz
52
- /roRt/CLz3jhhJENnbTCkz2e2LKn//QlAjbW5aXAeCVdb7dJcnW52vDTgH+y
53
- OkCnwPPsy7cZ74QTWoPmWXp6D1qh9JAXsYH9Qg5EL8ecCnstCr8gdwpHYF0M
54
- dscP9NKaStXBAaOrbKyUcCUqa0bHQvgmj8mEOTbBBZOjaiFvldaK/FbX23VE
55
- MqhMgMntgRddgJhdOBwuUuZVkq7nyWaeXn5K1tlmmyVXnyn1X7mOGE/YW/Be
56
- 1FO7YrE8S2YcfiqkEsojmA04uoApn+RJ08ijTAk/hyhEj4FCcx+kpERkjFfL
57
- IdhhOWgDQMOxT8pUjpbBBYmEmlfDnEYT9l3Meu5BIaPPFOD+2z0xDsWdt3ud
58
- bFczvm/idlXKeZwfJzcu2n+txL+H4tF2/+iTVhXIXmoYkIzyDUSe4EkJ2R1X
59
- Ph8/x03QtlYm8qGc5PNYTlMJhn584ewN0OQr0PplHS0D/T2hheI7SJoA/2gd
60
- sr3ChvkOpGfkzj68ffXm/dvxtACSZyvcjT/flLtpFnvhjDL1g5XO3iHT1t54
61
- ptUNsD0waYMuzQUymhw4huCReUDa+9qzyjrW2+BY52ykWrAPMHhZFk+fCdY4
62
- qJ5fNIidz5ZLqRx1TKpYzLK00i9pvQNppr948ZV/HMOOEYcBs9CxyeMrf7YU
63
- LxjdCi0YjDlqIJY4TigXjMh9E2GZNbpnKIhfsAr2rCWNEveCx+36bovDS3aQ
64
- Nj04fW6rE6kQXGyFsXms1vMTKZyc3UqfO7hVnl6O+IrB5UZWSSF3u83merMr
65
- 0lJc73bbtNytxHq3Kq+21SbdJXxacBPa4V2LcYKLk5+6VNP0QjH0aNqXpSvm
66
- wjnRzz1NfRzagxgroT0tWRdxbOR8rM6Dwx/lebCd6nBCPMc6G17dPM22TB+E
67
- +XjLfwQIUOYCnxLf/W9rTc/2hQYAAA==
68
- http_version: !binary |-
69
- MS4x
70
- recorded_at: Wed, 17 Apr 2013 05:08:34 GMT
71
- recorded_with: VCR 2.4.0
59
+ string: '{"compare":"https://github.com/mtchavez/circleci/commit/d9a5a207e102","previous_successful_build":{"build_num":139,"status":"success","build_time_millis":83094},"build_parameters":null,"oss":true,"all_commit_details_truncated":false,"committer_date":"2016-07-25T10:03:49-07:00","steps":[{"name":"Starting
60
+ the build","actions":[{"truncated":false,"index":0,"parallel":false,"failed":null,"infrastructure_fail":null,"name":"Starting
61
+ the build","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:04:37.043Z","type":"infrastructure","output_url":"https://circle-production-action-output.s3.amazonaws.com/80e57358127a0e2208646975-mtchavez-circleci-0-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=T0ESh13bwESfRnmKSwk%2BrCnJCKo%3D","start_time":"2016-07-25T17:04:00.267Z","exit_code":null,"canceled":null,"step":0,"run_time_millis":36776,"has_output":true}]},{"name":"Start
62
+ container","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Start
63
+ container","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:05:08.003Z","source":"config","type":"infrastructure","output_url":"https://circle-production-action-output.s3.amazonaws.com/f0e57358127a0e225a646975-mtchavez-circleci-1-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=KAEM3OiRzAIqQlJ9nwgYVtGz02I%3D","start_time":"2016-07-25T17:04:37.077Z","exit_code":0,"canceled":null,"step":1,"run_time_millis":30926,"has_output":true}]},{"name":"Enable
64
+ SSH","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Enable
65
+ SSH","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:05:14.958Z","type":"infrastructure","output_url":"https://circle-production-action-output.s3.amazonaws.com/a1e57358127a0e224c646975-mtchavez-circleci-2-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=S0DpcmS3T2au5S2Pbr%2Fno34aBNg%3D","start_time":"2016-07-25T17:05:08.038Z","exit_code":null,"canceled":null,"step":2,"run_time_millis":6920,"has_output":true}]},{"name":"Restore
66
+ source cache","actions":[{"truncated":false,"index":0,"parallel":false,"failed":null,"infrastructure_fail":null,"name":"Restore
67
+ source cache","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:05:15.214Z","source":"cache","type":"checkout","start_time":"2016-07-25T17:05:14.984Z","exit_code":null,"canceled":null,"step":3,"run_time_millis":230,"has_output":false}]},{"name":"Checkout
68
+ using deploy key: 81:49:b8:ae:b5:94:db:7a:5b:8a:91:c6:2e:df:f8:b6","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Checkout
69
+ using deploy key: 81:49:b8:ae:b5:94:db:7a:5b:8a:91:c6:2e:df:f8:b6","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:05:29.951Z","source":"config","type":"checkout","output_url":"https://circle-production-action-output.s3.amazonaws.com/f1e57358127a0e22bc646975-mtchavez-circleci-4-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=3I7mADPu1KUN5e74FIipeF9w7A8%3D","start_time":"2016-07-25T17:05:15.238Z","exit_code":0,"canceled":null,"step":4,"run_time_millis":14713,"has_output":true}]},{"name":"Configure
70
+ the build","actions":[{"truncated":false,"index":0,"parallel":false,"failed":null,"infrastructure_fail":null,"name":"Configure
71
+ the build","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:05:49.908Z","source":"cache","type":"machine","start_time":"2016-07-25T17:05:29.989Z","exit_code":null,"canceled":null,"step":5,"run_time_millis":19919,"has_output":false}]},{"name":"Exporting
72
+ env vars from project settings","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Exporting
73
+ env vars from project settings","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:05:55.178Z","source":"db","type":"machine","output_url":"https://circle-production-action-output.s3.amazonaws.com/63e57358127a0e22de646975-mtchavez-circleci-6-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=Z0%2BmNtB354qnXXl6VREvNwjSrNg%3D","start_time":"2016-07-25T17:05:49.955Z","exit_code":0,"canceled":null,"step":6,"run_time_millis":5223,"has_output":true}]},{"name":"set
74
+ ruby version to 2.2.3","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"set
75
+ ruby version to 2.2.3","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:06:01.992Z","source":"inference","type":"machine","output_url":"https://circle-production-action-output.s3.amazonaws.com/83e57358127a0e223f646975-mtchavez-circleci-7-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=dYEgYWd9cqqCyokM%2BB6q%2BI%2F8c0w%3D","start_time":"2016-07-25T17:05:55.253Z","exit_code":0,"canceled":null,"step":7,"run_time_millis":6739,"has_output":true}]},{"name":"Restore
76
+ cache","actions":[{"truncated":false,"index":0,"parallel":false,"failed":null,"infrastructure_fail":null,"name":"Restore
77
+ cache","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:06:02.776Z","source":"cache","type":"machine","start_time":"2016-07-25T17:06:02.040Z","exit_code":null,"canceled":null,"step":8,"run_time_millis":736,"has_output":false}]},{"name":"Exporting
78
+ RAILS_ENV, RACK_ENV","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Exporting
79
+ RAILS_ENV, RACK_ENV","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:06:08.526Z","source":"inference","type":"dependencies","output_url":"https://circle-production-action-output.s3.amazonaws.com/44e57358127a0e22af646975-mtchavez-circleci-9-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=PhZZXQTBIdlGz3NEeIC%2BJ9hmR7k%3D","start_time":"2016-07-25T17:06:02.789Z","exit_code":0,"canceled":null,"step":9,"run_time_millis":5737,"has_output":true}]},{"name":"bundle
80
+ install","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"bundle
81
+ install","bash_command":"bundle check --path=vendor/bundle || bundle install
82
+ --path=vendor/bundle --jobs=4 --retry=3 ","status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:06:28.254Z","source":"inference","type":"dependencies","output_url":"https://circle-production-action-output.s3.amazonaws.com/64e57358127a0e2200746975-mtchavez-circleci-10-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=mxpNZAdcPKzKDXvoAdv1UInMD%2BA%3D","start_time":"2016-07-25T17:06:08.573Z","exit_code":0,"canceled":null,"step":10,"run_time_millis":19681,"has_output":true}]},{"name":"Save
83
+ cache","actions":[{"truncated":false,"index":0,"parallel":false,"failed":null,"infrastructure_fail":null,"name":"Save
84
+ cache","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:06:46.323Z","source":"cache","type":"database","output_url":"https://circle-production-action-output.s3.amazonaws.com/d4e57358127a0e2241746975-mtchavez-circleci-11-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=hvlIRlm5RnDxJ2%2BDD4ArtS3P4o0%3D","start_time":"2016-07-25T17:06:28.275Z","exit_code":null,"canceled":null,"step":11,"run_time_millis":18048,"has_output":true}]},{"name":"bundle
85
+ exec rake rubocop && bundle exec rspec -r rspec_junit_formatter --format RspecJunitFormatter
86
+ -o $CIRCLE_TEST_REPORTS/rspec/junit.xml","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"bundle
87
+ exec rake rubocop && bundle exec rspec -r rspec_junit_formatter --format RspecJunitFormatter
88
+ -o $CIRCLE_TEST_REPORTS/rspec/junit.xml","bash_command":"bundle exec rake
89
+ rubocop && bundle exec rspec -r rspec_junit_formatter --format RspecJunitFormatter
90
+ -o $CIRCLE_TEST_REPORTS/rspec/junit.xml","status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:06:53.152Z","source":"db","type":"test","output_url":"https://circle-production-action-output.s3.amazonaws.com/35e57358127a0e2262746975-mtchavez-circleci-12-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=oG79%2Bt2ypqIF6O8y5CiBrh64vkw%3D","start_time":"2016-07-25T17:06:46.358Z","exit_code":0,"canceled":null,"step":12,"run_time_millis":6794,"has_output":true}]},{"name":"Collect
91
+ test metadata","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Collect
92
+ test metadata","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:07:10.747Z","type":"teardown","output_url":"https://circle-production-action-output.s3.amazonaws.com/65e57358127a0e22d2746975-mtchavez-circleci-13-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=ieJbCNCP5hIO4KdNtmdbaji1D%2FQ%3D","start_time":"2016-07-25T17:06:53.187Z","exit_code":null,"canceled":null,"step":13,"run_time_millis":17560,"has_output":true}]},{"name":"Collect
93
+ artifacts","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Collect
94
+ artifacts","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:07:24.883Z","type":"teardown","output_url":"https://circle-production-action-output.s3.amazonaws.com/66e57358127a0e22e3746975-mtchavez-circleci-14-0?AWSAccessKeyId=AKIAIJNI6FA5RIAFFQ7Q&Expires=1632591736&Signature=Wz72mAmFgvQ5rCjkWfHTnPUHaR0%3D","start_time":"2016-07-25T17:07:10.779Z","exit_code":null,"canceled":null,"step":14,"run_time_millis":14104,"has_output":true}]},{"name":"Disable
95
+ SSH","actions":[{"truncated":false,"index":0,"parallel":true,"failed":null,"infrastructure_fail":null,"name":"Disable
96
+ SSH","bash_command":null,"status":"success","timedout":null,"continue":null,"end_time":"2016-07-25T17:07:24.902Z","type":"teardown","start_time":"2016-07-25T17:07:24.898Z","exit_code":null,"canceled":null,"step":17,"run_time_millis":4,"has_output":false}]}],"body":"*
97
+ Fix from plural envvar to envvars for consistency with API endpoint\n* Preserve
98
+ old functionality","usage_queued_at":"2016-07-25T17:03:26.930Z","fail_reason":null,"retry_of":null,"reponame":"circleci","ssh_users":[],"build_url":"https://circleci.com/gh/mtchavez/circleci/140","parallel":1,"failed":null,"branch":"typo","username":"mtchavez","author_date":"2016-07-25T10:03:49-07:00","why":"github","user":{"is_user":true,"login":"mtchavez","avatar_url":"https://avatars.githubusercontent.com/u/44689?v=3","name":"Chavez","vcs_type":"github","id":44689},"vcs_revision":"d9a5a207e10209eecef8ed02289824a8630ed67d","owners":["mtchavez"],"vcs_tag":null,"build_num":140,"infrastructure_fail":false,"committer_email":"matthew@el-chavez.me","has_artifacts":true,"previous":null,"status":"success","committer_name":"Chavez","pull_request_urls":["https://github.com/mtchavez/circleci/pull/71"],"retries":[150,156,149,147,151,155,154,153,148,152,162,157,160,166,164,158,165,169,163,168,159,161,171,175,176,174,170,167,172,173,178,177,183,184,185,186,190,189,194,193,226,225],"subject":"Project#envvar
99
+ method naming fix","vcs_type":"github","timedout":false,"dont_build":null,"lifecycle":"finished","no_dependency_cache":false,"stop_time":"2016-07-25T17:07:31.761Z","ssh_disabled":false,"build_time_millis":223674,"circle_yml":{"string":"machine:\n ruby:\n version:
100
+ 2.2.3\n"},"messages":[],"is_first_green_build":false,"job_name":null,"start_time":"2016-07-25T17:03:48.087Z","canceler":null,"all_commit_details":[{"committer_date":"2016-07-25T10:03:49-07:00","body":"*
101
+ Fix from plural envvar to envvars for consistency with API endpoint\n* Preserve
102
+ old functionality","branch":"typo","author_date":"2016-07-25T10:03:49-07:00","committer_email":"matthew@el-chavez.me","commit":"d9a5a207e10209eecef8ed02289824a8630ed67d","committer_login":"mtchavez","committer_name":"Chavez","subject":"Project#envvar
103
+ method naming fix","commit_url":"https://github.com/mtchavez/circleci/commit/d9a5a207e10209eecef8ed02289824a8630ed67d","author_login":"mtchavez","author_name":"Chavez","author_email":"matthew@el-chavez.me"}],"outcome":"success","vcs_url":"https://github.com/mtchavez/circleci","author_name":"Chavez","node":[{"public_ip_addr":"54.191.221.156","port":64561,"username":"ubuntu","image_id":"s3://lxc-images-us-west-2/circletar-1741-cc586-20160424T232626Z","ssh_enabled":null}],"queued_at":"2016-07-25T17:03:48.067Z","canceled":false,"author_email":"matthew@el-chavez.me"}'
104
+ http_version:
105
+ recorded_at: Sun, 25 Sep 2016 17:42:12 GMT
106
+ recorded_with: VCR 3.0.3