module Pkg::Util::Version
Utility methods used for versioning projects for various kinds of packaging
Public Class Methods
Given a version, reformat it to be appropriate for a final package version. This means we need to add a ‘0.` before the release version for non-final builds
This only applies to packages that are built with the automation in this repo. This is invalid for all other build automation, like vanagon
Examples of output: 4.99.0.22.gf64bc49-1 4.4.1-0.1SNAPSHOT.2017.05.16T1005 4.99.0-1 4.99.0.29.g431768c-1 2.7.1-1 5.3.0.rc4-1 3.0.5.rc6.24.g431768c-1
# File lib/packaging/util/version.rb, line 83 def base_pkg_version(version = Pkg::Config.version) return "#{dot_version(version)}-#{Pkg::Config.release}".split('-') if final?(version) || Pkg::Config.vanagon_project if version.include?('SNAPSHOT') new_version = dot_version(version).sub(/\.SNAPSHOT/, "-0.#{Pkg::Config.release}SNAPSHOT") elsif version.include?('rc') rc_ver = dot_version(version).match(/\.?rc(\d+)/)[1] new_version = dot_version(version).sub(/\.?rc(\d+)/, '') + "-0.#{Pkg::Config.release}rc#{rc_ver}" else new_version = dot_version(version) + "-0.#{Pkg::Config.release}" end if new_version.include?('dirty') new_version = new_version.sub(/\.?dirty/, '') + 'dirty' end new_version.split('-') end
This is used to set Pkg::Config.version describe can return a number of potential formats 5.3.0 5.3.0-18-gfbddc8f 5.3.0-18-gfbddc8f-dirty 0.7.0-rc1 0.7.0-rc1-63-g51ccc51 0.7.0-rc1-63-g51ccc51-dirty
we want all of it except the ‘gfbddc8f` part.
# File lib/packaging/util/version.rb, line 42 def dash_version describe = Pkg::Util::Git.describe info = describe.split('-') if Pkg::Util::Git.ref_type == "tag" describe else info.reject { |d| d.match(/^g.{7}/) }.join('-') end end
# File lib/packaging/util/version.rb, line 16 def debversion base_pkg_version.join('-') << "#{Pkg::Config.packager}1" end
This version is used for gems and platform types that do not support dashes in the package version
# File lib/packaging/util/version.rb, line 59 def dot_version(version = Pkg::Config.version) version.tr('-', '.') end
# File lib/packaging/util/version.rb, line 321 def el_version raise "Pkg::Util::Version.el_version has been removed" end
# File lib/packaging/util/version.rb, line 53 def extended_dash_version Pkg::Util::Git.describe(['--tags', '--dirty', '--abbrev=7']) end
# File lib/packaging/util/version.rb, line 63 def extended_dot_version dot_version(extended_dash_version) end
# File lib/packaging/util/version.rb, line 296 def fail_on_dirty_source Pkg::Util.deprecate('Pkg::Util::Version.fail_on_dirty_source', 'Pkg::Util::Git.fail_on_dirty_source') Pkg::Util::Git.fail_on_dirty_source end
Determines if the version we are working with is or is not final
The version here does not include the release version. Therefore, we assume that any version that includes a ‘-d+` was not built from a tag and is a non-final version. Examples: Final
- 5.0.0 - 2016.5.6.7
Nonfinal
- 4.99.0-22 - 1.0.0-658-gabc1234 - 5.0.0.master.SNAPSHOT.2017.05.16T1357 - 5.9.7-rc4 - 4.99.0-56-dirty
# File lib/packaging/util/version.rb, line 118 def final?(version = Pkg::Config.version) case version when /rc/ false when /SNAPSHOT/ false when /g[a-f0-9]{7}/ false when /^(\d+\.)+\d+-\d+/ false when /-dirty/ Pkg::Config.allow_dirty_tree else true end end
# File lib/packaging/util/version.rb, line 266 def get_base_pkg_version Pkg::Util.deprecate('Pkg::Util::Version.get_base_pkg_version', 'Pkg::Util::Version.base_pkg_version') Pkg::Util::Version.base_pkg_version end
# File lib/packaging/util/version.rb, line 247 def get_dash_version Pkg::Util.deprecate('Pkg::Util::Version.get_dash_version', 'Pkg::Util::Version.dash_version') Pkg::Util::Version.dash_version end
# File lib/packaging/util/version.rb, line 271 def get_debversion Pkg::Util.deprecate('Pkg::Util::Version.get_debversion', 'Pkg::Util::Version.debversion') Pkg::Util::Version.debversion end
# File lib/packaging/util/version.rb, line 256 def get_dot_version Pkg::Util.deprecate('Pkg::Util::Version.get_dot_version', 'Pkg::Util::Version.dot_version') Pkg::Util::Version.dot_version end
# File lib/packaging/util/version.rb, line 252 def get_ips_version raise "The IPS build tasks have been removed from puppetlabs/packaging. Please port all Solaris projects to vanagon (https://github.com/puppetlabs/vanagon)" end
# File lib/packaging/util/version.rb, line 276 def get_origversion Pkg::Util.deprecate('Pkg::Util::Version.get_origversion', 'Pkg::Util::Version.origversion') Pkg::Util::Version.origversion end
# File lib/packaging/util/version.rb, line 261 def get_pwd_version Pkg::Util.deprecate('Pkg::Util::Version.get_pwd_version', 'Pkg::Util::Version.pwd_version') Pkg::Util::Version.pwd_version end
# File lib/packaging/util/version.rb, line 286 def get_rpmrelease Pkg::Util.deprecate('Pkg::Util::Version.get_rpmrelease', 'Pkg::Util::Version.rpmrelease') Pkg::Util::Version.rpmrelease end
# File lib/packaging/util/version.rb, line 281 def get_rpmversion Pkg::Util.deprecate('Pkg::Util::Version.get_rpmversion', 'Pkg::Util::Version.rpmversion') Pkg::Util::Version.rpmversion end
DEPRECATED METHODS
# File lib/packaging/util/version.rb, line 197 def git_co(ref) Pkg::Util.deprecate('Pkg::Util::Version.git_co', 'Pkg::Util::Git.checkout') Pkg::Util::Git.checkout(ref) end
# File lib/packaging/util/version.rb, line 207 def git_describe Pkg::Util.deprecate('Pkg::Util::Version.git_describe', 'Pkg::Util::Git.describe') Pkg::Util::Git.describe end
# File lib/packaging/util/version.rb, line 237 def git_describe_version Pkg::Util.deprecate('Pkg::Util::Version.git_describe_version', 'Pkg::Util::Git.describe') Pkg::Util::Git.describe end
# File lib/packaging/util/version.rb, line 232 def git_project_name Pkg::Util.deprecate('Pkg::Util::Version.git_project_name', 'Pkg::Util::Git.project_name') Pkg::Util::Git.project_name end
# File lib/packaging/util/version.rb, line 217 def git_ref_type Pkg::Util.deprecate('Pkg::Util::Version.git_ref_type', 'Pkg::Util::Git.ref_type') Pkg::Util::Git.ref_type end
# File lib/packaging/util/version.rb, line 212 def git_sha(length = 40) Pkg::Util.deprecate('Pkg::Util::Version.git_sha', 'Pkg::Util::Git.sha') Pkg::Util::Git.sha(length) end
# File lib/packaging/util/version.rb, line 222 def git_sha_or_tag(length = 40) Pkg::Util.deprecate('Pkg::Util::Version.git_sha_or_tag', 'Pkg::Util::Git.sha_or_tag') Pkg::Util::Git.sha_or_tag(length) end
# File lib/packaging/util/version.rb, line 202 def git_tagged? Pkg::Util.deprecate('Pkg::Util::Version.git_tagged?', 'Pkg::Util::Git.tagged?') Pkg::Util::Git.tagged? end
# File lib/packaging/util/version.rb, line 301 def is_final? Pkg::Util.deprecate('Pkg::Util::Version.is_final?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end
# File lib/packaging/util/version.rb, line 227 def is_git_repo? Pkg::Util.deprecate('Pkg::Util::Version.is_git_repo?', 'Pkg::Util::Git.repo?') Pkg::Util::Git.repo? end
# File lib/packaging/util/version.rb, line 316 def is_less_than_one? Pkg::Util.deprecate('Pkg::Util::Version.is_less_than_one?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end
# File lib/packaging/util/version.rb, line 311 def is_odd? Pkg::Util.deprecate('Pkg::Util::Version.is_odd?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end
# File lib/packaging/util/version.rb, line 306 def is_rc? Pkg::Util.deprecate('Pkg::Util::Version.is_rc?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end
# File lib/packaging/util/version.rb, line 20 def origversion Pkg::Config.debversion.split('-')[0] end
# File lib/packaging/util/version.rb, line 12 def pwd_version Dir.pwd.split('.')[-1] end
# File lib/packaging/util/version.rb, line 28 def rpmrelease base_pkg_version[1] end
# File lib/packaging/util/version.rb, line 24 def rpmversion base_pkg_version[0] end
# File lib/packaging/util/version.rb, line 242 def run_git_describe_internal Pkg::Util.deprecate('Pkg::Util::Version.git_describe_version', 'Pkg::Util::Git.describe') Pkg::Util::Git.describe end
# File lib/packaging/util/version.rb, line 291 def source_dirty? Pkg::Util.deprecate('Pkg::Util::Version.source_dirty?', 'Pkg::Util::Git.source_dirty?') Pkg::Util::Git.source_dirty? end
# File lib/packaging/util/version.rb, line 325 def tagged?(url, ref) Pkg::Util.deprecate('Pkg::Util::Version.tagged?', 'Pkg::Util::Git.remote_tagged?') Pkg::Util::Git.remote_tagged?(url, ref) end
# File lib/packaging/util/version.rb, line 6 def uname_r uname = Pkg::Util::Tool.find_tool('uname', required: true) stdout, = Pkg::Util::Execution.capture3("#{uname} -r") stdout.chomp end
This is to support packages that only burn-in the version number in the release artifact, rather than storing it two (or more) times in the version control system. Razor is a good example of that; see github.com/puppetlabs/Razor/blob/master/lib/project_razor/version.rb for an example of that this looks like.
If you invoke this the version will only be modified in the temporary copy, with the intent that it never change the official source tree.
# File lib/packaging/util/version.rb, line 144 def versionbump(workdir = nil) version = ENV['VERSION'] || Pkg::Config.version.to_s.strip new_version = '"' + version + '"' version_file = "#{workdir ? workdir + '/' : ''}#{Pkg::Config.version_file}" # Read the previous version file in... contents = IO.read(version_file) # Match version files containing 'VERSION = "x.x.x"' and just x.x.x if contents =~ /VERSION =.*/ old_version = contents.match(/VERSION =.*/).to_s.split[-1] else old_version = contents end puts "Updating #{old_version} to #{new_version} in #{version_file}" if contents =~ /@DEVELOPMENT_VERSION@/ contents.gsub!('@DEVELOPMENT_VERSION@', version) elsif contents =~ /version\s*=\s*[\'"]DEVELOPMENT[\'"]/ contents.gsub!(/version\s*=\s*['"]DEVELOPMENT['"]/, "version = '#{version}'") elsif contents =~ /VERSION = #{old_version}/ contents.gsub!("VERSION = #{old_version}", "VERSION = #{new_version}") elsif contents =~ /#{Pkg::Config.project.upcase}VERSION = #{old_version}/ contents.gsub!("#{Pkg::Config.project.upcase}VERSION = #{old_version}", "#{Pkg::Config.project.upcase}VERSION = #{new_version}") else contents.gsub!(old_version, Pkg::Config.version) end # ...and write it back on out. File.open(version_file, 'w') { |f| f.write contents } end