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 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