ra10ke 2.0.0 → 3.0.0
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/.github/dependabot.yml +14 -8
- data/.github/workflows/release.yml +1 -1
- data/.github/workflows/test.yml +30 -5
- data/.rubocop.yml +5 -0
- data/.rubocop_todo.yml +262 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +4 -4
- data/Rakefile +12 -6
- data/lib/ra10ke/dependencies.rb +54 -49
- data/lib/ra10ke/duplicates.rb +1 -1
- data/lib/ra10ke/git_repo.rb +15 -16
- data/lib/ra10ke/install.rb +10 -10
- data/lib/ra10ke/monkey_patches.rb +1 -1
- data/lib/ra10ke/puppetfile_parser.rb +74 -74
- data/lib/ra10ke/solve.rb +24 -27
- data/lib/ra10ke/syntax.rb +6 -8
- data/lib/ra10ke/validate.rb +1 -2
- data/lib/ra10ke/version.rb +1 -1
- data/lib/ra10ke.rb +2 -1
- data/ra10ke.gemspec +19 -19
- data/spec/fixtures/Puppetfile_deprecation_issue +5 -5
- data/spec/ra10ke/dependencies_spec.rb +14 -15
- data/spec/ra10ke/deprecation_spec.rb +7 -4
- data/spec/ra10ke/git_repo_spec.rb +8 -8
- data/spec/ra10ke/puppetfile_parser_spec.rb +89 -100
- data/spec/ra10ke/validate_spec.rb +8 -6
- data/spec/ra10ke_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -1
- metadata +75 -30
- data/.ruby-version +0 -1
data/lib/ra10ke/git_repo.rb
CHANGED
@@ -82,20 +82,19 @@ module Ra10ke
|
|
82
82
|
# :sha=>"fcc0532bbc5a5b65f3941738339e9cc7e3d767ce", :ref=>"refs/pull/249/head", :type=>:pull, :subtype=>:head, :name=>"249"},
|
83
83
|
# :sha=>"8d54891fa5df75890ee15d53080c2a81b4960f92", :ref=>"refs/pull/267/head", :type=>:pull, :subtype=>:head, :name=>"267"}]
|
84
84
|
def all_refs
|
85
|
-
@all_refs ||=
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
end
|
85
|
+
@all_refs ||= remote_refs.each_with_object([]) do |line, refs|
|
86
|
+
sha, ref = line.split("\t")
|
87
|
+
next refs if line.include?('redirecting')
|
88
|
+
next refs if sha.eql?('ref: refs/heads/master')
|
89
|
+
|
90
|
+
_, type, name, subtype = ref.chomp.split('/')
|
91
|
+
next refs unless name
|
92
|
+
|
93
|
+
type = :tag if type.eql?('tags')
|
94
|
+
type = type.to_sym
|
95
|
+
subtype = subtype.to_sym if subtype
|
96
|
+
type = :branch if type.eql?(:heads)
|
97
|
+
refs << { sha: sha, ref: ref.chomp, type: type, subtype: subtype, name: name }
|
99
98
|
end
|
100
99
|
end
|
101
100
|
|
@@ -105,10 +104,10 @@ module Ra10ke
|
|
105
104
|
# @return [String] the matching ref_name or nil
|
106
105
|
def get_ref_like(ref_name)
|
107
106
|
return nil unless valid_url?
|
108
|
-
|
107
|
+
|
108
|
+
all_refs.find do |ref|
|
109
109
|
ref[:name].include?(ref_name)
|
110
110
|
end
|
111
|
-
ref
|
112
111
|
end
|
113
112
|
|
114
113
|
# useful for mocking easily
|
data/lib/ra10ke/install.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
module Ra10ke::Install
|
2
2
|
def define_task_install(*_args)
|
3
|
-
desc
|
3
|
+
desc 'Install modules specified in Puppetfile'
|
4
4
|
task :install do
|
5
5
|
require 'r10k/puppetfile'
|
6
6
|
|
7
7
|
puppetfile = get_puppetfile
|
8
8
|
puppetfile.load!
|
9
9
|
|
10
|
-
puts
|
10
|
+
puts 'Processing Puppetfile for fixtures'
|
11
11
|
puppetfile.modules.each do |mod|
|
12
12
|
if mod.status == :insync
|
13
13
|
puts "Skipping #{mod.name} (#{mod.version}) already in sync"
|
14
14
|
else
|
15
|
-
if mod.status == :absent
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
msg = if mod.status == :absent
|
16
|
+
"installed #{mod.name}"
|
17
|
+
else
|
18
|
+
"updated #{mod.name} from #{mod.version} to"
|
19
|
+
end
|
20
20
|
mod.sync
|
21
|
-
if mod.status
|
22
|
-
puts "Failed to sync #{mod.name}".red
|
23
|
-
else
|
21
|
+
if mod.status == :insync
|
24
22
|
puts "Successfully #{msg} #{mod.version}".green
|
23
|
+
else
|
24
|
+
puts "Failed to sync #{mod.name}".red
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -1,90 +1,90 @@
|
|
1
|
-
# it might be desirable to parse the Puppetfile as a string instead of evaling it.
|
1
|
+
# it might be desirable to parse the Puppetfile as a string instead of evaling it.
|
2
2
|
# this module allows you to do just that.
|
3
3
|
require 'ra10ke/monkey_patches'
|
4
4
|
|
5
5
|
module Ra10ke
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
mod[:args].key?(:git)
|
12
|
-
end
|
6
|
+
module PuppetfileParser
|
7
|
+
# @return [Array] - returns a array of hashes that contain modules with a git source
|
8
|
+
def git_modules(file = puppetfile)
|
9
|
+
modules(file).find_all do |mod|
|
10
|
+
mod[:args].key?(:git)
|
13
11
|
end
|
12
|
+
end
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
14
|
+
# @return [Array] - returns a array of hashes that contain modules from the Forge
|
15
|
+
def forge_modules(file = puppetfile)
|
16
|
+
modules(file).reject do |mod|
|
17
|
+
mod[:args].key?(:git)
|
20
18
|
end
|
19
|
+
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
all_lines = File.read(puppetfile).lines.map(&:strip_comment)
|
31
|
-
# remove comments from all the lines
|
32
|
-
lines_without_comments = all_lines.reject { |line| line.match(/#.*\n/) || line.empty? }.join("\n")
|
33
|
-
lines_without_comments.split(/^mod/).map do |line|
|
34
|
-
|
35
|
-
next nil if line =~ /^forge/
|
36
|
-
next nil if line.empty?
|
21
|
+
# @param puppetfile [String] - the absolute path to the puppetfile
|
22
|
+
# @return [Array] - returns an array of module hashes that represent the puppetfile
|
23
|
+
# @example
|
24
|
+
# [{:namespace=>"puppetlabs", :name=>"stdlib", :args=>[]},
|
25
|
+
# {:namespace=>"petems", :name=>"swap_file", :args=>["'4.0.0'"]}]
|
26
|
+
def modules(puppetfile)
|
27
|
+
@modules ||= begin
|
28
|
+
return [] unless File.exist?(puppetfile)
|
37
29
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
30
|
+
all_lines = File.read(puppetfile).lines.map(&:strip_comment)
|
31
|
+
# remove comments from all the lines
|
32
|
+
lines_without_comments = all_lines.reject { |line| line.match(/#.*\n/) || line.empty? }.join("\n")
|
33
|
+
lines_without_comments.split(/^mod/).map do |line|
|
34
|
+
next nil if /^forge/.match?(line)
|
35
|
+
next nil if line.empty?
|
42
36
|
|
43
|
-
|
44
|
-
|
45
|
-
# @example
|
46
|
-
# {:namespace=>"puppetlabs", :name=>"stdlib", :args=>[]}
|
47
|
-
# {:namespace=>"petems", :name=>"swap_file", :args=>["'4.0.0'"]}
|
48
|
-
def parse_module_args(data)
|
49
|
-
return {} if data.empty?
|
50
|
-
args = data.split(',').map(&:strip)
|
51
|
-
# we can't guarantee that there will be a namespace when git is used
|
52
|
-
# remove quotes and dash and slash
|
53
|
-
namespace, name = args.shift.gsub(/'|"/, '').split(%r{-|/})
|
54
|
-
name ||= namespace
|
55
|
-
namespace = nil if namespace == name
|
56
|
-
{
|
57
|
-
namespace: namespace,
|
58
|
-
name: name,
|
59
|
-
args: process_args(args)
|
60
|
-
}
|
37
|
+
parse_module_args(line)
|
38
|
+
end.compact.uniq
|
61
39
|
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# @param data [String] - the string to parse the puppetfile args out of
|
43
|
+
# @return [Array] - an array of arguments in hash form
|
44
|
+
# @example
|
45
|
+
# {:namespace=>"puppetlabs", :name=>"stdlib", :args=>[]}
|
46
|
+
# {:namespace=>"petems", :name=>"swap_file", :args=>["'4.0.0'"]}
|
47
|
+
def parse_module_args(data)
|
48
|
+
return {} if data.empty?
|
49
|
+
|
50
|
+
args = data.split(',').map(&:strip)
|
51
|
+
# we can't guarantee that there will be a namespace when git is used
|
52
|
+
# remove quotes and dash and slash
|
53
|
+
namespace, name = args.shift.gsub(/'|"/, '').split(%r{-|/})
|
54
|
+
name ||= namespace
|
55
|
+
namespace = nil if namespace == name
|
56
|
+
{
|
57
|
+
namespace: namespace,
|
58
|
+
name: name,
|
59
|
+
args: process_args(args),
|
60
|
+
}
|
61
|
+
end
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
end
|
63
|
+
# @return [Array] - returns an array of hashes with the args in key value pairs
|
64
|
+
# @param [Array] - the arguments processed from each entry in the puppetfile
|
65
|
+
# @example
|
66
|
+
# [{:args=>[], :name=>"razor", :namespace=>"puppetlabs"},
|
67
|
+
# {:args=>[{:version=>"0.0.3"}], :name=>"ntp", :namespace=>"puppetlabs"},
|
68
|
+
# {:args=>[], :name=>"inifile", :namespace=>"puppetlabs"},
|
69
|
+
# {:args=>
|
70
|
+
# [{:git=>"https://github.com/nwops/reportslack.git"}, {:ref=>"1.0.20"}],
|
71
|
+
# :name=>"reportslack",
|
72
|
+
# :namespace=>"nwops"},
|
73
|
+
# {:args=>{:git=>"git://github.com/puppetlabs/puppetlabs-apt.git"},
|
74
|
+
# :name=>"apt",
|
75
|
+
# :namespace=>nil}
|
76
|
+
# ]
|
77
|
+
def process_args(args)
|
78
|
+
results = {}
|
79
|
+
args.each do |arg|
|
80
|
+
a = arg.gsub(/'|"/, '').split(/\A:|:\s|=>/).map(&:strip).reject(&:empty?)
|
81
|
+
if a.count < 2
|
82
|
+
results[:version] = a.first
|
83
|
+
else
|
84
|
+
results[a.first.to_sym] = a.last
|
86
85
|
end
|
87
|
-
results
|
88
86
|
end
|
87
|
+
results
|
89
88
|
end
|
89
|
+
end
|
90
90
|
end
|
data/lib/ra10ke/solve.rb
CHANGED
@@ -27,18 +27,16 @@ module Ra10ke::Solve
|
|
27
27
|
PuppetForge.user_agent = "ra10ke/#{Ra10ke::VERSION}"
|
28
28
|
puppetfile = get_puppetfile
|
29
29
|
puppetfile.load!
|
30
|
-
PuppetForge.host = puppetfile.forge if puppetfile.forge
|
30
|
+
PuppetForge.host = puppetfile.forge if /^http/.match?(puppetfile.forge)
|
31
31
|
|
32
32
|
# ignore file allows for "don't tell me about this"
|
33
33
|
ignore_modules = []
|
34
|
-
if File.exist?('.r10kignore')
|
35
|
-
ignore_modules = File.readlines('.r10kignore').each(&:chomp!)
|
36
|
-
end
|
34
|
+
ignore_modules = File.readlines('.r10kignore').each(&:chomp!) if File.exist?('.r10kignore')
|
37
35
|
# Actual new logic begins here:
|
38
36
|
cache = (ENV['XDG_CACHE_DIR'] || File.expand_path('~/.cache'))
|
39
37
|
|
40
38
|
FileUtils.mkdir_p(cache)
|
41
|
-
|
39
|
+
|
42
40
|
# Metadata cache, since the Forge is slow:
|
43
41
|
@metadata_cache = YAML::Store.new File.join(cache, 'ra10ke.metadata_cache')
|
44
42
|
# The graph of available module versions
|
@@ -54,7 +52,8 @@ module Ra10ke::Solve
|
|
54
52
|
|
55
53
|
puppetfile.modules.each do |puppet_module|
|
56
54
|
next if ignore_modules.include? puppet_module.title
|
57
|
-
|
55
|
+
|
56
|
+
if puppet_module.instance_of?(R10K::Module::Forge)
|
58
57
|
module_name = puppet_module.title.tr('/', '-')
|
59
58
|
installed_version = puppet_module.expected_version
|
60
59
|
puts "Processing Forge module #{module_name}-#{installed_version}"
|
@@ -81,7 +80,8 @@ module Ra10ke::Solve
|
|
81
80
|
add_reqs_to_graph(mod, meta)
|
82
81
|
end
|
83
82
|
|
84
|
-
next unless puppet_module.
|
83
|
+
next unless puppet_module.instance_of?(R10K::Module::Git)
|
84
|
+
|
85
85
|
# This downloads the git module to modules/modulename
|
86
86
|
meta = fetch_git_metadata(puppet_module)
|
87
87
|
version = get_key_or_sym(meta, :version)
|
@@ -97,9 +97,7 @@ module Ra10ke::Solve
|
|
97
97
|
end
|
98
98
|
puts
|
99
99
|
puts 'Resolving dependencies...'
|
100
|
-
if allow_major_bump
|
101
|
-
puts 'WARNING: Potentially breaking updates are allowed for this resolution'
|
102
|
-
end
|
100
|
+
puts 'WARNING: Potentially breaking updates are allowed for this resolution' if allow_major_bump
|
103
101
|
result = Solve.it!(@graph, @demands, sorted: true)
|
104
102
|
puts
|
105
103
|
print_module_diff(@current_modules, result)
|
@@ -130,7 +128,7 @@ module Ra10ke::Solve
|
|
130
128
|
return {
|
131
129
|
version: '0.0.0',
|
132
130
|
name: puppet_module.title,
|
133
|
-
dependencies: []
|
131
|
+
dependencies: [],
|
134
132
|
}
|
135
133
|
end
|
136
134
|
metadata = R10K::Module::MetadataFile.new(metadata_path)
|
@@ -138,7 +136,7 @@ module Ra10ke::Solve
|
|
138
136
|
{
|
139
137
|
version: metadata.version,
|
140
138
|
name: metadata.name,
|
141
|
-
dependencies: metadata.dependencies
|
139
|
+
dependencies: metadata.dependencies,
|
142
140
|
}
|
143
141
|
end
|
144
142
|
|
@@ -150,7 +148,7 @@ module Ra10ke::Solve
|
|
150
148
|
# At least puppet-extlib has malformed metadata
|
151
149
|
def get_version_req(dep)
|
152
150
|
req = get_key_or_sym(dep, :version_requirement)
|
153
|
-
req
|
151
|
+
req ||= get_key_or_sym(dep, :version_range)
|
154
152
|
req
|
155
153
|
end
|
156
154
|
|
@@ -186,17 +184,14 @@ module Ra10ke::Solve
|
|
186
184
|
# actually ask the solver for the versioned thing
|
187
185
|
@demands.add(name) unless no_demands
|
188
186
|
ver = get_version_req(dep)
|
189
|
-
|
190
|
-
|
191
|
-
ver = '>=0.0.0'
|
192
|
-
end
|
193
|
-
ver.split(/(?=[<])/).each do |bound|
|
187
|
+
ver ||= '>=0.0.0'
|
188
|
+
ver.split(/(?=<)/).each do |bound|
|
194
189
|
bound.strip!
|
195
190
|
v = begin
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
191
|
+
Semverse::Constraint.new(bound)
|
192
|
+
rescue StandardError
|
193
|
+
nil
|
194
|
+
end
|
200
195
|
if v
|
201
196
|
artifact.depends(name, v.to_s)
|
202
197
|
else
|
@@ -206,14 +201,16 @@ module Ra10ke::Solve
|
|
206
201
|
# Find the dependency in the forge, unless it's already been processed
|
207
202
|
# and add its releases to the global graph
|
208
203
|
next unless @processed_modules.add?(name)
|
204
|
+
|
209
205
|
puts "Fetching module info for #{name}"
|
210
206
|
mod = begin
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
207
|
+
PuppetForge::Module.find(name)
|
208
|
+
rescue StandardError
|
209
|
+
# It's probably a git module
|
210
|
+
nil
|
211
|
+
end
|
216
212
|
next unless mod # Git module, or non-forge dependency. Skip to next for now.
|
213
|
+
|
217
214
|
# Fetching metadata for all releases takes ages (which is weird, since it's mostly static info)
|
218
215
|
mod.releases.take(FETCH_LIMIT).each do |rel|
|
219
216
|
meta = get_release_metadata(name, rel)
|
data/lib/ra10ke/syntax.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
module Ra10ke::Syntax
|
2
2
|
def define_task_syntax(*_args)
|
3
|
-
desc
|
3
|
+
desc 'Syntax check Puppetfile'
|
4
4
|
task :syntax do
|
5
5
|
require 'r10k/action/puppetfile/check'
|
6
6
|
|
7
7
|
puppetfile = R10K::Action::Puppetfile::Check.new({
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
root: @basedir,
|
9
|
+
moduledir: @moduledir,
|
10
|
+
puppetfile: @puppetfile_path,
|
11
|
+
}, '')
|
12
12
|
|
13
|
-
unless puppetfile.call
|
14
|
-
abort("Puppetfile syntax check failed")
|
15
|
-
end
|
13
|
+
abort('Puppetfile syntax check failed') unless puppetfile.call
|
16
14
|
end
|
17
15
|
end
|
18
16
|
end
|
data/lib/ra10ke/validate.rb
CHANGED
@@ -8,7 +8,6 @@ require 'ra10ke/git_repo'
|
|
8
8
|
|
9
9
|
module Ra10ke
|
10
10
|
module Validate
|
11
|
-
|
12
11
|
GOOD_EMOJI = ENV['GOOD_EMOJI'] || '👍'
|
13
12
|
BAD_EMOJI = ENV['BAD_EMOJI'] || '😨'
|
14
13
|
|
@@ -64,7 +63,7 @@ module Ra10ke
|
|
64
63
|
ref: ref,
|
65
64
|
valid_url?: repo.valid_url?,
|
66
65
|
valid_ref?: valid_ref,
|
67
|
-
status: valid_ref ? Ra10ke::Validate::GOOD_EMOJI : Ra10ke::Validate::BAD_EMOJI
|
66
|
+
status: valid_ref ? Ra10ke::Validate::GOOD_EMOJI : Ra10ke::Validate::BAD_EMOJI,
|
68
67
|
}
|
69
68
|
end
|
70
69
|
end
|
data/lib/ra10ke/version.rb
CHANGED
data/lib/ra10ke.rb
CHANGED
@@ -48,7 +48,8 @@ module Ra10ke
|
|
48
48
|
def get_puppetfile
|
49
49
|
R10K::Puppetfile.new(@basedir, @moduledir, @puppetfile_path, @puppetfile_name, @force)
|
50
50
|
rescue ArgumentError # R10k < 2.6.0
|
51
|
-
R10K::Puppetfile.new(@basedir, @moduledir,
|
51
|
+
R10K::Puppetfile.new(@basedir, @moduledir,
|
52
|
+
@puppetfile_path || File.join(@basedir, @puppetfile_name || 'Puppetfile'))
|
52
53
|
end
|
53
54
|
end
|
54
55
|
end
|
data/ra10ke.gemspec
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'ra10ke/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name =
|
6
|
+
spec.name = 'ra10ke'
|
7
7
|
spec.version = Ra10ke::VERSION
|
8
|
-
spec.authors = [
|
9
|
-
spec.email = [
|
10
|
-
spec.description =
|
11
|
-
spec.summary =
|
12
|
-
spec.homepage =
|
13
|
-
spec.license =
|
8
|
+
spec.authors = ['Theo Chatzimichos', 'Vox Pupuli']
|
9
|
+
spec.email = ['voxpupuli@groups.io']
|
10
|
+
spec.description = 'R10K and Puppetfile rake tasks'
|
11
|
+
spec.summary = 'Syntax check for the Puppetfile, check for outdated installed puppet modules'
|
12
|
+
spec.homepage = 'https://github.com/voxpupuli/ra10ke'
|
13
|
+
spec.license = 'MIT'
|
14
14
|
|
15
15
|
spec.files = `git ls-files`.split($/)
|
16
|
-
spec.require_paths = [
|
17
|
-
spec.required_ruby_version = '>= 2.
|
16
|
+
spec.require_paths = ['lib']
|
17
|
+
spec.required_ruby_version = '>= 2.7.0'
|
18
18
|
|
19
|
-
spec.add_dependency
|
20
|
-
spec.add_dependency
|
21
|
-
spec.add_dependency
|
22
|
-
spec.add_dependency
|
23
|
-
spec.add_dependency
|
24
|
-
spec.add_dependency '
|
19
|
+
spec.add_dependency 'git', '~> 1.18'
|
20
|
+
spec.add_dependency 'puppet_forge', '~> 5.0', '>= 5.0.1'
|
21
|
+
spec.add_dependency 'r10k', '>= 2.6.5', '< 5'
|
22
|
+
spec.add_dependency 'rake', '~> 13.0', '>= 13.0.6'
|
23
|
+
spec.add_dependency 'semverse', '>= 2.0', '< 4'
|
24
|
+
spec.add_dependency 'solve', '~> 4.0', '>= 4.0.4'
|
25
25
|
spec.add_dependency 'table_print', '~> 1.5.6'
|
26
|
+
spec.add_development_dependency 'pry', '~> 0.14.2'
|
26
27
|
spec.add_development_dependency 'rspec', '~> 3.6'
|
27
|
-
spec.add_development_dependency '
|
28
|
-
spec.add_development_dependency '
|
28
|
+
spec.add_development_dependency 'simplecov', '~> 0.22.0'
|
29
|
+
spec.add_development_dependency 'voxpupuli-rubocop', '~> 2.0.0'
|
29
30
|
end
|
30
|
-
|
@@ -5,8 +5,8 @@ mod 'puppet/ferm', :latest
|
|
5
5
|
mod 'puppet/borg', :latest
|
6
6
|
mod 'puppet/wireguard', :latest
|
7
7
|
mod 'puppet/bird', :latest
|
8
|
-
mod '
|
9
|
-
mod '
|
8
|
+
mod 'puppet/augeasproviders_pam', :latest
|
9
|
+
mod 'puppet/augeasproviders_shellvar', :latest
|
10
10
|
mod 'puppetlabs/vcsrepo', :latest
|
11
11
|
mod 'saz/ssh', :latest
|
12
12
|
mod 'puppet/r10k', :latest
|
@@ -22,8 +22,8 @@ mod 'theforeman/foreman', :latest
|
|
22
22
|
mod 'theforeman/puppet', :latest
|
23
23
|
mod 'theforeman/foreman_proxy', :latest
|
24
24
|
mod 'puppet/nftables', :latest
|
25
|
-
mod '
|
26
|
-
mod '
|
25
|
+
mod 'puppet/augeasproviders_sysctl', :latest
|
26
|
+
mod 'puppet/catalog_diff', :latest
|
27
27
|
mod 'puppet/unattended_upgrades', :latest
|
28
28
|
mod 'puppet/selinux', :latest
|
29
29
|
mod 'choria/choria', :latest
|
@@ -34,7 +34,7 @@ mod 'jsok/vault',
|
|
34
34
|
ref: 'test'
|
35
35
|
|
36
36
|
# dependencies
|
37
|
-
mod '
|
37
|
+
mod 'puppet/augeasproviders_core', :latest
|
38
38
|
mod 'puppetlabs/stdlib', :latest
|
39
39
|
mod 'choria/mcollective', :latest
|
40
40
|
mod 'puppetlabs/concat', :latest
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'r10k/puppetfile'
|
3
4
|
require 'spec_helper'
|
4
5
|
require 'ra10ke/dependencies'
|
@@ -8,7 +9,7 @@ RSpec::Mocks.configuration.allow_message_expectations_on_nil = true
|
|
8
9
|
|
9
10
|
RSpec.describe 'Ra10ke::Dependencies::Verification' do
|
10
11
|
let(:instance) do
|
11
|
-
pfile = R10K::Puppetfile.new(File.basename(puppetfile), nil,puppetfile, nil, false)
|
12
|
+
pfile = R10K::Puppetfile.new(File.basename(puppetfile), nil, puppetfile, nil, false)
|
12
13
|
Ra10ke::Dependencies::Verification.new(pfile)
|
13
14
|
end
|
14
15
|
|
@@ -20,8 +21,9 @@ RSpec.describe 'Ra10ke::Dependencies::Verification' do
|
|
20
21
|
it 'default contains semver' do
|
21
22
|
expect(Ra10ke::Dependencies::Verification.version_formats).to have_key(:semver)
|
22
23
|
end
|
24
|
+
|
23
25
|
it 'add new version format' do
|
24
|
-
Ra10ke::Dependencies::Verification.register_version_format(:test) do |
|
26
|
+
Ra10ke::Dependencies::Verification.register_version_format(:test) do |_tags|
|
25
27
|
nil
|
26
28
|
end
|
27
29
|
expect(Ra10ke::Dependencies::Verification.version_formats).to have_key(:test)
|
@@ -30,10 +32,10 @@ RSpec.describe 'Ra10ke::Dependencies::Verification' do
|
|
30
32
|
|
31
33
|
context 'show output in table format' do
|
32
34
|
let(:instance) do
|
33
|
-
pfile = R10K::Puppetfile.new(File.basename(puppetfile), nil,puppetfile, nil, false)
|
35
|
+
pfile = R10K::Puppetfile.new(File.basename(puppetfile), nil, puppetfile, nil, false)
|
34
36
|
Ra10ke::Dependencies::Verification.new(pfile)
|
35
37
|
end
|
36
|
-
|
38
|
+
|
37
39
|
let(:puppetfile) do
|
38
40
|
File.join(fixtures_dir, 'Puppetfile')
|
39
41
|
end
|
@@ -49,26 +51,24 @@ RSpec.describe 'Ra10ke::Dependencies::Verification' do
|
|
49
51
|
it 'show dependencies as table' do
|
50
52
|
instance.print_table(processed_modules)
|
51
53
|
end
|
52
|
-
|
53
54
|
end
|
54
55
|
|
55
56
|
context 'get_latest_ref' do
|
56
|
-
|
57
57
|
context 'find latest semver tag' do
|
58
58
|
let(:latest_tag) do
|
59
|
-
|
59
|
+
'v1.1.0'
|
60
60
|
end
|
61
61
|
let(:test_tags) do
|
62
62
|
{
|
63
|
-
'v1.0.0'
|
63
|
+
'v1.0.0' => nil,
|
64
64
|
latest_tag => nil,
|
65
65
|
}
|
66
66
|
end
|
67
67
|
|
68
68
|
it do
|
69
69
|
expect(instance.get_latest_ref({
|
70
|
-
|
71
|
-
|
70
|
+
'tags' => test_tags,
|
71
|
+
})).to eq(latest_tag)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -78,7 +78,7 @@ RSpec.describe 'Ra10ke::Dependencies::Verification' do
|
|
78
78
|
end
|
79
79
|
let(:test_tags) do
|
80
80
|
{
|
81
|
-
'dev'
|
81
|
+
'dev' => nil,
|
82
82
|
latest_tag => nil,
|
83
83
|
}
|
84
84
|
end
|
@@ -88,20 +88,19 @@ RSpec.describe 'Ra10ke::Dependencies::Verification' do
|
|
88
88
|
tags.detect { |tag| tag == latest_tag }
|
89
89
|
end
|
90
90
|
expect(instance.get_latest_ref({
|
91
|
-
|
92
|
-
|
91
|
+
'tags' => test_tags,
|
92
|
+
})).to eq(latest_tag)
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
96
|
context 'convert to ref' do
|
97
|
-
|
98
97
|
it 'run rake task' do
|
99
98
|
output_conversion = File.read(File.join(fixtures_dir, 'Puppetfile_git_conversion'))
|
100
99
|
require 'ra10ke'
|
101
100
|
Ra10ke::RakeTask.new do |t|
|
102
101
|
t.basedir = fixtures_dir
|
103
102
|
end
|
104
|
-
expect{Rake::Task['r10k:print_git_conversion'].invoke}.to output(output_conversion).to_stdout
|
103
|
+
expect { Rake::Task['r10k:print_git_conversion'].invoke }.to output(output_conversion).to_stdout
|
105
104
|
end
|
106
105
|
end
|
107
106
|
end
|
@@ -14,21 +14,24 @@ RSpec.describe 'Ra10ke::Deprecation::Validation' do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'only checks forge modules' do
|
17
|
-
expect(PuppetForge::Module).
|
17
|
+
expect(PuppetForge::Module).not_to receive(:find).with('puppet')
|
18
18
|
allow(PuppetForge::Module).to receive(:find).and_raise(Faraday::ResourceNotFound.new(nil))
|
19
19
|
expect(instance.deprecated_modules.count).to eq(0)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'handles deprecated modules' do
|
23
|
-
expect(PuppetForge::Module).to receive(:find).with('puppetlabs-ruby').and_return(double(slug: 'puppetlabs-ruby',
|
23
|
+
expect(PuppetForge::Module).to receive(:find).with('puppetlabs-ruby').and_return(double(slug: 'puppetlabs-ruby',
|
24
|
+
deprecated_at: '2021-04-22 10:29:42 -0700'))
|
24
25
|
allow(PuppetForge::Module).to receive(:find).and_return(double(slug: 'module-module', deprecated_at: nil))
|
25
26
|
|
26
27
|
expect(instance.bad_mods?).to eq(true)
|
27
|
-
expect(instance.deprecated_modules.first).to eq(name: 'puppetlabs-ruby',
|
28
|
+
expect(instance.deprecated_modules.first).to eq(name: 'puppetlabs-ruby',
|
29
|
+
deprecated_at: Time.parse('2021-04-22 10:29:42 -0700'))
|
28
30
|
end
|
29
31
|
|
30
32
|
it 'handles missing modules' do
|
31
|
-
expect(PuppetForge::Module).to receive(:find).with('choria-choria').and_return(double(slug: 'choria-choria',
|
33
|
+
expect(PuppetForge::Module).to receive(:find).with('choria-choria').and_return(double(slug: 'choria-choria',
|
34
|
+
deprecated_at: nil))
|
32
35
|
expect(PuppetForge::Module).to receive(:find).with('puppetlabs-ruby').and_raise(Faraday::ResourceNotFound.new(nil))
|
33
36
|
allow(PuppetForge::Module).to receive(:find).and_return(double(slug: 'module-module', deprecated_at: nil))
|
34
37
|
|