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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e51ad69dd9620d0bdf8edc59856b9c1ca489eb1cc259c03b7e230ad8e38bdaa
4
- data.tar.gz: ca995ece8099855978f71fecb2b80e930528e62ad6790bce650fc75fe8bf2889
3
+ metadata.gz: d6bed901c0dbb70764fd47f539afa0b03fd21d5699bf11bc9908237c5a54f0fe
4
+ data.tar.gz: 4aa912822c6b2c9dd93e6f3030dfd742bf855c72d4965c013a8783db51b67af9
5
5
  SHA512:
6
- metadata.gz: 9d447cba1d6b93e9faff062534241b79df938d9ea520076e1adcaf25cb7d4295e68cc7cc8ce10593a06854a3b7c64073b819380d82bd8b55d85eef290b930518
7
- data.tar.gz: f364be7088d1a4ad70895cc13df206d2b5eef11eb6a32582d8d747c23f3c6bc80a92a4f4b39b5d3cf0cbab767e64304f60da86af04246c397097d310ed65aba7
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 `metadata.json` files in Puppet modules or YAML files containing arrays of Puppet modules against the latest published versions on the [Puppet Forge](https://forge.puppet.com/).
4
-
5
- ## Compatibility
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 `gem` command:
10
+ Install via RubyGems:
12
11
 
13
- `gem install metadata_json_deps`
12
+ $ gem install dependency_checker
14
13
 
15
- via Gemfile:
14
+ Or add it to your `Gemfile`:
16
15
 
17
- `gem 'metadata_json_deps`
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
- You can use a local/remote YAML file containing an array of modules (using syntax `namespace/module`)
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
- It can also be run verbosely to show valid dependencies:
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 -v modules/*/metadata.json
39
+ $ dependency-checker --namespace puppetlabs
40
+ $ dependency-checker --namespace puppetlabs --supported
41
+ $ dependency-checker --namespace puppet --approved
32
42
 
33
- You can also run it inside a module during a pre-release to determine the effect of a version bump in the metadata.json:
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
- If attempting to use both `-o` and `-c`, an error will be thrown as these can only be used exclusively.
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.run(files)
83
+ runner = DependencyChecker::Runner.new
84
+ runner.resolve_from_files(files)
85
+ runner.run
62
86
  end
63
87
  ```
@@ -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('-v', '--[no-]verbose', 'Run verbosely') do |verbose|
18
- options[:verbose] = verbose
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.run_with_args(managed_modules, options[:override], options[:verbose])
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
- unless version
18
- version = get_version(get_module_data(module_name)) if check_module_exists(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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'semantic_puppet'
2
4
 
3
5
  # Checks dependencies of passed in metadata and performs checks to verify constraints
@@ -1,55 +1,57 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'yaml'
3
- require 'net/http'
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
- def initialize(managed_modules_arg, override, verbose)
11
- @managed_modules_arg = managed_modules_arg
12
- @override = !override.nil?
13
- @updated_module = override[0] if @override
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 run
20
- validate_override if @override
18
+ def resolve_from_namespace(namespace, endorsement)
19
+ @modules = @forge.modules_in_namespace(namespace, endorsement)
20
+ end
21
21
 
22
- message = "_*Starting dependency checks...*_\n\n"
22
+ def resolve_from_path(path)
23
+ @modules = return_modules(path)
24
+ end
23
25
 
24
- # If override is enabled
25
- message += "Overriding *#{@updated_module}* version with *#{@updated_module_version}*\n\n" if @override
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
- # Post warning if @updated_module is deprecated
28
- message += "The module you are comparing against *#{@updated_module}* is *deprecated*.\n\n" if @override && @forge.check_module_deprecated(@updated_module)
31
+ def override=(override)
32
+ return unless override.is_a? Array
29
33
 
30
- # Post message if using default managed_modules
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
- @use_local_files = @managed_modules_arg.instance_of?(Array) || @managed_modules_arg.end_with?('.json')
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
- @modules = @use_local_files ? Array(@managed_modules_arg) : return_modules(@managed_modules_arg)
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 += run_dependency_checks
42
- message += 'All modules have valid dependencies.' if run_dependency_checks.empty?
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 ? get_dependencies_from_metadata(module_path) : get_dependencies(module_name)
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 and use the override values from @updated_module and @updated_module_version
129
- # to verify if the depedencies are satisfied
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
- checker = DependencyChecker::MetadataChecker.new(metadata, @forge, @updated_module, @updated_module_version)
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 module_name [String]
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 get_dependencies_from_metadata(metadata_path)
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 module_name [String]
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(managed_modules_path)
160
- managed_modules = {}
161
- managed_modules_yaml = {}
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 managed_modules_path =~ URI::DEFAULT_PARSER.make_regexp
165
- managed_modules = Net::HTTP.get(URI.parse(managed_modules_path))
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
- raise 'Error'
178
+ modules = YAML.safe_load(contents)
170
179
  end
171
180
  rescue StandardError
172
- raise "*Error:* Ensure *#{managed_modules_path}* is a valid file path or URL"
181
+ raise "*Error:* Ensure syntax of #{path} file is valid YAML or JSON"
173
182
  end
174
183
 
175
- begin
176
- managed_modules_yaml = YAML.safe_load(managed_modules)
177
- rescue StandardError
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
- managed_modules_yaml
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Module for checking the dependencies of Puppet Module using data retrieved from the Puppet Forge.
2
4
  module DependencyChecker
3
5
  autoload :ForgeHelper, 'dependency_checker/forge_helper'
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.2.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: 2019-03-22 00:00:00.000000000 Z
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: '12.3'
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: '12.3'
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: parallel
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: :runtime
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: rubocop
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: " Verify all your dependencies allow the latest versions on Puppet
99
- Forge. \n Based on https://github.com/ekohl/metadata_json_deps\n"
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.0.0
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
- rubyforge_project:
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