github-rundeck 0.1.2 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47d1b7364c0c57961c587257fd0cd862652a2386
4
- data.tar.gz: 2c1627c159047cd8de857e371e1ac3ad1a98e2b7
3
+ metadata.gz: c22589f9897857c2ab82a2fa78a699e80f56f286
4
+ data.tar.gz: fd0d2db2e364a4bb4a4958e3bb92f6475b0faaf3
5
5
  SHA512:
6
- metadata.gz: 3732824f6d991df279724a9db58461198bf4f3e30eec8c6528cef34afdf08de0bba10b23996517eb5fa87d10c5aff7005a6f99c8e9d1bc8f683be1e5d874acaf
7
- data.tar.gz: 5db88ee35bf05004fc8c688dbfa13e52cc775dfeeaea761531df6ebd47f207111c5f7a8d3b8e051953f2fb34d879b429a9409711ab43830b060e995f0970b6bf
6
+ metadata.gz: 33e0165857fcc814954f92c71378afad328c245b933553951e6f91a554843cdf8e56164dbc0f8331e057e5be8aa64435c3dd433672708350521f233f9a0d81fd
7
+ data.tar.gz: d319b4720817de27b937ed2b035fe06b08790106ae96f1cbabb31dc3daa5c44ffb0a9b955592e8d8f648fecd1ec954384a4fe21c56321834110bba5a1aa5c855
data/Gemfile CHANGED
@@ -1,13 +1,2 @@
1
1
  source 'https://rubygems.org'
2
-
3
- gem 'github_api'
4
- gem 'mixlib-cli'
5
- gem 'rack-cache'
6
- gem 'sinatra'
7
- gem 'sinatra-contrib'
8
-
9
- group :development do
10
- gem 'rake'
11
- gem 'rspec'
12
- gem 'rubocop'
13
- end
2
+ gemspec
@@ -1,3 +1,13 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ github-rundeck (0.1.3)
5
+ github_api (~> 0.14)
6
+ mixlib-cli (~> 1.6)
7
+ rack-cache (~> 1.6)
8
+ sinatra (~> 1.4)
9
+ sinatra-contrib (~> 1.4)
10
+
1
11
  GEM
2
12
  remote: https://rubygems.org/
3
13
  specs:
@@ -9,51 +19,51 @@ GEM
9
19
  diff-lcs (1.2.5)
10
20
  faraday (0.9.2)
11
21
  multipart-post (>= 1.2, < 3)
12
- github_api (0.14.0)
22
+ github_api (0.14.5)
13
23
  addressable (~> 2.4.0)
14
24
  descendants_tracker (~> 0.0.4)
15
25
  faraday (~> 0.8, < 0.10)
16
26
  hashie (>= 3.4)
17
- oauth2
18
- hashie (3.4.4)
19
- jwt (1.5.1)
20
- mixlib-cli (1.6.0)
27
+ oauth2 (~> 1.0)
28
+ hashie (3.4.6)
29
+ jwt (1.5.6)
30
+ mixlib-cli (1.7.0)
21
31
  multi_json (1.12.1)
22
- multi_xml (0.5.5)
32
+ multi_xml (0.6.0)
23
33
  multipart-post (2.0.0)
24
- oauth2 (1.1.0)
25
- faraday (>= 0.8, < 0.10)
26
- jwt (~> 1.0, < 1.5.2)
34
+ oauth2 (1.3.0)
35
+ faraday (>= 0.8, < 0.11)
36
+ jwt (~> 1.0)
27
37
  multi_json (~> 1.3)
28
38
  multi_xml (~> 0.5)
29
39
  rack (>= 1.2, < 3)
30
- parser (2.3.1.2)
40
+ parser (2.3.3.1)
31
41
  ast (~> 2.2)
32
42
  powerpack (0.1.1)
33
- rack (1.6.4)
43
+ rack (1.6.5)
34
44
  rack-cache (1.6.1)
35
45
  rack (>= 0.4)
36
46
  rack-protection (1.5.3)
37
47
  rack
38
48
  rack-test (0.6.3)
39
49
  rack (>= 1.0)
40
- rainbow (2.1.0)
41
- rake (11.1.2)
42
- rspec (3.4.0)
43
- rspec-core (~> 3.4.0)
44
- rspec-expectations (~> 3.4.0)
45
- rspec-mocks (~> 3.4.0)
46
- rspec-core (3.4.4)
47
- rspec-support (~> 3.4.0)
48
- rspec-expectations (3.4.0)
50
+ rainbow (2.2.1)
51
+ rake (10.5.0)
52
+ rspec (3.5.0)
53
+ rspec-core (~> 3.5.0)
54
+ rspec-expectations (~> 3.5.0)
55
+ rspec-mocks (~> 3.5.0)
56
+ rspec-core (3.5.4)
57
+ rspec-support (~> 3.5.0)
58
+ rspec-expectations (3.5.0)
49
59
  diff-lcs (>= 1.2.0, < 2.0)
50
- rspec-support (~> 3.4.0)
51
- rspec-mocks (3.4.1)
60
+ rspec-support (~> 3.5.0)
61
+ rspec-mocks (3.5.0)
52
62
  diff-lcs (>= 1.2.0, < 2.0)
53
- rspec-support (~> 3.4.0)
54
- rspec-support (3.4.1)
55
- rubocop (0.40.0)
56
- parser (>= 2.3.1.0, < 3.0)
63
+ rspec-support (~> 3.5.0)
64
+ rspec-support (3.5.0)
65
+ rubocop (0.47.1)
66
+ parser (>= 2.3.3.1, < 3.0)
57
67
  powerpack (~> 0.1)
58
68
  rainbow (>= 1.99.1, < 3.0)
59
69
  ruby-progressbar (~> 1.7)
@@ -72,20 +82,17 @@ GEM
72
82
  tilt (>= 1.3, < 3)
73
83
  thread_safe (0.3.5)
74
84
  tilt (2.0.5)
75
- unicode-display_width (1.0.5)
85
+ unicode-display_width (1.1.3)
76
86
 
77
87
  PLATFORMS
78
88
  ruby
79
89
 
80
90
  DEPENDENCIES
81
- github_api
82
- mixlib-cli
83
- rack-cache
84
- rake
85
- rspec
91
+ bundler (~> 1.12)
92
+ github-rundeck!
93
+ rake (~> 10.0)
94
+ rspec (~> 3.0)
86
95
  rubocop
87
- sinatra
88
- sinatra-contrib
89
96
 
90
97
  BUNDLED WITH
91
- 1.12.3
98
+ 1.13.7
data/README.md CHANGED
@@ -8,7 +8,7 @@ This gem delivers RunDeck options in the supported JSON format
8
8
  * List of Branch/Tag Names for a Repo - `GET` - *http://localhost:9125/github/v1/revisions/${ORGNAME}/${REPONAME}*
9
9
 
10
10
  ### OAuth Key
11
- You can feed a GitHub OAuth key via local configuration, or as the Query Parameter `oauth_token`
11
+ You can feed a GitHub OAuth key via local configuration, or as the Query Parameter `gh_oauth_token`
12
12
 
13
13
 
14
14
  ## Installation
File without changes
@@ -1,82 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: UTF-8
3
- # rubocop: disable LineLength
4
3
  # RunDeck Options Provider - GitHub Repositories
5
4
  # Brian Dwyer - Intelligent Digital Services - 5/14/16
6
5
 
7
6
  lib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
8
7
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
9
8
 
10
- require 'rubygems'
11
- require 'github-rundeck'
12
- require 'mixlib/cli'
13
- require 'json'
14
-
15
- # => Github-RunDeck Launcher
16
- class GithubRunDeckCLI
17
- include Mixlib::CLI
18
-
19
- option :github_oauth_token,
20
- short: '-o TOKEN',
21
- long: '--github-oauth-token TOKEN',
22
- description: 'OAuth Token to use for querying GitHub',
23
- default: nil
24
-
25
- option :cache_timeout,
26
- short: '-t CACHE_TIMEOUT',
27
- long: '--timeout CACHE_TIMEOUT',
28
- description: 'Sets the response timeout in seconds for the query data.',
29
- default: 30
30
-
31
- option :config_file,
32
- short: '-c CONFIG',
33
- long: '--config CONFIG',
34
- description: 'The configuration file to use, as opposed to command-line parameters (optional)',
35
- default: nil
36
-
37
- option :host,
38
- short: '-h HOST',
39
- long: '--host HOST',
40
- description: 'Listen on HOST (default: localhost)',
41
- default: 'localhost'
42
-
43
- option :port,
44
- short: '-p PORT',
45
- long: '--port PORT',
46
- description: 'The port to run on, default 9123',
47
- default: 9123
9
+ # => Catch Ctrl+C's to avoid stack traces
10
+ Signal.trap('INT') { abort }
48
11
 
49
- option :env,
50
- short: '-e ENV',
51
- long: '--env ENV',
52
- description: 'Sets the environment for chef-rundeck to execute under. Use "development" for more logging.',
53
- default: 'production'
54
- end
55
-
56
- cli = GithubRunDeckCLI.new
57
- cli.parse_options
58
-
59
- # => Define JSON Parser
60
- def parse_json_config(file = nil)
61
- return unless file && ::File.exist?(file.to_s)
62
- begin
63
- ::JSON.parse(::File.read(file.to_s), symbolize_names: true)
64
- rescue JSON::ParserError
65
- return
66
- end
67
- end
68
-
69
- # => Parse JSON Config File
70
- json_config = parse_json_config(cli.config[:config_file])
71
-
72
- # => Merge Configuration (JSON File Wins)
73
- config = [cli.config, json_config].compact.reduce(:merge)
74
-
75
- # => Apply Configuration
76
- GithubRunDeck.github_oauth_token = config[:github_oauth_token]
77
- GithubRunDeck.cache_timeout = config[:cache_timeout].to_i
78
- GithubRunDeck.config_file = config[:config_file] if json_config
79
- GithubRunDeck.environment = config[:env].to_sym
12
+ require 'github-rundeck'
80
13
 
81
- # => Launch the Application
82
- GithubRunDeck.run! bind: config[:host], port: config[:port]
14
+ # => Launch the Plugin
15
+ GithubRunDeck::CLI.run(ARGV)
@@ -3,7 +3,7 @@
3
3
 
4
4
  lib = File.expand_path('../lib', __FILE__)
5
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
- require 'github-rundeck'
6
+ require 'github-rundeck/version'
7
7
 
8
8
  Gem::Specification.new do |spec|
9
9
  spec.name = 'github-rundeck'
@@ -3,139 +3,10 @@
3
3
  # GitHub Repo Poller for RunDeck
4
4
  # Brian Dwyer - Intelligent Digital Services - 5/14/16
5
5
 
6
- require 'sinatra/base'
7
- require 'sinatra/namespace'
8
- require 'github_api'
9
- require 'json'
10
- require 'rack/cache'
6
+ require 'github-rundeck/cli'
11
7
 
12
- # => GitHub RunDeck
13
- class GithubRunDeck < Sinatra::Base
14
- register Sinatra::Namespace
15
-
16
- class << self
17
- attr_accessor :config_file
18
- attr_accessor :cache_timeout
19
- attr_accessor :github_oauth_token
20
- end
21
-
22
- if development?
23
- require 'sinatra/reloader'
24
- register Sinatra::Reloader
25
- end
26
-
27
- VERSION = '0.1.2'.freeze
28
-
29
- ######################
30
- # => Definitions <=#
31
- ######################
32
-
33
- def ghclient
34
- # => Instantiate a new GitHub Client
35
- Github::Client.new
36
- end
37
-
38
- def serialize(response)
39
- # => Serialize Object into JSON Array
40
- JSON.pretty_generate(response.map(&:name).sort_by(&:downcase))
41
- end
42
-
43
- def serialize_revisions(branches, tags)
44
- # => Serialize Branches/Tags into JSON Array
45
- # => Branches = String, Tags = Key/Value
46
- branches = branches.map(&:name).sort_by(&:downcase)
47
- tags = tags.map(&:name).sort_by(&:downcase).reverse.map { |tag| { name: "Tag: #{tag}", value: tag } }
48
- JSON.pretty_generate(branches + tags)
49
- end
50
-
51
- ######################
52
- # => Sinatra <=#
53
- ######################
54
-
55
- use Rack::Cache do
56
- set :verbose, true
57
- set :metastore, 'file:' + File.join(Dir.tmpdir, 'rack', 'meta')
58
- set :entitystore, 'file:' + File.join(Dir.tmpdir, 'rack', 'body')
59
- end
60
-
61
- # => Current Configuration & Healthcheck Endpoint
62
- get '/' do
63
- content_type 'application/json'
64
- JSON.pretty_generate(
65
- Status: "#{self.class} is up and running!",
66
- ConfigFile: GithubRunDeck.config_file,
67
- CacheTimeout: GithubRunDeck.cache_timeout,
68
- GithubOAuthToken: GithubRunDeck.github_oauth_token,
69
- Params: params.inspect
70
- )
71
- end
72
-
73
- #######################
74
- # => JSON API <=#
75
- #######################
76
-
77
- namespace '/github/v1' do
78
- # => Define our common namespace parameters
79
- before do
80
- # => This is a JSON API
81
- content_type 'application/json'
82
-
83
- # => Cache GitHub Responses
84
- cache_control :public, max_age: GithubRunDeck.cache_timeout || 30
85
-
86
- # => Parameter Overrides
87
- Github.configure do |cfg|
88
- cfg.oauth_token = params['oauth_token'] || GithubRunDeck.github_oauth_token
89
- end
90
- end
91
-
92
- # => Get Organization Repo List
93
- get '/repos/org/:org' do |org|
94
- ghresponse = ghclient.repos.list(org: org, per_page: 100)
95
- etag ghresponse.headers.etag
96
- body serialize(ghresponse)
97
- end
98
-
99
- # => Get User Repo List
100
- get '/repos/user/:user' do |user|
101
- ghresponse = ghclient.repos.list(user: user, per_page: 100)
102
- etag ghresponse.headers.etag
103
- body serialize(ghresponse)
104
- end
105
-
106
- # => Get Branch/Tag Names
107
- get '/revisions/:user/:repo' do |user, repo|
108
- branches = ghclient.repos.branches(user: user, repo: repo)
109
- tags = ghclient.repos.tags(user: user, repo: repo)
110
- body serialize_revisions(branches, tags)
111
- end
112
-
113
- # => Compare Branch/Tags
114
- get '/compare/:user/:repo' do |user, repo|
115
- # => Check Parameters - Default to Master
116
- refs = [
117
- { 'target' => params['ref1'] || 'master' },
118
- { 'target' => params['ref2'] || 'master' }
119
- ]
120
-
121
- begin
122
- refs.each do |ref|
123
- # => Pull the SHA
124
- ref['sha'] = ghclient.git_data.trees.get(user, repo, ref['target']).first[1]
125
- end
126
-
127
- if refs[0]['sha'] == refs[1]['sha']
128
- return "ref1(#{user}/#{repo}/#{refs[0]['target']}) is the same as ref2(#{user}/#{repo}/#{refs[1]['target']})".to_json
129
- else
130
- status 500 unless params['errorok'] == '1'
131
- return "ALERT!!! - ref1(#{user}/#{repo}/#{refs[0]['target']}) is different than ref2(#{user}/#{repo}/#{refs[1]['target']})".to_json
132
- end
133
-
134
- # => Catch any GitHub Errors
135
- rescue Github::Error::GithubError => e
136
- status 500 unless params['errorok'] == '1'
137
- e.message.to_json
138
- end
139
- end
140
- end
8
+ # => GitHub RunDeck Options Provider API
9
+ module GithubRunDeck
10
+ # => The Sinatra API should be Lazily-Loaded, such that the CLI arguments and/or configuration files are respected
11
+ autoload :API, 'github-rundeck/api'
141
12
  end
@@ -0,0 +1,154 @@
1
+ # Encoding: UTF-8
2
+ # rubocop: disable LineLength
3
+ #
4
+ # Gem Name:: github-rundeck
5
+ # GithubRunDeck:: API
6
+ #
7
+ # Copyright (C) 2017 Brian Dwyer - Intelligent Digital Services
8
+ #
9
+ # All rights reserved - Do Not Redistribute
10
+ #
11
+
12
+ # => NOTE: Anything other than a STATUS 200 will trigger an error in the RunDeck plugin due to a hardcode in org.boon.HTTP
13
+
14
+ require 'sinatra/base'
15
+ require 'sinatra/namespace'
16
+ require 'json'
17
+ require 'rack/cache'
18
+ require 'github-rundeck/config'
19
+ require 'github-rundeck/git'
20
+ require 'github-rundeck/util'
21
+
22
+ # => Deployment Information Provider for RunDeck
23
+ module GithubRunDeck
24
+ # => HTTP API
25
+ class API < Sinatra::Base
26
+ #######################
27
+ # => Sinatra <= #
28
+ #######################
29
+
30
+ # => Configure Sinatra
31
+ enable :logging, :static, :raise_errors # => disable :dump_errors, :show_exceptions
32
+ set :port, Config.port || 8080
33
+ set :bind, Config.bind || 'localhost'
34
+ set :environment, Config.environment.to_sym.downcase || :production
35
+
36
+ # => Enable NameSpace Support
37
+ register Sinatra::Namespace
38
+
39
+ if development?
40
+ require 'sinatra/reloader'
41
+ register Sinatra::Reloader
42
+ end
43
+
44
+ use Rack::Cache do
45
+ set :verbose, true
46
+ set :metastore, 'file:' + File.join(Dir.tmpdir, 'rack', 'meta')
47
+ set :entitystore, 'file:' + File.join(Dir.tmpdir, 'rack', 'body')
48
+ end
49
+
50
+ ########################
51
+ # => JSON API <= #
52
+ ########################
53
+
54
+ # => Current Configuration & Healthcheck Endpoint
55
+ if development?
56
+ get '/config' do
57
+ content_type 'application/json'
58
+ JSON.pretty_generate(
59
+ [
60
+ DeployInfo.inspect + ' is up and running!',
61
+ 'Author: ' + Config.author,
62
+ 'Environment: ' + Config.environment.to_s,
63
+ 'Root: ' + Config.root.to_s,
64
+ 'Config File: ' + (Config.config_file if File.exist?(Config.config_file)).to_s,
65
+ 'Params: ' + params.inspect,
66
+ 'Cache Timeout: ' + Config.cache_timeout.to_s,
67
+ { AppConfig: Config.options },
68
+ { 'Sinatra Info' => env }
69
+ ].compact
70
+ )
71
+ end
72
+ end
73
+
74
+ get '/state' do
75
+ content_type 'application/json'
76
+ State.state.to_json
77
+ end
78
+
79
+ ########################
80
+ # => JSON API <= #
81
+ ########################
82
+
83
+ namespace '/github/v1' do # rubocop: disable BlockLength
84
+ # => Define our common namespace parameters
85
+ before do
86
+ # => This is a JSON API
87
+ content_type 'application/json'
88
+
89
+ # => Make the Params Globally Accessible
90
+ Config.define_setting :query_params, params
91
+
92
+ # => Parameter Overrides
93
+ Github.configure do |cfg|
94
+ cfg.oauth_token = params['gh_oauth_token'] || Config.github_oauth_token
95
+ end
96
+ end
97
+
98
+ # => Clean Up
99
+ after do
100
+ # => Reset the API Client to Default Values
101
+ # => Notifier.reset!
102
+ end
103
+
104
+ # => Get Organization Repo List
105
+ get '/repos/org/:org' do |org|
106
+ ghresponse = Git.repos.list(org: org, per_page: 100)
107
+ etag ghresponse.headers.etag
108
+ body Util.serialize(ghresponse)
109
+ end
110
+
111
+ # => Get User Repo List
112
+ get '/repos/user/:user' do |user|
113
+ ghresponse = Git.repos.list(user: user, per_page: 100)
114
+ etag ghresponse.headers.etag
115
+ body Util.serialize(ghresponse)
116
+ end
117
+
118
+ # => Get Branch/Tag Names
119
+ get '/revisions/:user/:repo' do |user, repo|
120
+ branches = Git.repos.branches(user: user, repo: repo, per_page: 100)
121
+ tags = Git.repos.tags(user: user, repo: repo, per_page: 100)
122
+ body Util.serialize_revisions(branches, tags)
123
+ end
124
+
125
+ # => Compare Branch/Tags
126
+ get '/compare/:user/:repo' do |user, repo|
127
+ # => Check Parameters - Default to Master
128
+ refs = [
129
+ { 'target' => params['ref1'] || 'master' },
130
+ { 'target' => params['ref2'] || 'master' }
131
+ ]
132
+
133
+ begin
134
+ refs.each do |ref|
135
+ # => Pull the SHA
136
+ ref['sha'] = ghclient.git_data.trees.get(user, repo, ref['target']).first[1]
137
+ end
138
+
139
+ if refs[0]['sha'] == refs[1]['sha']
140
+ return "ref1(#{user}/#{repo}/#{refs[0]['target']}) is the same as ref2(#{user}/#{repo}/#{refs[1]['target']})".to_json
141
+ else
142
+ status 500 unless params['errorok'] == '1'
143
+ return "ALERT!!! - ref1(#{user}/#{repo}/#{refs[0]['target']}) is different than ref2(#{user}/#{repo}/#{refs[1]['target']})".to_json
144
+ end
145
+
146
+ # => Catch any GitHub Errors
147
+ rescue Github::Error::GithubError => e
148
+ status 500 unless params['errorok'] == '1'
149
+ e.message.to_json
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,85 @@
1
+ # Encoding: UTF-8
2
+ # rubocop: disable LineLength
3
+ #
4
+ # Gem Name:: github-rundeck
5
+ # GithubRunDeck:: CLI
6
+ #
7
+ # Copyright (C) 2017 Brian Dwyer - Intelligent Digital Services
8
+ #
9
+ # All rights reserved - Do Not Redistribute
10
+ #
11
+
12
+ require 'mixlib/cli'
13
+ require 'github-rundeck/config'
14
+ require 'github-rundeck/util'
15
+
16
+ module GithubRunDeck
17
+ #
18
+ # => GitHub-RunDeck Launcher
19
+ #
20
+ module CLI
21
+ module_function
22
+
23
+ #
24
+ # => Options Parser
25
+ #
26
+ class Options
27
+ # => Mix-In the CLI Option Parser
28
+ include Mixlib::CLI
29
+
30
+ option :github_oauth_token,
31
+ short: '-g TOKEN',
32
+ long: '--github-oauth-token TOKEN',
33
+ description: 'OAuth Token to use for querying GitHub'
34
+
35
+ option :cache_timeout,
36
+ short: '-t CACHE_TIMEOUT',
37
+ long: '--timeout CACHE_TIMEOUT',
38
+ description: 'Sets the cache timeout in seconds for API query response data.'
39
+
40
+ option :config_file,
41
+ short: '-c CONFIG',
42
+ long: '--config CONFIG',
43
+ description: 'The configuration file to use, as opposed to command-line parameters (optional)'
44
+
45
+ option :bind,
46
+ short: '-b HOST',
47
+ long: '--bind HOST',
48
+ description: "Listen on Interface or IP (Default: #{Config.bind})"
49
+
50
+ option :port,
51
+ short: '-p PORT',
52
+ long: '--port PORT',
53
+ description: "The port to run on. (Default: #{Config.port})"
54
+
55
+ option :environment,
56
+ short: '-e ENV',
57
+ long: '--env ENV',
58
+ description: "Sets the environment for deploy-info to execute under. Use 'development' for more logging. (Default: #{Config.environment})"
59
+ end
60
+
61
+ def configure(argv = ARGV)
62
+ # => Parse CLI Configuration
63
+ cli = Options.new
64
+ cli.parse_options(argv)
65
+
66
+ # => Parse JSON Config File (If Specified & Exists)
67
+ json_config = Util.parse_json(cli.config[:config_file] || Config.config_file)
68
+
69
+ # => Merge Configuration (CLI Wins)
70
+ config = [json_config, cli.config].compact.reduce(:merge)
71
+
72
+ # => Apply Configuration
73
+ config.each { |k, v| Config.send("#{k}=", v) }
74
+ end
75
+
76
+ # => Launch the Application
77
+ def run(argv = ARGV)
78
+ # => Parse the Params
79
+ configure(argv)
80
+
81
+ # => Launch the API
82
+ API.run!
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,78 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Gem Name:: github-rundeck
4
+ # GithubRunDeck:: Config
5
+ #
6
+ # Copyright (C) 2017 Brian Dwyer - Intelligent Digital Services
7
+ #
8
+ # All rights reserved - Do Not Redistribute
9
+ #
10
+
11
+ require 'github-rundeck/helpers/configuration'
12
+ require 'pathname'
13
+
14
+ module GithubRunDeck
15
+ # => This is the Configuration module.
16
+ module Config
17
+ module_function
18
+
19
+ extend Configuration
20
+
21
+ # => Gem Root Directory
22
+ define_setting :root, Pathname.new(File.expand_path('../../../', __FILE__))
23
+
24
+ # => My Name
25
+ define_setting :author, 'Brian Dwyer - Intelligent Digital Services'
26
+
27
+ # => Application Environment
28
+ define_setting :environment, :production
29
+
30
+ # => Sinatra Configuration
31
+ define_setting :port, '9123'
32
+ define_setting :bind, 'localhost'
33
+ define_setting :cache_timeout, 30
34
+
35
+ # => Config File
36
+ define_setting :config_file, File.join(root, 'config', 'config.json')
37
+
38
+ #
39
+ # => API Configuration
40
+ #
41
+ # => Github OAuth Token
42
+ define_setting :github_oauth_token
43
+
44
+ #
45
+ # => Facilitate Dynamic Addition of Configuration Values
46
+ #
47
+ # => @return [class_variable]
48
+ #
49
+ def add(config = {})
50
+ config.each do |key, value|
51
+ define_setting key.to_sym, value
52
+ end
53
+ end
54
+
55
+ #
56
+ # => Facilitate Dynamic Removal of Configuration Values
57
+ #
58
+ # => @return nil
59
+ #
60
+ def clear(config)
61
+ Array(config).each do |setting|
62
+ delete_setting setting
63
+ end
64
+ end
65
+
66
+ #
67
+ # => List the Configurable Keys as a Hash
68
+ #
69
+ # @return [Hash]
70
+ #
71
+ def options
72
+ map = Config.class_variables.map do |key|
73
+ [key.to_s.tr('@', '').to_sym, class_variable_get(:"#{key}")]
74
+ end
75
+ Hash[map]
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,51 @@
1
+ # Encoding: UTF-8
2
+ # rubocop: disable LineLength
3
+ #
4
+ # Gem Name:: github-rundeck
5
+ # GithubRunDeck:: Git
6
+ #
7
+ # Copyright (C) 2017 Brian Dwyer - Intelligent Digital Services
8
+ #
9
+ # All rights reserved - Do Not Redistribute
10
+ #
11
+
12
+ require 'github-rundeck/config'
13
+ require 'github_api'
14
+
15
+ module GithubRunDeck
16
+ # => This is the Git Module. It interacts with Git resources.
17
+ module Git
18
+ extend self
19
+
20
+ def ghclient
21
+ # => Instantiate a new GitHub Client
22
+ Github::Client.new
23
+ end
24
+
25
+ def repos
26
+ ghclient.repos
27
+ end
28
+
29
+ def tags
30
+ ghclient.tags
31
+ end
32
+
33
+ def revision # rubocop: disable AbcSize
34
+ # => Grab the Supplied Revision
35
+ rev = Config.query_params['revision'] || return
36
+ return rev unless Config.query_params['gh_repo']
37
+
38
+ # => Break down the Params
39
+ org, repo = Config.query_params['gh_repo'].split('/').map { |r| String(r) }
40
+ return rev unless org && repo
41
+
42
+ begin
43
+ # => Pull the Shorthand SHA
44
+ ghclient.git_data.trees.get(org, repo, rev).first[1][0, 7]
45
+ rescue Github::Error::NotFound
46
+ # => Return the Supplied Revision if Github Borks
47
+ rev
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,57 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Gem Name:: github-rundeck
4
+ # Helper:: Configuration
5
+ #
6
+ # Author: Eli Fatsi - https://www.viget.com/articles/easy-gem-configuration-variables-with-defaults
7
+ # Contributor: Brian Dwyer - Intelligent Digital Services
8
+ #
9
+
10
+ # => Configuration Helper Module
11
+ module Configuration
12
+ #
13
+ # => Provides a method to configure an Application
14
+ # => Example:
15
+ # DeployInfo::Config.setup do |cfg|
16
+ # cfg.config_file = 'abc.json'
17
+ # cfg.app_name = 'GemBase'
18
+ # end
19
+ #
20
+ def setup
21
+ yield self
22
+ end
23
+
24
+ def define_setting(name, default = nil)
25
+ class_variable_set("@@#{name}", default)
26
+
27
+ define_class_method "#{name}=" do |value|
28
+ class_variable_set("@@#{name}", value)
29
+ end
30
+
31
+ define_class_method name do
32
+ class_variable_get("@@#{name}")
33
+ end
34
+ end
35
+
36
+ def delete_setting(name)
37
+ remove_class_variable("@@#{name}")
38
+
39
+ delete_class_method(name)
40
+ rescue NameError # => Handle Non-Existent Settings
41
+ return
42
+ end
43
+
44
+ private
45
+
46
+ def define_class_method(name, &block)
47
+ (class << self; self; end).instance_eval do
48
+ define_method name, &block
49
+ end
50
+ end
51
+
52
+ def delete_class_method(name)
53
+ (class << self; self; end).instance_eval do
54
+ undef_method name
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,64 @@
1
+ # Encoding: UTF-8
2
+ # rubocop: disable LineLength
3
+ #
4
+ # Gem Name:: github-rundeck
5
+ # GithubRunDeck:: Util
6
+ #
7
+ # Copyright (C) 2017 Brian Dwyer - Intelligent Digital Services
8
+ #
9
+ # All rights reserved - Do Not Redistribute
10
+ #
11
+
12
+ require 'json'
13
+
14
+ module GithubRunDeck
15
+ # => Utility Methods
16
+ module Util
17
+ extend self
18
+
19
+ ########################
20
+ # => File I/O <= #
21
+ ########################
22
+
23
+ # => Define JSON Parser
24
+ def parse_json(file = nil, symbolize = true)
25
+ return unless file && ::File.exist?(file.to_s)
26
+ begin
27
+ ::JSON.parse(::File.read(file.to_s), symbolize_names: symbolize)
28
+ rescue JSON::ParserError
29
+ return
30
+ end
31
+ end
32
+
33
+ # => Define JSON Writer
34
+ def write_json(file, object)
35
+ return unless file && object
36
+ begin
37
+ File.open(file, 'w') { |f| f.write(JSON.pretty_generate(object)) }
38
+ end
39
+ end
40
+
41
+ #############################
42
+ # => Serialization <= #
43
+ #############################
44
+
45
+ def serialize(response)
46
+ # => Serialize Object into JSON Array
47
+ JSON.pretty_generate(response.map(&:name).sort_by(&:downcase))
48
+ end
49
+
50
+ def serialize_csv(csv)
51
+ # => Serialize a CSV String into an Array
52
+ return unless csv && csv.is_a?(String)
53
+ csv.split(',')
54
+ end
55
+
56
+ def serialize_revisions(branches, tags)
57
+ # => Serialize Branches/Tags into JSON Array
58
+ # => Branches = String, Tags = Key/Value
59
+ branches = branches.map(&:name).sort_by(&:downcase)
60
+ tags = tags.map(&:name).sort_by(&:downcase).reverse.map { |tag| { name: "Tag: #{tag}", value: tag } }
61
+ JSON.pretty_generate(branches + tags)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,3 @@
1
+ module GithubRunDeck
2
+ VERSION = '0.1.3'.freeze
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-rundeck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Dwyer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-08 00:00:00.000000000 Z
11
+ date: 2017-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github_api
@@ -154,10 +154,17 @@ files:
154
154
  - Rakefile
155
155
  - bin/console
156
156
  - bin/setup
157
- - config.json
157
+ - config/config.json
158
158
  - exe/github-rundeck
159
159
  - github-rundeck.gemspec
160
160
  - lib/github-rundeck.rb
161
+ - lib/github-rundeck/api.rb
162
+ - lib/github-rundeck/cli.rb
163
+ - lib/github-rundeck/config.rb
164
+ - lib/github-rundeck/git.rb
165
+ - lib/github-rundeck/helpers/configuration.rb
166
+ - lib/github-rundeck/util.rb
167
+ - lib/github-rundeck/version.rb
161
168
  homepage: https://github.com/bdwyertech/github-rundeck
162
169
  licenses:
163
170
  - MIT
@@ -179,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
186
  version: '0'
180
187
  requirements: []
181
188
  rubyforge_project:
182
- rubygems_version: 2.6.6
189
+ rubygems_version: 2.6.12
183
190
  signing_key:
184
191
  specification_version: 4
185
192
  summary: Github Options Provider for RunDeck