diff --git a/lib/pdk/cli.rb b/lib/pdk/cli.rb index 58be641da..ccb517bec 100644 --- a/lib/pdk/cli.rb +++ b/lib/pdk/cli.rb @@ -7,6 +7,7 @@ require 'pdk/i18n' require 'pdk/logger' require 'pdk/report' +require 'pdk/util/version' module PDK::CLI def self.run(args) @@ -41,6 +42,11 @@ def self.template_url_option(dsl) description _('The shortest path to better modules.') default_subcommand 'help' + flag nil, :version, _('show version of pdk') do |_, _| + puts PDK::Util::Version.version_string + exit 0 + end + flag :h, :help, _('show help for this command') do |_, c| puts c.help exit 0 diff --git a/lib/pdk/generators/module.rb b/lib/pdk/generators/module.rb index 0adc41b2e..ec2332b34 100644 --- a/lib/pdk/generators/module.rb +++ b/lib/pdk/generators/module.rb @@ -9,6 +9,7 @@ require 'pdk/cli/exec' require 'pdk/cli/input' require 'pdk/util' +require 'pdk/util/version' module PDK module Generate @@ -35,6 +36,8 @@ def self.invoke(opts = {}) module_interview(metadata, opts) unless opts[:'skip-interview'] # @todo Build way to get info by answers file + metadata.update!('pdk-version' => PDK::Util::Version.version_string) + temp_target_dir = PDK::Util.make_tmpdir_name('pdk-module-target') prepare_module_directory(temp_target_dir) diff --git a/lib/pdk/util/version.rb b/lib/pdk/util/version.rb new file mode 100644 index 000000000..9fac7e61f --- /dev/null +++ b/lib/pdk/util/version.rb @@ -0,0 +1,34 @@ +require 'pdk/version' +require 'pdk/cli/exec' + +module PDK + module Util + module Version + def self.version_string + "#{PDK::VERSION} #{pdk_ref}".strip.freeze + end + + def self.pdk_ref + ref = "#{pkg_sha} #{git_ref}".strip + ref.empty? ? nil : "(#{ref})" + end + + def self.pkg_sha + version_file = File.join(File.expand_path('../../..', File.dirname(__FILE__)), 'VERSION') + + if File.exist? version_file + ver = File.read(version_file) + sha = ver.strip.split('.')[-1] unless ver.nil? + end + + sha + end + + def self.git_ref + ref_result = PDK::CLI::Exec.git('--git-dir', File.join(File.expand_path('../../..', File.dirname(__FILE__)), '.git'), 'describe', '--all', '--long') + + ref_result[:stdout].strip if ref_result[:exit_code].zero? + end + end + end +end