perkins 0.0.1

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.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.env.example +4 -0
  4. data/.gitignore +19 -0
  5. data/.pryrc +3 -0
  6. data/.rspec +2 -0
  7. data/Gemfile +18 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +71 -0
  10. data/Rakefile +28 -0
  11. data/TODO.md +4 -0
  12. data/bin/perkins +6 -0
  13. data/db/migrate/20150130143030_create_repo.rb +18 -0
  14. data/db/migrate/20150130143050_create_builds.rb +20 -0
  15. data/db/schema.rb +38 -0
  16. data/examples/config.rb +12 -0
  17. data/examples/database.yml +17 -0
  18. data/examples/mongo.yml +13 -0
  19. data/lib/core_ext/hash/compact.rb +8 -0
  20. data/lib/core_ext/hash/deep_merge.rb +15 -0
  21. data/lib/core_ext/hash/deep_symbolize_keys.rb +20 -0
  22. data/lib/core_ext/object/false.rb +5 -0
  23. data/lib/core_ext/string/indent.rb +5 -0
  24. data/lib/core_ext/string/unindent.rb +5 -0
  25. data/lib/perkins/.DS_Store +0 -0
  26. data/lib/perkins/application.rb +40 -0
  27. data/lib/perkins/assets/images/github.svg +4 -0
  28. data/lib/perkins/assets/images/spinner.svg +23 -0
  29. data/lib/perkins/assets/javascripts/app.js +9 -0
  30. data/lib/perkins/assets/javascripts/log_view.js.coffee +95 -0
  31. data/lib/perkins/assets/javascripts/perkings.js.coffee +40 -0
  32. data/lib/perkins/assets/javascripts/vendor/ansiparse.js +187 -0
  33. data/lib/perkins/assets/javascripts/vendor/jquery.timeago.js +189 -0
  34. data/lib/perkins/assets/javascripts/vendor/log.js +2 -0
  35. data/lib/perkins/assets/javascripts/vendor/minispade.js +55 -0
  36. data/lib/perkins/assets/stylesheets/app.css +2 -0
  37. data/lib/perkins/assets/stylesheets/log.css.scss +115 -0
  38. data/lib/perkins/assets/stylesheets/styles.css.scss +199 -0
  39. data/lib/perkins/auth/github.rb +181 -0
  40. data/lib/perkins/build/data/env.rb +84 -0
  41. data/lib/perkins/build/data/var.rb +60 -0
  42. data/lib/perkins/build/data.rb +167 -0
  43. data/lib/perkins/build/script/bundler.rb +76 -0
  44. data/lib/perkins/build/script/go.rb +100 -0
  45. data/lib/perkins/build/script/helpers.rb +39 -0
  46. data/lib/perkins/build/script/jdk.rb +43 -0
  47. data/lib/perkins/build/script/ruby.rb +31 -0
  48. data/lib/perkins/build/script/rvm.rb +73 -0
  49. data/lib/perkins/build/script/stages.rb +28 -0
  50. data/lib/perkins/build/script/templates/footer.sh +3 -0
  51. data/lib/perkins/build/script/templates/header.sh +201 -0
  52. data/lib/perkins/build/script/templates/xcode.sh +21 -0
  53. data/lib/perkins/build/script.rb +167 -0
  54. data/lib/perkins/build/shell/dsl.rb +104 -0
  55. data/lib/perkins/build/shell/node.rb +121 -0
  56. data/lib/perkins/build/shell.rb +16 -0
  57. data/lib/perkins/build.rb +27 -0
  58. data/lib/perkins/build_report.rb +11 -0
  59. data/lib/perkins/cli.rb +42 -0
  60. data/lib/perkins/commit.rb +30 -0
  61. data/lib/perkins/dsl/app_proxy.rb +23 -0
  62. data/lib/perkins/dsl.rb +12 -0
  63. data/lib/perkins/listener.rb +38 -0
  64. data/lib/perkins/logger.rb +12 -0
  65. data/lib/perkins/notifier.rb +5 -0
  66. data/lib/perkins/repo.rb +145 -0
  67. data/lib/perkins/runner.rb +124 -0
  68. data/lib/perkins/server.rb +314 -0
  69. data/lib/perkins/thor_utils.rb +79 -0
  70. data/lib/perkins/version.rb +3 -0
  71. data/lib/perkins/views/401.haml +1 -0
  72. data/lib/perkins/views/builds.haml +46 -0
  73. data/lib/perkins/views/index.haml +6 -0
  74. data/lib/perkins/views/layout.haml +53 -0
  75. data/lib/perkins/views/menu.haml +18 -0
  76. data/lib/perkins/views/orgs.haml +101 -0
  77. data/lib/perkins/views/profile.haml +31 -0
  78. data/lib/perkins/views/readme.md +20 -0
  79. data/lib/perkins/views/repos/config.haml +72 -0
  80. data/lib/perkins/views/repos/github.haml +76 -0
  81. data/lib/perkins/views/repos/menu.haml +17 -0
  82. data/lib/perkins/views/repos/repo.haml +64 -0
  83. data/lib/perkins/views/repos/spinner.haml +3 -0
  84. data/lib/perkins/webhooks/github.rb +12 -0
  85. data/lib/perkins/worker.rb +33 -0
  86. data/lib/perkins.rb +36 -0
  87. data/perkins.gemspec +52 -0
  88. data/spec/fixtures/.travis.yml +8 -0
  89. data/spec/fixtures/config.yml +6 -0
  90. data/spec/lib/build/build_spec.rb +58 -0
  91. data/spec/lib/commit_spec.rb +6 -0
  92. data/spec/lib/dsl_spec.rb +17 -0
  93. data/spec/lib/listener_spec.rb +30 -0
  94. data/spec/lib/repo_spec.rb +110 -0
  95. data/spec/lib/runner_spec.rb +76 -0
  96. data/spec/lib/server_spec.rb +108 -0
  97. data/spec/spec_helper.rb +67 -0
  98. data/spec/support/auth.rb +30 -0
  99. data/spec/support/github_api.rb +177 -0
  100. metadata +503 -0
@@ -0,0 +1,6 @@
1
+
2
+
3
+
4
+ .title
5
+ = markdown File.open(File.expand_path(File.dirname(__FILE__) + '/readme.md')).read
6
+
@@ -0,0 +1,53 @@
1
+
2
+ %html
3
+ %head
4
+ %title Perkins
5
+ %link{ href:"//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" , rel:"stylesheet"}
6
+
7
+ %script{ src: "//code.jquery.com/jquery-2.1.1.min.js"}
8
+ %script{ src:"//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"}
9
+ %link{:rel => "stylesheet", :href => "//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css"}/
10
+
11
+ %script{ src:"/assets/app.js"}
12
+ %link{ href:"/assets/app.css", media:"screen", rel:"stylesheet", type:"text/css"}
13
+
14
+ :javascript
15
+ minispade.require('log')
16
+
17
+ %body
18
+ = haml :menu
19
+
20
+ .container
21
+ #content
22
+ #left-wrap.col-sm-3
23
+
24
+ #sidebar.affix
25
+ #sidebar-header
26
+ .pull-right
27
+ %a.btn{href: "/me", title: "Add new repository"}
28
+ %span.glyphicon.glyphicon-plus
29
+
30
+ %h4.title Repos
31
+
32
+ %ul.nav.nav-stacked{style: "overflow:scroll;height:100%"}
33
+ - Perkins::Repo.added.all.each do |repo|
34
+ %li
35
+ %a{:href => "/repos/#{repo.name}"}
36
+ = repo.name
37
+ = haml :"repos/spinner", locals: {repo: repo}
38
+
39
+ #main-content.col-sm-9
40
+ = yield
41
+
42
+ #inner
43
+
44
+ .clearfix
45
+ #footer
46
+ -#= render 'footer'
47
+ .pull-right
48
+ Copyright © #{Time.now.year} Perkins
49
+ %strong
50
+ Redis connection:
51
+ %span
52
+ = $redis.client.host
53
+ = $redis.client.port
@@ -0,0 +1,18 @@
1
+ %nav.navbar.navbar-fixed-top{role:"navigation"}
2
+ .container
3
+ .navbar-header
4
+ %button.navbar-toggle{"data-target" => ".nav-collapse", "data-toggle" => "collapse", :type => "button"}
5
+ %span.sr-only
6
+ %span.icon-bar
7
+ %span.icon-bar
8
+ %span.icon-bar
9
+ .title
10
+ %a.navbar-brand{:href => "/#"} Perkins
11
+
12
+ .navbar-inner.pull-right
13
+ .nav-collapse
14
+ %ul.nav.navbar-nav
15
+ %li
16
+ %a{:href => "/"} Home
17
+ %li
18
+ %a{:href => "/logout"} Logout
@@ -0,0 +1,101 @@
1
+
2
+ #repo-menu.pull-right
3
+ %ul.nav.nav-pills{:role => "tablist"}
4
+
5
+ %li.dropdown
6
+ %a.dropdown-toggle{"aria-expanded" => "false", "data-toggle" => "dropdown", :href => "#", :role => "button"}
7
+ Orgs
8
+ %span.caret
9
+ %ul.dropdown-menu.dropdown-menu-right{:role => "menu"}
10
+ - orgs.each do |org|
11
+ %li
12
+ %a{:href => "/orgs/#{org[:login]}"}
13
+ = org[:login]
14
+
15
+
16
+ .title
17
+ %h1
18
+ %span#org-name
19
+ = org[:name]
20
+
21
+ %h5
22
+ %strong= org[:url]
23
+
24
+ .panel.panel-default
25
+ .panel-heading
26
+ Organization info:
27
+
28
+ .panel-body
29
+ .col-sm-3
30
+
31
+ %img.avatar{ src: avatar_url(org[:avatar_url], 80) }
32
+
33
+ .col-sm-3
34
+
35
+ %strong id:
36
+ = org[:id]
37
+ %br
38
+
39
+ %strong email:
40
+ = org[:email]
41
+ %br
42
+
43
+ %strong public repos:
44
+ = org[:public_repos]
45
+
46
+
47
+ .col-sm-3
48
+
49
+ %strong public gists:
50
+ = org[:public_gists]
51
+ %br
52
+
53
+ %strong followers:
54
+ = org[:followers]
55
+ %br
56
+
57
+ %strong following:
58
+ = org[:following]
59
+
60
+ .col-sm-3
61
+
62
+ %strong total private repos:
63
+ = org[:total_private_repos]
64
+ %br
65
+
66
+ %strong owned private repos:
67
+ = org[:owned_private_repos]
68
+
69
+ - if repos.any?
70
+ %h2 #{org[:name]} Repositories:
71
+
72
+ - repos.each do |repo|
73
+ %ul.list-group
74
+ %li.list-group-item
75
+
76
+ .pull-right
77
+ %a.btn{href: "/repos/add/#{repo["id"]}"}
78
+ ADD REPO
79
+ %span.btn.glyphicon.glyphicon-plus-sign
80
+
81
+ .row
82
+ %span.col-sm-2
83
+ %a{src: repo["owner"]["url"] }
84
+ %img{ src: repo["owner"]["avatar_url"], width: 120 }
85
+ %span.col-sm-7
86
+ .pull-right
87
+
88
+ - if repo["fork"]
89
+ %i.fa.fa-code-fork{title: "is a fork"}
90
+
91
+ - if repo["private"]
92
+ %i.fa.fa-lock{title: "is private"}
93
+
94
+ %h4= repo.name
95
+ %a{href: repo.url}
96
+ View on github
97
+ %i.fa.fa-external-link
98
+ %p.small= repo["description"]
99
+
100
+
101
+
@@ -0,0 +1,31 @@
1
+ - u = user.user
2
+ %p
3
+ .panel.panel-default
4
+ .panel-heading
5
+ Profile details
6
+
7
+ .panel-body
8
+
9
+ .col-sm-2
10
+ %img{:src => u[:avatar_url], :alt => "avatar" , width: 100}
11
+
12
+ .col-sm-8
13
+ %h2
14
+ = u[:name]
15
+
16
+ %h5
17
+ %strong= u[:company]
18
+
19
+
20
+ %h4 Select repos:
21
+
22
+ %ul
23
+ %li
24
+ %a{:href => "/myrepos"} #{u[:name]} repos
25
+ - user.orgs.each do |org|
26
+ %li
27
+ %a{ href: "/orgs/#{org[:login]}" }
28
+ = org[:login]
29
+
30
+
31
+
@@ -0,0 +1,20 @@
1
+ # Welcome to Perkins CI - thin CI for ruby
2
+
3
+ ## Usage
4
+
5
+ ###Configure:
6
+ ```ruby
7
+ Perkins.application() do |app|
8
+ app.redis = Redis.new
9
+ app.server = { host: "localhost", port:1234 }
10
+ app.repo("lazy_high_charts") do |repo|
11
+ repo.url = "git@github.com:michelson/lazy_high_charts.git"
12
+ repo.name = "lazy_high_charts"
13
+ repo.working_dir = "/tmp/"
14
+ end
15
+ end
16
+ ```
17
+
18
+ ###Run server:
19
+
20
+ perkins server examples/config.rb --port=3000
@@ -0,0 +1,72 @@
1
+
2
+
3
+ = haml :"repos/menu" , locals:{ repo: repo, active: "config", build: nil}
4
+
5
+ .title
6
+ %h2
7
+ %span#repo-name= repo.name
8
+ = haml :"repos/spinner", locals: {repo: repo}
9
+
10
+ %h5
11
+ %strong= repo.url
12
+
13
+
14
+ .panel.panel-default
15
+ .panel-heading
16
+ Config Post Hook
17
+
18
+ .panel-body
19
+
20
+ - if hook.present?
21
+ .col-sm-12
22
+
23
+ .pull-right
24
+ .badge
25
+ #{hook["active"] ? "active" : "disabled"}
26
+ %h2
27
+ %a{ href: hook["url"]}
28
+ = hook["name"]
29
+ \-
30
+ = hook["id"]
31
+
32
+ %h4 Config:
33
+ %ul
34
+ - if hook["config"][:secret].present?
35
+ %li
36
+ %strong secret:
37
+ = hook["config"][:secret]
38
+ %li
39
+ %strong url:
40
+ = hook["config"][:url]
41
+ %li
42
+ %strong content type:
43
+ = hook["config"][:content_type]
44
+ %li
45
+ %strong ssl:
46
+ = hook["config"][:insecure_ssl]
47
+
48
+ %h4 Test url:
49
+ %p
50
+ = hook["test_url"]
51
+
52
+ %h4 Last response:
53
+ %p
54
+ = hook["last_response"].to_json
55
+
56
+
57
+ .col-sm-12
58
+ %h3
59
+ = hook.present? ? "Will update exiting (#{hook["id"]}) hook." : "Will create new hook."
60
+ %form{:action => "/repos/#{repo.name}/add_hook", method: "post"}
61
+ %input{:type => "text", name: "webhook_url", placeholder: "type the receive hook url...", style:"width:250px"}
62
+ %button Send
63
+
64
+ %p.small
65
+ we are going to send the hook to
66
+ %strong
67
+ =repo.url
68
+
69
+
70
+
71
+
72
+
@@ -0,0 +1,76 @@
1
+
2
+
3
+ .pull-right
4
+ %br
5
+ %a.btn.btn.btn-success{href: "/repos/sync"}
6
+ %span.glyphicon.glyphicon-refresh
7
+ SYNC
8
+
9
+ -#
10
+ - repos.each do |repo|
11
+ %ul.list-group
12
+ %li.list-group-item
13
+
14
+ .pull-right
15
+ %a.btn{href: "/repos/add/#{repo.gb_id}"}
16
+ ADD REPO
17
+ %span.btn.glyphicon.glyphicon-plus-sign
18
+
19
+ .row
20
+ %span.col-sm-1
21
+ %a{src: repo.github_data["owner"]["url"] }
22
+ %img{ src: repo.github_data["owner"]["avatar_url"], width: 66 }
23
+ %span.col-sm-8
24
+ %h4= repo.name
25
+ %a{href: repo.url}
26
+ view on github
27
+ %p
28
+ .clearfix
29
+ .well
30
+ %p= repo.github_data["description"]
31
+ -#
32
+ %p
33
+ clone url:
34
+ = repo.github_data["clone_url"]
35
+
36
+ %span
37
+ = repo.github_data["fork"]
38
+ = repo.github_data["private"]
39
+
40
+ - if repos.any?
41
+ %h2 Repositories:
42
+
43
+ .panel.panel-default
44
+ .panel-heading
45
+ Github Repos
46
+
47
+
48
+ - repos.each do |repo|
49
+ %ul.list-group
50
+ %li.list-group-item
51
+
52
+ .pull-right
53
+ %a.btn{href: "/repos/add/#{repo['id']}"}
54
+ ADD REPO
55
+ %span.btn.glyphicon.glyphicon-plus-sign
56
+
57
+ .row
58
+ %span.col-sm-2
59
+ %a{src: repo["owner"]["url"] }
60
+ %img{ src: repo["owner"]["avatar_url"], width: 120 }
61
+ %span.col-sm-7
62
+ .pull-right
63
+
64
+ - if repo["fork"]
65
+ %i.fa.fa-code-fork{title: "is a fork"}
66
+
67
+ - if repo["private"]
68
+ %i.fa.fa-lock{title: "is private"}
69
+
70
+ %h4= repo.name
71
+ %a{href: repo['html_url'], target: :blank}
72
+ View on github
73
+ %i.fa.fa-external-link
74
+ %p.small= repo["description"]
75
+
76
+
@@ -0,0 +1,17 @@
1
+ #repo-menu.pull-right
2
+ %ul.nav.nav-pills{:role => "tablist"}
3
+
4
+ - unless build.blank?
5
+ %li
6
+ %a.btn.refresh{href:"/repos/#{repo.name}/builds/#{build['_id']}/restart", title: "Restart Build"}
7
+ %i.fa.fa-refresh{class: "#{'fa-refresh'}"}
8
+
9
+ %li{class: "#{'active' if active == 'current'}"}
10
+ %a{:href => "/repos/#{repo.name}"} Current
11
+ %li{class: "#{'active' if active == 'builds'}"}
12
+ %a{:href => "/repos/#{repo.name}/builds"} Build history
13
+ %li{class: "#{'active' if active == 'config'}"}
14
+ %a{:href => "/repos/#{repo.name}/config"} Config Hook
15
+
16
+
17
+
@@ -0,0 +1,64 @@
1
+
2
+ %div{id: "repo-#{repo.id}" }
3
+
4
+ = haml :"repos/menu" , locals:{ repo: repo, active: "current", build: build}
5
+
6
+ .title
7
+ %h2
8
+ %span#repo-name= repo.name
9
+ = haml :"repos/spinner", locals: {repo: repo}
10
+
11
+ %h5
12
+ %strong= repo.url
13
+
14
+ - if build.present?
15
+ .panel.panel-default
16
+ .panel-heading
17
+ Current Build
18
+
19
+ .panel-body
20
+
21
+ .col-sm-8
22
+ %strong= build.commit.branch
23
+ \-
24
+ = build.commit.message
25
+
26
+ .pull-right
27
+ = status_label(build.status)
28
+ %p
29
+ %abbr.timeago{title:build.build_time}
30
+ %br
31
+ duration:
32
+ %strong= build.duration.to_i.round(2)
33
+
34
+
35
+ .col-sm-12
36
+ %img.avatar{ src: avatar_url(build.commit.email, 35) }
37
+ %strong= build.commit.author
38
+ = build.commit.email
39
+
40
+ .pull-right
41
+ %a{href: commit_url(repo, build.sha), target: :blank}
42
+ %img{src: "/assets/github.svg", width:"20px"}
43
+ = "commit ... #{build["sha"][0..6]}"
44
+ %strong
45
+ %abbr.timeago{title:build.commit.created_at}
46
+
47
+
48
+
49
+ %ul.list-group
50
+ %li.list-group-item.build-item
51
+
52
+ .build-response
53
+ %p
54
+ %pre#log.ansi= build.response
55
+ - else
56
+ .alert.alert-warning
57
+ No builds yet.
58
+
59
+ %a{:href => "/repos/#{repo.name}/run_commit"}
60
+ Run last commit in master branch
61
+
62
+
63
+
64
+
@@ -0,0 +1,3 @@
1
+ - unless repo.runner.blank?
2
+ %span.build-status{class: "repo-#{repo.id}-spinner #{'hidden' unless repo.runner.running?}"}
3
+ %img{src: "/assets/spinner.svg", width:"20px"}
@@ -0,0 +1,12 @@
1
+ module Perikins
2
+ module Webhooks
3
+ class Github
4
+ attr_accessor :raw_params
5
+
6
+ def initialize(params)
7
+ self.raw_params = params
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ require 'net/http'
2
+ require "uri"
3
+
4
+ module Perkins
5
+ class Worker
6
+
7
+ #include Celluloid
8
+
9
+ def self.perform(repo, sha, branch)
10
+ repo.load_git
11
+
12
+ return if repo.runner.blank?
13
+
14
+ repo.runner.sha = sha
15
+ repo.runner.branch = branch
16
+
17
+ send_sse({repo: {id: repo.id, name: repo.name , status: "start"} })
18
+
19
+ repo.runner.run(sha)
20
+
21
+ report = repo.build_reports.find_by(sha: sha)
22
+ send_sse({repo: {id: repo.id, name: repo.name , status: "stop", report: report } })
23
+ end
24
+
25
+ def self.send_sse(msg)
26
+ postData = Net::HTTP.post_form(
27
+ URI.parse('http://localhost:3000/sse'),
28
+ {'msg'=> msg.to_json }
29
+ )
30
+ end
31
+
32
+ end
33
+ end
data/lib/perkins.rb ADDED
@@ -0,0 +1,36 @@
1
+ #require "perkins/version"
2
+ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require "logger"
5
+ require 'active_support/core_ext'
6
+ require 'redis'
7
+ require 'redis-namespace'
8
+ require "travis/yaml"
9
+ require "active_record"
10
+
11
+ require 'dotenv'
12
+ Dotenv.load
13
+ require 'octokit'
14
+ Octokit.auto_paginate = true
15
+ #require 'core_ext/hash/deep_symbolize_keys'
16
+
17
+ module Perkins
18
+ autoload :VERSION, 'perkins/version.rb'
19
+ autoload :Repo, 'perkins/repo.rb'
20
+ autoload :BuildReport, 'perkins/build_report.rb'
21
+ autoload :Runner, 'perkins/runner.rb'
22
+ autoload :Build, 'perkins/build.rb'
23
+ autoload :Commit, 'perkins/commit.rb'
24
+ autoload :Server, 'perkins/server.rb'
25
+ autoload :Worker, 'perkins/worker.rb'
26
+ autoload :Listener, 'perkins/listener.rb'
27
+ autoload :ThorUtils, 'perkins/thor_utils.rb'
28
+ autoload :Logger, 'perkins/logger.rb'
29
+ autoload :Application, 'perkins/application.rb'
30
+ autoload :AppProxy, 'perkins/dsl/app_proxy.rb'
31
+ autoload :CLI, 'perkins/cli.rb'
32
+ ROOT_PATH = File.expand_path(File.dirname(File.dirname(__FILE__)))
33
+ end
34
+
35
+ require 'perkins/dsl'
36
+
data/perkins.gemspec ADDED
@@ -0,0 +1,52 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'perkins/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "perkins"
8
+ spec.version = Perkins::VERSION
9
+ spec.authors = ["miguel michelson"]
10
+ spec.email = ["miguelmichelson@gmail.com"]
11
+ spec.summary = "Thin CI"
12
+ spec.description = "Minimal CI"
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'activesupport', ['>= 3', '< 4.1']
22
+ spec.add_dependency 'activerecord', ['>= 3', '< 4.1']
23
+
24
+ spec.add_dependency "sinatra-activerecord"
25
+ spec.add_dependency "sinatra-contrib"
26
+ spec.add_dependency "sqlite3"
27
+
28
+ spec.add_runtime_dependency("git")
29
+ spec.add_runtime_dependency("celluloid")
30
+ spec.add_runtime_dependency("celluloid-io")
31
+ spec.add_runtime_dependency("redis")
32
+ spec.add_runtime_dependency("thor")
33
+ spec.add_runtime_dependency("sinatra")
34
+ spec.add_runtime_dependency("haml")
35
+ spec.add_runtime_dependency("sprockets")
36
+ spec.add_runtime_dependency("yui-compressor")
37
+ spec.add_runtime_dependency("rdiscount")
38
+ spec.add_runtime_dependency("travis-yaml")
39
+ spec.add_runtime_dependency("redis-namespace")
40
+ spec.add_runtime_dependency("thin")
41
+
42
+ spec.add_dependency "warden-github", "~>1.0"
43
+
44
+ # I find it well worth to include CoffeeScript and SASS as well
45
+ spec.add_runtime_dependency( "coffee-script")
46
+ spec.add_runtime_dependency( "sass")
47
+
48
+
49
+ spec.add_development_dependency "bundler", "~> 1.7"
50
+ spec.add_development_dependency "rake", "~> 10.0"
51
+ spec.add_development_dependency "fakeredis"
52
+ end
@@ -0,0 +1,8 @@
1
+
2
+ language: ruby
3
+ bundler_args: --without production development
4
+ script: BUNDLE_GEMFILE=$PWD/Gemfile bundle exec rspec
5
+ rvm:
6
+ - 1.9.3-p545
7
+ - 2.0.0-p247
8
+ os: osx
@@ -0,0 +1,6 @@
1
+ -
2
+ repo:
3
+ name: lazy_high_charts
4
+ url: "git@github.com:michelson/lazy_high_charts.git"
5
+ bootstrap: "bundle install"
6
+ test_script: "bundle exec rspec"
@@ -0,0 +1,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
2
+
3
+ describe "Repo" do
4
+
5
+ let(:user_api) {
6
+ Octokit::Client.new(
7
+ login: ENV['LOGIN'],
8
+ access_token: ENV['ACCESS_TOKEN']
9
+ )
10
+ }
11
+
12
+ let(:file){
13
+ f = File.expand_path(File.dirname(__FILE__) + '/../../fixtures/.travis.yml')
14
+ Travis::Yaml.parse( File.open(f).read )
15
+ }
16
+
17
+ let(:github_user){
18
+ Warden::GitHub::User.new
19
+ }
20
+
21
+ before(:each) do
22
+ perkins_app
23
+ allow_any_instance_of(Warden::GitHub::User).to receive(:api).and_return(user_api)
24
+ @user = Warden::GitHub::User.new
25
+ Perkins::Repo.sync_github_repos(@user)
26
+
27
+ to_add = Perkins::Repo.synced_records.where(name: "michelson/lazy_high_charts").first
28
+ r = Perkins::Repo.add_from_github(to_add.gb_id)
29
+ end
30
+
31
+ context "runner config" do
32
+ before :each do
33
+ @repo = Perkins::Repo.where(cached: false).last
34
+ allow_any_instance_of(Perkins::Repo).to receive(:check_config_existence).and_return(file)
35
+ @repo.load_git
36
+ expect(@repo.git).to be_instance_of(Git::Base)
37
+ @path = @repo.git.dir.path
38
+ end
39
+
40
+ after :each do
41
+ Perkins::Repo.delete_all
42
+ end
43
+
44
+ it "should have a runner" do
45
+ expect(@repo.runner).to be_instance_of(Perkins::Runner)
46
+ end
47
+
48
+ it "run run run should add a new report" do
49
+ sha = @repo.git.log.map(&:sha).first
50
+ @repo.runner.run(sha)
51
+ expect(@repo.build_reports.size).to be == 1
52
+ #binding.pry
53
+ #expect(@repo.runner.status).to be == true
54
+ #expect(@repo.runner.response).to_not be_blank
55
+ end
56
+ end
57
+
58
+ end
@@ -0,0 +1,6 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
2
+
3
+ describe "Commit" do
4
+
5
+
6
+ end