perkins 0.0.3 → 0.0.5

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/Gemfile +1 -0
  4. data/README.md +11 -8
  5. data/Rakefile +1 -18
  6. data/config/database.yml +19 -0
  7. data/db/migrate/20150130143050_create_builds.rb +1 -1
  8. data/db/migrate/20150220143051_add_build_status_to_build_reports.rb +10 -0
  9. data/db/migrate/20150220143053_add_commit_to_build_reports.rb +10 -0
  10. data/db/migrate/20150220143054_add_hook_id_to_repo.rb +10 -0
  11. data/db/schema.rb +4 -2
  12. data/examples/Capfile +17 -0
  13. data/examples/Gemfile +14 -1
  14. data/examples/Gemfile.lock +45 -19
  15. data/examples/Procfile +8 -3
  16. data/examples/README.md +12 -0
  17. data/examples/boot.rb +5 -4
  18. data/examples/config.ru +2 -11
  19. data/examples/{database.yml → config/database.example.yml} +0 -0
  20. data/examples/config/database.yml +27 -0
  21. data/examples/config/deploy.rb +78 -0
  22. data/examples/config/deploy/staging.rb +61 -0
  23. data/examples/{rainbows.rb → config/rainbows/development.rb} +1 -1
  24. data/examples/config/rainbows/production.rb +56 -0
  25. data/examples/{sidekiq.yml → config/sidekiq.yml} +0 -0
  26. data/examples/db/schema.rb +43 -0
  27. data/examples/rakefile +8 -0
  28. data/lib/perkins/application.rb +1 -1
  29. data/lib/perkins/assets.rb +3 -3
  30. data/lib/perkins/assets/javascripts/app.js +1 -0
  31. data/lib/perkins/assets/javascripts/perkings.js.coffee +14 -9
  32. data/lib/perkins/assets/javascripts/perkins/helpers.js.coffee +2 -2
  33. data/lib/perkins/assets/javascripts/perkins/m/models.js.coffee +15 -9
  34. data/lib/perkins/assets/javascripts/perkins/router.js.coffee +1 -0
  35. data/lib/perkins/assets/javascripts/perkins/v/my_repos.js.coffee +1 -1
  36. data/lib/perkins/assets/javascripts/perkins/v/orgs.js.coffee +1 -1
  37. data/lib/perkins/assets/javascripts/perkins/v/repo.js.coffee +38 -5
  38. data/lib/perkins/assets/javascripts/templates/repo.hamlc +5 -14
  39. data/lib/perkins/assets/javascripts/templates/repos/build_row.hamlc +10 -5
  40. data/lib/perkins/assets/javascripts/templates/repos/config.hamlc +23 -13
  41. data/lib/perkins/assets/javascripts/templates/repos/report_detail.hamlc +6 -6
  42. data/lib/perkins/assets/javascripts/vendor/eventsource.polyfill.js +512 -0
  43. data/lib/perkins/build/script.rb +2 -1
  44. data/lib/perkins/build/script/go.rb +1 -1
  45. data/lib/perkins/build/script/ruby.rb +1 -1
  46. data/lib/perkins/build/script/stages.rb +0 -1
  47. data/lib/perkins/build_report.rb +27 -7
  48. data/lib/perkins/build_worker.rb +10 -15
  49. data/lib/perkins/git_loader_worker.rb +1 -14
  50. data/lib/perkins/repo.rb +106 -21
  51. data/lib/perkins/runner.rb +57 -12
  52. data/lib/perkins/server.rb +42 -46
  53. data/lib/perkins/socket_server.rb +38 -0
  54. data/lib/perkins/version.rb +1 -1
  55. data/lib/tasks/db_tasks.rake +35 -0
  56. data/perkins.gemspec +16 -19
  57. data/spec/README.md +3 -0
  58. data/spec/lib/build/build_spec.rb +7 -3
  59. data/spec/lib/repo_spec.rb +23 -32
  60. data/spec/lib/runner_spec.rb +52 -2
  61. data/spec/lib/server_spec.rb +15 -6
  62. data/spec/spec_helper.rb +6 -5
  63. metadata +21 -57
  64. data/.DS_Store +0 -0
  65. data/lib/perkins/views/builds.haml +0 -43
  66. data/lib/perkins/views/menu.haml +0 -18
  67. data/lib/perkins/views/orgs.haml +0 -101
  68. data/lib/perkins/views/profile.haml +0 -31
  69. data/lib/perkins/views/repos/config.haml +0 -72
  70. data/lib/perkins/views/repos/github.haml +0 -45
  71. data/lib/perkins/views/repos/menu.haml +0 -17
  72. data/lib/perkins/views/repos/repo.haml +0 -64
  73. data/lib/perkins/views/repos/spinner.haml +0 -3
@@ -37,6 +37,7 @@ describe 'Server App' do
37
37
  context "with app" do
38
38
 
39
39
  before do
40
+ allow_any_instance_of(Warden::GitHub::User).to receive(:api).and_return(user_api)
40
41
  @user = make_user('login' => 'michelson')
41
42
  login_as @user
42
43
  end
@@ -52,28 +53,36 @@ describe 'Server App' do
52
53
  expect(last_response.body).to include("github_client_id")
53
54
  end
54
55
 
55
- it "profile" do
56
- allow_any_instance_of(Warden::GitHub::User).to receive(:api).and_return(user_api)
56
+ it "profile" do
57
57
  get "/me"
58
58
  expect(last_response).to be_ok
59
59
  end
60
60
 
61
61
  describe "github" do
62
62
 
63
- it "add repo" do
64
- allow_any_instance_of(Warden::GitHub::User).to receive(:api).and_return(user_api)
63
+ before do
64
+ #a = Warden::GitHub::User.new
65
+ #Perkins::Repo.sync_github_repos(a)
66
+ end
67
+
68
+ it "add repo will enqueue GitLoader task" do
65
69
  a = Warden::GitHub::User.new
66
70
  Perkins::Repo.sync_github_repos(a)
71
+ #expect(Perkins::GitLoaderWorker).to receive(:perform_async) #.with(sha, "master")
67
72
  repo = Perkins::Repo.synced_records.first
68
73
  xhr("/repos/add/#{repo.gb_id}")
69
- expect(last_response.body).to be == "true"
74
+ #expect(last_response.body).to be == "true"
70
75
  expect(Perkins::Repo.find(repo.id).github_data).to_not be_blank
76
+ expect(Perkins::Repo.find(repo.id).cached).to be == false
77
+
71
78
  end
72
79
 
80
+
73
81
  it "find a repo" do
74
- allow_any_instance_of(Warden::GitHub::User).to receive(:api).and_return(user_api)
82
+
75
83
  a = Warden::GitHub::User.new
76
84
  Perkins::Repo.sync_github_repos(a)
85
+
77
86
  repo = Perkins::Repo.synced_records.first
78
87
  allow_any_instance_of(Perkins::Server).to receive(:find_repo).and_return(repo)
79
88
  xhr "/repos/name/any_repo"
@@ -32,12 +32,13 @@ RSpec.configure do |config|
32
32
  config.include(SinatraAuthGithubTestHelper)
33
33
 
34
34
  def perkins_app
35
- Perkins.application do |app|
35
+ Perkins.application do
36
36
  config do |c|
37
- c.sse_endpoint = "http://localhost:3000/sse"
38
- c.redis = {namespace: "perkins:test"}
39
- c.database = "./examples/database.yml"
40
- c.github_client_id = ENV['GITHUB_CLIENT_ID']
37
+ c.sse_endpoint = ENV['ENDPOINT']
38
+ c.port = ENV['PORT']
39
+ c.redis = {host: "localhost"}
40
+ c.database = File.expand_path("../../examples/config/database.yml", __FILE__)
41
+ c.github_client_id = ENV['GITHUB_CLIENT_ID']
41
42
  c.github_client_secret = ENV['GITHUB_SECRET']
42
43
  end
43
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perkins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - miguel michelson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-23 00:00:00.000000000 Z
11
+ date: 2015-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -50,20 +50,6 @@ dependencies:
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '4.1'
53
- - !ruby/object:Gem::Dependency
54
- name: sinatra-activerecord
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: '0'
60
- type: :runtime
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: '0'
67
53
  - !ruby/object:Gem::Dependency
68
54
  name: sinatra-contrib
69
55
  requirement: !ruby/object:Gem::Requirement
@@ -106,34 +92,6 @@ dependencies:
106
92
  - - ">="
107
93
  - !ruby/object:Gem::Version
108
94
  version: '0'
109
- - !ruby/object:Gem::Dependency
110
- name: celluloid
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- version: '0'
116
- type: :runtime
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: '0'
123
- - !ruby/object:Gem::Dependency
124
- name: celluloid-io
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- version: '0'
130
- type: :runtime
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - ">="
135
- - !ruby/object:Gem::Version
136
- version: '0'
137
95
  - !ruby/object:Gem::Dependency
138
96
  name: redis
139
97
  requirement: !ruby/object:Gem::Requirement
@@ -408,7 +366,6 @@ executables:
408
366
  extensions: []
409
367
  extra_rdoc_files: []
410
368
  files:
411
- - ".DS_Store"
412
369
  - ".env.example"
413
370
  - ".gitignore"
414
371
  - ".pryrc"
@@ -424,19 +381,30 @@ files:
424
381
  - TODO.md
425
382
  - Vagrantfile
426
383
  - bin/perkins
384
+ - config/database.yml
427
385
  - db/migrate/20150130143030_create_repo.rb
428
386
  - db/migrate/20150130143050_create_builds.rb
429
387
  - db/migrate/20150220143050_add_status_fields_to_repos.rb
388
+ - db/migrate/20150220143051_add_build_status_to_build_reports.rb
389
+ - db/migrate/20150220143053_add_commit_to_build_reports.rb
390
+ - db/migrate/20150220143054_add_hook_id_to_repo.rb
430
391
  - db/schema.rb
392
+ - examples/Capfile
431
393
  - examples/Gemfile
432
394
  - examples/Gemfile.lock
433
395
  - examples/Procfile
396
+ - examples/README.md
434
397
  - examples/boot.rb
435
398
  - examples/config.ru
436
- - examples/database.yml
437
- - examples/rainbows.rb
399
+ - examples/config/database.example.yml
400
+ - examples/config/database.yml
401
+ - examples/config/deploy.rb
402
+ - examples/config/deploy/staging.rb
403
+ - examples/config/rainbows/development.rb
404
+ - examples/config/rainbows/production.rb
405
+ - examples/config/sidekiq.yml
406
+ - examples/db/schema.rb
438
407
  - examples/rakefile
439
- - examples/sidekiq.yml
440
408
  - lib/core_ext/hash/compact.rb
441
409
  - lib/core_ext/hash/deep_merge.rb
442
410
  - lib/core_ext/hash/deep_symbolize_keys.rb
@@ -485,6 +453,7 @@ files:
485
453
  - lib/perkins/assets/javascripts/vendor/ansiparse.js
486
454
  - lib/perkins/assets/javascripts/vendor/backbone-min.js
487
455
  - lib/perkins/assets/javascripts/vendor/backbone.marionette.js
456
+ - lib/perkins/assets/javascripts/vendor/eventsource.polyfill.js
488
457
  - lib/perkins/assets/javascripts/vendor/hamlcoffee.js.coffee.erb
489
458
  - lib/perkins/assets/javascripts/vendor/jquery.timeago.js
490
459
  - lib/perkins/assets/javascripts/vendor/livequery.jquery.js
@@ -529,23 +498,17 @@ files:
529
498
  - lib/perkins/repo.rb
530
499
  - lib/perkins/runner.rb
531
500
  - lib/perkins/server.rb
501
+ - lib/perkins/socket_server.rb
532
502
  - lib/perkins/thor_utils.rb
533
503
  - lib/perkins/version.rb
534
504
  - lib/perkins/views/401.haml
535
- - lib/perkins/views/builds.haml
536
505
  - lib/perkins/views/index.haml
537
506
  - lib/perkins/views/layout.haml
538
- - lib/perkins/views/menu.haml
539
- - lib/perkins/views/orgs.haml
540
- - lib/perkins/views/profile.haml
541
507
  - lib/perkins/views/readme.md
542
- - lib/perkins/views/repos/config.haml
543
- - lib/perkins/views/repos/github.haml
544
- - lib/perkins/views/repos/menu.haml
545
- - lib/perkins/views/repos/repo.haml
546
- - lib/perkins/views/repos/spinner.haml
547
508
  - lib/perkins/webhooks/github.rb
509
+ - lib/tasks/db_tasks.rake
548
510
  - perkins.gemspec
511
+ - spec/README.md
549
512
  - spec/fixtures/.travis.yml
550
513
  - spec/fixtures/config.yml
551
514
  - spec/lib/build/build_spec.rb
@@ -582,6 +545,7 @@ signing_key:
582
545
  specification_version: 4
583
546
  summary: A travis compatible standalone CI solution for ruby
584
547
  test_files:
548
+ - spec/README.md
585
549
  - spec/fixtures/.travis.yml
586
550
  - spec/fixtures/config.yml
587
551
  - spec/lib/build/build_spec.rb
data/.DS_Store DELETED
Binary file
@@ -1,43 +0,0 @@
1
-
2
-
3
- = haml :"repos/menu" , locals:{ repo: repo, active: "builds", build: nil}
4
-
5
- .title
6
- %h2#repo-name= repo.name
7
- %h4= repo.url
8
-
9
- .panel.panel-default
10
- .panel-heading Builds
11
- .panel-body
12
-
13
- %table.table
14
- %thead
15
- %tr
16
- %th Build
17
- %th Message
18
- %th Commit
19
- %th Duration
20
- %th Finished
21
- %tbody
22
-
23
- - builds.each do |build|
24
-
25
- %tr.build-row
26
- %td
27
- %a{href: "/repos/#{repo.name}/builds/#{build.id}"}
28
- %span{class: status_class(build['status']) }
29
- = build['_id'].to_s[0..7]
30
-
31
- %td
32
- = build.commit.message.split("\n")[0]
33
- %td
34
- %a{href: commit_url(repo, build.commit.sha), target: :blank}
35
- #{build.commit.sha[0..7]}
36
- - if build.branch.present?
37
- %strong
38
- = "(#{build.branch})"
39
-
40
- %td
41
- = "#{build.duration.to_i.round(2)} secs"
42
- %td
43
- %abbr.timeago{title:build.build_time}
@@ -1,18 +0,0 @@
1
- %nav#main-menu.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
@@ -1,101 +0,0 @@
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
-
@@ -1,31 +0,0 @@
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
-
@@ -1,72 +0,0 @@
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
-