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 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