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