perkins 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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
-