pdk 1.14.1 → 1.15.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/lib/pdk/answer_file.rb +5 -7
  4. data/lib/pdk/cli.rb +1 -0
  5. data/lib/pdk/cli/console.rb +1 -1
  6. data/lib/pdk/cli/convert.rb +10 -2
  7. data/lib/pdk/cli/exec.rb +2 -1
  8. data/lib/pdk/cli/module/build.rb +1 -1
  9. data/lib/pdk/cli/module/generate.rb +1 -1
  10. data/lib/pdk/cli/release.rb +192 -0
  11. data/lib/pdk/cli/release/prep.rb +39 -0
  12. data/lib/pdk/cli/release/publish.rb +40 -0
  13. data/lib/pdk/cli/update.rb +12 -0
  14. data/lib/pdk/config.rb +1 -1
  15. data/lib/pdk/config/namespace.rb +1 -1
  16. data/lib/pdk/generate/module.rb +11 -17
  17. data/lib/pdk/generate/puppet_object.rb +1 -2
  18. data/lib/pdk/generate/task.rb +1 -1
  19. data/lib/pdk/module.rb +2 -1
  20. data/lib/pdk/module/build.rb +15 -25
  21. data/lib/pdk/module/convert.rb +4 -9
  22. data/lib/pdk/module/metadata.rb +1 -3
  23. data/lib/pdk/module/release.rb +260 -0
  24. data/lib/pdk/module/template_dir.rb +115 -0
  25. data/lib/pdk/module/template_dir/base.rb +268 -0
  26. data/lib/pdk/module/template_dir/git.rb +91 -0
  27. data/lib/pdk/module/template_dir/local.rb +21 -0
  28. data/lib/pdk/module/update.rb +17 -5
  29. data/lib/pdk/module/update_manager.rb +1 -1
  30. data/lib/pdk/report.rb +18 -12
  31. data/lib/pdk/report/event.rb +6 -3
  32. data/lib/pdk/template_file.rb +2 -2
  33. data/lib/pdk/util.rb +17 -6
  34. data/lib/pdk/util/bundler.rb +8 -9
  35. data/lib/pdk/util/changelog_generator.rb +115 -0
  36. data/lib/pdk/util/filesystem.rb +62 -2
  37. data/lib/pdk/util/git.rb +60 -8
  38. data/lib/pdk/util/puppet_version.rb +4 -5
  39. data/lib/pdk/util/ruby_version.rb +3 -3
  40. data/lib/pdk/util/template_uri.rb +49 -40
  41. data/lib/pdk/util/version.rb +4 -4
  42. data/lib/pdk/validate/metadata/metadata_syntax.rb +2 -2
  43. data/lib/pdk/validate/puppet/puppet_epp.rb +2 -4
  44. data/lib/pdk/validate/puppet/puppet_syntax.rb +2 -4
  45. data/lib/pdk/validate/tasks/metadata_lint.rb +2 -2
  46. data/lib/pdk/validate/yaml/syntax.rb +3 -3
  47. data/lib/pdk/version.rb +1 -1
  48. data/locales/pdk.pot +401 -149
  49. metadata +11 -3
  50. data/lib/pdk/module/templatedir.rb +0 -391
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa7118858cde5b6a4ea492a22683a8a077386d31e00157469186a373f91d8559
4
- data.tar.gz: 4feab9cf89fd58a0c4023d04905efaccb56021dc7f44d0110b332de0fd1c7781
3
+ metadata.gz: d1b4321e6c37cde43ae58cb4ca94cd578254270065c698c87455aa37976cea36
4
+ data.tar.gz: 054d826aefa38e7697d7b45e6f9c6733f4ad2f36501c9cb34dab7c1c6e47d2af
5
5
  SHA512:
6
- metadata.gz: 63e8e385a5f17a12dd36d3d6938ee601e0020b0e8b55603ec409d111cd0add4f5b748c1cc493b7612d02381d1832d56ab7de7c933ab85c9773eee463e9c60dc9
7
- data.tar.gz: 33063bc92b0d8678cf2ac33333e23a1c3ca2d51bfece32eb326376f8681334e8b9574cf9a9df9c19da931248afc88197c0367e4659a81df9b96fca3ab6ba74fa
6
+ metadata.gz: 6ab2eba8dc386d45b6894a4aac0e17ff24208890fd73932cdebc10e9ffa0405e30280de45fc6190f24e3042b2ad7b208714171f581922be1a7bc601d6d212934
7
+ data.tar.gz: 52da98af48384e23b1fb2ca97dc1ad77d4811aa9f5dc6d9eaa89f9894e6d33a7e533b3b612699a33f9bbb02a3b29bd64a9b9b498cf04130288d16c78399f8b8b
@@ -4,6 +4,33 @@ 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.15.0](https://github.com/puppetlabs/pdk/tree/v1.15.0) (2019-12-13)
8
+ [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.14.1...v1.15.0)
9
+
10
+ **Implemented enhancements:**
11
+
12
+ - \(PDK-1488\) Inform user if updating a pinned module [\#816](https://github.com/puppetlabs/pdk/pull/816) ([rodjek](https://github.com/rodjek))
13
+ - \(PDK-1487\) Add --default-template flag to pdk convert [\#814](https://github.com/puppetlabs/pdk/pull/814) ([rodjek](https://github.com/rodjek))
14
+ - \(GH-808\) Implement pdk release prep and publish subcommands [\#813](https://github.com/puppetlabs/pdk/pull/813) ([glennsarti](https://github.com/glennsarti))
15
+ - \(GH-808\) Implement pdk release subcommand [\#809](https://github.com/puppetlabs/pdk/pull/809) ([glennsarti](https://github.com/glennsarti))
16
+ - \(PDK-1364\) Allow non-git template directories to be used [\#803](https://github.com/puppetlabs/pdk/pull/803) ([glennsarti](https://github.com/glennsarti))
17
+
18
+ **Fixed bugs:**
19
+
20
+ - \(UI\) Remove UTF-8 "smart quotes" from PDK output [\#806](https://github.com/puppetlabs/pdk/issues/806)
21
+ - \(GH-808\) Fix prompt for pdk release [\#812](https://github.com/puppetlabs/pdk/pull/812) ([glennsarti](https://github.com/glennsarti))
22
+ - \(PDK-1169\) Add VMWare fallback to PDK::Util::Filesystem.mv [\#802](https://github.com/puppetlabs/pdk/pull/802) ([rodjek](https://github.com/rodjek))
23
+
24
+ **Closed issues:**
25
+
26
+ - Implement `pdk release` command as per RFC \(part 1\) [\#808](https://github.com/puppetlabs/pdk/issues/808)
27
+ - Cannot install pdk 1.14.1.0-1xenial deb - Operation not permitted [\#798](https://github.com/puppetlabs/pdk/issues/798)
28
+
29
+ **Merged pull requests:**
30
+
31
+ - \(\#806\) Use ASCII quotes instead of Unicode quotes [\#807](https://github.com/puppetlabs/pdk/pull/807) ([rodjek](https://github.com/rodjek))
32
+ - \(PDK-1523\) Refactor filesystem operations to use PDK::Util::Filesystem [\#799](https://github.com/puppetlabs/pdk/pull/799) ([rodjek](https://github.com/rodjek))
33
+
7
34
  ## [v1.14.1](https://github.com/puppetlabs/pdk/tree/v1.14.1) (2019-11-01)
8
35
  [Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.14.0...v1.14.1)
9
36
 
@@ -6,8 +6,6 @@ module PDK
6
6
  attr_reader :answers
7
7
  attr_reader :answer_file_path
8
8
 
9
- include PDK::Util::Filesystem
10
-
11
9
  # Initialises the AnswerFile object, which stores the responses to certain
12
10
  # interactive questions.
13
11
  #
@@ -64,15 +62,15 @@ module PDK
64
62
  #
65
63
  # @return [Hash{String => Object}] The existing questions and answers.
66
64
  def read_from_disk
67
- return {} if !File.file?(answer_file_path) || File.zero?(answer_file_path)
65
+ return {} if !PDK::Util::Filesystem.file?(answer_file_path) || PDK::Util::Filesystem.zero?(answer_file_path)
68
66
 
69
- unless File.readable?(answer_file_path)
67
+ unless PDK::Util::Filesystem.readable?(answer_file_path)
70
68
  raise PDK::CLI::FatalError, _("Unable to open '%{file}' for reading") % {
71
69
  file: answer_file_path,
72
70
  }
73
71
  end
74
72
 
75
- answers = JSON.parse(File.read(answer_file_path))
73
+ answers = JSON.parse(PDK::Util::Filesystem.read_file(answer_file_path))
76
74
  if answers.is_a?(Hash)
77
75
  answers
78
76
  else
@@ -92,9 +90,9 @@ module PDK
92
90
  #
93
91
  # @raise [PDK::CLI::FatalError] if the answer file can not be written to.
94
92
  def save_to_disk
95
- FileUtils.mkdir_p(File.dirname(answer_file_path))
93
+ PDK::Util::Filesystem.mkdir_p(File.dirname(answer_file_path))
96
94
 
97
- write_file(answer_file_path, JSON.pretty_generate(answers))
95
+ PDK::Util::Filesystem.write_file(answer_file_path, JSON.pretty_generate(answers))
98
96
  rescue SystemCallError, IOError => e
99
97
  raise PDK::CLI::FatalError, _("Unable to write '%{file}': %{msg}") % {
100
98
  file: answer_file_path,
@@ -167,6 +167,7 @@ module PDK::CLI
167
167
  require 'pdk/cli/validate'
168
168
  require 'pdk/cli/module'
169
169
  require 'pdk/cli/console'
170
+ require 'pdk/cli/release'
170
171
 
171
172
  @base_cmd.add_command Cri::Command.new_basic_help
172
173
  end
@@ -84,7 +84,7 @@ EOF
84
84
 
85
85
  def check_fixtures_dir
86
86
  existing_path = base_module_path.split(':').find do |path|
87
- Dir.exist?(path) && Dir.entries(path).length > 2
87
+ PDK::Util::Filesystem.directory?(path) && Dir.entries(path).length > 2
88
88
  end
89
89
  PDK.logger.warn _('Module fixtures not found, please run pdk bundle exec rake spec_prep.') unless existing_path
90
90
  end
@@ -11,6 +11,7 @@ module PDK::CLI
11
11
  flag nil, :noop, _('Do not convert the module, just output what would be done.')
12
12
  flag nil, :force, _('Convert the module automatically, with no prompts.')
13
13
  flag nil, :'add-tests', _('Add any missing tests while converting the module.')
14
+ flag nil, :'default-template', _('Convert the module to use the default PDK template.')
14
15
 
15
16
  run do |opts, _args, _cmd|
16
17
  require 'pdk/module/convert'
@@ -22,12 +23,19 @@ module PDK::CLI
22
23
  log_level: :info,
23
24
  )
24
25
 
25
- PDK::CLI::Util.validate_template_opts(opts)
26
-
27
26
  if opts[:noop] && opts[:force]
28
27
  raise PDK::CLI::ExitWithError, _('You can not specify --noop and --force when converting a module')
29
28
  end
30
29
 
30
+ if opts[:'default-template']
31
+ raise PDK::CLI::ExitWithError, _('You can not specify --template-url and --default-template.') if opts[:'template-url']
32
+
33
+ opts[:'template-url'] = PDK::Util::TemplateURI.default_template_addressable_uri.to_s
34
+ PDK.answers.update!('template-url' => nil)
35
+ end
36
+
37
+ PDK::CLI::Util.validate_template_opts(opts)
38
+
31
39
  PDK::CLI::Util.analytics_screen_view('convert', opts)
32
40
 
33
41
  if opts[:'skip-interview'] && opts[:'full-interview']
@@ -67,7 +67,8 @@ module PDK
67
67
 
68
68
  vendored_bin_full_path = File.join(PDK::Util.pdk_package_basedir, vendored_bin_path)
69
69
 
70
- unless File.exist?(vendored_bin_full_path)
70
+ require 'pdk/util/filesystem'
71
+ unless PDK::Util::Filesystem.exist?(vendored_bin_full_path)
71
72
  PDK.logger.debug(_("Could not find '%{vendored_bin}' in PDK package. Trying '%{fallback}' from the system PATH instead.") % {
72
73
  fallback: fallback,
73
74
  vendored_bin: vendored_bin_full_path,
@@ -5,7 +5,7 @@ module PDK::CLI
5
5
  summary _('This command is now \'pdk build\'.')
6
6
 
7
7
  run do |_opts, _args, _cmd|
8
- PDK.logger.warn(_('Modules are built using the pdk build command.'))
8
+ PDK.logger.warn(_("Modules are built using the 'pdk build' command."))
9
9
  exit 1
10
10
  end
11
11
  end
@@ -21,7 +21,7 @@ module PDK::CLI
21
21
 
22
22
  PDK::CLI::Util.validate_template_opts(opts)
23
23
 
24
- PDK.logger.info(_('New modules are created using the pdk new module command.'))
24
+ PDK.logger.info(_("New modules are created using the 'pdk new module' command."))
25
25
  prompt = TTY::Prompt.new(help_color: :cyan)
26
26
  redirect = PDK::CLI::Util::CommandRedirector.new(prompt)
27
27
  redirect.target_command('pdk new module')
@@ -0,0 +1,192 @@
1
+ require 'pdk/cli/util'
2
+ require 'pdk/validate'
3
+ require 'pdk/util/bundler'
4
+ require 'pdk/cli/util/interview'
5
+ require 'pdk/util/changelog_generator'
6
+ require 'pdk/module/build'
7
+
8
+ module PDK::CLI
9
+ @release_cmd = @base_cmd.define_command do
10
+ name 'release'
11
+ usage _('release [options]')
12
+ summary _('(Experimental) Release a module to the Puppet Forge.')
13
+
14
+ flag nil, :force, _('Release the module automatically, with no prompts.')
15
+ flag nil, :'skip-validation', _('Skips the module validation check.')
16
+ flag nil, :'skip-changelog', _('Skips the automatic changelog generation.')
17
+ flag nil, :'skip-dependency', _('Skips the module dependency check.')
18
+ flag nil, :'skip-documentation', _('Skips the documentation update.')
19
+ flag nil, :'skip-build', _('Skips module build.')
20
+ flag nil, :'skip-publish', _('Skips publishing the module to the forge.')
21
+
22
+ option nil, :'forge-upload-url', _('Set forge upload url path.'),
23
+ argument: :required, default: 'https://forgeapi.puppetlabs.com/v3/releases'
24
+
25
+ option nil, :'forge-token', _('Set Forge API token.'), argument: :required, default: nil
26
+
27
+ option nil, :version, _('Update the module to the specified version prior to release. When not specified, the new version will be computed from the Changelog where possible.'),
28
+ argument: :required
29
+
30
+ option nil, :file, _('Path to the built module to push to the Forge. This option can only be used when --skip-build is also used. Defaults to pkg/<module version>.tar.gz'),
31
+ argument: :required
32
+
33
+ run do |opts, _args, _cmd|
34
+ # Make sure build is being run in a valid module directory with a metadata.json
35
+ PDK::CLI::Util.ensure_in_module!(
36
+ message: _('`pdk release` can only be run from inside a valid module with a metadata.json.'),
37
+ log_level: :info,
38
+ )
39
+
40
+ Release.prepare_interview(opts) unless opts[:force]
41
+
42
+ Release.send_analytics('release', opts)
43
+
44
+ release = PDK::Module::Release.new(nil, opts)
45
+
46
+ Release.module_compatibility_checks!(release, opts)
47
+
48
+ release.run
49
+ end
50
+ end
51
+
52
+ module Release
53
+ # Checks whether the module is compatible with PDK release process
54
+ # @param release PDK::Module::Release Object representing the release
55
+ # @param opts Options Hash from Cri
56
+ def self.module_compatibility_checks!(release, opts)
57
+ unless release.module_metadata.forge_ready?
58
+ if opts[:force]
59
+ PDK.logger.warn _(
60
+ 'This module is missing the following fields in the metadata.json: %{fields}. ' \
61
+ 'These missing fields may affect the visibility of the module on the Forge.',
62
+ ) % {
63
+ fields: release.module_metadata.missing_fields.join(', '),
64
+ }
65
+ else
66
+ release.module_metadata.interview_for_forge!
67
+ release.write_module_metadata!
68
+ end
69
+ end
70
+
71
+ unless release.pdk_compatible? # rubocop:disable Style/GuardClause Nope!
72
+ if opts[:force]
73
+ PDK.logger.warn _('This module is not compatible with PDK, so PDK can not validate or test this build.')
74
+ else
75
+ PDK.logger.info _('This module is not compatible with PDK, so PDK can not validate or test this build. ' \
76
+ 'Unvalidated modules may have errors when uploading to the Forge. ' \
77
+ 'To make this module PDK compatible and use validate features, cancel the build and run `pdk convert`.')
78
+ unless PDK::CLI::Util.prompt_for_yes(_('Continue build without converting?'))
79
+ PDK.logger.info _('Build cancelled; exiting.')
80
+ PDK::Util.exit_process(1)
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ # Send_analytics for the given command and Cri options
87
+ def self.send_analytics(command, opts)
88
+ # Don't pass tokens to analytics
89
+ PDK::CLI::Util.analytics_screen_view(command, opts.reject { |k, _| k == :'forge-token' })
90
+ end
91
+
92
+ def self.prepare_interview(opts)
93
+ questions = []
94
+
95
+ unless opts[:'skip-validation']
96
+ questions << {
97
+ name: 'validation',
98
+ question: _('Do you want to run the module validation ?'),
99
+ type: :yes,
100
+ }
101
+ end
102
+ unless opts[:'skip-changelog']
103
+ questions << {
104
+ name: 'changelog',
105
+ question: _('Do you want to run the automatic changelog generation ?'),
106
+ type: :yes,
107
+ }
108
+ end
109
+ unless opts[:version]
110
+ questions << {
111
+ name: 'setversion',
112
+ question: _('Do you want to set the module version ?'),
113
+ type: :yes,
114
+ }
115
+ end
116
+ unless opts[:'skip-dependency']
117
+ questions << {
118
+ name: 'dependency',
119
+ question: _('Do you want to run the dependency-checker on this module?'),
120
+ type: :yes,
121
+ }
122
+ end
123
+ unless opts[:'skip-documentation']
124
+ questions << {
125
+ name: 'documentation',
126
+ question: _('Do you want to update the documentation for this module?'),
127
+ type: :yes,
128
+ }
129
+ end
130
+ unless opts[:'skip-publish']
131
+ questions << {
132
+ name: 'publish',
133
+ question: _('Do you want to publish the module on the Puppet Forge?'),
134
+ type: :yes,
135
+ }
136
+ end
137
+
138
+ prompt = TTY::Prompt.new(help_color: :cyan)
139
+ interview = PDK::CLI::Util::Interview.new(prompt)
140
+ interview.add_questions(questions)
141
+ answers = interview.run
142
+
143
+ unless answers.nil?
144
+ opts[:'skip-validation'] = !answers['validation']
145
+ opts[:'skip-changelog'] = !answers['changelog']
146
+ opts[:'skip-dependency'] = !answers['dependency']
147
+ opts[:'skip-documentation'] = !answers['documentation']
148
+
149
+ prepare_version_interview(prompt, opts) if answers['setversion']
150
+
151
+ prepare_publish_interview(prompt, opts) if answers['publish']
152
+ end
153
+ answers
154
+ end
155
+
156
+ def self.prepare_version_interview(prompt, opts)
157
+ questions = [
158
+ {
159
+ name: 'version',
160
+ question: _('Please set the module version'),
161
+ help: _('This value is the version that will be used in the changelog generator and building of the module.'),
162
+ required: true,
163
+ validate_pattern: %r{(\*|\d+(\.\d+){0,2}(\.\*)?)$}i,
164
+ validate_message: _('The version format should be in the format x.y.z where x represents the major version, y the minor version and z the build number.'),
165
+ },
166
+ ]
167
+ interview = PDK::CLI::Util::Interview.new(prompt)
168
+ interview.add_questions(questions)
169
+ ver_answer = interview.run
170
+ opts[:version] = ver_answer['version']
171
+ end
172
+
173
+ def self.prepare_publish_interview(prompt, opts)
174
+ return if opts[:'forge-token']
175
+ questions = [
176
+ {
177
+ name: 'apikey',
178
+ question: _('Please set the api key(authorization token) to upload on the Puppet Forge'),
179
+ help: _('This value is used for authentication on the Puppet Forge to upload your module tarball.'),
180
+ required: true,
181
+ },
182
+ ]
183
+ interview = PDK::CLI::Util::Interview.new(prompt)
184
+ interview.add_questions(questions)
185
+ api_answer = interview.run
186
+ opts[:'forge-token'] = api_answer['apikey']
187
+ end
188
+ end
189
+ end
190
+
191
+ require 'pdk/cli/release/prep'
192
+ require 'pdk/cli/release/publish'
@@ -0,0 +1,39 @@
1
+ require 'pdk/cli/release'
2
+
3
+ module PDK::CLI
4
+ @release_prep_cmd = @release_cmd.define_command do
5
+ name 'prep'
6
+ usage _('prep [options]')
7
+ summary _('(Experimental) Performs all the pre-release checks to ensure module is ready to be released')
8
+
9
+ flag nil, :force, _('Prepare the module automatically, with no prompts.')
10
+ flag nil, :'skip-validation', _('Skips the module validation check.')
11
+ flag nil, :'skip-changelog', _('Skips the automatic changelog generation.')
12
+ flag nil, :'skip-dependency', _('Skips the module dependency check.')
13
+ flag nil, :'skip-documentation', _('Skips the documentation update.')
14
+
15
+ option nil, :version, _('Update the module to the specified version prior to release. When not specified, the new version will be computed from the Changelog where possible.'),
16
+ argument: :required
17
+
18
+ run do |opts, _args, cmd|
19
+ # Make sure build is being run in a valid module directory with a metadata.json
20
+ PDK::CLI::Util.ensure_in_module!(
21
+ message: _("`pdk release #{cmd.name}` can only be run from inside a valid module with a metadata.json."),
22
+ log_level: :info,
23
+ )
24
+
25
+ opts[:'skip-build'] = true
26
+ opts[:'skip-publish'] = true
27
+
28
+ Release.prepare_interview(opts) unless opts[:force]
29
+
30
+ Release.send_analytics("release #{cmd.name}", opts)
31
+
32
+ release = PDK::Module::Release.new(nil, opts)
33
+
34
+ Release.module_compatibility_checks!(release, opts)
35
+
36
+ release.run
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,40 @@
1
+ require 'pdk/cli/release'
2
+
3
+ module PDK::CLI
4
+ @release_publish_cmd = @release_cmd.define_command do
5
+ name 'publish'
6
+ usage _('publish [options] <tarball>')
7
+ summary _('(Experimental) Publishes the module <tarball> to the Forge.')
8
+
9
+ flag nil, :force, _('Publish the module automatically, with no prompts.')
10
+
11
+ option nil, :'forge-upload-url', _('Set forge upload url path.'),
12
+ argument: :required, default: 'https://forgeapi.puppetlabs.com/v3/releases'
13
+
14
+ option nil, :'forge-token', _('Set Forge API token.'), argument: :required, default: nil
15
+
16
+ run do |opts, _args, cmd|
17
+ # Make sure build is being run in a valid module directory with a metadata.json
18
+ PDK::CLI::Util.ensure_in_module!(
19
+ message: _("`pdk release #{cmd.name}` can only be run from inside a valid module with a metadata.json."),
20
+ log_level: :info,
21
+ )
22
+
23
+ opts[:'skip-validation'] = true
24
+ opts[:'skip-changelog'] = true
25
+ opts[:'skip-dependency'] = true
26
+ opts[:'skip-documentation'] = true
27
+ opts[:'skip-build'] = true
28
+ opts[:'skip-versionset'] = true
29
+ opts[:force] = true unless PDK::CLI::Util.interactive?
30
+
31
+ Release.prepare_publish_interview(TTY::Prompt.new(help_color: :cyan), opts) unless opts[:force]
32
+
33
+ Release.send_analytics("release #{cmd.name}", opts)
34
+
35
+ release = PDK::Module::Release.new(nil, opts)
36
+
37
+ release.run
38
+ end
39
+ end
40
+ end
@@ -48,6 +48,18 @@ module PDK::CLI
48
48
 
49
49
  updater = PDK::Module::Update.new(opts)
50
50
 
51
+ if updater.pinned_to_puppetlabs_template_tag?
52
+ PDK.logger.info _(
53
+ 'This module is currently pinned to version %{current_version} ' \
54
+ 'of the default template. If you would like to update your ' \
55
+ 'module to the latest version of the template, please run `pdk ' \
56
+ 'update --template-ref %{new_version}`.',
57
+ ) % {
58
+ current_version: updater.template_uri.uri_fragment,
59
+ new_version: PDK::TEMPLATE_REF,
60
+ }
61
+ end
62
+
51
63
  updater.run
52
64
  end
53
65
  end