pdk 1.7.1 → 1.8.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: '08eefaca77036460baaf59107c23f00582b61244'
4
- data.tar.gz: '078a7e34d073f5e9571642188d4983d046284fa1'
3
+ metadata.gz: 45b3709175917e4c02f2195a9333c931393af8d4
4
+ data.tar.gz: 18e7cb21971f1e6f56906bba22bc46959724616d
5
5
  SHA512:
6
- metadata.gz: 89d63ff36f12e738d768c1fc592fd6bc8835ff0dd4306f9d5ea10a6cf285d532e3bff21c1075420c7114f557e5fb713874615e13a1749a653c225a945aea1bac
7
- data.tar.gz: 58ebcc413564a0866efc92af272b0d7fe26e5f961a9b7625be38c75969a4f2307b8e9339b564916aa9cd3beda8849b93016921c6ba491192e9d0932cb583ef29
6
+ metadata.gz: fb148b8e30ac0af4974bbda5e1b379edfba820f80f7d13e803ec06d317e3feece0bd81ce59e36f9077c6a52d33c445ef41be394391fef0481581d31e13b5d718
7
+ data.tar.gz: 8a449fe30e4af21e5316d14f9f9df235c866c702eb6d9ec59b8747e342587ed60b4b7a91ab9756610f4790f75ab2ddec4ad0e3aaafceff98180bc107c0e78e9f
@@ -4,6 +4,42 @@ All changes to this repo will be documented in this file.
4
4
  See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) for a high-level summary.
5
5
 
6
6
 
7
+ ## [v1.8.0](https://github.com/puppetlabs/pdk/tree/v1.8.0) (2018-11-27)
8
+ [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.7.1...v1.8.0)
9
+
10
+ **Implemented enhancements:**
11
+
12
+ - \(PDK-1090\) Add task name validator for existing tasks [\#598](https://github.com/puppetlabs/pdk/pull/598) ([rodjek](https://github.com/rodjek))
13
+
14
+ **Fixed bugs:**
15
+
16
+ - \(PDK-1180\) Cleanly handle a null pdk-version in metadata.json [\#599](https://github.com/puppetlabs/pdk/pull/599) ([rodjek](https://github.com/rodjek))
17
+ - \(PDK-1104\) Don't always override custom template url with default [\#597](https://github.com/puppetlabs/pdk/pull/597) ([rodjek](https://github.com/rodjek))
18
+ - \(PDK-654\) Allow rubocop to determine its own targets by default [\#594](https://github.com/puppetlabs/pdk/pull/594) ([rodjek](https://github.com/rodjek))
19
+ - \(PDK-1187\) Don't override bundler path on gem installs [\#592](https://github.com/puppetlabs/pdk/pull/592) ([rodjek](https://github.com/rodjek))
20
+ - \(PDK-547\) Ensure all PDK created files use LF line endings [\#590](https://github.com/puppetlabs/pdk/pull/590) ([rodjek](https://github.com/rodjek))
21
+ - \(PDK-1172\) Call PDK::Util::Bundler.ensure\_bundle! after module creation [\#589](https://github.com/puppetlabs/pdk/pull/589) ([rodjek](https://github.com/rodjek))
22
+ - \(PDK-1192\) Add module\_root/vendor/ to default ignored paths [\#588](https://github.com/puppetlabs/pdk/pull/588) ([rodjek](https://github.com/rodjek))
23
+ - \(PDK-1194\) Exclude plans/\*\*/\*.pp from PDK::Validate::PuppetSyntax [\#586](https://github.com/puppetlabs/pdk/pull/586) ([rodjek](https://github.com/rodjek))
24
+ - \(PDK-972\) Don't register a pending change when deleting non-existent files [\#585](https://github.com/puppetlabs/pdk/pull/585) ([rodjek](https://github.com/rodjek))
25
+ - \(PDK-1093\) Replace null values and empty data structures in metadata when converting [\#584](https://github.com/puppetlabs/pdk/pull/584) ([rodjek](https://github.com/rodjek))
26
+ - \(PDK-400\) Output the rspec run wall time in test unit summary [\#583](https://github.com/puppetlabs/pdk/pull/583) ([rodjek](https://github.com/rodjek))
27
+ - \(PDK-1200\) Fix bundle env handling with puppet-dev [\#579](https://github.com/puppetlabs/pdk/pull/579) ([bmjen](https://github.com/bmjen))
28
+ - \(PDK-925\) Exclude files that wouldn't be packaged from being validated [\#578](https://github.com/puppetlabs/pdk/pull/578) ([rodjek](https://github.com/rodjek))
29
+
30
+ **Closed issues:**
31
+
32
+ - Pdk validate should not assume that all puppet: URL require 'modules/'. [\#591](https://github.com/puppetlabs/pdk/issues/591)
33
+ - Create configuration to Overide default parameters [\#542](https://github.com/puppetlabs/pdk/issues/542)
34
+
35
+ **Merged pull requests:**
36
+
37
+ - \(maint\) Update package tests to add task name validation [\#600](https://github.com/puppetlabs/pdk/pull/600) ([bmjen](https://github.com/bmjen))
38
+ - \(maint\) Fix package tests [\#596](https://github.com/puppetlabs/pdk/pull/596) ([rodjek](https://github.com/rodjek))
39
+ - \(maint\) Add --skip-bundle-install to `pdk new module` [\#595](https://github.com/puppetlabs/pdk/pull/595) ([rodjek](https://github.com/rodjek))
40
+ - \(PDK-1208\) Raise lower bound of 'puppet' requirement for new modules [\#581](https://github.com/puppetlabs/pdk/pull/581) ([scotje](https://github.com/scotje))
41
+ - \(maint\) Bump version for dev [\#577](https://github.com/puppetlabs/pdk/pull/577) ([bmjen](https://github.com/bmjen))
42
+
7
43
  ## [v1.7.1](https://github.com/puppetlabs/pdk/tree/v1.7.1) (2018-10-05)
8
44
  [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.7.0...v1.7.1)
9
45
 
@@ -20,6 +56,7 @@ See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) f
20
56
 
21
57
  **Merged pull requests:**
22
58
 
59
+ - Release Prep for 1.7.1 [\#576](https://github.com/puppetlabs/pdk/pull/576) ([bmjen](https://github.com/bmjen))
23
60
  - \(maint\) Update PDK metadata defaults to include Puppet 6 [\#572](https://github.com/puppetlabs/pdk/pull/572) ([bmjen](https://github.com/bmjen))
24
61
  - \(maint\) Update package tests for ruby 2.5.1 as the new default [\#571](https://github.com/puppetlabs/pdk/pull/571) ([bmjen](https://github.com/bmjen))
25
62
  - Bump version to 1.8.0.pre [\#564](https://github.com/puppetlabs/pdk/pull/564) ([bmjen](https://github.com/bmjen))
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'pdk/util/filesystem'
2
3
 
3
4
  module PDK
4
5
  # Singleton accessor to the current answer file being used by the PDK.
@@ -21,6 +22,8 @@ module PDK
21
22
  attr_reader :answers
22
23
  attr_reader :answer_file_path
23
24
 
25
+ include PDK::Util::Filesystem
26
+
24
27
  # Initialises the AnswerFile object, which stores the responses to certain
25
28
  # interactive questions.
26
29
  #
@@ -107,9 +110,7 @@ module PDK
107
110
  def save_to_disk
108
111
  FileUtils.mkdir_p(File.dirname(answer_file_path))
109
112
 
110
- File.open(answer_file_path, 'w') do |answer_file|
111
- answer_file.puts JSON.pretty_generate(answers)
112
- end
113
+ write_file(answer_file_path, JSON.pretty_generate(answers))
113
114
  rescue SystemCallError, IOError => e
114
115
  raise PDK::CLI::FatalError, _("Unable to write '%{file}': %{msg}") % {
115
116
  file: answer_file_path,
@@ -39,7 +39,9 @@ module PDK::CLI
39
39
  end
40
40
 
41
41
  def self.template_url_option(dsl)
42
- dsl.option nil, 'template-url', _('Specifies the URL to the template to use when creating new modules or classes.'), argument: :required, default: PDK::Util.default_template_url
42
+ desc = _('Specifies the URL to the template to use when creating new modules or classes. (default: %{default_url})') % { default_url: PDK::Util.default_template_url }
43
+
44
+ dsl.option nil, 'template-url', desc, argument: :required
43
45
  end
44
46
 
45
47
  def self.skip_interview_option(dsl)
@@ -10,6 +10,7 @@ module PDK::CLI
10
10
 
11
11
  option nil, 'license', _('Specifies the license this module is written under. ' \
12
12
  "This should be a identifier from https://spdx.org/licenses/. Common values are 'Apache-2.0', 'MIT', or 'proprietary'."), argument: :required
13
+ option nil, 'skip-bundle-install', _('Do not automatically run `bundle install` after creating the module.'), hidden: true
13
14
 
14
15
  run do |opts, args, _cmd|
15
16
  require 'pdk/generate/module'
@@ -70,6 +70,9 @@ module PDK::CLI
70
70
  puppet_env = PDK::CLI::Util.puppet_from_opts_or_env(opts)
71
71
  PDK::Util::PuppetVersion.fetch_puppet_dev if opts.key?(:'puppet-dev')
72
72
  PDK::Util::RubyVersion.use(puppet_env[:ruby_version])
73
+
74
+ opts.merge!(puppet_env[:gemset])
75
+
73
76
  PDK::Util::Bundler.ensure_bundle!(puppet_env[:gemset])
74
77
 
75
78
  exit_code = PDK::Test::Unit.invoke(report, opts)
@@ -6,7 +6,7 @@ module PDK::CLI
6
6
  usage _('validate [validators] [options] [targets]')
7
7
  summary _('Run static analysis tests.')
8
8
  description _(
9
- "Run metadata, Puppet, or Ruby validation.\n\n" \
9
+ "Run metadata, Puppet, Ruby, or Tasks validation.\n\n" \
10
10
  '[validators] is an optional comma-separated list of validators to use. ' \
11
11
  'If not specified, all validators are used. ' \
12
12
  "Note that when using PowerShell, the list of validators must be enclosed in single quotes.\n\n" \
@@ -91,6 +91,9 @@ module PDK::CLI
91
91
  puppet_env = PDK::CLI::Util.puppet_from_opts_or_env(opts)
92
92
  PDK::Util::PuppetVersion.fetch_puppet_dev if opts.key?(:'puppet-dev')
93
93
  PDK::Util::RubyVersion.use(puppet_env[:ruby_version])
94
+
95
+ options.merge!(puppet_env[:gemset])
96
+
94
97
  PDK::Util::Bundler.ensure_bundle!(puppet_env[:gemset])
95
98
 
96
99
  exit_code = 0
@@ -17,6 +17,8 @@ require 'pdk/util/version'
17
17
  module PDK
18
18
  module Generate
19
19
  class Module
20
+ extend PDK::Util::Filesystem
21
+
20
22
  def self.validate_options(opts)
21
23
  unless PDK::CLI::Util::OptionValidator.valid_module_name?(opts[:module_name])
22
24
  error_msg = _(
@@ -40,7 +42,7 @@ module PDK
40
42
 
41
43
  begin
42
44
  test_file = File.join(parent_dir, '.pdk-test-writable')
43
- File.open(test_file, 'w') { |f| f.write('This file was created by the Puppet Development Kit to test if this folder was writable, you can safely remove this file.') }
45
+ write_file(test_file, 'This file was created by the Puppet Development Kit to test if this folder was writable, you can safely remove this file.')
44
46
  FileUtils.rm_f(test_file)
45
47
  rescue Errno::EACCES
46
48
  raise PDK::CLI::FatalError, _("You do not have permission to write to '%{parent_dir}'") % {
@@ -59,7 +61,7 @@ module PDK
59
61
  templates.render do |file_path, file_content|
60
62
  file = Pathname.new(temp_target_dir) + file_path
61
63
  file.dirname.mkpath
62
- file.write(file_content)
64
+ write_file(file, file_content)
63
65
  end
64
66
 
65
67
  # Add information about the template used to generate the module to the
@@ -84,6 +86,8 @@ module PDK
84
86
 
85
87
  begin
86
88
  if FileUtils.mv(temp_target_dir, target_dir)
89
+ Dir.chdir(target_dir) { PDK::Util::Bundler.ensure_bundle! } unless opts[:'skip-bundle-install']
90
+
87
91
  PDK.logger.info(_('Module \'%{name}\' generated at path \'%{path}\', from template \'%{template_url}\'.') % { name: opts[:module_name], path: target_dir, template_url: template_url })
88
92
  PDK.logger.info(_('In your module directory, add classes with the \'pdk new class\' command.'))
89
93
  end
@@ -5,6 +5,7 @@ require 'pdk/logger'
5
5
  require 'pdk/module/metadata'
6
6
  require 'pdk/module/templatedir'
7
7
  require 'pdk/template_file'
8
+ require 'pdk/util/filesystem'
8
9
 
9
10
  module PDK
10
11
  module Generate
@@ -180,7 +181,7 @@ module PDK
180
181
  }
181
182
  end
182
183
 
183
- File.open(dest_path, 'w') { |f| f.write file_content }
184
+ PDK::Util::Filesystem.write_file(dest_path, file_content)
184
185
  rescue SystemCallError => e
185
186
  raise PDK::CLI::FatalError, _("Unable to write to file '%{path}': %{message}") % {
186
187
  path: dest_path,
@@ -0,0 +1,21 @@
1
+ require 'pathspec'
2
+
3
+ module PDK
4
+ module Module
5
+ DEFAULT_IGNORED = [
6
+ '/pkg/',
7
+ '.*',
8
+ '~*',
9
+ '/coverage',
10
+ '/checksums.json',
11
+ '/REVISION',
12
+ '/spec/fixtures/modules/',
13
+ '/vendor/',
14
+ ].freeze
15
+
16
+ def default_ignored_pathspec
17
+ @default_ignored_pathspec ||= PathSpec.new(DEFAULT_IGNORED)
18
+ end
19
+ module_function :default_ignored_pathspec
20
+ end
21
+ end
@@ -3,21 +3,12 @@ require 'minitar'
3
3
  require 'zlib'
4
4
  require 'pathspec'
5
5
  require 'find'
6
+ require 'pdk/module'
6
7
  require 'pdk/tests/unit'
7
8
 
8
9
  module PDK
9
10
  module Module
10
11
  class Build
11
- DEFAULT_IGNORED = [
12
- '/pkg/',
13
- '.*',
14
- '~*',
15
- '/coverage',
16
- '/checksums.json',
17
- '/REVISION',
18
- '/spec/fixtures/modules/',
19
- ].freeze
20
-
21
12
  def self.invoke(options = {})
22
13
  new(options).build
23
14
  end
@@ -213,7 +204,7 @@ module PDK
213
204
  ignored = ignored.add("\/#{File.basename(target_dir)}\/")
214
205
  end
215
206
 
216
- DEFAULT_IGNORED.each { |r| ignored.add(r) }
207
+ PDK::Module::DEFAULT_IGNORED.each { |r| ignored.add(r) }
217
208
 
218
209
  ignored
219
210
  end
@@ -108,19 +108,22 @@ module PDK
108
108
 
109
109
  def update_metadata(metadata_path, template_metadata)
110
110
  if File.file?(metadata_path)
111
- if File.readable?(metadata_path)
112
- begin
113
- metadata = PDK::Module::Metadata.from_file(metadata_path)
114
- new_values = PDK::Module::Metadata::DEFAULTS.reject { |key, _| metadata.data.key?(key) }
115
- metadata.update!(new_values)
116
- rescue ArgumentError
117
- metadata = PDK::Generate::Module.prepare_metadata(options) unless options[:noop] # rubocop:disable Metrics/BlockNesting
118
- end
119
- else
111
+ unless File.readable?(metadata_path)
120
112
  raise PDK::CLI::ExitWithError, _('Unable to update module metadata; %{path} exists but it is not readable.') % {
121
113
  path: metadata_path,
122
114
  }
123
115
  end
116
+
117
+ begin
118
+ metadata = PDK::Module::Metadata.from_file(metadata_path)
119
+ new_values = PDK::Module::Metadata::DEFAULTS.select do |key, _|
120
+ !metadata.data.key?(key) || metadata.data[key].nil? ||
121
+ (key == 'requirements' && metadata.data[key].empty?)
122
+ end
123
+ metadata.update!(new_values)
124
+ rescue ArgumentError
125
+ metadata = PDK::Generate::Module.prepare_metadata(options) unless options[:noop]
126
+ end
124
127
  elsif File.exist?(metadata_path)
125
128
  raise PDK::CLI::ExitWithError, _('Unable to update module metadata; %{path} exists but it is not a file.') % {
126
129
  path: metadata_path,
@@ -1,10 +1,13 @@
1
1
  require 'json'
2
+ require 'pdk/util/filesystem'
2
3
 
3
4
  module PDK
4
5
  module Module
5
6
  class Metadata
6
7
  attr_accessor :data
7
8
 
9
+ include PDK::Util::Filesystem
10
+
8
11
  OPERATING_SYSTEMS = {
9
12
  'RedHat based Linux' => [
10
13
  {
@@ -77,7 +80,7 @@ module PDK
77
80
  OPERATING_SYSTEMS[os_name]
78
81
  }.flatten,
79
82
  'requirements' => [
80
- { 'name' => 'puppet', 'version_requirement' => '>= 4.7.0 < 7.0.0' },
83
+ { 'name' => 'puppet', 'version_requirement' => '>= 4.10.0 < 7.0.0' },
81
84
  ],
82
85
  }.freeze
83
86
 
@@ -120,9 +123,7 @@ module PDK
120
123
  end
121
124
 
122
125
  def write!(path)
123
- File.open(path, 'w') do |file|
124
- file.puts to_json
125
- end
126
+ write_file(path, to_json)
126
127
  end
127
128
 
128
129
  def forge_ready?
@@ -3,6 +3,7 @@ require 'diff/lcs/hunk'
3
3
  require 'English'
4
4
  require 'fileutils'
5
5
  require 'set'
6
+ require 'pdk/util/filesystem'
6
7
 
7
8
  module PDK
8
9
  module Module
@@ -48,7 +49,7 @@ module PDK
48
49
 
49
50
  {
50
51
  added: @added_files,
51
- removed: @removed_files,
52
+ removed: @removed_files.select { |f| File.exist?(f) },
52
53
  modified: @diff_cache.reject { |_, value| value.nil? },
53
54
  }
54
55
  end
@@ -148,7 +149,7 @@ module PDK
148
149
  def write_file(path, content)
149
150
  FileUtils.mkdir_p(File.dirname(path))
150
151
  PDK.logger.debug(_("writing '%{path}'") % { path: path })
151
- File.open(path, 'w') { |f| f.puts content }
152
+ PDK::Util::Filesystem.write_file(path, content)
152
153
  rescue Errno::EACCES
153
154
  raise PDK::CLI::ExitWithError, _("You do not have permission to write to '%{path}'") % { path: path }
154
155
  end
@@ -69,8 +69,11 @@ module PDK
69
69
  setup
70
70
 
71
71
  tests = options.fetch(:tests)
72
+
73
+ environment = { 'CI_SPEC_OPTIONS' => '--format j' }
74
+ environment['PUPPET_GEM_VERSION'] = options[:puppet] if options[:puppet]
72
75
  spinner_msg = options.key?(:parallel) ? _('Running unit tests in parallel.') : _('Running unit tests.')
73
- result = rake(cmd(tests, options), spinner_msg, 'CI_SPEC_OPTIONS' => '--format j')
76
+ result = rake(cmd(tests, options), spinner_msg, environment)
74
77
 
75
78
  json_result = if options.key?(:parallel)
76
79
  PDK::Util.find_all_json_in(result[:stdout])
@@ -85,16 +88,16 @@ module PDK
85
88
 
86
89
  raise PDK::CLI::FatalError, _('Unit test output did not contain a valid JSON result: %{output}') % { output: result[:stdout] } if json_result.nil? || json_result.empty?
87
90
 
88
- json_result = merge_json_results(json_result, result[:duration]) if options.key?(:parallel)
91
+ json_result = merge_json_results(json_result) if options.key?(:parallel)
89
92
 
90
- parse_output(report, json_result)
93
+ parse_output(report, json_result, result[:duration])
91
94
 
92
95
  result[:exit_code]
93
96
  ensure
94
97
  tear_down if options[:'clean-fixtures']
95
98
  end
96
99
 
97
- def self.parse_output(report, json_data)
100
+ def self.parse_output(report, json_data, duration)
98
101
  # Output messages to stderr.
99
102
  json_data['messages'] && json_data['messages'].each { |msg| $stderr.puts msg }
100
103
 
@@ -137,13 +140,13 @@ module PDK
137
140
  # TODO: standardize summary output
138
141
  $stderr.puts ' ' << _('Evaluated %{total} tests in %{duration} seconds: %{failures} failures, %{pending} pending.') % {
139
142
  total: json_data['summary']['example_count'],
140
- duration: json_data['summary']['duration'],
143
+ duration: duration,
141
144
  failures: json_data['summary']['failure_count'],
142
145
  pending: json_data['summary']['pending_count'],
143
146
  }
144
147
  end
145
148
 
146
- def self.merge_json_results(json_data, duration)
149
+ def self.merge_json_results(json_data)
147
150
  merged_json_result = {}
148
151
 
149
152
  # Merge messages
@@ -164,7 +167,6 @@ module PDK
164
167
 
165
168
  # Merge summaries
166
169
  summary_hash = {
167
- 'duration' => duration,
168
170
  'example_count' => 0,
169
171
  'failure_count' => 0,
170
172
  'pending_count' => 0,
@@ -4,6 +4,7 @@ require 'tempfile'
4
4
  require 'pdk/util/version'
5
5
  require 'pdk/util/windows'
6
6
  require 'pdk/util/vendored_file'
7
+ require 'pdk/util/filesystem'
7
8
 
8
9
  module PDK
9
10
  module Util
@@ -256,10 +257,10 @@ module PDK
256
257
  def module_pdk_version
257
258
  metadata = module_metadata
258
259
 
259
- if !metadata.nil? && metadata.include?('pdk-version')
260
- metadata['pdk-version'].split.first
261
- else
260
+ if metadata.nil? || metadata.fetch('pdk-version', nil).nil?
262
261
  nil
262
+ else
263
+ metadata['pdk-version'].split.first
263
264
  end
264
265
  rescue ArgumentError => e
265
266
  PDK.logger.error(e)
@@ -46,8 +46,9 @@ module PDK
46
46
  bundle.update_lock!(with: gem_overrides, local: all_deps_available)
47
47
 
48
48
  # If there are missing dependencies after updating the lockfile, let `bundle install`
49
- # go out and get them.
50
- unless bundle.installed?
49
+ # go out and get them. If the specified puppet gem version points to a remote location
50
+ # or local filepath, then run bundle install as well.
51
+ if !bundle.installed? || (gem_overrides[:puppet] && gem_overrides[:puppet].start_with?('file://', 'git://', 'https://'))
51
52
  bundle.install!(gem_overrides)
52
53
  end
53
54
 
@@ -96,7 +97,6 @@ module PDK
96
97
  PDK.logger.debug(_('Checking for missing Gemfile dependencies.'))
97
98
 
98
99
  argv = ['check', "--gemfile=#{gemfile}", '--dry-run']
99
- argv << "--path=#{bundle_cachedir}" unless PDK::Util.package_install?
100
100
 
101
101
  cmd = bundle_command(*argv).tap do |c|
102
102
  c.update_environment(gemfile_env(gem_overrides)) unless gem_overrides.empty?
@@ -191,7 +191,6 @@ module PDK
191
191
  def install!(gem_overrides = {})
192
192
  argv = ['install', "--gemfile=#{gemfile}"]
193
193
  argv << '-j4' unless Gem.win_platform? && Gem::Version.new(PDK::Util::RubyVersion.active_ruby_version) < Gem::Version.new('2.3.5')
194
- argv << "--path=#{bundle_cachedir}" unless PDK::Util.package_install?
195
194
 
196
195
  cmd = bundle_command(*argv).tap do |c|
197
196
  c.add_spinner(_('Installing missing Gemfile dependencies.'))
@@ -248,10 +247,6 @@ module PDK
248
247
  c.context = :module
249
248
  end
250
249
  end
251
-
252
- def bundle_cachedir
253
- @bundle_cachedir ||= PDK::Util.package_install? ? PDK::Util.package_cachedir : File.join(PDK::Util.cachedir)
254
- end
255
250
  end
256
251
  end
257
252
  end