ci_in_a_can 0.0.1 → 0.0.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 +7 -0
- data/.gitignore +2 -0
- data/Rakefile +9 -0
- data/ci_in_a_can.gemspec +5 -0
- data/config.ru +2 -0
- data/lib/ci_in_a_can.rb +2 -2
- data/lib/ci_in_a_can/app.rb +5 -2
- data/lib/ci_in_a_can/bash.rb +13 -0
- data/lib/ci_in_a_can/build.rb +28 -0
- data/lib/ci_in_a_can/cloner.rb +7 -0
- data/lib/ci_in_a_can/daemon.rb +9 -0
- data/lib/ci_in_a_can/github.rb +19 -0
- data/lib/ci_in_a_can/runner.rb +14 -0
- data/lib/ci_in_a_can/test_result.rb +5 -0
- data/lib/ci_in_a_can/test_result_notifier.rb +7 -0
- data/lib/ci_in_a_can/test_runner.rb +12 -0
- data/lib/ci_in_a_can/version.rb +1 -1
- data/lib/ci_in_a_can/watcher.rb +36 -0
- data/spec/ci_in_a_can/bash_spec.rb +20 -0
- data/spec/ci_in_a_can/build_spec.rb +46 -0
- data/spec/ci_in_a_can/cloner_spec.rb +24 -0
- data/spec/ci_in_a_can/github_spec.rb +20 -0
- data/spec/ci_in_a_can/runner_spec.rb +56 -0
- data/spec/ci_in_a_can/test_result_notifier_spec.rb +42 -0
- data/spec/ci_in_a_can/test_runner_spec.rb +65 -0
- data/spec/ci_in_a_can/watcher_spec.rb +113 -0
- data/spec/spec_helper.rb +6 -0
- metadata +114 -34
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 09f44edf14e21bb8bb923e6edd242133d9777234
|
4
|
+
data.tar.gz: 568b7e586f85543e3b16711e7739ee0f638101a7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 51d7d7803e72bf73af65e14ac37036ce4fd42fefc5a57992b19fccd65a890ece6c98b91bc3b0449bb9881549f7d6ca228e8d7444e24b63c43fe7d2c9d32bbab6
|
7
|
+
data.tar.gz: a11c6566bfeaaa2cd5c004815fd1cc3a454557fe5e8bbfd89e540465c92095f89203d174021fb0e090f804229351af0c524956ef22a3f3fd63bc3a4c1a5f3e4e
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
data/ci_in_a_can.gemspec
CHANGED
@@ -20,8 +20,13 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "mocha"
|
24
|
+
spec.add_development_dependency "subtle"
|
23
25
|
|
24
26
|
spec.add_runtime_dependency "sinatra"
|
25
27
|
spec.add_runtime_dependency "json"
|
26
28
|
spec.add_runtime_dependency "uuid"
|
29
|
+
spec.add_runtime_dependency "listen"
|
30
|
+
spec.add_runtime_dependency "octokit"
|
31
|
+
spec.add_runtime_dependency "daemons"
|
27
32
|
end
|
data/config.ru
CHANGED
data/lib/ci_in_a_can.rb
CHANGED
data/lib/ci_in_a_can/app.rb
CHANGED
@@ -6,6 +6,10 @@ module CiInACan
|
|
6
6
|
|
7
7
|
class App < Sinatra::Base
|
8
8
|
|
9
|
+
class << self
|
10
|
+
attr_accessor :jobs_location
|
11
|
+
end
|
12
|
+
|
9
13
|
get '/start' do
|
10
14
|
write_a_file_with params
|
11
15
|
end
|
@@ -24,11 +28,10 @@ module CiInACan
|
|
24
28
|
|
25
29
|
def write_a_file_with params
|
26
30
|
data = params.to_json
|
27
|
-
File.open("#{UUID.new.generate}.json", 'w') { |f| f.write data }
|
31
|
+
File.open("#{self.class.jobs_location}/#{UUID.new.generate}.json", 'w') { |f| f.write data }
|
28
32
|
data
|
29
33
|
end
|
30
34
|
|
31
35
|
end
|
32
36
|
|
33
37
|
end
|
34
|
-
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module CiInACan
|
2
|
+
|
3
|
+
class Build
|
4
|
+
|
5
|
+
attr_accessor :git_ssh, :local_location, :repo, :sha
|
6
|
+
attr_accessor :pre_test_commands
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
self.pre_test_commands = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.parse content
|
13
|
+
data = JSON.parse content
|
14
|
+
data['payload'] = JSON.parse data['payload']
|
15
|
+
|
16
|
+
splat = data['payload']['compare'].split('/')
|
17
|
+
|
18
|
+
build = self.new
|
19
|
+
build.git_ssh = "git@github.com:#{splat[3]}/#{splat[4]}.git"
|
20
|
+
build.repo = "#{splat[3]}/#{splat[4]}"
|
21
|
+
build.sha = data['payload']['after']
|
22
|
+
build.pre_test_commands = []
|
23
|
+
build
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module CiInACan
|
2
|
+
|
3
|
+
module Runner
|
4
|
+
|
5
|
+
def self.run build
|
6
|
+
CiInACan::Github.client.create_status(build.repo, build.sha, 'pending')
|
7
|
+
CiInACan::Cloner.clone_a_local_copy_for build
|
8
|
+
test_results = CiInACan::TestRunner.run_tests_for build
|
9
|
+
CiInACan::TestResultNotifier.send_for build, test_results
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module CiInACan
|
2
|
+
module TestRunner
|
3
|
+
def self.run_tests_for build
|
4
|
+
test_result = CiInACan::TestResult.new
|
5
|
+
commands = ["cd #{build.local_location}", "bundle install"]
|
6
|
+
build.pre_test_commands.each { |c| commands << c }
|
7
|
+
commands << "bundle exec rake"
|
8
|
+
test_result.passed = CiInACan::Bash.run commands.join('; ')
|
9
|
+
test_result
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/ci_in_a_can/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'listen'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module CiInACan
|
5
|
+
|
6
|
+
module Watcher
|
7
|
+
|
8
|
+
def self.watch watching_location, working_location
|
9
|
+
build_listener(watching_location, working_location).start
|
10
|
+
end
|
11
|
+
|
12
|
+
class << self
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def build_listener watching_location, working_location
|
17
|
+
callback = build_callback working_location
|
18
|
+
::Listen.to(watching_location, { only: /\.json$/ }, &callback)
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_callback working_location
|
22
|
+
Proc.new do |modified, added, removed|
|
23
|
+
next unless added.count > 0
|
24
|
+
|
25
|
+
build = CiInACan::Build.parse File.read(added.first)
|
26
|
+
build.local_location = "#{working_location}/#{UUID.new.generate}"
|
27
|
+
|
28
|
+
Runner.run build
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::Bash do
|
4
|
+
|
5
|
+
describe "run" do
|
6
|
+
|
7
|
+
it "should run the command with system and return the result" do
|
8
|
+
|
9
|
+
expected_result = Object.new
|
10
|
+
command = Object.new
|
11
|
+
|
12
|
+
CiInACan::Bash.stubs(:system).with(command).returns expected_result
|
13
|
+
|
14
|
+
CiInACan::Bash.run(command).must_be_same_as expected_result
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::Build do
|
4
|
+
|
5
|
+
it "should default pre_test_commands to an empty array" do
|
6
|
+
result = CiInACan::Build.new.pre_test_commands
|
7
|
+
result.count.must_equal 0
|
8
|
+
result.is_a?(Array).must_equal true
|
9
|
+
end
|
10
|
+
|
11
|
+
[:compare, :sha, :git_ssh, :repo].to_objects {[
|
12
|
+
["https://github.com/darrencauthon/ci_in_a_can/commit/b1c5f9c9588f", "qwe", "git@github.com:darrencauthon/ci_in_a_can.git", "darrencauthon/ci_in_a_can"],
|
13
|
+
["https://github.com/abc/123/commit/b1c5f9c9588f", "uio", "git@github.com:abc/123.git", "abc/123"]
|
14
|
+
]}.each do |test|
|
15
|
+
|
16
|
+
describe "parse" do
|
17
|
+
|
18
|
+
let(:content) do
|
19
|
+
{
|
20
|
+
payload: {
|
21
|
+
compare: test.compare,
|
22
|
+
after: test.sha
|
23
|
+
}.to_json
|
24
|
+
}.to_json
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should convert the http to a git ssh" do
|
28
|
+
build = CiInACan::Build.parse content
|
29
|
+
build.git_ssh.must_equal test.git_ssh
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return the repo" do
|
33
|
+
build = CiInACan::Build.parse content
|
34
|
+
build.repo.must_equal test.repo
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should stamp the sha" do
|
38
|
+
build = CiInACan::Build.parse content
|
39
|
+
build.sha.must_equal test.sha
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::Cloner do
|
4
|
+
|
5
|
+
[:git_ssh, :local_location, :sha].to_objects { [
|
6
|
+
['a', 'b', 'c'],
|
7
|
+
['b', 'a', 'd'],
|
8
|
+
] }.each do |build|
|
9
|
+
|
10
|
+
describe "clone a local copy for" do
|
11
|
+
|
12
|
+
it "should run a bash command to clone the repo" do
|
13
|
+
|
14
|
+
CiInACan::Bash.expects(:run).with "git clone #{build.git_ssh} #{build.local_location}; cd #{build.local_location}; git checkout #{build.sha}"
|
15
|
+
|
16
|
+
CiInACan::Cloner.clone_a_local_copy_for build
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::Github do
|
4
|
+
|
5
|
+
describe "client" do
|
6
|
+
|
7
|
+
it "should create an Octokit client with the access token" do
|
8
|
+
access_token = Object.new
|
9
|
+
client = Object.new
|
10
|
+
|
11
|
+
CiInACan::Github.access_token = access_token
|
12
|
+
|
13
|
+
Octokit::Client.expects(:new).with(access_token: access_token).returns client
|
14
|
+
|
15
|
+
CiInACan::Github.client.must_be_same_as client
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::Runner do
|
4
|
+
|
5
|
+
describe "run" do
|
6
|
+
|
7
|
+
let(:build) { CiInACan::Build.new }
|
8
|
+
let(:client) { Object.new }
|
9
|
+
|
10
|
+
before do
|
11
|
+
client.stubs(:create_status)
|
12
|
+
CiInACan::Github.stubs(:client).returns client
|
13
|
+
CiInACan::Cloner.stubs(:clone_a_local_copy_for)
|
14
|
+
CiInACan::TestRunner.stubs(:run_tests_for)
|
15
|
+
CiInACan::TestResultNotifier.stubs(:send_for)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should clone the git repo" do
|
19
|
+
CiInACan::Cloner.expects(:clone_a_local_copy_for).with build
|
20
|
+
CiInACan::Runner.run build
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should run the tests" do
|
24
|
+
CiInACan::TestRunner.expects(:run_tests_for).with build
|
25
|
+
CiInACan::Runner.run build
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should run the test after the clone" do
|
29
|
+
count = 0
|
30
|
+
CiInACan::Cloner.stubs(:clone_a_local_copy_for).with { count += 1 }
|
31
|
+
CiInACan::TestRunner.stubs(:run_tests_for).with { count.must_equal 1; true }
|
32
|
+
|
33
|
+
CiInACan::Runner.run build
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should call the test result notifier with the build and the results" do
|
37
|
+
test_results = Object.new
|
38
|
+
CiInACan::TestRunner.stubs(:run_tests_for).with(build).returns test_results
|
39
|
+
|
40
|
+
CiInACan::TestResultNotifier.expects(:send_for).with build, test_results
|
41
|
+
|
42
|
+
CiInACan::Runner.run build
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should send a pending notification to github" do
|
46
|
+
|
47
|
+
build.repo = Object.new
|
48
|
+
build.sha = Object.new
|
49
|
+
client.expects(:create_status).with build.repo, build.sha, 'pending'
|
50
|
+
|
51
|
+
CiInACan::Runner.run build
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::TestResultNotifier do
|
4
|
+
|
5
|
+
describe 'send for' do
|
6
|
+
|
7
|
+
let(:build) { CiInACan::Build.new }
|
8
|
+
let(:test_result) { CiInACan::TestResult.new }
|
9
|
+
|
10
|
+
it "should mark passing tests as success in github" do
|
11
|
+
|
12
|
+
test_result.passed = true
|
13
|
+
|
14
|
+
build.sha = Object.new
|
15
|
+
build.repo = Object.new
|
16
|
+
|
17
|
+
client = Object.new
|
18
|
+
CiInACan::Github.stubs(:client).returns client
|
19
|
+
|
20
|
+
client.expects(:create_status).with(build.repo, build.sha, "success")
|
21
|
+
|
22
|
+
CiInACan::TestResultNotifier.send_for build, test_result
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should mark failing tests as failure in github" do
|
26
|
+
|
27
|
+
test_result.passed = false
|
28
|
+
|
29
|
+
build.sha = Object.new
|
30
|
+
build.repo = Object.new
|
31
|
+
|
32
|
+
client = Object.new
|
33
|
+
CiInACan::Github.stubs(:client).returns client
|
34
|
+
|
35
|
+
client.expects(:create_status).with(build.repo, build.sha, "failure")
|
36
|
+
|
37
|
+
CiInACan::TestResultNotifier.send_for build, test_result
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::TestRunner do
|
4
|
+
|
5
|
+
[:local_location].to_objects {[
|
6
|
+
["1234"],
|
7
|
+
["5678"]
|
8
|
+
]}.each do |test|
|
9
|
+
|
10
|
+
describe "run tests" do
|
11
|
+
|
12
|
+
let(:build) { CiInACan::Build.new }
|
13
|
+
|
14
|
+
before do
|
15
|
+
CiInACan::Bash.stubs(:run)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "when no special commands exist" do
|
19
|
+
|
20
|
+
it "should cd into the local directory and run the default rake task" do
|
21
|
+
build.local_location = test.local_location
|
22
|
+
|
23
|
+
CiInACan::Bash.expects(:run).with("cd #{test.local_location}; bundle install; bundle exec rake")
|
24
|
+
|
25
|
+
CiInACan::TestRunner.run_tests_for build
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return a test result" do
|
29
|
+
result = CiInACan::TestRunner.run_tests_for build
|
30
|
+
result.is_a?(CiInACan::TestResult).must_equal true
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return a passed test result if the command returns true" do
|
34
|
+
CiInACan::Bash.stubs(:run).returns true
|
35
|
+
result = CiInACan::TestRunner.run_tests_for build
|
36
|
+
result.passed.must_equal true
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return a failed test result if the command returns true" do
|
40
|
+
CiInACan::Bash.stubs(:run).returns false
|
41
|
+
result = CiInACan::TestRunner.run_tests_for build
|
42
|
+
result.passed.must_equal false
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "when two special commands exist" do
|
48
|
+
|
49
|
+
it "should cd into the local directory, run the commands, then run the default rake task" do
|
50
|
+
build.local_location = test.local_location
|
51
|
+
|
52
|
+
build.pre_test_commands = ["1", "2"]
|
53
|
+
|
54
|
+
CiInACan::Bash.expects(:run).with("cd #{test.local_location}; bundle install; 1; 2; bundle exec rake")
|
55
|
+
|
56
|
+
CiInACan::TestRunner.run_tests_for build
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe CiInACan::Watcher do
|
4
|
+
|
5
|
+
describe "watch" do
|
6
|
+
|
7
|
+
let(:watching_location) { Object.new }
|
8
|
+
let(:working_location) { Object.new }
|
9
|
+
|
10
|
+
describe "it should build the listener and start it" do
|
11
|
+
|
12
|
+
it "should start the listener" do
|
13
|
+
|
14
|
+
listener = Object.new
|
15
|
+
CiInACan::Watcher.stubs(:build_listener)
|
16
|
+
.with(watching_location, working_location)
|
17
|
+
.returns listener
|
18
|
+
|
19
|
+
listener.expects(:start)
|
20
|
+
|
21
|
+
CiInACan::Watcher.watch watching_location, working_location
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "building a listener" do
|
30
|
+
|
31
|
+
let(:watching_location) { Object.new }
|
32
|
+
let(:working_location) { Object.new }
|
33
|
+
|
34
|
+
it "should return a listener with the appropriate callback" do
|
35
|
+
|
36
|
+
expected_result = Object.new
|
37
|
+
callback = Proc.new { expected_result }
|
38
|
+
|
39
|
+
CiInACan::Watcher.stubs(:build_callback)
|
40
|
+
.with(working_location)
|
41
|
+
.returns callback
|
42
|
+
|
43
|
+
::Listen.expects(:to).with(watching_location, { only: /\.json$/ }, &callback)
|
44
|
+
|
45
|
+
CiInACan::Watcher.send(:build_listener, watching_location, working_location)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "build a callback" do
|
51
|
+
|
52
|
+
let(:working_location) { Object.new }
|
53
|
+
|
54
|
+
it "should return a Proc" do
|
55
|
+
CiInACan::Watcher.send(:build_callback, nil).is_a? Proc
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should the proc can take three arrays" do
|
59
|
+
CiInACan::Watcher.send(:build_callback, nil).call [], [], []
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "when a file is added" do
|
63
|
+
|
64
|
+
let(:added_file) { Object.new }
|
65
|
+
let(:build) { CiInACan::Build.new }
|
66
|
+
|
67
|
+
before do
|
68
|
+
content = Object.new
|
69
|
+
|
70
|
+
File.stubs(:read).with(added_file).returns content
|
71
|
+
|
72
|
+
CiInACan::Build.stubs(:parse).with(content).returns build
|
73
|
+
|
74
|
+
CiInACan::Runner.stubs(:run).with build
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should open the file, parse a build from it, and run it" do
|
78
|
+
CiInACan::Runner.expects(:run).with build
|
79
|
+
CiInACan::Watcher.send(:build_callback, nil).call [], [added_file], []
|
80
|
+
end
|
81
|
+
|
82
|
+
[:working_location, :random_string].to_objects {[
|
83
|
+
["abc", "123"],
|
84
|
+
["123", "abc"],
|
85
|
+
]}.each do |test|
|
86
|
+
|
87
|
+
describe "setting the local location" do
|
88
|
+
|
89
|
+
it "should assign the local location on the build" do
|
90
|
+
|
91
|
+
CiInACan::Runner.stubs(:wl).returns test.working_location
|
92
|
+
|
93
|
+
uuid = Object.new
|
94
|
+
uuid.stubs(:generate).returns test.random_string
|
95
|
+
UUID.stubs(:new).returns uuid
|
96
|
+
|
97
|
+
CiInACan::Runner.expects(:run).with do |b|
|
98
|
+
b.local_location.must_equal "#{test.working_location}/#{test.random_string}"
|
99
|
+
true
|
100
|
+
end
|
101
|
+
|
102
|
+
CiInACan::Watcher.send(:build_callback, test.working_location).call [], [added_file], []
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
data/spec/spec_helper.rb
ADDED
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.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
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-
|
11
|
+
date: 2014-02-08 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,65 +27,127 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
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
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mocha
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: subtle
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
44
67
|
- !ruby/object:Gem::Version
|
45
68
|
version: '0'
|
46
69
|
- !ruby/object:Gem::Dependency
|
47
70
|
name: sinatra
|
48
71
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
72
|
requirements:
|
51
|
-
- -
|
73
|
+
- - '>='
|
52
74
|
- !ruby/object:Gem::Version
|
53
75
|
version: '0'
|
54
76
|
type: :runtime
|
55
77
|
prerelease: false
|
56
78
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
79
|
requirements:
|
59
|
-
- -
|
80
|
+
- - '>='
|
60
81
|
- !ruby/object:Gem::Version
|
61
82
|
version: '0'
|
62
83
|
- !ruby/object:Gem::Dependency
|
63
84
|
name: json
|
64
85
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
86
|
requirements:
|
67
|
-
- -
|
87
|
+
- - '>='
|
68
88
|
- !ruby/object:Gem::Version
|
69
89
|
version: '0'
|
70
90
|
type: :runtime
|
71
91
|
prerelease: false
|
72
92
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
93
|
requirements:
|
75
|
-
- -
|
94
|
+
- - '>='
|
76
95
|
- !ruby/object:Gem::Version
|
77
96
|
version: '0'
|
78
97
|
- !ruby/object:Gem::Dependency
|
79
98
|
name: uuid
|
80
99
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
100
|
requirements:
|
83
|
-
- -
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: listen
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: octokit
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: daemons
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
84
144
|
- !ruby/object:Gem::Version
|
85
145
|
version: '0'
|
86
146
|
type: :runtime
|
87
147
|
prerelease: false
|
88
148
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
149
|
requirements:
|
91
|
-
- -
|
150
|
+
- - '>='
|
92
151
|
- !ruby/object:Gem::Version
|
93
152
|
version: '0'
|
94
153
|
description: Fast CI. Still a WIP.
|
@@ -107,37 +166,58 @@ files:
|
|
107
166
|
- config.ru
|
108
167
|
- lib/ci_in_a_can.rb
|
109
168
|
- lib/ci_in_a_can/app.rb
|
169
|
+
- lib/ci_in_a_can/bash.rb
|
170
|
+
- lib/ci_in_a_can/build.rb
|
171
|
+
- lib/ci_in_a_can/cloner.rb
|
172
|
+
- lib/ci_in_a_can/daemon.rb
|
173
|
+
- lib/ci_in_a_can/github.rb
|
174
|
+
- lib/ci_in_a_can/runner.rb
|
175
|
+
- lib/ci_in_a_can/test_result.rb
|
176
|
+
- lib/ci_in_a_can/test_result_notifier.rb
|
177
|
+
- lib/ci_in_a_can/test_runner.rb
|
110
178
|
- lib/ci_in_a_can/version.rb
|
179
|
+
- lib/ci_in_a_can/watcher.rb
|
111
180
|
- sample.json
|
181
|
+
- spec/ci_in_a_can/bash_spec.rb
|
182
|
+
- spec/ci_in_a_can/build_spec.rb
|
183
|
+
- spec/ci_in_a_can/cloner_spec.rb
|
184
|
+
- spec/ci_in_a_can/github_spec.rb
|
185
|
+
- spec/ci_in_a_can/runner_spec.rb
|
186
|
+
- spec/ci_in_a_can/test_result_notifier_spec.rb
|
187
|
+
- spec/ci_in_a_can/test_runner_spec.rb
|
188
|
+
- spec/ci_in_a_can/watcher_spec.rb
|
189
|
+
- spec/spec_helper.rb
|
112
190
|
homepage: ''
|
113
191
|
licenses:
|
114
192
|
- MIT
|
193
|
+
metadata: {}
|
115
194
|
post_install_message:
|
116
195
|
rdoc_options: []
|
117
196
|
require_paths:
|
118
197
|
- lib
|
119
198
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
-
none: false
|
121
199
|
requirements:
|
122
|
-
- -
|
200
|
+
- - '>='
|
123
201
|
- !ruby/object:Gem::Version
|
124
202
|
version: '0'
|
125
|
-
segments:
|
126
|
-
- 0
|
127
|
-
hash: 1463489440259186899
|
128
203
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
204
|
requirements:
|
131
|
-
- -
|
205
|
+
- - '>='
|
132
206
|
- !ruby/object:Gem::Version
|
133
207
|
version: '0'
|
134
|
-
segments:
|
135
|
-
- 0
|
136
|
-
hash: 1463489440259186899
|
137
208
|
requirements: []
|
138
209
|
rubyforge_project:
|
139
|
-
rubygems_version: 1.
|
210
|
+
rubygems_version: 2.1.11
|
140
211
|
signing_key:
|
141
|
-
specification_version:
|
212
|
+
specification_version: 4
|
142
213
|
summary: Fast CI. Still a WIP.
|
143
|
-
test_files:
|
214
|
+
test_files:
|
215
|
+
- spec/ci_in_a_can/bash_spec.rb
|
216
|
+
- spec/ci_in_a_can/build_spec.rb
|
217
|
+
- spec/ci_in_a_can/cloner_spec.rb
|
218
|
+
- spec/ci_in_a_can/github_spec.rb
|
219
|
+
- spec/ci_in_a_can/runner_spec.rb
|
220
|
+
- spec/ci_in_a_can/test_result_notifier_spec.rb
|
221
|
+
- spec/ci_in_a_can/test_runner_spec.rb
|
222
|
+
- spec/ci_in_a_can/watcher_spec.rb
|
223
|
+
- spec/spec_helper.rb
|