ci_in_a_can 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 97eff7ac024e13813c95198c74372212b0e2fe62
4
+ data.tar.gz: 43d0618c07dcf7263aa9b291bc241ea00db7f1e2
5
+ SHA512:
6
+ metadata.gz: 8b24c32692852775affaabe29f7223379745b069413805a3651b6043420f2bb63d0a2db16e9c8613ca321f6573f8e1a0da601d937840c2362879c13238da3105
7
+ data.tar.gz: 81d03078ca9b1d4eeca3cfcf8d6d46401522c1ae665b7c7c4ffdf9c38819c294cbc82fc9471a4e445b642542eecf1198d0b5c89154216780be0f16f8a694fc4d
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ ![CI In a Can](https://raw.github.com/darrencauthon/ci_in_a_can/master/assets/smalllogo.png)
2
+
1
3
  # CI In a Can
2
4
 
3
5
  Super-easy continuous integration. With one command, you can turn a cloud server (AWS, Digital Ocean) into a CI server for Ruby apps. Others (like node, .Net) coming soon.
@@ -25,8 +27,7 @@ Run:
25
27
  ````
26
28
  ciinacan create YOUR_NAME
27
29
  cd YOUR_NAME
28
- rake start &
29
- disown
30
+ rake start
30
31
  ````
31
32
 
32
33
  This will create a directory named YOUR_NAME, start up a Sinatra app on port 80, and start a backend service for running builds. **You now have a running CI server.**
Binary file
Binary file
Binary file
Binary file
Binary file
data/bin/ciinacan CHANGED
@@ -1,96 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- def rake_file id
4
- <<EOF
5
- #!/usr/bin/env rake
3
+ #require 'ci_in_a_can'
4
+ require_relative '../lib/ci_in_a_can'
6
5
 
7
- desc "Start #{id}"
8
- task :start do
9
- location = File.expand_path(File.dirname(__FILE__))
10
- system "ruby service/service.rb start"
11
- system "ruby web/stay_alive.rb start"
12
- end
13
-
14
- desc "Stop #{id}"
15
- task :stop do
16
- location = File.expand_path(File.dirname(__FILE__))
17
- system "ruby service/service.rb stop"
18
- end
19
- EOF
20
- end
21
-
22
- def web_daemon id
23
- <<EOF
24
- require 'daemons'
25
-
26
- this_directory = File.expand_path(File.dirname(__FILE__))
27
-
28
- ::Daemons.run_proc('#{id}_ci_web') do
29
- loop do
30
- exec "cd \#{this_directory};rackup -p 80"
31
- end
32
- end
33
- EOF
34
- end
35
-
36
- def web_file
37
- <<EOF
38
- require 'ci_in_a_can'
39
-
40
- this_directory = File.expand_path(File.dirname(__FILE__) + '/../')
41
-
42
- eval("CiInACan::App.jobs_location = '\#{this_directory}' + '/jobs'")
43
- eval("CiInACan.results_location = '\#{this_directory}' + '/results'")
44
-
45
- use CiInACan::App
46
- run Sinatra::Application
47
- EOF
48
- end
49
-
50
- def service_file id
51
- <<EOF
52
- require 'ci_in_a_can'
53
- require 'daemons'
54
-
55
- this_directory = File.expand_path(File.dirname(__FILE__) + '/../')
56
-
57
- eval("CiInACan.results_location = '\#{this_directory}' + '/results'")
58
-
59
- ::Daemons.run_proc('#{id}_ci_server') do
60
- loop do
61
- options = {
62
- access_token: ENV['GITHUB_AUTH_TOKEN'],
63
- working_location: this_directory + "/repos",
64
- watching_location: this_directory + "/jobs",
65
- site_url: ENV['SITE_URL']
66
- }
67
- CiInACan::Daemon.start options
68
- sleep
69
- end
70
- end
71
- EOF
72
- end
73
-
74
-
75
- puts ARGV[0]
76
- puts ARGV[1]
77
-
78
- puts Dir.pwd
79
-
80
- case ARGV[0].to_s.downcase
81
- when 'create'
82
-
83
- root = "#{Dir.pwd}/#{ARGV[1]}"
84
-
85
- id = root.split('/').pop
86
-
87
- directories_to_create = [root, "#{root}/jobs", "#{root}/repos", "#{root}/web", "#{root}/service", "#{root}/results"]
88
-
89
- directories_to_create.each { |d| Dir.mkdir(d) unless File.exists?(d) }
90
-
91
- File.open("#{root}/Rakefile", 'w') { |f| f.write rake_file(id) }
92
- File.open("#{root}/service/service.rb", 'w') { |f| f.write service_file(id) }
93
- File.open("#{root}/web/stay_alive.rb", 'w') { |f| f.write web_daemon(id) }
94
- File.open("#{root}/web/config.ru", 'w') { |f| f.write web_file }
95
-
96
- end
6
+ CiInACan::Cli.run ARGV
@@ -0,0 +1,90 @@
1
+ module CiInACan
2
+
3
+ module Cli
4
+
5
+ class Files
6
+
7
+ params_constructor
8
+
9
+ attr_accessor :id, :root
10
+
11
+ def self.for id, root
12
+ new(id: id, root: root)
13
+ end
14
+
15
+ def rake_file
16
+ <<EOF
17
+ #!/usr/bin/env rake
18
+
19
+ desc "Start #{@id}"
20
+ task :start do
21
+ location = File.expand_path(File.dirname(__FILE__))
22
+ system "ruby service/service.rb start"
23
+ system "ruby web/stay_alive.rb start"
24
+ end
25
+
26
+ desc "Stop #{@id}"
27
+ task :stop do
28
+ location = File.expand_path(File.dirname(__FILE__))
29
+ system "ruby service/service.rb stop"
30
+ end
31
+ EOF
32
+ end
33
+
34
+ def web_daemon
35
+ <<EOF
36
+ require 'daemons'
37
+
38
+ this_directory = File.expand_path(File.dirname(__FILE__))
39
+
40
+ ::Daemons.run_proc('#{@id}_ci_web') do
41
+ loop do
42
+ exec "cd \#{this_directory};rackup -p 80"
43
+ end
44
+ end
45
+ EOF
46
+ end
47
+
48
+ def web_file
49
+ <<EOF
50
+ require 'ci_in_a_can'
51
+
52
+ this_directory = File.expand_path(File.dirname(__FILE__) + '/../')
53
+
54
+ eval("CiInACan::App.jobs_location = '\#{this_directory}' + '/jobs'")
55
+ eval("CiInACan.results_location = '\#{this_directory}' + '/results'")
56
+
57
+ use CiInACan::App
58
+ run Sinatra::Application
59
+ EOF
60
+ end
61
+
62
+ def service_file
63
+ <<EOF
64
+ require 'ci_in_a_can'
65
+ require 'daemons'
66
+
67
+ this_directory = File.expand_path(File.dirname(__FILE__) + '/../')
68
+
69
+ eval("CiInACan.results_location = '\#{this_directory}' + '/results'")
70
+
71
+ ::Daemons.run_proc('#{@id}_ci_server') do
72
+ loop do
73
+ options = {
74
+ access_token: ENV['GITHUB_AUTH_TOKEN'],
75
+ working_location: this_directory + "/repos",
76
+ watching_location: this_directory + "/jobs",
77
+ site_url: ENV['SITE_URL']
78
+ }
79
+ CiInACan::Daemon.start options
80
+ sleep
81
+ end
82
+ end
83
+ EOF
84
+ end
85
+
86
+ end
87
+
88
+ end
89
+
90
+ end
@@ -0,0 +1,59 @@
1
+ module CiInACan
2
+
3
+ module Cli
4
+
5
+ class StructureBuilder
6
+
7
+ params_constructor
8
+
9
+ attr_accessor :root, :id
10
+
11
+ def create
12
+ create_the_directories
13
+ create_the_files
14
+ end
15
+
16
+ private
17
+
18
+ def create_the_directories
19
+ create_directories directories_to_create
20
+ end
21
+
22
+ def create_the_files
23
+ files_to_create.each { |file, content| create_file file, content }
24
+ end
25
+
26
+ def directories_to_create
27
+ ["#{@root}",
28
+ "#{@root}/jobs",
29
+ "#{@root}/repos",
30
+ "#{@root}/web",
31
+ "#{@root}/service",
32
+ "#{@root}/results"]
33
+ end
34
+
35
+ def files_to_create
36
+ files = ::CiInACan::Cli::Files.for @id, @root
37
+ {
38
+ "#{@root}/Rakefile" => files.rake_file,
39
+ "#{@root}/service/service.rb" => files.service_file,
40
+ "#{@root}/web/stay_alive.rb" => files.web_daemon,
41
+ "#{@root}/web/config.ru" => files.web_file
42
+ }
43
+ end
44
+
45
+ def create_directories directories
46
+ directories.each { |d| create_directory d }
47
+ end
48
+
49
+ def create_directory directory
50
+ CiInACan::FileSystem.create_directory directory
51
+ end
52
+
53
+ def create_file file, content
54
+ CiInACan::FileSystem.create_file file, content
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,21 @@
1
+ module CiInACan
2
+
3
+ module Cli
4
+
5
+ def self.run args
6
+
7
+ case args[0].to_s.downcase
8
+ when 'create'
9
+ root = "#{Dir.pwd}/#{args[1]}"
10
+ id = root.split('/').pop
11
+
12
+ CiInACan::Cli::StructureBuilder.new(root: root, id: id).create
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ Dir[File.dirname(__FILE__) + '/cli/*.rb'].each { |file| require file }
@@ -0,0 +1,15 @@
1
+ module CiInACan
2
+
3
+ module FileSystem
4
+
5
+ def self.create_file file, content
6
+ File.open(file, 'w') { |f| f.write content }
7
+ end
8
+
9
+ def self.create_directory directory
10
+ Dir.mkdir(directory) unless File.exists?(directory)
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -22,7 +22,10 @@ module CiInACan
22
22
  return nil unless client
23
23
  client.create_status(build.repo, build.sha,
24
24
  complete_status_from(test_result),
25
- { target_url: target_url_for(test_result) } )
25
+ {
26
+ target_url: target_url_for(test_result),
27
+ description: test_result.output_summary
28
+ } )
26
29
  end
27
30
 
28
31
  private
@@ -39,6 +39,12 @@ module CiInACan
39
39
  CiInACan::ViewModels::TestResultViewModel.new(self).to_html
40
40
  end
41
41
 
42
+ def output_summary
43
+ output.split("\n")
44
+ .select { |x| x.to_s.strip != '' }
45
+ .last
46
+ end
47
+
42
48
  private
43
49
 
44
50
  def self.create_the_test_result_from values
@@ -1,3 +1,3 @@
1
1
  module CiInACan
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -0,0 +1,82 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe CiInACan::Cli::StructureBuilder do
4
+
5
+ it "should have a root id and an id" do
6
+ id = Object.new
7
+ root = Object.new
8
+ builder = CiInACan::Cli::StructureBuilder.new(id: id, root: root)
9
+ builder.id.must_be_same_as id
10
+ builder.root.must_be_same_as root
11
+ end
12
+
13
+ [:id, :root].to_objects {[
14
+ [nil, 'b'],
15
+ [nil, 'c']
16
+ ]}.each do |data|
17
+
18
+ describe "create" do
19
+
20
+ let(:builder) do
21
+ b = CiInACan::Cli::StructureBuilder.new(id: data.id, root: data.root)
22
+ b.stubs(:create_directories)
23
+ b
24
+ end
25
+
26
+ let(:files) do
27
+ f = Object.new
28
+ f.stubs(:rake_file).returns Object.new
29
+ f.stubs(:service_file).returns Object.new
30
+ f.stubs(:web_daemon).returns Object.new
31
+ f.stubs(:web_file).returns Object.new
32
+ f
33
+ end
34
+
35
+ before do
36
+ ::CiInACan::FileSystem.stubs(:create_file)
37
+ ::CiInACan::Cli::Files.stubs(:for).with(data.id, data.root).returns files
38
+ end
39
+
40
+ it "should create the proper directories" do
41
+ builder.expects(:create_directories).with ["#{data.root}", "#{data.root}/jobs", "#{data.root}/repos", "#{data.root}/web", "#{data.root}/service", "#{data.root}/results"]
42
+ builder.create
43
+ end
44
+
45
+ it "should create the rake file" do
46
+ CiInACan::FileSystem.expects(:create_file).with "#{data.root}/Rakefile", files.rake_file
47
+ builder.create
48
+ end
49
+
50
+ it "should create the service file" do
51
+ CiInACan::FileSystem.expects(:create_file).with "#{data.root}/service/service.rb", files.service_file
52
+ builder.create
53
+ end
54
+
55
+ it "should create the web daemon file" do
56
+ CiInACan::FileSystem.expects(:create_file).with "#{data.root}/web/stay_alive.rb", files.web_daemon
57
+ builder.create
58
+ end
59
+
60
+ it "should create the web file" do
61
+ CiInACan::FileSystem.expects(:create_file).with "#{data.root}/web/config.ru", files.web_file
62
+ builder.create
63
+ end
64
+
65
+ it "should not create any files until the directories are created" do
66
+ directories_created = false
67
+ builder.stubs(:create_directories).with do |directories|
68
+ directories_created = true
69
+ true
70
+ end
71
+ CiInACan::FileSystem.stubs(:create_file).with do |file|
72
+ directories_created.must_equal true
73
+ true
74
+ end
75
+ builder.create
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+
82
+ end
@@ -0,0 +1,38 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe CiInACan::Cli do
4
+
5
+ describe "run" do
6
+
7
+ [:args, :pwd].to_objects {[
8
+ [['create', 'ok'], 'directory_a'],
9
+ [['create', 'ko'], 'directory_b']
10
+ ]}.each do |test|
11
+
12
+ describe "create" do
13
+
14
+ before do
15
+ Dir.stubs(:pwd).returns test.pwd
16
+ end
17
+
18
+ it "should use the structure builder to create the app" do
19
+
20
+ structure_builder = Object.new
21
+ structure_builder.expects(:create)
22
+
23
+ CiInACan::Cli::StructureBuilder.stubs(:new)
24
+ .with(root: "#{test.pwd}/#{test.args[1]}",
25
+ id: test.args[1])
26
+ .returns structure_builder
27
+
28
+ CiInACan::Cli.run test.args
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -83,6 +83,7 @@ describe CiInACan::Github do
83
83
  test_result = Object.new
84
84
  test_result.stubs(:id).returns UUID.new.generate
85
85
  test_result.stubs(:passed).returns true
86
+ test_result.stubs(:output_summary).returns Object.new
86
87
  test_result
87
88
  end
88
89
 
@@ -90,7 +91,11 @@ describe CiInACan::Github do
90
91
  client = Object.new
91
92
  CiInACan::Github.stubs(:client).returns client
92
93
 
93
- client.expects(:create_status).with(build.repo, build.sha, 'success', { target_url: expected_url } )
94
+ options = {
95
+ target_url: expected_url,
96
+ description: test_result.output_summary
97
+ }
98
+ client.expects(:create_status).with(build.repo, build.sha, 'success', options)
94
99
 
95
100
  CiInACan::Github.report_complete_status_for build, test_result
96
101
  end
@@ -103,6 +108,7 @@ describe CiInACan::Github do
103
108
  test_result = Object.new
104
109
  test_result.stubs(:passed).returns false
105
110
  test_result.stubs(:id).returns UUID.new.generate
111
+ test_result.stubs(:output_summary).returns Object.new
106
112
  test_result
107
113
  end
108
114
 
@@ -110,7 +116,12 @@ describe CiInACan::Github do
110
116
  client = Object.new
111
117
  CiInACan::Github.stubs(:client).returns client
112
118
 
113
- client.expects(:create_status).with(build.repo, build.sha, 'failure', { target_url: expected_url } )
119
+ options = {
120
+ target_url: expected_url,
121
+ description: test_result.output_summary
122
+ }
123
+ client.expects(:create_status)
124
+ .with(build.repo, build.sha, 'failure', options)
114
125
 
115
126
  CiInACan::Github.report_complete_status_for build, test_result
116
127
  end
@@ -113,4 +113,68 @@ describe CiInACan::TestRunner do
113
113
  end
114
114
  end
115
115
 
116
+ describe "output summary" do
117
+
118
+ describe "simple example" do
119
+ let(:output) do
120
+ <<EOF
121
+ ..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
122
+
123
+ Finished tests in 561452783.341560s, 0.0000 tests/s, 0.0000 assertions/s.
124
+
125
+ 2013 tests, 6058 assertions, 0 failures, 0 errors, 0 skips
126
+
127
+ EOF
128
+ end
129
+
130
+ it "should return the last line of the output that includes some numbers" do
131
+ test_result = CiInACan::TestResult.new(output: output)
132
+ test_result.output_summary.must_equal '2013 tests, 6058 assertions, 0 failures, 0 errors, 0 skips'
133
+ end
134
+
135
+ end
136
+
137
+ describe "another simple example" do
138
+ let(:output) do
139
+ <<EOF
140
+ ..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
141
+
142
+ Finished tests in 561452783.341560s, 0.0000 tests/s, 0.0000 assertions/s.
143
+
144
+ xxxx tests
145
+
146
+
147
+ EOF
148
+ end
149
+
150
+ it "should return the last line of the output that includes some numbers" do
151
+ test_result = CiInACan::TestResult.new(output: output)
152
+ test_result.output_summary.must_equal 'xxxx tests'
153
+ end
154
+
155
+ end
156
+
157
+ describe "an example with whitespace" do
158
+ let(:output) do
159
+ <<EOF
160
+ ..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
161
+
162
+ Finished tests in 561452783.341560s, 0.0000 tests/s, 0.0000 assertions/s.
163
+
164
+ whitespace below
165
+
166
+
167
+
168
+ EOF
169
+ end
170
+
171
+ it "should return the last line of the output that includes some numbers" do
172
+ test_result = CiInACan::TestResult.new(output: output)
173
+ test_result.output_summary.must_equal 'whitespace below'
174
+ end
175
+
176
+ end
177
+
178
+ end
179
+
116
180
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ci_in_a_can
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
5
- prerelease:
4
+ version: 0.2.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Darren Cauthon
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-19 00:00:00.000000000 Z
11
+ date: 2014-02-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,209 +27,183 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: mocha
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: subtle
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: contrast
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: timecop
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rake
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: sinatra
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: json
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - '>='
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - '>='
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: uuid
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - '>='
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - '>='
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: listen
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - ! '>='
143
+ - - '>='
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :runtime
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - ! '>='
150
+ - - '>='
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: octokit
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
- - - ! '>='
157
+ - - '>='
180
158
  - !ruby/object:Gem::Version
181
159
  version: '0'
182
160
  type: :runtime
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
- - - ! '>='
164
+ - - '>='
188
165
  - !ruby/object:Gem::Version
189
166
  version: '0'
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: daemons
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
- - - ! '>='
171
+ - - '>='
196
172
  - !ruby/object:Gem::Version
197
173
  version: '0'
198
174
  type: :runtime
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
- - - ! '>='
178
+ - - '>='
204
179
  - !ruby/object:Gem::Version
205
180
  version: '0'
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: subtle
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
- - - ! '>='
185
+ - - '>='
212
186
  - !ruby/object:Gem::Version
213
187
  version: '0'
214
188
  type: :runtime
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
- - - ! '>='
192
+ - - '>='
220
193
  - !ruby/object:Gem::Version
221
194
  version: '0'
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: systemu
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
- - - ! '>='
199
+ - - '>='
228
200
  - !ruby/object:Gem::Version
229
201
  version: '0'
230
202
  type: :runtime
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
- - - ! '>='
206
+ - - '>='
236
207
  - !ruby/object:Gem::Version
237
208
  version: '0'
238
209
  description: Fast CI. Still a WIP.
@@ -248,6 +219,11 @@ files:
248
219
  - LICENSE.txt
249
220
  - README.md
250
221
  - Rakefile
222
+ - assets/CI_in_a_Can01.jpg
223
+ - assets/CI_in_a_Can01.png
224
+ - assets/CI_in_a_Can02.jpg
225
+ - assets/CI_in_a_Can02.png
226
+ - assets/smalllogo.png
251
227
  - bin/ciinacan
252
228
  - ci_in_a_can.gemspec
253
229
  - lib/ci_in_a_can.rb
@@ -255,8 +231,12 @@ files:
255
231
  - lib/ci_in_a_can/bash.rb
256
232
  - lib/ci_in_a_can/bash_result.rb
257
233
  - lib/ci_in_a_can/build.rb
234
+ - lib/ci_in_a_can/cli.rb
235
+ - lib/ci_in_a_can/cli/files.rb
236
+ - lib/ci_in_a_can/cli/structure_builder.rb
258
237
  - lib/ci_in_a_can/cloner.rb
259
238
  - lib/ci_in_a_can/daemon.rb
239
+ - lib/ci_in_a_can/file_system.rb
260
240
  - lib/ci_in_a_can/github.rb
261
241
  - lib/ci_in_a_can/github_build_parser.rb
262
242
  - lib/ci_in_a_can/persistence.rb
@@ -276,6 +256,8 @@ files:
276
256
  - spec/ci_in_a_can/bash_result_spec.rb
277
257
  - spec/ci_in_a_can/bash_spec.rb
278
258
  - spec/ci_in_a_can/build_spec.rb
259
+ - spec/ci_in_a_can/cli/structure_builder_spec.rb
260
+ - spec/ci_in_a_can/cli_spec.rb
279
261
  - spec/ci_in_a_can/cloner_spec.rb
280
262
  - spec/ci_in_a_can/github_build_parser_spec.rb
281
263
  - spec/ci_in_a_can/github_spec.rb
@@ -292,38 +274,33 @@ files:
292
274
  homepage: ''
293
275
  licenses:
294
276
  - MIT
277
+ metadata: {}
295
278
  post_install_message:
296
279
  rdoc_options: []
297
280
  require_paths:
298
281
  - lib
299
282
  required_ruby_version: !ruby/object:Gem::Requirement
300
- none: false
301
283
  requirements:
302
- - - ! '>='
284
+ - - '>='
303
285
  - !ruby/object:Gem::Version
304
286
  version: '0'
305
- segments:
306
- - 0
307
- hash: 1791188646681337785
308
287
  required_rubygems_version: !ruby/object:Gem::Requirement
309
- none: false
310
288
  requirements:
311
- - - ! '>='
289
+ - - '>='
312
290
  - !ruby/object:Gem::Version
313
291
  version: '0'
314
- segments:
315
- - 0
316
- hash: 1791188646681337785
317
292
  requirements: []
318
293
  rubyforge_project:
319
- rubygems_version: 1.8.24
294
+ rubygems_version: 2.1.11
320
295
  signing_key:
321
- specification_version: 3
296
+ specification_version: 4
322
297
  summary: Fast CI. Still a WIP.
323
298
  test_files:
324
299
  - spec/ci_in_a_can/bash_result_spec.rb
325
300
  - spec/ci_in_a_can/bash_spec.rb
326
301
  - spec/ci_in_a_can/build_spec.rb
302
+ - spec/ci_in_a_can/cli/structure_builder_spec.rb
303
+ - spec/ci_in_a_can/cli_spec.rb
327
304
  - spec/ci_in_a_can/cloner_spec.rb
328
305
  - spec/ci_in_a_can/github_build_parser_spec.rb
329
306
  - spec/ci_in_a_can/github_spec.rb