circle-cli 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/circle-cli.gemspec +12 -12
- data/lib/circle/cli/app.rb +33 -26
- data/lib/circle/cli/model.rb +2 -0
- data/lib/circle/cli/project.rb +5 -11
- data/lib/circle/cli/repo.rb +8 -9
- data/lib/circle/cli/version.rb +1 -1
- data/lib/circle/cli/watcher.rb +41 -0
- data/spec/cassettes/get.yml +91 -56
- data/spec/cassettes/recent_builds.yml +1552 -52
- data/spec/cassettes/recent_builds_branch.yml +206 -54
- data/spec/cassettes/tests.yml +100 -41
- data/spec/circle/cli/build_spec.rb +9 -9
- data/spec/circle/cli/project_spec.rb +5 -4
- data/spec/circle/cli/repo_spec.rb +9 -13
- data/spec/circle/cli/watcher_spec.rb +48 -0
- metadata +94 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a8e9e402d8f93f06dc69380fbc21bcd66f46e7d
|
4
|
+
data.tar.gz: e9bab525b120127053b0c89a10799b79b96466bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2046a64dd9d596cc7276f1c74bd2a8d2e0da36b29f4375778c261260def341d45b8998daed5dc7a823aba947011c4307737be16ab0fa22e98eb19533f235c92
|
7
|
+
data.tar.gz: e09a6cfa6436cb27d43b2d879246497f903fecd0c0f6e180912c15d011b3ad22c38ab7fc47a874e681fe8088239916dbc5bd8230ea587385b940f26fb9f299c4
|
data/README.md
CHANGED
data/circle-cli.gemspec
CHANGED
@@ -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 '
|
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
|
data/lib/circle/cli/app.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
74
|
+
watcher.poll(options[:poll])
|
56
75
|
else
|
57
|
-
|
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
|
data/lib/circle/cli/model.rb
CHANGED
data/lib/circle/cli/project.rb
CHANGED
@@ -16,11 +16,11 @@ module Circle
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def builds
|
19
|
-
@builds ||=
|
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 ||=
|
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
|
-
|
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
|
60
|
-
|
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
|
data/lib/circle/cli/repo.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'gitable'
|
2
|
-
require '
|
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
|
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
|
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
|
35
|
+
repo.config('circleci.token', token)
|
37
36
|
end
|
38
37
|
|
39
38
|
private
|
40
39
|
|
41
40
|
def repo
|
42
|
-
@repo ||=
|
43
|
-
rescue
|
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.
|
48
|
+
@origin ||= repo.remote('origin')
|
50
49
|
end
|
51
50
|
end
|
52
51
|
end
|
data/lib/circle/cli/version.rb
CHANGED
@@ -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
|
data/spec/cassettes/get.yml
CHANGED
@@ -2,70 +2,105 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://circleci.com/api/v1/project/mtchavez/
|
5
|
+
uri: https://circleci.com/api/v1/project/mtchavez/circleci/140?circle-token=123
|
6
6
|
body:
|
7
|
-
encoding:
|
8
|
-
string:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: "{}"
|
9
9
|
headers:
|
10
|
-
|
10
|
+
Accept:
|
11
11
|
- application/json
|
12
|
-
|
13
|
-
- gzip, deflate
|
14
|
-
content-type:
|
12
|
+
Content-Type:
|
15
13
|
- application/json
|
16
|
-
|
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:
|
22
|
-
T0s=
|
23
|
+
message: OK
|
23
24
|
headers:
|
24
|
-
|
25
|
-
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
-
|
32
|
-
|
33
|
-
|
34
|
-
-
|
35
|
-
|
36
|
-
|
37
|
-
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
-
|
43
|
-
|
44
|
-
|
45
|
-
-
|
46
|
-
|
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:
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
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
|