overlay 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1ed5b5ecabe7f6db32dcc1d22a27f014e3b7148
4
- data.tar.gz: f298741a03ee2625883981d073b4f93045de10d7
3
+ metadata.gz: 80ccbfd578014c00094c8eb7b434a5ca509c75eb
4
+ data.tar.gz: cdd707ea7987ecbe0ac9cc01a872323408240099
5
5
  SHA512:
6
- metadata.gz: f6ae58c5c453d6cb0b3d22a24d0f44c5fb3af5305bae5ea1fb6a6394ed829b67aa08be5077b7093d8a8bf44092ae42cec374ef4579af6fe5f3a4063c5015d47e
7
- data.tar.gz: 4c2145676a72cb37da30019f20ba7925a0dd7880d1d75936a56af2f4f4f5b6644f5424472b71fe5bcb9a9166d656efcb2cb05ffb060c7c3d27e24ab84bee3b1a
6
+ metadata.gz: 02ff926a5c3600648642ce92f802b044ed97c0643a7faaf450012b807d8090757e8777b8de9bfbf0f5afb621224edbfd1589020c22867aee499032e8229e9b88
7
+ data.tar.gz: ad846c7c49712f864bf213857a4690486c07373d496786b97da699199dc762bca5be07334fdfbaf69b99de2e175279d8f3eda88941245091558ed375c510ef4a
@@ -3,6 +3,16 @@ require_dependency "overlay/application_controller"
3
3
  module Overlay
4
4
  class GithubController < ApplicationController
5
5
  def update
6
+ Overlay.configuration.repositories.each do |repo_config|
7
+ next unless repo_config.class == GithubRepo
8
+ branch = repo_config[:branch] || 'master'
9
+ if (params[:repository] && params[:webhook])
10
+ if (params[:repository][:name] == repo_config[:repo]) && (params[:webhook][:ref] == "refs/heads/#{branch}")
11
+ Overlay::Github.process_overlays
12
+ end
13
+ end
14
+ end
15
+ render :inline => github_update_url
6
16
  end
7
17
  end
8
18
  end
data/config/routes.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  Overlay::Engine.routes.draw do
2
- get "github/update"
2
+ post "github/update"
3
3
  end
data/lib/overlay.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "overlay/engine"
2
2
  require "overlay/configuration"
3
- require "overlay/git"
3
+ require "overlay/github"
4
4
 
5
5
  module Overlay
6
6
  end
@@ -7,7 +7,8 @@ module Overlay
7
7
  :auth,
8
8
  :repositories,
9
9
  :hostname,
10
- :host_port
10
+ :host_port,
11
+ :relative_root_url
11
12
  ].freeze
12
13
 
13
14
  class << self
@@ -29,5 +30,5 @@ module Overlay
29
30
  end
30
31
  end
31
32
 
32
- GithubRepo = Struct.new(:name, :repo, :branch)
33
+ GithubRepo = Struct.new(:user, :repo, :branch, :root_path)
33
34
  end
@@ -0,0 +1,114 @@
1
+ require 'github_api'
2
+ require 'fileutils'
3
+ require 'socket'
4
+
5
+ module Overlay
6
+ class Github
7
+ include Overlay::Engine.routes.url_helpers
8
+ # Cycle through all configured repositories and overlay
9
+ #
10
+ def self.process_overlays
11
+ # If we aren't running in Rails, bail out. This may be some
12
+ # other request such as rake routes loading the environment
13
+ #
14
+ return unless defined?(Rails::Server)
15
+
16
+ # Configure github api
17
+ configure
18
+
19
+ Overlay.configuration.repositories.each do |repo_config|
20
+ next unless repo_config.class == GithubRepo
21
+
22
+ # Validate repository config
23
+ raise 'Respository config missing user' if (!repo_config[:user] || repo_config[:user].nil?)
24
+ raise 'Respository config missing repo' if (!repo_config[:repo] || repo_config[:repo].nil?)
25
+
26
+ repo_config[:branch] ||= 'master'
27
+
28
+ register_web_hook(repo_config)
29
+
30
+ overlay_repo(repo_config)
31
+ end
32
+ end
33
+
34
+ # Register our listener on the repo
35
+ #
36
+ def self.register_web_hook repo_config
37
+ # Make sure our routes are loaded
38
+ Rails.application.reload_routes!
39
+
40
+ # Build hook url
41
+ host = config.hostname || Socket.gethostname
42
+ port = config.host_port || Rails::Server.new.options[:Port]
43
+ path = Overlay::Engine.routes.url_for({:controller=>"overlay/github", :action=>"update", :only_path => true})
44
+ uri = ActionDispatch::Http::URL::url_for({:host => host, :port => port, :path => "#{config.relative_root_url}#{path}"})
45
+
46
+ # Retrieve current web hooks
47
+ current_hooks = github_repo.hooks.list(repo_config[:user], repo_config[:repo]).response.body
48
+ if current_hooks.find {|hook| hook.config.url == uri}.nil?
49
+ #register hook
50
+ github_repo.hooks.create(repo_config[:user], repo_config[:repo], name: 'web', active: true, config: {:url => uri, :content_type => 'json'})
51
+ end
52
+ end
53
+
54
+ def self.overlay_repo repo_config
55
+ # Get our root entries
56
+ #
57
+ root_entries = github_repo.contents.get(repo_config[:user], repo_config[:repo], '/', ref: repo_config[:branch]).response.body
58
+
59
+ # We aren't pulling anything out of root. Cycle through directories and overlay
60
+ #
61
+ root_entries.each do |entry|
62
+ if entry.type == 'dir'
63
+ overlay_directory(entry.path, repo_config)
64
+ end
65
+ end
66
+ end
67
+
68
+ def self.overlay_directory path, repo_config
69
+ root_path = repo_config[:root_path].empty? ? "#{Rails.application.root}/#{repo_config[:root_path]}" : "#{Rails.application.root}"
70
+
71
+ FileUtils.mkdir_p "#{root_path}/#{path}"
72
+ directory_entries = github_repo.contents.get(repo_config[:user], repo_config[:repo], path, ref: repo_config[:branch]).response.body
73
+
74
+ directory_entries.each do |entry|
75
+ if entry.type == 'dir'
76
+ overlay_directory(entry.path, repo_config)
77
+ elsif entry.type == 'file'
78
+ clone_file(entry.path, repo_config)
79
+ end
80
+ end
81
+ end
82
+
83
+ def self.clone_file path, repo_config
84
+ root_path = repo_config[:root_path].empty? ? "#{Rails.application.root}/#{repo_config[:root_path]}" : "#{Rails.application.root}"
85
+
86
+ file = github_repo.contents.get(repo_config[:user], repo_config[:repo], path, ref: repo_config[:branch]).response.body.content
87
+ File.open("#{root_path}/#{path}", "wb") { |f| f.write(Base64.decode64(file)) }
88
+ end
89
+
90
+ private
91
+
92
+ def self.github_repo
93
+ @@github ||= ::Github::Repos.new
94
+ end
95
+
96
+ def self.config
97
+ @@overlay_config ||= Overlay.configuration
98
+ end
99
+
100
+ # Configure the github api
101
+ def self.configure
102
+ # Validate required config
103
+ raise 'Configuration github_overlays.basic_auth not set' if (!config.auth || config.auth.nil?)
104
+
105
+ ::Github.configure do |github_config|
106
+ github_config.endpoint = config.endpoint if config.endpoint
107
+ github_config.site = config.site if config.site
108
+ github_config.basic_auth = config.auth
109
+ github_config.adapter = :net_http
110
+ github_config.ssl = {:verify => false}
111
+ end
112
+ end
113
+ end
114
+ end
@@ -1,3 +1,3 @@
1
1
  module Overlay
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: overlay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Saarinen
@@ -67,7 +67,7 @@ files:
67
67
  - config/routes.rb
68
68
  - lib/overlay/configuration.rb
69
69
  - lib/overlay/engine.rb
70
- - lib/overlay/git.rb
70
+ - lib/overlay/github.rb
71
71
  - lib/overlay/version.rb
72
72
  - lib/overlay.rb
73
73
  - lib/tasks/overlay_tasks.rake
data/lib/overlay/git.rb DELETED
@@ -1,111 +0,0 @@
1
- require 'github_api'
2
- require 'fileutils'
3
- require 'socket'
4
-
5
- module Overlay
6
- class Github
7
- include Overlay::Engine.routes.url_helpers
8
- # Cycle through all configured repositories and overlay
9
- #
10
- def self.process_overlays
11
- # If we aren't running in Rails, bail out. This may be some
12
- # other request such as rake routes loading the environment
13
- #
14
- return unless defined?(Rails::Server)
15
-
16
- # Configure github api
17
- configure
18
-
19
- Overlay.configuration.repositories.each do |repo_config|
20
- break unless repo_config.class == GithubRepo
21
-
22
- # Validate repository config
23
- raise 'Respository config missing user' if (!repo_config[:user] || repo_config[:user].nil?)
24
- raise 'Respository config missing repo' if (!repo_config[:repo] || repo_config[:repo].nil?)
25
-
26
- branch = repo_config[:branch] || 'master'
27
-
28
- register_web_hook(repo_config[:user], repo_config[:repo])
29
-
30
- overlay_repo(repo_config[:user], repo_config[:repo], branch)
31
- end
32
- end
33
-
34
- # Register our listener on the repo
35
- #
36
- def self.register_web_hook user, repo
37
- # Make sure our routes are loaded
38
- Rails.application.reload_routes!
39
-
40
- # Build hook url
41
- host = Overlay.configuration.hostname || Socket.gethostname
42
- port = Overlay.configuration.host_port || Rails::Server.new.options[:Port]
43
- uri = Overlay::Engine.routes.url_for({:controller=>"github_overlays/webhooks", :action=>"update", :host => host, :port => port})
44
-
45
- # Retrieve current web hooks
46
- current_hooks = github_repo.hooks.list(user, repo).response.body
47
- if current_hooks.find {|hook| hook.config.url == uri}.nil?
48
- #register hook
49
- github_repo.hooks.create(user, repo, name: 'web', active: true, config: {:url => uri, :content_type => 'json'})
50
- end
51
- end
52
-
53
- def self.overlay_repo user, repo, branch
54
- # Get our root entries
55
- #
56
- root_entries = github_repo.contents.get(user, repo, '/', ref: branch).response.body
57
-
58
- # We aren't pulling anything out of root. Cycle through directories and overlay
59
- #
60
- root_entries.each do |entry|
61
- if entry.type == 'dir'
62
- overlay_directory(entry.path, user, repo, branch)
63
- end
64
- end
65
- end
66
-
67
- def self.overlay_directory path, user, repo, branch
68
- FileUtils.mkdir_p "#{Rails.application.root}/#{path}"
69
- directory_entries = github_repo.contents.get(user, repo, path, ref: branch).response.body
70
-
71
- directory_entries.each do |entry|
72
- if entry.type == 'dir'
73
- overlay_directory(entry.path, user, repo, branch)
74
- elsif entry.type == 'file'
75
- clone_file(entry.path, user, repo, branch)
76
- end
77
- end
78
- end
79
-
80
- def self.clone_file path, user, repo, branch
81
- file = github_repo.contents.get(user, repo, path, ref: branch).response.body.content
82
- File.open("#{Rails.application.root}/#{path}", "wb") { |f| f.write(Base64.decode64(file)) }
83
- end
84
-
85
- private
86
-
87
- def self.github_repo
88
- @@github ||= Github::Repos.new
89
- end
90
-
91
- def self.config
92
- @@overlay_config ||= Rails.application.config.github_overlays
93
- end
94
-
95
- # Configure the github api
96
- def self.configure
97
- overlay_config = Overlay.configuration
98
-
99
- # Validate required config
100
- raise 'Configuration github_overlays.basic_auth not set' if (!overlay_config.auth || overlay_config.auth.nil?)
101
-
102
- Github.configure do |github_config|
103
- github_config.endpoint = overlay_config.endpoint if overlay_config.endpoint
104
- github_config.site = overlay_config.site if overlay_config.site
105
- github_config.basic_auth = overlay_config.auth
106
- github_config.adapter = :net_http
107
- github_config.ssl = {:verify => false}
108
- end
109
- end
110
- end
111
- end