pdk 1.1.0 → 1.2.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
  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