ci_in_a_can 0.0.1 → 0.0.2

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: 09f44edf14e21bb8bb923e6edd242133d9777234
4
+ data.tar.gz: 568b7e586f85543e3b16711e7739ee0f638101a7
5
+ SHA512:
6
+ metadata.gz: 51d7d7803e72bf73af65e14ac37036ce4fd42fefc5a57992b19fccd65a890ece6c98b91bc3b0449bb9881549f7d6ca228e8d7444e24b63c43fe7d2c9d32bbab6
7
+ data.tar.gz: a11c6566bfeaaa2cd5c004815fd1cc3a454557fe5e8bbfd89e540465c92095f89203d174021fb0e090f804229351af0c524956ef22a3f3fd63bc3a4c1a5f3e4e
data/.gitignore CHANGED
@@ -15,3 +15,5 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+
19
+ .DS_Store
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ task :default => [:test]
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs.push "lib"
8
+ t.test_files = FileList['spec/*_spec.rb', 'spec/ci_in_a_can/*_spec.rb']
9
+ t.verbose = true
10
+ end
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
@@ -1,4 +1,6 @@
1
1
  require_relative 'lib/ci_in_a_can'
2
2
 
3
+ CiInACan::App.jobs_location = "jobs"
4
+
3
5
  use CiInACan::App
4
6
  run Sinatra::Application
data/lib/ci_in_a_can.rb CHANGED
@@ -1,5 +1,5 @@
1
- require "ci_in_a_can/app"
2
- require "ci_in_a_can/version"
1
+ require_relative "ci_in_a_can/version"
2
+ Dir[File.dirname(__FILE__) + '/ci_in_a_can/*.rb'].each { |file| require file }
3
3
 
4
4
  module CiInACan
5
5
  # Your code goes here...
@@ -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,13 @@
1
+ module CiInACan
2
+
3
+ module Bash
4
+
5
+ def self.run command
6
+
7
+ system command
8
+
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -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,7 @@
1
+ module CiInACan
2
+ module Cloner
3
+ def self.clone_a_local_copy_for build
4
+ CiInACan::Bash.run "git clone #{build.git_ssh} #{build.local_location}; cd #{build.local_location}; git checkout #{build.sha}"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module CiInACan
2
+ module Daemon
3
+ def self.start options
4
+ CiInACan::Github.access_token = options[:access_token]
5
+ CiInACan::Watcher.watch options[:watching_location], options[:working_location]
6
+ sleep
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ require 'octokit'
2
+
3
+ module CiInACan
4
+
5
+ module Github
6
+
7
+ class << self
8
+
9
+ attr_accessor :access_token
10
+
11
+ def client
12
+ Octokit::Client.new access_token: access_token
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ 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,5 @@
1
+ module CiInACan
2
+ class TestResult
3
+ attr_accessor :passed
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module CiInACan
2
+ module TestResultNotifier
3
+ def self.send_for build, test_result
4
+ CiInACan::Github.client.create_status(build.repo, build.sha, test_result.passed ? "success" : "failure")
5
+ end
6
+ end
7
+ 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
@@ -1,3 +1,3 @@
1
1
  module CiInACan
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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
@@ -0,0 +1,6 @@
1
+ require_relative '../lib/ci_in_a_can'
2
+ require 'minitest/autorun'
3
+ require 'minitest/spec'
4
+ require 'minitest/pride'
5
+ require 'subtle'
6
+ require 'mocha/setup'
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.1
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-05 00:00:00.000000000 Z
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.8.25
210
+ rubygems_version: 2.1.11
140
211
  signing_key:
141
- specification_version: 3
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