pdk 1.1.0 → 1.2.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
  SHA1:
3
- metadata.gz: daa54ac61ef8e82a47ab9d6b0cbd190b2261a8a9
4
- data.tar.gz: f90e5b3f2c554d1da7594967e9b3a500f28f1869
3
+ metadata.gz: de851b0858e7870cf46b71f5a8647d3f9bc018a4
4
+ data.tar.gz: ab01700a2ec0373c82224f0566948298eb0d1cb6
5
5
  SHA512:
6
- metadata.gz: b2d4b1f197c7ca9d8acd269aa4a1ad83760a6b3238cc6dcd2330bc91324687fe370aeccc6a5756bea99ff812f2f6603f7eac1541c21fd6a01660acddd0bb7d41
7
- data.tar.gz: 81515d3bf458e1e432fe985c47cb1f481267886a0a525bb5209af81925e4868c7f27b5df35069bcb1b554d145f9d6f74a823b0ada33c8f2c1f431098319e4bff
6
+ metadata.gz: 325be6b7a78f09fa93e9f2b04a53251961cf21ad370e2d33ed8db251993c1529052123896382bccf5a39742507c81c11e38582b3c290d593796b32d5a6674028
7
+ data.tar.gz: f21d503b3737b16874e7ef8d3410789104a93e8e7f76064fe82bd590d42fbbb8e6b3c6ae9a3bd76953677c3d2e093b87fbe68f9fa4e0456fbd9b8d2fda7ce0c1
data/CHANGELOG.md CHANGED
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
5
 
6
+ ## [v1.2.0](https://github.com/puppetlabs/pdk/tree/v1.2.0) (2017-10-05)
7
+
8
+ [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.1.0...v1.2.0)
9
+
10
+ **Implemented enhancements:**
11
+
12
+ - \(PDK-479\) new module: create examples/, and files/ directory [\#308](https://github.com/puppetlabs/pdk/pull/308) ([DavidS](https://github.com/DavidS))
13
+ - \(PDK-470\) Validation of task metadata. [\#301](https://github.com/puppetlabs/pdk/pull/301) ([bmjen](https://github.com/bmjen))
14
+ - \(PDK-468\) `new task` command [\#299](https://github.com/puppetlabs/pdk/pull/299) ([rodjek](https://github.com/rodjek))
15
+
16
+ **Fixed bugs:**
17
+
18
+ - \(PDK-408\) Explain PowerShell escaping for -- on `bundle` [\#309](https://github.com/puppetlabs/pdk/pull/309) ([DavidS](https://github.com/DavidS))
19
+ - \(PDK-482\) Update help messages to be less ambiguous [\#307](https://github.com/puppetlabs/pdk/pull/307) ([DavidS](https://github.com/DavidS))
20
+ - \(PDK-555\) Handle windows style \(backslash separated\) paths when validating [\#306](https://github.com/puppetlabs/pdk/pull/306) ([rodjek](https://github.com/rodjek))
21
+ - \(PDK-543\) Fix spdx.org URLs in messages [\#303](https://github.com/puppetlabs/pdk/pull/303) ([farkasmate](https://github.com/farkasmate))
22
+ - \(PDK-502\) make the private git available to module commands [\#298](https://github.com/puppetlabs/pdk/pull/298) ([rodjek](https://github.com/rodjek))
23
+
6
24
  ## [v1.1.0](https://github.com/puppetlabs/pdk/tree/v1.1.0) (2017-09-13)
7
25
 
8
26
  [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.0.1...v1.1.0)
data/README.md CHANGED
@@ -67,6 +67,16 @@ pdk new defined_type defined_type_name
67
67
 
68
68
  PDK creates the new defined\_type manifest and a test file (as `defined_type_name_spec.rb`) in your module's `/spec/defines` directory.
69
69
 
70
+ ### Generate a task
71
+
72
+ To generate a task in your module, use the `pdk new task` command, specifying the name of your new task.
73
+
74
+ 1. From the command line, in your module's directory, run:
75
+ ```
76
+ pdk new task task_name
77
+ ```
78
+
79
+ PDK creates the new task file and metadata.
70
80
 
71
81
  ### Validating a module
72
82
 
@@ -2,10 +2,19 @@
2
2
  module PDK::CLI
3
3
  @bundle_cmd = @base_cmd.define_command do
4
4
  name 'bundle'
5
- usage _('bundle -- [bundler_options]')
5
+ if Gem.win_platform?
6
+ usage _('bundle `-- [bundler_options]')
7
+ else
8
+ usage _('bundle -- [bundler_options]')
9
+ end
6
10
  summary _('(Experimental) Command pass-through to bundler')
7
- description _('[experimental] For advanced users, pdk bundle runs arbitrary commands in the bundler environment that pdk manages.' \
8
- 'Careless use of this command can lead to errors that pdk can\'t help recover from.')
11
+ description _(<<-EOF
12
+ [experimental] For advanced users, pdk bundle runs arbitrary commands in the bundler environment that pdk manages.
13
+ Careless use of this command can lead to errors that pdk can't help recover from.
14
+
15
+ Note that for PowerShell the '--' needs to be escaped using a backtick: '`--' to avoid it being parsed by the shell.
16
+ EOF
17
+ )
9
18
 
10
19
  be_hidden
11
20
 
data/lib/pdk/cli/exec.rb CHANGED
@@ -25,6 +25,20 @@ module PDK
25
25
  @git_dir ||= File.join('private', 'git', Gem.win_platform? ? 'cmd' : 'bin')
26
26
  end
27
27
 
28
+ def self.git_paths
29
+ @paths ||= begin
30
+ paths = [File.join(PDK::Util.pdk_package_basedir, git_bindir)]
31
+
32
+ if Gem.win_platform?
33
+ paths << File.join(PDK::Util.pdk_package_basedir, 'private', 'git', 'mingw64', 'bin')
34
+ paths << File.join(PDK::Util.pdk_package_basedir, 'private', 'git', 'mingw64', 'libexec', 'git-core')
35
+ paths << File.join(PDK::Util.pdk_package_basedir, 'private', 'git', 'usr', 'bin')
36
+ end
37
+
38
+ paths
39
+ end
40
+ end
41
+
28
42
  def self.git_bin
29
43
  git_bin = Gem.win_platform? ? 'git.exe' : 'git'
30
44
  vendored_bin_path = File.join(git_bindir, git_bin)
@@ -154,9 +168,9 @@ module PDK
154
168
  File.join(@process.environment['GEM_HOME'], 'bin'),
155
169
  File.join(@process.environment['GEM_PATH'], 'bin'),
156
170
  package_binpath,
157
- PDK::Util.package_install? ? PDK::CLI::Exec.git_bindir : nil,
158
171
  ENV['PATH'],
159
- ].compact.join(File::PATH_SEPARATOR)
172
+ PDK::Util.package_install? ? PDK::CLI::Exec.git_paths : nil,
173
+ ].compact.flatten.join(File::PATH_SEPARATOR)
160
174
 
161
175
  mod_root = PDK::Util.module_root
162
176
 
@@ -0,0 +1,28 @@
1
+ module PDK::CLI
2
+ @new_task_cmd = @new_cmd.define_command do
3
+ name 'task'
4
+ usage _('task [options] <name>')
5
+ summary _('Create a new task named <name> using given options')
6
+
7
+ PDK::CLI.template_url_option(self)
8
+ option nil, :description, _('A short description of the purpose of the task'), argument: :required
9
+
10
+ run do |opts, args, _cmd|
11
+ PDK::CLI::Util.ensure_in_module!
12
+
13
+ task_name = args[0]
14
+ module_dir = Dir.pwd
15
+
16
+ if task_name.nil? || task_name.empty?
17
+ puts command.help
18
+ exit 1
19
+ end
20
+
21
+ unless Util::OptionValidator.valid_task_name?(task_name)
22
+ raise PDK::CLI::ExitWithError, _("'%{name}' is not a valid task name") % { name: task_name }
23
+ end
24
+
25
+ PDK::Generate::Task.new(module_dir, task_name, opts).run
26
+ end
27
+ end
28
+ end
data/lib/pdk/cli/new.rb CHANGED
@@ -1,10 +1,9 @@
1
-
2
1
  module PDK::CLI
3
2
  @new_cmd = @base_cmd.define_command do
4
3
  name 'new'
5
- usage _('new <type> [options]')
4
+ usage _('new <thing> [options]')
6
5
  summary _('create a new module, etc.')
7
- description _('Creates a new instance of <type> using relevant options.')
6
+ description _('Creates a new <thing> using relevant options.')
8
7
  default_subcommand 'help'
9
8
  end
10
9
 
@@ -14,3 +13,4 @@ end
14
13
  require 'pdk/cli/new/class'
15
14
  require 'pdk/cli/new/defined_type'
16
15
  require 'pdk/cli/new/module'
16
+ require 'pdk/cli/new/task'
data/lib/pdk/cli/test.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  module PDK::CLI
3
3
  @test_cmd = @base_cmd.define_command do
4
4
  name 'test'
5
- usage _('test [type] [options]')
5
+ usage _('test [subcommand] [options]')
6
6
  summary _('Run tests.')
7
7
  default_subcommand 'help'
8
8
  end
@@ -22,6 +22,7 @@ module PDK
22
22
  def self.valid_module_name?(string)
23
23
  !(string =~ %r{\A[a-z][a-z0-9_]*\Z}).nil?
24
24
  end
25
+ singleton_class.send(:alias_method, :valid_task_name?, :valid_module_name?)
25
26
 
26
27
  # Validate a Puppet namespace against the regular expression in the
27
28
  # documentation: https://docs.puppet.com/puppet/4.10/lang_reserved.html#classes-and-defined-resource-types
data/lib/pdk/generate.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'pdk/generators/module'
2
2
  require 'pdk/generators/defined_type'
3
3
  require 'pdk/generators/puppet_class'
4
+ require 'pdk/generators/task'
4
5
  require 'pdk/module/metadata'
5
6
  require 'pdk/module/templatedir'
6
7
 
@@ -150,8 +150,11 @@ module PDK
150
150
 
151
151
  def self.prepare_module_directory(target_dir)
152
152
  [
153
+ File.join(target_dir, 'examples'),
154
+ File.join(target_dir, 'files'),
153
155
  File.join(target_dir, 'manifests'),
154
156
  File.join(target_dir, 'templates'),
157
+ File.join(target_dir, 'tasks'),
155
158
  ].each do |dir|
156
159
  begin
157
160
  FileUtils.mkdir_p(dir)
@@ -194,7 +197,7 @@ module PDK
194
197
  {
195
198
  name: 'license',
196
199
  question: _('What license does this module code fall under?'),
197
- help: _('This should be an identifier from https://spdk.org/licenses/. Common values are "Apache-2.0", "MIT", or "proprietary".'),
200
+ help: _('This should be an identifier from https://spdx.org/licenses/. Common values are "Apache-2.0", "MIT", or "proprietary".'),
198
201
  required: true,
199
202
  default: metadata.data['license'],
200
203
  },
@@ -11,6 +11,7 @@ module PDK
11
11
  class PuppetObject
12
12
  attr_reader :module_dir
13
13
  attr_reader :object_name
14
+ attr_reader :options
14
15
 
15
16
  # Initialises the PDK::Generate::PuppetObject object.
16
17
  #
@@ -30,6 +31,7 @@ module PDK
30
31
  def initialize(module_dir, object_name, options = {})
31
32
  @module_dir = module_dir
32
33
  @options = options
34
+ @object_name = object_name
33
35
 
34
36
  if [:class, :defined_type].include?(object_type) # rubocop:disable Style/GuardClause
35
37
  object_name_parts = object_name.split('::')
@@ -83,10 +85,13 @@ module PDK
83
85
  #
84
86
  # @api public
85
87
  def run
86
- [target_object_path, target_spec_path].each do |target_file|
87
- if File.exist?(target_file)
88
- raise PDK::CLI::ExitWithError, _("Unable to generate %{object_type}; '%{file}' already exists.") % { file: target_file, object_type: object_type }
89
- end
88
+ [target_object_path, target_spec_path].compact.each do |target_file|
89
+ next unless File.exist?(target_file)
90
+
91
+ raise PDK::CLI::ExitWithError, _("Unable to generate %{object_type}; '%{file}' already exists.") % {
92
+ file: target_file,
93
+ object_type: object_type,
94
+ }
90
95
  end
91
96
 
92
97
  with_templates do |template_path, config_hash|
@@ -115,8 +120,29 @@ module PDK
115
120
  #
116
121
  # @api private
117
122
  def render_file(dest_path, template_path, data)
123
+ write_file(dest_path) do
124
+ PDK::TemplateFile.new(template_path, data).render
125
+ end
126
+ end
127
+
128
+ # Write the result of the block to disk.
129
+ #
130
+ # @param dest_path [String] The path that the rendered file should be
131
+ # written to. Any necessary directories will be automatically created.
132
+ # @param &block [String] The content to be written
133
+ #
134
+ # @raise [PDK::CLI::FatalError] if the parent directories to `dest_path`
135
+ # do not exist and could not be created.
136
+ # @raise [PDK::CLI::FatalError] if the rendered file could not be written
137
+ # to `dest_path`.
138
+ #
139
+ # @return [void]
140
+ #
141
+ # @api private
142
+ def write_file(dest_path)
118
143
  PDK.logger.info(_("Creating '%{file}' from template.") % { file: dest_path })
119
- file_content = PDK::TemplateFile.new(template_path, data).render
144
+
145
+ file_content = yield
120
146
 
121
147
  begin
122
148
  FileUtils.mkdir_p(File.dirname(dest_path))
@@ -0,0 +1,86 @@
1
+ require 'pdk/generators/puppet_object'
2
+
3
+ module PDK
4
+ module Generate
5
+ class Task < PuppetObject
6
+ OBJECT_TYPE = :task
7
+
8
+ # Prepares the data needed to render the new task template.
9
+ #
10
+ # @return [Hash{Symbol => Object}] a hash of information that will be
11
+ # provided to the task template during rendering. Additionally, this hash
12
+ # (with the :name key removed) makes up the task metadata.
13
+ def template_data
14
+ {
15
+ name: object_name,
16
+ puppet_task_version: 1,
17
+ supports_noop: false,
18
+ description: options.fetch(:description, 'A short description of this task'),
19
+ parameters: {},
20
+ }
21
+ end
22
+
23
+ # Calculates the path to the file where the new task will be written.
24
+ #
25
+ # @return [String] the path to the task file.
26
+ def target_object_path
27
+ @target_object_path ||= File.join(module_dir, 'tasks', "#{task_name}.sh")
28
+ end
29
+
30
+ # Calculates the path to the file where the tests for the new task will
31
+ # be written.
32
+ #
33
+ # @return [nil] as there is currently no test framework for Tasks.
34
+ def target_spec_path
35
+ nil
36
+ end
37
+
38
+ def run
39
+ check_if_task_already_exists
40
+
41
+ super
42
+
43
+ write_task_metadata
44
+ end
45
+
46
+ # Checks that the task has not already been defined with a different
47
+ # extension.
48
+ #
49
+ # @raise [PDK::CLI::ExitWithError] if files with the same name as the
50
+ # task exist in the <module>/tasks/ directory
51
+ #
52
+ # @api private
53
+ def check_if_task_already_exists
54
+ error = _("A task named '%{name}' already exists in this module; defined in %{file}")
55
+ allowed_extensions = %w[.md .conf]
56
+
57
+ Dir.glob(File.join(module_dir, 'tasks', "#{task_name}.*")).each do |file|
58
+ next if allowed_extensions.include?(File.extname(file))
59
+
60
+ raise PDK::CLI::ExitWithError, error % { name: task_name, file: file }
61
+ end
62
+ end
63
+
64
+ # Writes the <module>/tasks/<task_name>.json metadata file for the task.
65
+ #
66
+ # @api private
67
+ def write_task_metadata
68
+ write_file(File.join(module_dir, 'tasks', "#{task_name}.json")) do
69
+ task_metadata = template_data.dup
70
+ task_metadata.delete(:name)
71
+ JSON.pretty_generate(task_metadata)
72
+ end
73
+ end
74
+
75
+ # Calculates the file name of the task files ('init' if the task has the
76
+ # same name as the module, otherwise use the specified task name).
77
+ #
78
+ # @return [String] the base name of the file(s) for the task.
79
+ #
80
+ # @api private
81
+ def task_name
82
+ (object_name == module_name) ? 'init' : object_name
83
+ end
84
+ end
85
+ end
86
+ end
@@ -36,18 +36,20 @@ module PDK
36
36
  options[:targets]
37
37
  end
38
38
 
39
+ targets.map! { |r| r.gsub(File::ALT_SEPARATOR, File::SEPARATOR) } if File::ALT_SEPARATOR
39
40
  skipped = []
40
41
  invalid = []
41
42
  matched = targets.map { |target|
42
43
  if respond_to?(:pattern)
43
44
  if File.directory?(target)
44
- target_list = Array[pattern].flatten.map { |p| Dir.glob(File.join(target, p)) }
45
+ pattern_glob = Array(pattern).map { |p| Dir.glob(File.join(PDK::Util.module_root, p)) }
46
+ target_list = pattern_glob.flatten.select { |file| File.fnmatch(File.join(File.expand_path(target), '*'), file) }
45
47
  skipped << target if target_list.flatten.empty?
46
48
  target_list
47
49
  elsif File.file?(target)
48
- if target.eql? pattern
50
+ if Array(pattern).include? target
49
51
  target
50
- elsif Array[pattern].flatten.map { |p| File.fnmatch(p, File.expand_path(target)) }.include? true
52
+ elsif Array(pattern).any? { |p| File.fnmatch(File.expand_path(p), File.expand_path(target)) }
51
53
  target
52
54
  else
53
55
  skipped << target
@@ -20,7 +20,7 @@ module PDK
20
20
  end
21
21
 
22
22
  def self.spinner_text(targets = [])
23
- _('Checking metadata style (%{targets}).') % {
23
+ _('Checking module metadata style (%{targets}).') % {
24
24
  targets: PDK::Util.targets_relative_to_pwd(targets).join(' '),
25
25
  }
26
26
  end
@@ -11,12 +11,12 @@ module PDK
11
11
  end
12
12
 
13
13
  def self.pattern
14
- 'metadata.json'
14
+ ['metadata.json', 'tasks/*.json']
15
15
  end
16
16
 
17
- def self.spinner_text(targets = [])
17
+ def self.spinner_text(_targets = [])
18
18
  _('Checking metadata syntax (%{targets}).') % {
19
- targets: PDK::Util.targets_relative_to_pwd(targets).join(' '),
19
+ targets: pattern.join(' '),
20
20
  }
21
21
  end
22
22
 
@@ -0,0 +1,149 @@
1
+ require 'pdk'
2
+ require 'pdk/cli/exec'
3
+ require 'pdk/validators/base_validator'
4
+ require 'pdk/util'
5
+ require 'pathname'
6
+ require 'json-schema'
7
+
8
+ module PDK
9
+ module Validate
10
+ class TaskMetadataLint < BaseValidator
11
+ FORGE_SCHEMA_URL = 'https://forgeapi.puppet.com/schemas/task.json'.freeze
12
+
13
+ def self.name
14
+ 'task-metadata-lint'
15
+ end
16
+
17
+ def self.pattern
18
+ 'tasks/*.json'
19
+ end
20
+
21
+ def self.spinner_text(_targets = [])
22
+ _('Checking task metadata style (%{targets}).') % {
23
+ targets: pattern,
24
+ }
25
+ end
26
+
27
+ def self.create_spinner(targets = [], options = {})
28
+ return if PDK.logger.debug?
29
+ options = options.merge(PDK::CLI::Util.spinner_opts_for_platform)
30
+
31
+ exec_group = options[:exec_group]
32
+ @spinner = if exec_group
33
+ exec_group.add_spinner(spinner_text(targets), options)
34
+ else
35
+ TTY::Spinner.new("[:spinner] #{spinner_text(targets)}", options)
36
+ end
37
+ @spinner.auto_spin
38
+ end
39
+
40
+ def self.stop_spinner(exit_code)
41
+ if exit_code.zero? && @spinner
42
+ @spinner.success
43
+ elsif @spinner
44
+ @spinner.error
45
+ end
46
+ end
47
+
48
+ def self.vendored_task_schema_path
49
+ @vendored_task_schema_path ||= File.join(PDK::Util.package_cachedir, 'task.json')
50
+ end
51
+
52
+ def self.schema_file
53
+ schema = if PDK::Util.package_install? && File.exist?(vendored_task_schema_path)
54
+ File.read(vendored_task_schema_path)
55
+ else
56
+ download_schema_from_forge
57
+ end
58
+
59
+ JSON.parse(schema)
60
+ rescue JSON::ParserError
61
+ raise PDK::CLI::FatalError, _('Failed to parse Task Metadata Schema file.')
62
+ end
63
+
64
+ def self.download_schema_from_forge
65
+ PDK.logger.debug(_('Task Metadata Schema was not found in the cache. Now downloading from the forge.'))
66
+ require 'net/https'
67
+ require 'openssl'
68
+
69
+ uri = URI.parse(FORGE_SCHEMA_URL)
70
+ http = Net::HTTP.new(uri.host, uri.port)
71
+ http.use_ssl = true
72
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE if Gem.win_platform?
73
+ request = Net::HTTP::Get.new(uri.request_uri)
74
+ response = http.request(request)
75
+
76
+ raise PDK::CLI::FatalError, _('Unable to download Task Metadata Schema file. %{code}: %{message}.') % { code: response.code, message: response.message } unless response.code == '200'
77
+
78
+ response.body
79
+ rescue StandardError => e
80
+ raise PDK::CLI::FatalError, _('Unable to download Task Metadata Schema file. Please check internet connectivity and retry this action. %{error}') % { error: e }
81
+ end
82
+
83
+ def self.invoke(report, options = {})
84
+ targets, skipped, invalid = parse_targets(options)
85
+
86
+ process_skipped(report, skipped)
87
+ process_invalid(report, invalid)
88
+
89
+ return 0 if targets.empty?
90
+
91
+ return_val = 0
92
+ create_spinner(targets, options)
93
+
94
+ targets.each do |target|
95
+ unless File.readable?(target)
96
+ report.add_event(
97
+ file: target,
98
+ source: name,
99
+ state: :failure,
100
+ severity: 'error',
101
+ message: _('Could not be read.'),
102
+ )
103
+ return_val = 1
104
+ next
105
+ end
106
+
107
+ begin
108
+ # Need to set the JSON Parser and State Generator to the Native one to be
109
+ # compatible with the multi_json adapter.
110
+ JSON.parser = JSON::Ext::Parser if defined?(JSON::Ext::Parser)
111
+ JSON.generator = JSON::Ext::Generator
112
+
113
+ begin
114
+ errors = JSON::Validator.fully_validate(schema_file, File.read(target)) || []
115
+ rescue JSON::Schema::SchemaError => e
116
+ raise PDK::CLI::FatalError, _('Unable to validate Task Metadata. %{error}.') % { error: e.message }
117
+ end
118
+
119
+ if errors.empty?
120
+ report.add_event(
121
+ file: target,
122
+ source: name,
123
+ state: :passed,
124
+ severity: 'ok',
125
+ )
126
+ else
127
+ errors.each do |error|
128
+ # strip off the trailing parts that aren't relevant
129
+ error = error.split('in schema').first if error.include? 'in schema'
130
+
131
+ report.add_event(
132
+ file: target,
133
+ source: name,
134
+ state: :failure,
135
+ severity: 'error',
136
+ message: error,
137
+ )
138
+ end
139
+ return_val = 1
140
+ end
141
+ end
142
+ end
143
+
144
+ stop_spinner(return_val)
145
+ return_val
146
+ end
147
+ end
148
+ end
149
+ end
@@ -3,6 +3,7 @@ require 'pdk/cli/exec'
3
3
  require 'pdk/validators/base_validator'
4
4
  require 'pdk/validators/metadata/metadata_json_lint'
5
5
  require 'pdk/validators/metadata/metadata_syntax'
6
+ require 'pdk/validators/metadata/task_metadata_lint'
6
7
 
7
8
  module PDK
8
9
  module Validate
@@ -12,7 +13,7 @@ module PDK
12
13
  end
13
14
 
14
15
  def self.metadata_validators
15
- [MetadataSyntax, MetadataJSONLint]
16
+ [MetadataSyntax, MetadataJSONLint, TaskMetadataLint]
16
17
  end
17
18
 
18
19
  def self.invoke(report, options = {})
data/lib/pdk/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PDK
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = '1.2.0'.freeze
3
3
  end
data/locales/pdk.pot CHANGED
@@ -6,11 +6,11 @@
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: puppet development kit v1.0.1-51-g1a5f668\n"
9
+ "Project-Id-Version: puppet development kit v1.1.0-17-g347e75a\n"
10
10
  "\n"
11
11
  "Report-Msgid-Bugs-To: docs@puppet.com\n"
12
- "POT-Creation-Date: 2017-09-13 10:09-0700\n"
13
- "PO-Revision-Date: 2017-09-13 10:09-0700\n"
12
+ "POT-Creation-Date: 2017-10-05 10:26-0700\n"
13
+ "PO-Revision-Date: 2017-10-05 10:26-0700\n"
14
14
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
15
15
  "Language-Team: LANGUAGE <LL@li.org>\n"
16
16
  "Language: \n"
@@ -79,16 +79,24 @@ msgstr ""
79
79
  msgid "Path to an answer file."
80
80
  msgstr ""
81
81
 
82
- #: ../lib/pdk/cli/bundle.rb:5
82
+ #: ../lib/pdk/cli/bundle.rb:6
83
+ msgid "bundle `-- [bundler_options]"
84
+ msgstr ""
85
+
86
+ #: ../lib/pdk/cli/bundle.rb:8
83
87
  msgid "bundle -- [bundler_options]"
84
88
  msgstr ""
85
89
 
86
- #: ../lib/pdk/cli/bundle.rb:6
90
+ #: ../lib/pdk/cli/bundle.rb:10
87
91
  msgid "(Experimental) Command pass-through to bundler"
88
92
  msgstr ""
89
93
 
90
- #: ../lib/pdk/cli/bundle.rb:7
91
- msgid "[experimental] For advanced users, pdk bundle runs arbitrary commands in the bundler environment that pdk manages.Careless use of this command can lead to errors that pdk can't help recover from."
94
+ #: ../lib/pdk/cli/bundle.rb:11
95
+ msgid ""
96
+ "[experimental] For advanced users, pdk bundle runs arbitrary commands in the bundler environment that pdk manages.\n"
97
+ "Careless use of this command can lead to errors that pdk can't help recover from.\n"
98
+ "\n"
99
+ "Note that for PowerShell the '--' needs to be escaped using a backtick: '`--' to avoid it being parsed by the shell.\n"
92
100
  msgstr ""
93
101
 
94
102
  #: ../lib/pdk/cli/errors.rb:6
@@ -99,39 +107,39 @@ msgstr ""
99
107
  msgid "Unable to find `%{name}`. Check that it is installed and try again."
100
108
  msgstr ""
101
109
 
102
- #: ../lib/pdk/cli/exec.rb:56
110
+ #: ../lib/pdk/cli/exec.rb:70
103
111
  msgid "PDK package installation not found. Trying '%{fallback}' from the system PATH instead."
104
112
  msgstr ""
105
113
 
106
- #: ../lib/pdk/cli/exec.rb:61
114
+ #: ../lib/pdk/cli/exec.rb:75
107
115
  msgid "Using '%{vendored_bin_path}' from PDK package."
108
116
  msgstr ""
109
117
 
110
- #: ../lib/pdk/cli/exec.rb:64
118
+ #: ../lib/pdk/cli/exec.rb:78
111
119
  msgid "Could not find '%{vendored_bin_path}' in PDK package. Trying '%{fallback}' from the system PATH instead."
112
120
  msgstr ""
113
121
 
114
- #: ../lib/pdk/cli/exec.rb:102
122
+ #: ../lib/pdk/cli/exec.rb:116
115
123
  msgid "Expected execution context to be :system or :module but got '%{context}'."
116
124
  msgstr ""
117
125
 
118
- #: ../lib/pdk/cli/exec.rb:166
126
+ #: ../lib/pdk/cli/exec.rb:180
119
127
  msgid "Current working directory is not part of a module. (No metadata.json was found.)"
120
128
  msgstr ""
121
129
 
122
- #: ../lib/pdk/cli/exec.rb:220
130
+ #: ../lib/pdk/cli/exec.rb:234
123
131
  msgid "Executing '%{command}'"
124
132
  msgstr ""
125
133
 
126
- #: ../lib/pdk/cli/exec.rb:222
134
+ #: ../lib/pdk/cli/exec.rb:236
127
135
  msgid "Command environment: GEM_HOME is '%{gem_home}' and GEM_PATH is '%{gem_path}'"
128
136
  msgstr ""
129
137
 
130
- #: ../lib/pdk/cli/exec.rb:229
138
+ #: ../lib/pdk/cli/exec.rb:243
131
139
  msgid "Failed to execute '%{command}': %{message}"
132
140
  msgstr ""
133
141
 
134
- #: ../lib/pdk/cli/exec.rb:243
142
+ #: ../lib/pdk/cli/exec.rb:257
135
143
  msgid "Execution of '%{command}' complete (duration: %{duration_in_seconds}s; exit code: %{exit_code})"
136
144
  msgstr ""
137
145
 
@@ -163,16 +171,16 @@ msgstr ""
163
171
  msgid "Creating new module: %{modname}"
164
172
  msgstr ""
165
173
 
166
- #: ../lib/pdk/cli/new.rb:5
167
- msgid "new <type> [options]"
174
+ #: ../lib/pdk/cli/new.rb:4
175
+ msgid "new <thing> [options]"
168
176
  msgstr ""
169
177
 
170
- #: ../lib/pdk/cli/new.rb:6
178
+ #: ../lib/pdk/cli/new.rb:5
171
179
  msgid "create a new module, etc."
172
180
  msgstr ""
173
181
 
174
- #: ../lib/pdk/cli/new.rb:7
175
- msgid "Creates a new instance of <type> using relevant options."
182
+ #: ../lib/pdk/cli/new.rb:6
183
+ msgid "Creates a new <thing> using relevant options."
176
184
  msgstr ""
177
185
 
178
186
  #: ../lib/pdk/cli/new/class.rb:4
@@ -211,8 +219,24 @@ msgstr ""
211
219
  msgid "Specifies the license this module is written under. This should be a identifier from https://spdx.org/licenses/. Common values are 'Apache-2.0', 'MIT', or 'proprietary'."
212
220
  msgstr ""
213
221
 
222
+ #: ../lib/pdk/cli/new/task.rb:4
223
+ msgid "task [options] <name>"
224
+ msgstr ""
225
+
226
+ #: ../lib/pdk/cli/new/task.rb:5
227
+ msgid "Create a new task named <name> using given options"
228
+ msgstr ""
229
+
230
+ #: ../lib/pdk/cli/new/task.rb:8
231
+ msgid "A short description of the purpose of the task"
232
+ msgstr ""
233
+
234
+ #: ../lib/pdk/cli/new/task.rb:22
235
+ msgid "'%{name}' is not a valid task name"
236
+ msgstr ""
237
+
214
238
  #: ../lib/pdk/cli/test.rb:5
215
- msgid "test [type] [options]"
239
+ msgid "test [subcommand] [options]"
216
240
  msgstr ""
217
241
 
218
242
  #: ../lib/pdk/cli/test.rb:6
@@ -287,7 +311,7 @@ msgstr ""
287
311
  msgid "Error: the following values are invalid: %{invalid_entries}"
288
312
  msgstr ""
289
313
 
290
- #: ../lib/pdk/cli/util/option_validator.rb:69
314
+ #: ../lib/pdk/cli/util/option_validator.rb:70
291
315
  msgid "Non-standard data type '%{type}', make sure the type is available in your code, or dependencies"
292
316
  msgstr ""
293
317
 
@@ -366,87 +390,87 @@ msgstr ""
366
390
  msgid "Your username is not a valid Forge username. Proceeding with the username %{username}. You can fix this later in metadata.json."
367
391
  msgstr ""
368
392
 
369
- #: ../lib/pdk/generators/module.rb:159
393
+ #: ../lib/pdk/generators/module.rb:162
370
394
  msgid "Unable to create directory '%{dir}': %{message}"
371
395
  msgstr ""
372
396
 
373
- #: ../lib/pdk/generators/module.rb:171
397
+ #: ../lib/pdk/generators/module.rb:174
374
398
  msgid "If you have a Puppet Forge username, add it here."
375
399
  msgstr ""
376
400
 
377
- #: ../lib/pdk/generators/module.rb:172
401
+ #: ../lib/pdk/generators/module.rb:175
378
402
  msgid "We can use this to upload your module to the Forge when it's complete."
379
403
  msgstr ""
380
404
 
381
- #: ../lib/pdk/generators/module.rb:175
405
+ #: ../lib/pdk/generators/module.rb:178
382
406
  msgid "Forge usernames can only contain lowercase letters and numbers"
383
407
  msgstr ""
384
408
 
385
- #: ../lib/pdk/generators/module.rb:180
409
+ #: ../lib/pdk/generators/module.rb:183
386
410
  msgid "What version is this module?"
387
411
  msgstr ""
388
412
 
389
- #: ../lib/pdk/generators/module.rb:181
413
+ #: ../lib/pdk/generators/module.rb:184
390
414
  msgid "Puppet uses Semantic Versioning (semver.org) to version modules."
391
415
  msgstr ""
392
416
 
393
- #: ../lib/pdk/generators/module.rb:184
417
+ #: ../lib/pdk/generators/module.rb:187
394
418
  msgid "Semantic Version numbers must be in the form MAJOR.MINOR.PATCH"
395
419
  msgstr ""
396
420
 
397
- #: ../lib/pdk/generators/module.rb:189
421
+ #: ../lib/pdk/generators/module.rb:192
398
422
  msgid "Who wrote this module?"
399
423
  msgstr ""
400
424
 
401
- #: ../lib/pdk/generators/module.rb:190
425
+ #: ../lib/pdk/generators/module.rb:193
402
426
  msgid "This is used to credit the module's author."
403
427
  msgstr ""
404
428
 
405
- #: ../lib/pdk/generators/module.rb:196
429
+ #: ../lib/pdk/generators/module.rb:199
406
430
  msgid "What license does this module code fall under?"
407
431
  msgstr ""
408
432
 
409
- #: ../lib/pdk/generators/module.rb:197
410
- msgid "This should be an identifier from https://spdk.org/licenses/. Common values are \"Apache-2.0\", \"MIT\", or \"proprietary\"."
433
+ #: ../lib/pdk/generators/module.rb:200
434
+ msgid "This should be an identifier from https://spdx.org/licenses/. Common values are \"Apache-2.0\", \"MIT\", or \"proprietary\"."
411
435
  msgstr ""
412
436
 
413
- #: ../lib/pdk/generators/module.rb:203
437
+ #: ../lib/pdk/generators/module.rb:206
414
438
  msgid "What operating systems does this module support?"
415
439
  msgstr ""
416
440
 
417
- #: ../lib/pdk/generators/module.rb:204
441
+ #: ../lib/pdk/generators/module.rb:207
418
442
  msgid "Use the up and down keys to move between the choices, space to select and enter to continue."
419
443
  msgstr ""
420
444
 
421
- #: ../lib/pdk/generators/module.rb:260
445
+ #: ../lib/pdk/generators/module.rb:263
422
446
  msgid "Summarize the purpose of this module in a single sentence."
423
447
  msgstr ""
424
448
 
425
- #: ../lib/pdk/generators/module.rb:261
449
+ #: ../lib/pdk/generators/module.rb:264
426
450
  msgid "This helps other Puppet users understand what the module does."
427
451
  msgstr ""
428
452
 
429
- #: ../lib/pdk/generators/module.rb:267
453
+ #: ../lib/pdk/generators/module.rb:270
430
454
  msgid "If there is a source code repository for this module, enter the URL here."
431
455
  msgstr ""
432
456
 
433
- #: ../lib/pdk/generators/module.rb:268
457
+ #: ../lib/pdk/generators/module.rb:271
434
458
  msgid "Skip this if no repository exists yet. You can update this later in the metadata.json."
435
459
  msgstr ""
436
460
 
437
- #: ../lib/pdk/generators/module.rb:274
461
+ #: ../lib/pdk/generators/module.rb:277
438
462
  msgid "If there is a URL where others can learn more about this module, enter it here."
439
463
  msgstr ""
440
464
 
441
- #: ../lib/pdk/generators/module.rb:275 ../lib/pdk/generators/module.rb:281
465
+ #: ../lib/pdk/generators/module.rb:278 ../lib/pdk/generators/module.rb:284
442
466
  msgid "Optional. You can update this later in the metadata.json."
443
467
  msgstr ""
444
468
 
445
- #: ../lib/pdk/generators/module.rb:280
469
+ #: ../lib/pdk/generators/module.rb:283
446
470
  msgid "If there is a public issue tracker for this module, enter its URL here."
447
471
  msgstr ""
448
472
 
449
- #: ../lib/pdk/generators/module.rb:294
473
+ #: ../lib/pdk/generators/module.rb:297
450
474
  msgid ""
451
475
  "\n"
452
476
  "We need to create a metadata.json file for this module, so we're going to ask you %{count} questions.\n"
@@ -454,58 +478,62 @@ msgid ""
454
478
  "\n"
455
479
  msgstr ""
456
480
 
457
- #: ../lib/pdk/generators/module.rb:305 ../lib/pdk/generators/module.rb:327
481
+ #: ../lib/pdk/generators/module.rb:308 ../lib/pdk/generators/module.rb:330
458
482
  msgid "Interview cancelled; not generating the module."
459
483
  msgstr ""
460
484
 
461
- #: ../lib/pdk/generators/module.rb:316
485
+ #: ../lib/pdk/generators/module.rb:319
462
486
  msgid "SUMMARY"
463
487
  msgstr ""
464
488
 
465
- #: ../lib/pdk/generators/module.rb:323
489
+ #: ../lib/pdk/generators/module.rb:326
466
490
  msgid "About to generate this module; continue?"
467
491
  msgstr ""
468
492
 
469
- #: ../lib/pdk/generators/module.rb:324
493
+ #: ../lib/pdk/generators/module.rb:327
470
494
  msgid "Answer \"Y\" to continue or \"n\" to cancel."
471
495
  msgstr ""
472
496
 
473
- #: ../lib/pdk/generators/module.rb:332
497
+ #: ../lib/pdk/generators/module.rb:335
474
498
  msgid "Module not generated."
475
499
  msgstr ""
476
500
 
477
- #: ../lib/pdk/generators/puppet_object.rb:88
501
+ #: ../lib/pdk/generators/puppet_object.rb:91
478
502
  msgid "Unable to generate %{object_type}; '%{file}' already exists."
479
503
  msgstr ""
480
504
 
481
- #: ../lib/pdk/generators/puppet_object.rb:118
505
+ #: ../lib/pdk/generators/puppet_object.rb:123
482
506
  msgid "Creating '%{file}' from template."
483
507
  msgstr ""
484
508
 
485
- #: ../lib/pdk/generators/puppet_object.rb:124
509
+ #: ../lib/pdk/generators/puppet_object.rb:129
486
510
  msgid "Unable to create directory '%{path}': %{message}"
487
511
  msgstr ""
488
512
 
489
- #: ../lib/pdk/generators/puppet_object.rb:132
513
+ #: ../lib/pdk/generators/puppet_object.rb:137
490
514
  msgid "Unable to write to file '%{path}': %{message}"
491
515
  msgstr ""
492
516
 
493
- #: ../lib/pdk/generators/puppet_object.rb:155
517
+ #: ../lib/pdk/generators/puppet_object.rb:160
494
518
  msgid "No %{dir_type} template specified; trying next template directory."
495
519
  msgstr ""
496
520
 
497
- #: ../lib/pdk/generators/puppet_object.rb:168
521
+ #: ../lib/pdk/generators/puppet_object.rb:173
498
522
  msgid "Unable to find a %{type} template in %{url}; trying next template directory."
499
523
  msgstr ""
500
524
 
501
- #: ../lib/pdk/generators/puppet_object.rb:170
525
+ #: ../lib/pdk/generators/puppet_object.rb:175
502
526
  msgid "Unable to find the %{type} template in %{url}."
503
527
  msgstr ""
504
528
 
505
- #: ../lib/pdk/generators/puppet_object.rb:227
529
+ #: ../lib/pdk/generators/puppet_object.rb:232
506
530
  msgid "'%{dir}' does not contain valid Puppet module metadata: %{msg}"
507
531
  msgstr ""
508
532
 
533
+ #: ../lib/pdk/generators/task.rb:54
534
+ msgid "A task named '%{name}' already exists in this module; defined in %{file}"
535
+ msgstr ""
536
+
509
537
  #: ../lib/pdk/module/metadata.rb:47
510
538
  msgid "'%{file}' does not exist or is not a file."
511
539
  msgstr ""
@@ -637,11 +665,11 @@ msgid "Failed to prepare to run the unit tests."
637
665
  msgstr ""
638
666
 
639
667
  #: ../lib/pdk/tests/unit.rb:70
640
- msgid "Running unit tests in parallel."
668
+ msgid "Running unit tests."
641
669
  msgstr ""
642
670
 
643
671
  #: ../lib/pdk/tests/unit.rb:70
644
- msgid "Running unit tests."
672
+ msgid "Running unit tests in parallel."
645
673
  msgstr ""
646
674
 
647
675
  #: ../lib/pdk/tests/unit.rb:84
@@ -710,28 +738,28 @@ msgid ""
710
738
  "%{output}"
711
739
  msgstr ""
712
740
 
713
- #: ../lib/pdk/validators/base_validator.rb:72
741
+ #: ../lib/pdk/validators/base_validator.rb:74
714
742
  msgid "Invoking %{cmd}"
715
743
  msgstr ""
716
744
 
717
- #: ../lib/pdk/validators/base_validator.rb:77
745
+ #: ../lib/pdk/validators/base_validator.rb:79
718
746
  msgid "%{validator}: Skipped '%{target}'. Target does not contain any files to validate (%{pattern})."
719
747
  msgstr ""
720
748
 
721
- #: ../lib/pdk/validators/base_validator.rb:81
749
+ #: ../lib/pdk/validators/base_validator.rb:83
722
750
  msgid "Target does not contain any files to validate (%{pattern})."
723
751
  msgstr ""
724
752
 
725
- #: ../lib/pdk/validators/base_validator.rb:90
753
+ #: ../lib/pdk/validators/base_validator.rb:92
726
754
  msgid "%{validator}: Skipped '%{target}'. Target file not found."
727
755
  msgstr ""
728
756
 
729
- #: ../lib/pdk/validators/base_validator.rb:94
757
+ #: ../lib/pdk/validators/base_validator.rb:96
730
758
  msgid "File does not exist."
731
759
  msgstr ""
732
760
 
733
761
  #: ../lib/pdk/validators/metadata/metadata_json_lint.rb:23
734
- msgid "Checking metadata style (%{targets})."
762
+ msgid "Checking module metadata style (%{targets})."
735
763
  msgstr ""
736
764
 
737
765
  #: ../lib/pdk/validators/metadata/metadata_json_lint.rb:40
@@ -742,10 +770,34 @@ msgstr ""
742
770
  msgid "Checking metadata syntax (%{targets})."
743
771
  msgstr ""
744
772
 
745
- #: ../lib/pdk/validators/metadata/metadata_syntax.rb:69
773
+ #: ../lib/pdk/validators/metadata/metadata_syntax.rb:69 ../lib/pdk/validators/metadata/task_metadata_lint.rb:101
746
774
  msgid "Could not be read."
747
775
  msgstr ""
748
776
 
777
+ #: ../lib/pdk/validators/metadata/task_metadata_lint.rb:22
778
+ msgid "Checking task metadata style (%{targets})."
779
+ msgstr ""
780
+
781
+ #: ../lib/pdk/validators/metadata/task_metadata_lint.rb:61
782
+ msgid "Failed to parse Task Metadata Schema file."
783
+ msgstr ""
784
+
785
+ #: ../lib/pdk/validators/metadata/task_metadata_lint.rb:65
786
+ msgid "Task Metadata Schema was not found in the cache. Now downloading from the forge."
787
+ msgstr ""
788
+
789
+ #: ../lib/pdk/validators/metadata/task_metadata_lint.rb:76
790
+ msgid "Unable to download Task Metadata Schema file. %{code}: %{message}."
791
+ msgstr ""
792
+
793
+ #: ../lib/pdk/validators/metadata/task_metadata_lint.rb:80
794
+ msgid "Unable to download Task Metadata Schema file. Please check internet connectivity and retry this action. %{error}"
795
+ msgstr ""
796
+
797
+ #: ../lib/pdk/validators/metadata/task_metadata_lint.rb:116
798
+ msgid "Unable to validate Task Metadata. %{error}."
799
+ msgstr ""
800
+
749
801
  #: ../lib/pdk/validators/puppet/puppet_lint.rb:22
750
802
  msgid "Checking Puppet manifest style (%{pattern})."
751
803
  msgstr ""
@@ -758,11 +810,11 @@ msgstr ""
758
810
  msgid "Checking Ruby code style (%{pattern})."
759
811
  msgstr ""
760
812
 
761
- #: ../lib/puppet/util/windows/api_types.rb:68
813
+ #: ../lib/puppet/util/windows/api_types.rb:72
762
814
  msgid "Unable to read wide strings with %{null_terminator} terminal nulls"
763
815
  msgstr ""
764
816
 
765
- #: ../lib/puppet/util/windows/api_types.rb:199
817
+ #: ../lib/puppet/util/windows/api_types.rb:203
766
818
  msgid "Bad GUID format."
767
819
  msgstr ""
768
820
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-14 00:00:00.000000000 Z
11
+ date: 2017-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 2.1.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: json-schema
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 2.8.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 2.8.0
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: tty-which
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -161,6 +175,7 @@ files:
161
175
  - lib/pdk/cli/new/class.rb
162
176
  - lib/pdk/cli/new/defined_type.rb
163
177
  - lib/pdk/cli/new/module.rb
178
+ - lib/pdk/cli/new/task.rb
164
179
  - lib/pdk/cli/test.rb
165
180
  - lib/pdk/cli/test/unit.rb
166
181
  - lib/pdk/cli/util.rb
@@ -174,6 +189,7 @@ files:
174
189
  - lib/pdk/generators/module.rb
175
190
  - lib/pdk/generators/puppet_class.rb
176
191
  - lib/pdk/generators/puppet_object.rb
192
+ - lib/pdk/generators/task.rb
177
193
  - lib/pdk/i18n.rb
178
194
  - lib/pdk/logger.rb
179
195
  - lib/pdk/module/metadata.rb
@@ -190,6 +206,7 @@ files:
190
206
  - lib/pdk/validators/base_validator.rb
191
207
  - lib/pdk/validators/metadata/metadata_json_lint.rb
192
208
  - lib/pdk/validators/metadata/metadata_syntax.rb
209
+ - lib/pdk/validators/metadata/task_metadata_lint.rb
193
210
  - lib/pdk/validators/metadata_validator.rb
194
211
  - lib/pdk/validators/puppet/puppet_lint.rb
195
212
  - lib/pdk/validators/puppet/puppet_syntax.rb
@@ -222,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
239
  version: '0'
223
240
  requirements: []
224
241
  rubyforge_project:
225
- rubygems_version: 2.6.12
242
+ rubygems_version: 2.5.2
226
243
  signing_key:
227
244
  specification_version: 4
228
245
  summary: A key part of the Puppet Development Kit, the shortest path to better modules