dependency_checker 0.3.0 → 1.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/bin/dependency-checker +3 -5
- data/lib/dependency_checker/forge_helper.rb +59 -59
- data/lib/dependency_checker/metadata_checker.rb +26 -24
- data/lib/dependency_checker/runner.rb +149 -147
- data/lib/dependency_checker/version.rb +5 -0
- metadata +5 -88
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac8695cea83068ecec8de3b97952c34c2ee44adbd1a93ccfaea2d7435162dca6
|
4
|
+
data.tar.gz: c55c5de0e6737e3a16d3d458887653b8a421fb55b17c41decce893868ebe3e71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11591af11e78c61a130e204a1f60267f62f115d14dbbf9c75a204cb4340fd149d97d87f54577e8805f7077c343b3fe8a62dab0f11cdbd3e471f73b8fab69ef93
|
7
|
+
data.tar.gz: 3cddb912ed15ade3b7a74befb00d444e95802d0048613c0ea9c6e1283ccf82a9844039634ddf7a035d06b5ea05b3f3abcc04ca78583b432ab5cb37aef72a4aa6
|
data/bin/dependency-checker
CHANGED
@@ -6,7 +6,7 @@ require 'dependency_checker'
|
|
6
6
|
require 'json'
|
7
7
|
|
8
8
|
options = {}
|
9
|
-
OptionParser.new
|
9
|
+
OptionParser.new do |opts|
|
10
10
|
opts.on('-o module,version', '--override module,version', Array, 'Forge name of module and semantic version to override') do |override|
|
11
11
|
options[:override] = override
|
12
12
|
end
|
@@ -61,12 +61,10 @@ OptionParser.new { |opts|
|
|
61
61
|
puts opts
|
62
62
|
exit
|
63
63
|
end
|
64
|
-
|
64
|
+
end.parse!
|
65
65
|
|
66
66
|
# Raise error if both :override and :current_override are specified
|
67
|
-
if options[:override] && options[:current_override]
|
68
|
-
raise OptionParser::InvalidOption, 'You can not select both override and current override options'
|
69
|
-
end
|
67
|
+
raise OptionParser::InvalidOption, 'You can not select both override and current override options' if options[:override] && options[:current_override]
|
70
68
|
|
71
69
|
# If :current_override is specified, retrieve name and version of module in current working directory
|
72
70
|
if options[:current_override]
|
@@ -4,78 +4,78 @@ require 'puppet_forge'
|
|
4
4
|
require 'semantic_puppet'
|
5
5
|
|
6
6
|
# Helper class for fetching data from the Forge and perform some basic operations
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
module DependencyChecker
|
8
|
+
class ForgeHelper
|
9
|
+
def initialize(cache = {}, forge_hostname = nil, forge_token = nil)
|
10
|
+
@cache = cache
|
11
|
+
PuppetForge.host = forge_hostname unless forge_hostname.nil?
|
12
|
+
PuppetForge::Connection.authorization = forge_token unless forge_token.nil?
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
# Retrieve current version of module
|
16
|
+
# @return [SemanticPuppet::Version]
|
17
|
+
def get_current_version(module_name)
|
18
|
+
module_name = module_name.sub('/', '-')
|
19
|
+
version = nil
|
20
|
+
version = get_version(@cache[module_name]) if @cache.key?(module_name)
|
20
21
|
|
21
|
-
|
22
|
-
|
22
|
+
version = get_version(get_module_data(module_name)) if !version && check_module_exists(module_name)
|
23
|
+
|
24
|
+
version
|
23
25
|
end
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
+
# Retrieve module data from Forge
|
28
|
+
# @return [Hash] Hash containing JSON response from Forge
|
29
|
+
def get_module_data(module_name)
|
30
|
+
module_name = module_name.sub('/', '-')
|
31
|
+
module_data = @cache[module_name]
|
32
|
+
begin
|
33
|
+
@cache[module_name] = module_data = PuppetForge::Module.find(module_name) unless module_data
|
34
|
+
rescue Faraday::ClientError
|
35
|
+
return nil
|
36
|
+
end
|
27
37
|
|
28
|
-
|
29
|
-
# @return [Hash] Hash containing JSON response from Forge
|
30
|
-
def get_module_data(module_name)
|
31
|
-
module_name = module_name.sub('/', '-')
|
32
|
-
module_data = @cache[module_name]
|
33
|
-
begin
|
34
|
-
@cache[module_name] = module_data = PuppetForge::Module.find(module_name) unless module_data
|
35
|
-
rescue Faraday::ClientError
|
36
|
-
return nil
|
38
|
+
module_data
|
37
39
|
end
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
def check_module_exists(module_name)
|
45
|
-
!get_module_data(module_name).nil?
|
46
|
-
end
|
41
|
+
# Retrieve module from Forge
|
42
|
+
# @return [PuppetForge::Module]
|
43
|
+
def check_module_exists(module_name)
|
44
|
+
!get_module_data(module_name).nil?
|
45
|
+
end
|
47
46
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
47
|
+
# Check if a module is deprecated from data fetched from the Forge
|
48
|
+
# @return [Boolean] boolean result stating whether module is deprecated
|
49
|
+
def check_module_deprecated(module_name)
|
50
|
+
module_name = module_name.sub('/', '-')
|
51
|
+
module_data = get_module_data(module_name)
|
52
|
+
version = get_current_version(module_name)
|
53
|
+
version.to_s.eql?('999.999.999') || version.to_s.eql?('99.99.99') || !module_data.attribute('deprecated_at').nil?
|
54
|
+
end
|
56
55
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
56
|
+
# Gets a list of all modules in a namespace, optionally filtered by endorsement.
|
57
|
+
# @param [String] namespace The namespace to search
|
58
|
+
# @param [String] endorsement to filter by (supported/approved/partner)
|
59
|
+
# @return [Array] list of modules
|
60
|
+
def modules_in_namespace(namespace, endorsement = nil)
|
61
|
+
modules = PuppetForge::Module.where(
|
62
|
+
owner: namespace, # rubocop:disable Layout/FirstArgumentIndentation
|
63
|
+
hide_deprecated: true,
|
64
|
+
module_groups: 'base pe_only',
|
65
|
+
endorsements: endorsement
|
66
|
+
)
|
68
67
|
|
69
|
-
|
68
|
+
raise "No modules found for #{namespace}." if modules.total.zero?
|
70
69
|
|
71
|
-
|
72
|
-
|
70
|
+
modules.unpaginated.map(&:slug)
|
71
|
+
end
|
73
72
|
|
74
|
-
|
73
|
+
private
|
75
74
|
|
76
|
-
|
77
|
-
|
75
|
+
def get_version(module_data)
|
76
|
+
return SemanticPuppet::Version.parse('999.999.999') unless module_data.current_release
|
78
77
|
|
79
|
-
|
78
|
+
SemanticPuppet::Version.parse(module_data.current_release.version)
|
79
|
+
end
|
80
80
|
end
|
81
81
|
end
|
@@ -3,35 +3,37 @@
|
|
3
3
|
require 'semantic_puppet'
|
4
4
|
|
5
5
|
# Checks dependencies of passed in metadata and performs checks to verify constraints
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
module DependencyChecker
|
7
|
+
class MetadataChecker
|
8
|
+
def initialize(metadata, forge, updated_module, updated_module_version)
|
9
|
+
@metadata = metadata
|
10
|
+
@forge = forge
|
11
|
+
@updated_module = updated_module.sub('-', '/') if updated_module
|
12
|
+
@updated_module_version = updated_module_version if updated_module_version
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
# Perform constraint comparisons of dependencies based on their latest version, and also
|
16
|
+
# override any occurance of @updated_module with @updated_module_version
|
17
|
+
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
18
|
+
def check_dependencies
|
19
|
+
fetch_module_dependencies.map do |dependency, constraint|
|
20
|
+
dependency = dependency.sub('-', '/')
|
21
|
+
current = dependency == @updated_module ? SemanticPuppet::Version.parse(@updated_module_version) : @forge.get_current_version(dependency)
|
22
|
+
[dependency, constraint, current, constraint.include?(current)]
|
23
|
+
end
|
22
24
|
end
|
23
|
-
end
|
24
25
|
|
25
|
-
|
26
|
+
private
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
# Retrieve dependencies from @metedata
|
29
|
+
# @return [Map] a map with the name of the dependency and its constraint
|
30
|
+
def fetch_module_dependencies
|
31
|
+
return [] unless @metadata[:dependencies]
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
@metadata[:dependencies].map do |dep|
|
34
|
+
constraint = dep[:version_requirement] || '>= 0'
|
35
|
+
[dep[:name], SemanticPuppet::VersionRange.parse(constraint)]
|
36
|
+
end
|
35
37
|
end
|
36
38
|
end
|
37
39
|
end
|
@@ -7,191 +7,193 @@ require 'logger'
|
|
7
7
|
require 'parallel'
|
8
8
|
|
9
9
|
# Main runner for DependencyChecker
|
10
|
-
|
11
|
-
|
10
|
+
module DependencyChecker
|
11
|
+
class Runner
|
12
|
+
attr_reader :problems
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
def initialize(verbose = false, forge_hostname = nil, forge_token = nil)
|
15
|
+
@forge = DependencyChecker::ForgeHelper.new({}, forge_hostname, forge_token)
|
16
|
+
@verbose = verbose
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
def resolve_from_namespace(namespace, endorsement)
|
20
|
+
@modules = @forge.modules_in_namespace(namespace, endorsement)
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
def resolve_from_path(path)
|
24
|
+
@modules = return_modules(path)
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def resolve_from_files(metadata_files)
|
28
|
+
@use_local_files = true
|
29
|
+
@modules = Array(metadata_files) # should already be an array, but just in case
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
def override=(override)
|
33
|
+
return unless override.is_a? Array
|
33
34
|
|
34
|
-
|
35
|
+
@updated_module, @updated_module_version = override
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
raise '*Error:* Pass an override in the form `--override module,version`' unless override.size == 2
|
38
|
+
raise "*Error:* Could not find *#{@updated_module}* on Puppet Forge! Ensure updated_module argument is valid." unless check_module_exists(@updated_module)
|
39
|
+
unless SemanticPuppet::Version.valid?(@updated_module_version)
|
40
|
+
raise "*Error:* Verify semantic versioning syntax *#{@updated_module_version}* of updated_module_version argument."
|
41
|
+
end
|
39
42
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
+
puts "Overriding *#{@updated_module}* version with *#{@updated_module_version}*\n\n"
|
44
|
+
puts "The module you are comparing against *#{@updated_module}* is *deprecated*.\n\n" if @forge.check_module_deprecated(@updated_module)
|
45
|
+
end
|
43
46
|
|
44
|
-
|
45
|
-
|
47
|
+
def run
|
48
|
+
puts "_*Starting dependency checks...*_\n\n"
|
46
49
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
# Post results of dependency checks
|
51
|
+
message = run_dependency_checks
|
52
|
+
@problems = message.size
|
53
|
+
message = 'All modules have valid dependencies.' if message.empty?
|
51
54
|
|
52
|
-
|
53
|
-
|
55
|
+
post(message)
|
56
|
+
end
|
54
57
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
# Check with forge if a specified module exists
|
59
|
+
# @param module_name [String]
|
60
|
+
# @return [Boolean] boolean based on whether the module exists or not
|
61
|
+
def check_module_exists(module_name)
|
62
|
+
@forge.check_module_exists(module_name)
|
63
|
+
end
|
61
64
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
65
|
+
# Perform dependency checks on modules supplied by @modules
|
66
|
+
def run_dependency_checks
|
67
|
+
# Cross reference dependencies from managed_modules file with @updated_module and @updated_module_version
|
68
|
+
messages = Parallel.map(@modules) do |module_path|
|
69
|
+
module_name = @use_local_files ? get_name_from_metadata(module_path) : module_path
|
70
|
+
mod_message = "Checking *#{module_path}* dependencies.\n"
|
71
|
+
exists_on_forge = true
|
72
|
+
|
73
|
+
# Check module_path is valid
|
74
|
+
unless check_module_exists(module_name)
|
75
|
+
if @use_local_files
|
76
|
+
exists_on_forge = false
|
77
|
+
else
|
78
|
+
mod_message += "\t*Error:* Could not find *#{module_name}* on Puppet Forge! Ensure the module exists.\n\n"
|
79
|
+
next mod_message
|
80
|
+
end
|
77
81
|
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# Fetch module dependencies
|
81
82
|
|
82
|
-
|
83
|
+
# Fetch module dependencies
|
83
84
|
|
84
|
-
|
85
|
-
mod_deprecated = exists_on_forge ? @forge.check_module_deprecated(module_name) : false
|
86
|
-
mod_message += "\t*Warning:* *#{module_name}* is *deprecated*.\n" if mod_deprecated
|
85
|
+
dependencies = @use_local_files ? get_dependencies_from_path(module_path) : get_dependencies(module_name)
|
87
86
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
87
|
+
# Post warning if module_path is deprecated
|
88
|
+
mod_deprecated = exists_on_forge ? @forge.check_module_deprecated(module_name) : false
|
89
|
+
mod_message += "\t*Warning:* *#{module_name}* is *deprecated*.\n" if mod_deprecated
|
92
90
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
if satisfied && @verbose
|
97
|
-
mod_message += "\t#{dependency} (#{constraint}) *matches* #{current}\n"
|
98
|
-
elsif !satisfied
|
99
|
-
all_match = false
|
100
|
-
mod_message += "\t#{dependency} (#{constraint}) *doesn't match* #{current}\n"
|
91
|
+
if dependencies.empty?
|
92
|
+
mod_message += "\tNo dependencies listed\n\n"
|
93
|
+
next mod_message if @verbose && !mod_deprecated
|
101
94
|
end
|
102
95
|
|
103
|
-
if
|
104
|
-
|
105
|
-
|
96
|
+
# Check each dependency to see if the latest version matchs the current modules' dependency constraints
|
97
|
+
all_match = true
|
98
|
+
dependencies.each do |dependency, constraint, current, satisfied|
|
99
|
+
if satisfied && @verbose
|
100
|
+
mod_message += "\t#{dependency} (#{constraint}) *matches* #{current}\n"
|
101
|
+
elsif !satisfied
|
102
|
+
all_match = false
|
103
|
+
mod_message += "\t#{dependency} (#{constraint}) *doesn't match* #{current}\n"
|
104
|
+
end
|
105
|
+
|
106
|
+
if @forge.check_module_deprecated(dependency)
|
107
|
+
all_match = false
|
108
|
+
mod_message += "\t\t*Warning:* *#{dependency}* is *deprecated*.\n"
|
109
|
+
end
|
110
|
+
|
111
|
+
found_deprecation = true if @forge.check_module_deprecated(dependency)
|
112
|
+
|
113
|
+
# Post warning if dependency is deprecated
|
114
|
+
mod_message += "\tThe dependency module *#{dependency}* is *deprecated*.\n" if found_deprecation
|
106
115
|
end
|
107
116
|
|
108
|
-
|
117
|
+
mod_message += "\tAll dependencies match\n" if all_match
|
118
|
+
mod_message += "\n"
|
109
119
|
|
110
|
-
#
|
111
|
-
|
120
|
+
# If @verbose is true, always post message
|
121
|
+
# If @verbose is false, only post if all dependencies don't match and/or if a dependency is deprecated
|
122
|
+
all_match && !@verbose ? '' : mod_message
|
112
123
|
end
|
113
124
|
|
114
|
-
|
115
|
-
|
125
|
+
message = ''
|
126
|
+
messages.each do |result|
|
127
|
+
message += result
|
128
|
+
end
|
116
129
|
|
117
|
-
|
118
|
-
# If @verbose is false, only post if all dependencies don't match and/or if a dependency is deprecated
|
119
|
-
(all_match && !@verbose) ? '' : mod_message
|
130
|
+
message
|
120
131
|
end
|
121
132
|
|
122
|
-
|
123
|
-
|
124
|
-
|
133
|
+
# Get dependencies of a supplied module name to verify if the depedencies are satisfied
|
134
|
+
# @param module_name [String] name of module
|
135
|
+
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
136
|
+
def get_dependencies(module_name)
|
137
|
+
module_data = @forge.get_module_data(module_name)
|
138
|
+
metadata = module_data.current_release.metadata
|
139
|
+
get_dependencies_from_metadata(metadata)
|
125
140
|
end
|
126
141
|
|
127
|
-
|
128
|
-
|
142
|
+
# Get dependencies of a supplied module from a metadata.json file to verify if the depedencies are satisfied
|
143
|
+
# @param metadata_path [String] path to metadata.json
|
144
|
+
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
145
|
+
def get_dependencies_from_path(metadata_path)
|
146
|
+
metadata = JSON.parse(File.read(metadata_path), symbolize_names: true)
|
147
|
+
get_dependencies_from_metadata(metadata)
|
148
|
+
end
|
129
149
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
end
|
150
|
+
# Get dependencies of supplied module metadata. Takes module ovveride into account.
|
151
|
+
# @param metadata [Hash] module metadata
|
152
|
+
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
153
|
+
def get_dependencies_from_metadata(metadata)
|
154
|
+
checker = DependencyChecker::MetadataChecker.new(metadata, @forge, @updated_module, @updated_module_version)
|
155
|
+
checker.check_dependencies
|
156
|
+
end
|
138
157
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
158
|
+
# Get dependencies of a supplied module from a metadata.json file to verify if the depedencies are satisfied
|
159
|
+
# @param metadata_path [String] path to metadata.json
|
160
|
+
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
161
|
+
def get_name_from_metadata(metadata_path)
|
162
|
+
metadata = JSON.parse(File.read(metadata_path), symbolize_names: true)
|
163
|
+
metadata[:name]
|
164
|
+
end
|
146
165
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
166
|
+
# Retrieve the array of module names from the supplied filename/URL
|
167
|
+
# @return [Array] an array of module names
|
168
|
+
def return_modules(path)
|
169
|
+
begin
|
170
|
+
# We use URI#open because it can handle file or URI paths.
|
171
|
+
# This usage does not expose a security risk
|
172
|
+
contents = URI.open(path).read # rubocop:disable Security/Open
|
173
|
+
rescue Errno::ENOENT, SocketError
|
174
|
+
raise "*Error:* Ensure *#{path}* is a valid file path or URL"
|
175
|
+
end
|
154
176
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
177
|
+
begin
|
178
|
+
modules = if path.end_with? '.json'
|
179
|
+
JSON.parse(contents)
|
180
|
+
else
|
181
|
+
YAML.safe_load(contents)
|
182
|
+
end
|
183
|
+
rescue StandardError
|
184
|
+
raise "*Error:* Ensure syntax of #{path} file is valid YAML or JSON"
|
185
|
+
end
|
162
186
|
|
163
|
-
|
164
|
-
|
165
|
-
def return_modules(path)
|
166
|
-
begin
|
167
|
-
# We use Kernel#open because it can handle file or URI paths.
|
168
|
-
# This usage does not expose a security risk
|
169
|
-
contents = open(path).read # rubocop:disable Security/Open
|
170
|
-
rescue Errno::ENOENT, SocketError
|
171
|
-
raise "*Error:* Ensure *#{path}* is a valid file path or URL"
|
172
|
-
end
|
187
|
+
# transform from IAC supported module hash to simple list
|
188
|
+
modules = modules.filter_map { |_key, val| val['puppet_module'] } if modules.is_a? Hash
|
173
189
|
|
174
|
-
|
175
|
-
if path.end_with? '.json'
|
176
|
-
modules = JSON.parse(contents)
|
177
|
-
else
|
178
|
-
modules = YAML.safe_load(contents)
|
179
|
-
end
|
180
|
-
rescue StandardError
|
181
|
-
raise "*Error:* Ensure syntax of #{path} file is valid YAML or JSON"
|
190
|
+
modules
|
182
191
|
end
|
183
192
|
|
184
|
-
#
|
185
|
-
|
186
|
-
|
193
|
+
# Post message to terminal
|
194
|
+
# @param message [String]
|
195
|
+
def post(message)
|
196
|
+
puts message
|
187
197
|
end
|
188
|
-
|
189
|
-
modules
|
190
|
-
end
|
191
|
-
|
192
|
-
# Post message to terminal
|
193
|
-
# @param message [String]
|
194
|
-
def post(message)
|
195
|
-
puts message
|
196
198
|
end
|
197
199
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependency_checker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ewoud Kohl van Wijngaarden
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-04-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: parallel
|
@@ -73,90 +73,6 @@ dependencies:
|
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '1.0'
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: codecov
|
78
|
-
requirement: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
type: :development
|
84
|
-
prerelease: false
|
85
|
-
version_requirements: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
name: github_changelog_generator
|
92
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '1.15'
|
97
|
-
type: :development
|
98
|
-
prerelease: false
|
99
|
-
version_requirements: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '1.15'
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: rspec
|
106
|
-
requirement: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '3.9'
|
111
|
-
type: :development
|
112
|
-
prerelease: false
|
113
|
-
version_requirements: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '3.9'
|
118
|
-
- !ruby/object:Gem::Dependency
|
119
|
-
name: rubocop
|
120
|
-
requirement: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
type: :development
|
126
|
-
prerelease: false
|
127
|
-
version_requirements: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
- !ruby/object:Gem::Dependency
|
133
|
-
name: simplecov-console
|
134
|
-
requirement: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
type: :development
|
140
|
-
prerelease: false
|
141
|
-
version_requirements: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
|
-
name: simplecov
|
148
|
-
requirement: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
type: :development
|
154
|
-
prerelease: false
|
155
|
-
version_requirements: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
76
|
description: |2
|
161
77
|
Verify all your dependencies allow the latest versions on Puppet Forge.
|
162
78
|
Based on https://github.com/ekohl/metadata_json_deps
|
@@ -174,6 +90,7 @@ files:
|
|
174
90
|
- lib/dependency_checker/forge_helper.rb
|
175
91
|
- lib/dependency_checker/metadata_checker.rb
|
176
92
|
- lib/dependency_checker/runner.rb
|
93
|
+
- lib/dependency_checker/version.rb
|
177
94
|
homepage: https://github.com/puppetlabs/dependency_checker
|
178
95
|
licenses:
|
179
96
|
- MIT
|
@@ -187,14 +104,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
187
104
|
requirements:
|
188
105
|
- - ">="
|
189
106
|
- !ruby/object:Gem::Version
|
190
|
-
version: 2.
|
107
|
+
version: 2.7.0
|
191
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
109
|
requirements:
|
193
110
|
- - ">="
|
194
111
|
- !ruby/object:Gem::Version
|
195
112
|
version: '0'
|
196
113
|
requirements: []
|
197
|
-
rubygems_version: 3.
|
114
|
+
rubygems_version: 3.1.6
|
198
115
|
signing_key:
|
199
116
|
specification_version: 4
|
200
117
|
summary: Check your Puppet metadata dependencies
|