reagan 0.5.1 → 0.5.2
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 +4 -4
- data/bin/reagan +5 -5
- data/lib/change.rb +13 -9
- data/lib/config.rb +60 -0
- data/lib/reagan.rb +18 -14
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcd3469e7bc317073069aca8545749fc91e2deeb
|
4
|
+
data.tar.gz: 839ce97f7831bb90a2dfe4471e2378bac9abd954
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8b5229fabf0a74cb6ecdb940eab38cabc80bdb05a84c902a2d6a24b4e2df8eb8d9aa0768b9150aee6364e2dd0b338d75fdaab11389c316458fac7ed24536b48
|
7
|
+
data.tar.gz: 3f9918f84823b43ca7219d4defab2ef6a910adea416bc02e7e8919cfc0eab51437e6e2ac1817a0f7c4c938d98474001dc4db592c2edccdba8e84977ca96d8eb9
|
data/bin/reagan
CHANGED
@@ -22,20 +22,20 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
22
22
|
require 'reagan'
|
23
23
|
require 'optparse'
|
24
24
|
|
25
|
-
|
25
|
+
flags = { :pull => nil, :cookbooks => nil, :config => '/etc/reagan.yml' }
|
26
26
|
|
27
27
|
parser = OptionParser.new do |opts|
|
28
28
|
opts.banner = 'Usage: reagan [options]'
|
29
29
|
opts.on('-o', '--override cb1,cb2', 'Comma separated list of cookbooks to test') do |cookbooks|
|
30
|
-
|
30
|
+
flags[:cookbooks] = cookbooks
|
31
31
|
end
|
32
32
|
|
33
33
|
opts.on('-p', '--pull_num 123', 'Github pull number to test') do |pull|
|
34
|
-
|
34
|
+
flags[:pull] = pull
|
35
35
|
end
|
36
36
|
|
37
37
|
opts.on('-c', '--config reagan.yml', 'Path to config file (defaults to /etc/reagan.yml)') do |config|
|
38
|
-
|
38
|
+
flags[:config] = config
|
39
39
|
end
|
40
40
|
|
41
41
|
opts.on('-h', '--help', 'Displays Help') do
|
@@ -46,4 +46,4 @@ end
|
|
46
46
|
|
47
47
|
parser.parse!
|
48
48
|
|
49
|
-
Reagan.new(
|
49
|
+
Reagan.new(flags).run
|
data/lib/change.rb
CHANGED
@@ -27,8 +27,7 @@ end
|
|
27
27
|
# determines changed files in the commit
|
28
28
|
class Change < Reagan
|
29
29
|
attr_accessor :files
|
30
|
-
def initialize
|
31
|
-
@options = options
|
30
|
+
def initialize
|
32
31
|
@files = list_files_changed
|
33
32
|
end
|
34
33
|
|
@@ -50,8 +49,8 @@ class Change < Reagan
|
|
50
49
|
end
|
51
50
|
|
52
51
|
def pull_num
|
53
|
-
if
|
54
|
-
pull =
|
52
|
+
if @@config['flags']['pull']
|
53
|
+
pull = @@config['flags']['pull']
|
55
54
|
elsif ENV['ghprbPullId']
|
56
55
|
pull = ENV['ghprbPullId']
|
57
56
|
else
|
@@ -60,13 +59,18 @@ class Change < Reagan
|
|
60
59
|
pull
|
61
60
|
end
|
62
61
|
|
62
|
+
# return list of cookbooks changed either from override value or from polling github pull request
|
63
63
|
def list_files_changed
|
64
|
-
|
65
|
-
|
64
|
+
if @@config['flags']['cookbooks']
|
65
|
+
@@config['flags']['cookbooks'].split(',')
|
66
|
+
else
|
67
|
+
pull = pull_num
|
68
|
+
puts "Grabbing contents of pull request #{pull}\n"
|
66
69
|
|
67
|
-
|
70
|
+
gh = Octokit::Client.new(:access_token => @@config['github']['auth_token'])
|
68
71
|
|
69
|
-
|
70
|
-
|
72
|
+
pull_files = files_from_pull(gh.pull_request_files(@@config ['github']['repo'], pull))
|
73
|
+
unique_cookbooks(pull_files)
|
74
|
+
end
|
71
75
|
end
|
72
76
|
end
|
data/lib/config.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Author:: Tim Smith (<tim@cozy.co>)
|
4
|
+
# Copyright:: Copyright (c) 2014 Tim Smith
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
|
19
|
+
begin
|
20
|
+
require 'yaml'
|
21
|
+
rescue LoadError => e
|
22
|
+
raise "Missing gem or lib #{e}"
|
23
|
+
end
|
24
|
+
|
25
|
+
# builds a single config from passed flags, yaml config, and knife.rb
|
26
|
+
class ReaganConfig
|
27
|
+
attr_accessor :settings
|
28
|
+
def initialize(flags)
|
29
|
+
@flags = flags
|
30
|
+
@config_file = load_config_file
|
31
|
+
@settings = build_config
|
32
|
+
end
|
33
|
+
|
34
|
+
# loads the reagan.yml config file from /etc/reagan.yml or the passed location
|
35
|
+
def load_config_file
|
36
|
+
begin
|
37
|
+
config = YAML.load_file(@flags[:config])
|
38
|
+
if config == false
|
39
|
+
puts "ERROR: Reagan config at #{@flags[:config]} does not contain any configuration data"
|
40
|
+
exit 1
|
41
|
+
end
|
42
|
+
config
|
43
|
+
rescue Errno::ENOENT
|
44
|
+
puts "ERROR: Cannot load Reagan config file at #{@flags[:config]}"
|
45
|
+
exit 1
|
46
|
+
rescue Psych::SyntaxError
|
47
|
+
puts "ERROR: Syntax error in Reagan config file at #{@flags[:config]}"
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# join the config file with the passed flags into a single object
|
53
|
+
def build_config
|
54
|
+
config = @config_file
|
55
|
+
config['flags'] = {}
|
56
|
+
@flags.each{|k,v| config['flags'][k.to_s]=v}
|
57
|
+
config
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/lib/reagan.rb
CHANGED
@@ -18,16 +18,16 @@
|
|
18
18
|
|
19
19
|
# the main class for the reagan app. gets called by the reagan bin
|
20
20
|
class Reagan
|
21
|
-
require '
|
21
|
+
require 'config'
|
22
22
|
require 'change'
|
23
23
|
require 'test_knife'
|
24
24
|
require 'test_version'
|
25
25
|
require 'test_reagan'
|
26
26
|
|
27
27
|
attr_accessor :config
|
28
|
-
def initialize(
|
29
|
-
@@config =
|
30
|
-
@
|
28
|
+
def initialize(flags)
|
29
|
+
@@config = ReaganConfig.new(flags).settings
|
30
|
+
@cookbooks = Change.new.files
|
31
31
|
end
|
32
32
|
|
33
33
|
# nicely prints marques
|
@@ -37,27 +37,31 @@ class Reagan
|
|
37
37
|
puts "\n"
|
38
38
|
end
|
39
39
|
|
40
|
-
#
|
40
|
+
# run tests on each changed cookbook
|
41
41
|
def run
|
42
|
-
#
|
43
|
-
if @
|
44
|
-
|
45
|
-
|
46
|
-
cookbooks = Change.new(@options).files
|
42
|
+
# exit with a friendly message if no cookbooks have been changed
|
43
|
+
if @cookbooks.empty?
|
44
|
+
pretty_print('Nothing to test in this change. Reagan approves')
|
45
|
+
exit 0
|
47
46
|
end
|
48
47
|
|
49
48
|
pretty_print('The following cookbooks will be tested')
|
50
|
-
cookbooks.each { |cb| puts cb }
|
49
|
+
@cookbooks.each { |cb| puts cb }
|
51
50
|
|
52
51
|
results = []
|
53
|
-
cookbooks.each do |cookbook|
|
52
|
+
@cookbooks.each do |cookbook|
|
54
53
|
pretty_print("Testing cookbook #{cookbook}")
|
55
|
-
results << TestVersion.new(cookbook).test
|
56
54
|
results << TestKnife.new(cookbook).test
|
55
|
+
results << TestVersion.new(cookbook).test
|
57
56
|
results << TestReagan.new(cookbook).test
|
58
57
|
end
|
59
58
|
|
59
|
+
# print success or failure
|
60
|
+
failure = results.include?(false)
|
61
|
+
text = failure ? "Reagan testing has failed" : "All Reagan tests have suceeded"
|
62
|
+
pretty_print(text)
|
63
|
+
|
60
64
|
# if any test failed then exit 1 so jenkins can pick up the failure
|
61
|
-
exit 1 if
|
65
|
+
exit 1 if failure
|
62
66
|
end
|
63
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reagan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- Rakefile
|
82
82
|
- bin/reagan
|
83
83
|
- lib/change.rb
|
84
|
+
- lib/config.rb
|
84
85
|
- lib/reagan.rb
|
85
86
|
- lib/test_knife.rb
|
86
87
|
- lib/test_reagan.rb
|