dependency_checker 0.2.0 → 0.3.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/README.md +42 -18
- data/bin/dependency-checker +61 -10
- data/lib/dependency_checker/forge_helper.rb +26 -3
- data/lib/dependency_checker/metadata_checker.rb +2 -0
- data/lib/dependency_checker/runner.rb +62 -62
- data/lib/dependency_checker.rb +2 -0
- metadata +76 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6bed901c0dbb70764fd47f539afa0b03fd21d5699bf11bc9908237c5a54f0fe
|
4
|
+
data.tar.gz: 4aa912822c6b2c9dd93e6f3030dfd742bf855c72d4965c013a8783db51b67af9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48781c78bd1a5c026932cf9ae19aa94648192913d78af50c54662f6e8df8d54ec88d4822a2dffcdab198c0b46b19058a1cb4471cd5a62726cac593fb201c1ae9
|
7
|
+
data.tar.gz: 95675980e3ebe444b10059a95003903be9e76fbe605cbfd7d79d3482ff3c35354234f5d3102220f55c8503c100d8d87377daedc377385dae4acbead80fa2d8a5
|
data/README.md
CHANGED
@@ -1,52 +1,74 @@
|
|
1
1
|
# dependency-checker
|
2
2
|
|
3
|
-
The dependency-checker tool validates dependencies in
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
dependency-checker is compatible with Ruby versions 2.0.0 and newer.
|
3
|
+
The dependency-checker tool validates dependencies in Puppet modules against the
|
4
|
+
latest published versions on the [Puppet Forge](https://forge.puppet.com/). This
|
5
|
+
means that it will ensure that a module supports the latest version of all the
|
6
|
+
dependencies it declares.
|
8
7
|
|
9
8
|
## Installation
|
10
9
|
|
11
|
-
via
|
10
|
+
Install via RubyGems:
|
12
11
|
|
13
|
-
|
12
|
+
$ gem install dependency_checker
|
14
13
|
|
15
|
-
|
14
|
+
Or add it to your `Gemfile`:
|
16
15
|
|
17
|
-
|
16
|
+
gem 'dependency_checker'
|
18
17
|
|
19
18
|
## Usage
|
20
19
|
|
21
|
-
Run against a single Puppet module metadata.json file
|
20
|
+
Run against a single Puppet module `metadata.json` file to ensure that the module
|
21
|
+
supports the current versions of all the dependencies it declares:
|
22
22
|
|
23
23
|
$ dependency-checker /path/to/metadata.json
|
24
24
|
|
25
|
-
|
25
|
+
Run against a whole list of modules to ensure that each module supports the current
|
26
|
+
version of the dependencies it declares. You can use a YAML or JSON file containing
|
27
|
+
an array of modules (`namespace-module`). The file can be local or remote:
|
26
28
|
|
27
29
|
$ dependency-checker managed_modules.yaml
|
30
|
+
$ dependency-checker https://my.webserver.com/path/to/managed_modules.json
|
31
|
+
|
32
|
+
Run against many modules on your filesystem with a path wildcard:
|
33
|
+
|
34
|
+
$ dependency-checker modules/*/metadata.json
|
28
35
|
|
29
|
-
|
36
|
+
Run against all modules in an author's Forge namespace, optionally filtering to
|
37
|
+
only supported/approved/partner endorsements:
|
30
38
|
|
31
|
-
$ dependency-checker
|
39
|
+
$ dependency-checker --namespace puppetlabs
|
40
|
+
$ dependency-checker --namespace puppetlabs --supported
|
41
|
+
$ dependency-checker --namespace puppet --approved
|
32
42
|
|
33
|
-
|
43
|
+
Run it inside a module or group of modules during a pre-release to determine the
|
44
|
+
effect of version bumps in the `metadata.json` file(s):
|
34
45
|
|
46
|
+
$ dependency-checker -c
|
35
47
|
$ dependency-checker -c ../*/metadata.json
|
36
48
|
|
37
|
-
Or you can supply an override value
|
49
|
+
Or you can supply an override value directly:
|
38
50
|
|
39
51
|
$ dependency-checker ../*/metadata.json -o puppetlabs/stdlib,10.0.0
|
40
52
|
|
53
|
+
The tool defaults to validating all modules supported by the Puppet IAC team if
|
54
|
+
no module specification arguments are provided.
|
55
|
+
|
41
56
|
The following optional parameters are available:
|
42
|
-
|
57
|
+
|
58
|
+
```text
|
59
|
+
Usage: dependency-checker [options]
|
43
60
|
-o, --override module,version Forge name of module and semantic version to override
|
44
61
|
-c, --current Extract override version from metadata.json inside current working directory
|
62
|
+
-n, --namespace namespace Check all modules in a given namespace (filter with endorsements).
|
63
|
+
--endorsement endorsement Filter a namespace search by endorsement (supported/approved/partner).
|
64
|
+
--es, --supported Shorthand for `--endorsement supported`
|
65
|
+
--ea, --approved Shorthand for `--endorsement approved`
|
66
|
+
--ep, --partner Shorthand for `--endorsement partner`
|
45
67
|
-v, --[no-]verbose Run verbosely
|
46
68
|
-h, --help Display help
|
47
69
|
```
|
48
70
|
|
49
|
-
|
71
|
+
The `-o` and `-c` arguments are exclusive, as are the endorsement filtering options.
|
50
72
|
|
51
73
|
### Testing with dependency-checker as a Rake task
|
52
74
|
|
@@ -58,6 +80,8 @@ require 'dependency_checker'
|
|
58
80
|
desc 'Run dependency-checker'
|
59
81
|
task :metadata_deps do
|
60
82
|
files = FileList['modules/*/metadata.json']
|
61
|
-
DependencyChecker::Runner.
|
83
|
+
runner = DependencyChecker::Runner.new
|
84
|
+
runner.resolve_from_files(files)
|
85
|
+
runner.run
|
62
86
|
end
|
63
87
|
```
|
data/bin/dependency-checker
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'optparse'
|
4
5
|
require 'dependency_checker'
|
@@ -14,8 +15,46 @@ OptionParser.new { |opts|
|
|
14
15
|
options[:current_override] = current_override
|
15
16
|
end
|
16
17
|
|
17
|
-
opts.on('-
|
18
|
-
options[:
|
18
|
+
opts.on('-n', '--namespace namespace', 'Check all modules in a given namespace (filter with endorsements).') do |namespace|
|
19
|
+
options[:namespace] = namespace
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on('--endorsement endorsement', 'Filter a namespace search by endorsement (supported/approved/partner).') do |endorsement|
|
23
|
+
raise 'You may only filter by one endorsement at a time' if options[:endorsement]
|
24
|
+
|
25
|
+
options[:endorsement] = endorsement
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on('--es', '--supported', 'Shorthand for `--endorsement supported`') do
|
29
|
+
raise 'You may only filter by one endorsement at a time' if options[:endorsement]
|
30
|
+
|
31
|
+
options[:endorsement] = 'supported'
|
32
|
+
end
|
33
|
+
|
34
|
+
opts.on('--ea', '--approved', 'Shorthand for `--endorsement approved`') do
|
35
|
+
raise 'You may only filter by one endorsement at a time' if options[:endorsement]
|
36
|
+
|
37
|
+
options[:endorsement] = 'approved'
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on('--ep', '--partner', 'Shorthand for `--endorsement partner`') do
|
41
|
+
raise 'You may only filter by one endorsement at a time' if options[:endorsement]
|
42
|
+
|
43
|
+
options[:endorsement] = 'partner'
|
44
|
+
end
|
45
|
+
|
46
|
+
opts.on('--ft forge_token', '--forge-token forge_token', 'The API token to authenticate the Forge connection with') do |forge_token|
|
47
|
+
options[:forge_token] = forge_token
|
48
|
+
end
|
49
|
+
|
50
|
+
opts.on('--fh forge_hostname', '--forge-hostname forge_hostname', 'Specify a specific Forge hostname to overwrite the default of https://forgeapi.puppet.com') do |forge_hostname|
|
51
|
+
raise 'Forge host must be specified in the format https://your-own-api.url/' unless forge_hostname.start_with? 'http'
|
52
|
+
|
53
|
+
options[:forge_hostname] = forge_hostname
|
54
|
+
end
|
55
|
+
|
56
|
+
opts.on('-v', '--[no-]verbose', 'Run verbosely') do
|
57
|
+
options[:verbose] = true
|
19
58
|
end
|
20
59
|
|
21
60
|
opts.on('-h', '--help', 'Display help') do
|
@@ -24,13 +63,6 @@ OptionParser.new { |opts|
|
|
24
63
|
end
|
25
64
|
}.parse!
|
26
65
|
|
27
|
-
# Determine which modules to pass on to runner
|
28
|
-
managed_modules = nil
|
29
|
-
unless ARGV.empty?
|
30
|
-
# If length == 1, only pass first argument, else pass the array of metadata.json files
|
31
|
-
managed_modules = ((ARGV.length == 1) ? ARGV[0] : ARGV)
|
32
|
-
end
|
33
|
-
|
34
66
|
# Raise error if both :override and :current_override are specified
|
35
67
|
if options[:override] && options[:current_override]
|
36
68
|
raise OptionParser::InvalidOption, 'You can not select both override and current override options'
|
@@ -50,4 +82,23 @@ end
|
|
50
82
|
# Default :verbose to false
|
51
83
|
options[:verbose] ||= false
|
52
84
|
|
53
|
-
DependencyChecker::Runner.
|
85
|
+
runner = DependencyChecker::Runner.new(options[:verbose], options[:forge_hostname], options[:forge_token])
|
86
|
+
|
87
|
+
if options[:namespace]
|
88
|
+
runner.resolve_from_namespace(options[:namespace], options[:endorsement])
|
89
|
+
|
90
|
+
elsif ARGV.empty?
|
91
|
+
puts "No module criteria specified. Defaulting to IAC supported modules.\n\n"
|
92
|
+
runner.resolve_from_path('https://puppetlabs.github.io/iac/modules.json')
|
93
|
+
|
94
|
+
elsif ARGV.map { |arg| File.basename arg } != ['metadata.json']
|
95
|
+
runner.resolve_from_path(ARGV.first)
|
96
|
+
|
97
|
+
else
|
98
|
+
runner.resolve_from_files(ARGV)
|
99
|
+
end
|
100
|
+
|
101
|
+
runner.override = options[:override]
|
102
|
+
runner.run
|
103
|
+
|
104
|
+
exit(runner.problems.zero? ? 0 : 1)
|
@@ -1,10 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'puppet_forge'
|
2
4
|
require 'semantic_puppet'
|
3
5
|
|
4
6
|
# Helper class for fetching data from the Forge and perform some basic operations
|
5
7
|
class DependencyChecker::ForgeHelper
|
6
|
-
def initialize(cache = {})
|
8
|
+
def initialize(cache = {}, forge_hostname = nil, forge_token = nil)
|
7
9
|
@cache = cache
|
10
|
+
PuppetForge.host = forge_hostname unless forge_hostname.nil?
|
11
|
+
PuppetForge::Connection.authorization = forge_token unless forge_token.nil?
|
8
12
|
end
|
9
13
|
|
10
14
|
# Retrieve current version of module
|
@@ -14,8 +18,8 @@ class DependencyChecker::ForgeHelper
|
|
14
18
|
version = nil
|
15
19
|
version = get_version(@cache[module_name]) if @cache.key?(module_name)
|
16
20
|
|
17
|
-
|
18
|
-
version = get_version(get_module_data(module_name))
|
21
|
+
if !version && check_module_exists(module_name)
|
22
|
+
version = get_version(get_module_data(module_name))
|
19
23
|
end
|
20
24
|
|
21
25
|
version
|
@@ -50,9 +54,28 @@ class DependencyChecker::ForgeHelper
|
|
50
54
|
version.to_s.eql?('999.999.999') || version.to_s.eql?('99.99.99') || !module_data.attribute('deprecated_at').nil?
|
51
55
|
end
|
52
56
|
|
57
|
+
# Gets a list of all modules in a namespace, optionally filtered by endorsement.
|
58
|
+
# @param [String] namespace The namespace to search
|
59
|
+
# @param [String] endorsement to filter by (supported/approved/partner)
|
60
|
+
# @return [Array] list of modules
|
61
|
+
def modules_in_namespace(namespace, endorsement = nil)
|
62
|
+
modules = PuppetForge::Module.where(
|
63
|
+
:owner => namespace, # rubocop:disable Layout/FirstArgumentIndentation
|
64
|
+
:hide_deprecated => true,
|
65
|
+
:module_groups => 'base pe_only',
|
66
|
+
:endorsements => endorsement,
|
67
|
+
)
|
68
|
+
|
69
|
+
raise "No modules found for #{namespace}." if modules.total.zero?
|
70
|
+
|
71
|
+
modules.unpaginated.map { |m| m.slug }
|
72
|
+
end
|
73
|
+
|
53
74
|
private
|
54
75
|
|
55
76
|
def get_version(module_data)
|
77
|
+
return SemanticPuppet::Version.parse('999.999.999') unless module_data.current_release
|
78
|
+
|
56
79
|
SemanticPuppet::Version.parse(module_data.current_release.version)
|
57
80
|
end
|
58
81
|
end
|
@@ -1,55 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
require 'yaml'
|
3
|
-
require '
|
4
|
-
require 'uri'
|
5
|
+
require 'open-uri'
|
5
6
|
require 'logger'
|
6
7
|
require 'parallel'
|
7
8
|
|
8
9
|
# Main runner for DependencyChecker
|
9
10
|
class DependencyChecker::Runner
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@
|
14
|
-
@updated_module_version = override[1] if @override
|
11
|
+
attr_reader :problems
|
12
|
+
|
13
|
+
def initialize(verbose = false, forge_hostname = nil, forge_token = nil)
|
14
|
+
@forge = DependencyChecker::ForgeHelper.new({}, forge_hostname, forge_token)
|
15
15
|
@verbose = verbose
|
16
|
-
@forge = DependencyChecker::ForgeHelper.new
|
17
16
|
end
|
18
17
|
|
19
|
-
def
|
20
|
-
|
18
|
+
def resolve_from_namespace(namespace, endorsement)
|
19
|
+
@modules = @forge.modules_in_namespace(namespace, endorsement)
|
20
|
+
end
|
21
21
|
|
22
|
-
|
22
|
+
def resolve_from_path(path)
|
23
|
+
@modules = return_modules(path)
|
24
|
+
end
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
+
def resolve_from_files(metadata_files)
|
27
|
+
@use_local_files = true
|
28
|
+
@modules = Array(metadata_files) # should already be an array, but just in case
|
29
|
+
end
|
26
30
|
|
27
|
-
|
28
|
-
|
31
|
+
def override=(override)
|
32
|
+
return unless override.is_a? Array
|
29
33
|
|
30
|
-
|
31
|
-
if @managed_modules_arg.nil?
|
32
|
-
message += "No local path(s) to metadata.json or file argument specified. Defaulting to Puppet supported modules.\n\n"
|
33
|
-
@managed_modules_arg = 'https://gist.githubusercontent.com/eimlav/6df50eda0b1c57c1ab8c33b64c82c336/raw/managed_modules.yaml'
|
34
|
-
end
|
34
|
+
@updated_module, @updated_module_version = override
|
35
35
|
|
36
|
-
|
36
|
+
raise '*Error:* Pass an override in the form `--override module,version`' unless override.size == 2
|
37
|
+
raise "*Error:* Could not find *#{@updated_module}* on Puppet Forge! Ensure updated_module argument is valid." unless check_module_exists(@updated_module)
|
38
|
+
raise "*Error:* Verify semantic versioning syntax *#{@updated_module_version}* of updated_module_version argument." unless SemanticPuppet::Version.valid?(@updated_module_version)
|
37
39
|
|
38
|
-
|
40
|
+
puts "Overriding *#{@updated_module}* version with *#{@updated_module_version}*\n\n"
|
41
|
+
puts "The module you are comparing against *#{@updated_module}* is *deprecated*.\n\n" if @forge.check_module_deprecated(@updated_module)
|
42
|
+
end
|
43
|
+
|
44
|
+
def run
|
45
|
+
puts "_*Starting dependency checks...*_\n\n"
|
39
46
|
|
40
47
|
# Post results of dependency checks
|
41
|
-
message
|
42
|
-
|
48
|
+
message = run_dependency_checks
|
49
|
+
@problems = message.size
|
50
|
+
message = 'All modules have valid dependencies.' if message.empty?
|
43
51
|
|
44
52
|
post(message)
|
45
53
|
end
|
46
54
|
|
47
|
-
# Validate override from runner and return an error if any issues are encountered
|
48
|
-
def validate_override
|
49
|
-
raise "*Error:* Could not find *#{@updated_module}* on Puppet Forge! Ensure updated_module argument is valid." unless check_module_exists(@updated_module)
|
50
|
-
raise "*Error:* Verify semantic versioning syntax *#{@updated_module_version}* of updated_module_version argument." unless SemanticPuppet::Version.valid?(@updated_module_version)
|
51
|
-
end
|
52
|
-
|
53
55
|
# Check with forge if a specified module exists
|
54
56
|
# @param module_name [String]
|
55
57
|
# @return [Boolean] boolean based on whether the module exists or not
|
@@ -77,7 +79,7 @@ class DependencyChecker::Runner
|
|
77
79
|
|
78
80
|
# Fetch module dependencies
|
79
81
|
|
80
|
-
dependencies = @use_local_files ?
|
82
|
+
dependencies = @use_local_files ? get_dependencies_from_path(module_path) : get_dependencies(module_name)
|
81
83
|
|
82
84
|
# Post warning if module_path is deprecated
|
83
85
|
mod_deprecated = exists_on_forge ? @forge.check_module_deprecated(module_name) : false
|
@@ -125,29 +127,33 @@ class DependencyChecker::Runner
|
|
125
127
|
message
|
126
128
|
end
|
127
129
|
|
128
|
-
# Get dependencies of a supplied module
|
129
|
-
#
|
130
|
-
# @param module_name [String]
|
130
|
+
# Get dependencies of a supplied module name to verify if the depedencies are satisfied
|
131
|
+
# @param module_name [String] name of module
|
131
132
|
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
132
133
|
def get_dependencies(module_name)
|
133
134
|
module_data = @forge.get_module_data(module_name)
|
134
|
-
|
135
135
|
metadata = module_data.current_release.metadata
|
136
|
-
|
137
|
-
checker.check_dependencies
|
136
|
+
get_dependencies_from_metadata(metadata)
|
138
137
|
end
|
139
138
|
|
140
139
|
# Get dependencies of a supplied module from a metadata.json file to verify if the depedencies are satisfied
|
141
|
-
# @param
|
140
|
+
# @param metadata_path [String] path to metadata.json
|
142
141
|
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
143
|
-
def
|
142
|
+
def get_dependencies_from_path(metadata_path)
|
144
143
|
metadata = JSON.parse(File.read(metadata_path), symbolize_names: true)
|
144
|
+
get_dependencies_from_metadata(metadata)
|
145
|
+
end
|
146
|
+
|
147
|
+
# Get dependencies of supplied module metadata. Takes module ovveride into account.
|
148
|
+
# @param metadata [Hash] module metadata
|
149
|
+
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
150
|
+
def get_dependencies_from_metadata(metadata)
|
145
151
|
checker = DependencyChecker::MetadataChecker.new(metadata, @forge, @updated_module, @updated_module_version)
|
146
152
|
checker.check_dependencies
|
147
153
|
end
|
148
154
|
|
149
155
|
# Get dependencies of a supplied module from a metadata.json file to verify if the depedencies are satisfied
|
150
|
-
# @param
|
156
|
+
# @param metadata_path [String] path to metadata.json
|
151
157
|
# @return [Map] a map of dependencies along with their constraint, current version and whether they satisfy the constraint
|
152
158
|
def get_name_from_metadata(metadata_path)
|
153
159
|
metadata = JSON.parse(File.read(metadata_path), symbolize_names: true)
|
@@ -156,29 +162,31 @@ class DependencyChecker::Runner
|
|
156
162
|
|
157
163
|
# Retrieve the array of module names from the supplied filename/URL
|
158
164
|
# @return [Array] an array of module names
|
159
|
-
def return_modules(
|
160
|
-
|
161
|
-
|
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
|
162
173
|
|
163
174
|
begin
|
164
|
-
if
|
165
|
-
|
166
|
-
elsif File.file?(managed_modules_path)
|
167
|
-
managed_modules = File.read(managed_modules_path)
|
175
|
+
if path.end_with? '.json'
|
176
|
+
modules = JSON.parse(contents)
|
168
177
|
else
|
169
|
-
|
178
|
+
modules = YAML.safe_load(contents)
|
170
179
|
end
|
171
180
|
rescue StandardError
|
172
|
-
raise "*Error:* Ensure
|
181
|
+
raise "*Error:* Ensure syntax of #{path} file is valid YAML or JSON"
|
173
182
|
end
|
174
183
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
raise '*Error:* Ensure syntax of managed_modules file is a valid YAML array'
|
184
|
+
# transform from IAC supported module hash to simple list
|
185
|
+
if modules.is_a? Hash
|
186
|
+
modules = modules.map { |_key, val| val['puppet_module'] }.compact
|
179
187
|
end
|
180
188
|
|
181
|
-
|
189
|
+
modules
|
182
190
|
end
|
183
191
|
|
184
192
|
# Post message to terminal
|
@@ -186,12 +194,4 @@ class DependencyChecker::Runner
|
|
186
194
|
def post(message)
|
187
195
|
puts message
|
188
196
|
end
|
189
|
-
|
190
|
-
def self.run_with_args(managed_modules_path, override, verbose)
|
191
|
-
new(managed_modules_path, override, verbose).run
|
192
|
-
end
|
193
|
-
|
194
|
-
def self.run(managed_modules_path)
|
195
|
-
new(managed_modules_path, nil, false, nil).run
|
196
|
-
end
|
197
197
|
end
|
data/lib/dependency_checker.rb
CHANGED
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: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ewoud Kohl van Wijngaarden
|
@@ -9,36 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: parallel
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: puppet_forge
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
17
31
|
requirements:
|
18
|
-
- - "
|
32
|
+
- - ">="
|
19
33
|
- !ruby/object:Gem::Version
|
20
34
|
version: '2.2'
|
35
|
+
- - "<"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '4.0'
|
21
38
|
type: :runtime
|
22
39
|
prerelease: false
|
23
40
|
version_requirements: !ruby/object:Gem::Requirement
|
24
41
|
requirements:
|
25
|
-
- - "
|
42
|
+
- - ">="
|
26
43
|
- !ruby/object:Gem::Version
|
27
44
|
version: '2.2'
|
45
|
+
- - "<"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.0'
|
28
48
|
- !ruby/object:Gem::Dependency
|
29
49
|
name: rake
|
30
50
|
requirement: !ruby/object:Gem::Requirement
|
31
51
|
requirements:
|
32
52
|
- - "~>"
|
33
53
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
54
|
+
version: '13.0'
|
35
55
|
type: :runtime
|
36
56
|
prerelease: false
|
37
57
|
version_requirements: !ruby/object:Gem::Requirement
|
38
58
|
requirements:
|
39
59
|
- - "~>"
|
40
60
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
61
|
+
version: '13.0'
|
42
62
|
- !ruby/object:Gem::Dependency
|
43
63
|
name: semantic_puppet
|
44
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,21 +74,49 @@ dependencies:
|
|
54
74
|
- !ruby/object:Gem::Version
|
55
75
|
version: '1.0'
|
56
76
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
77
|
+
name: codecov
|
58
78
|
requirement: !ruby/object:Gem::Requirement
|
59
79
|
requirements:
|
60
80
|
- - ">="
|
61
81
|
- !ruby/object:Gem::Version
|
62
82
|
version: '0'
|
63
|
-
type: :
|
83
|
+
type: :development
|
64
84
|
prerelease: false
|
65
85
|
version_requirements: !ruby/object:Gem::Requirement
|
66
86
|
requirements:
|
67
87
|
- - ">="
|
68
88
|
- !ruby/object:Gem::Version
|
69
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'
|
70
104
|
- !ruby/object:Gem::Dependency
|
71
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
|
72
120
|
requirement: !ruby/object:Gem::Requirement
|
73
121
|
requirements:
|
74
122
|
- - ">="
|
@@ -82,7 +130,21 @@ dependencies:
|
|
82
130
|
- !ruby/object:Gem::Version
|
83
131
|
version: '0'
|
84
132
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
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
|
86
148
|
requirement: !ruby/object:Gem::Requirement
|
87
149
|
requirements:
|
88
150
|
- - ">="
|
@@ -95,8 +157,9 @@ dependencies:
|
|
95
157
|
- - ">="
|
96
158
|
- !ruby/object:Gem::Version
|
97
159
|
version: '0'
|
98
|
-
description:
|
99
|
-
|
160
|
+
description: |2
|
161
|
+
Verify all your dependencies allow the latest versions on Puppet Forge.
|
162
|
+
Based on https://github.com/ekohl/metadata_json_deps
|
100
163
|
email:
|
101
164
|
- info@puppet.com
|
102
165
|
executables:
|
@@ -124,15 +187,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
187
|
requirements:
|
125
188
|
- - ">="
|
126
189
|
- !ruby/object:Gem::Version
|
127
|
-
version: 2.
|
190
|
+
version: 2.4.0
|
128
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
192
|
requirements:
|
130
193
|
- - ">="
|
131
194
|
- !ruby/object:Gem::Version
|
132
195
|
version: '0'
|
133
196
|
requirements: []
|
134
|
-
|
135
|
-
rubygems_version: 2.7.7
|
197
|
+
rubygems_version: 3.0.3
|
136
198
|
signing_key:
|
137
199
|
specification_version: 4
|
138
200
|
summary: Check your Puppet metadata dependencies
|