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