Module: Pkg::Util::Version
- Defined in:
- lib/packaging/util/version.rb
Overview
Utility methods used for versioning projects for various kinds of packaging
Class Method Summary collapse
-
.base_pkg_version(version = Pkg::Config.version) ⇒ Object
Given a version, reformat it to be appropriate for a final package version.
-
.dash_version ⇒ Object
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.
- .debversion ⇒ Object
-
.dot_version(version = Pkg::Config.version) ⇒ Object
This version is used for gems and platform types that do not support dashes in the package version.
- .el_version ⇒ Object
- .fail_on_dirty_source ⇒ Object
-
.final?(version = Pkg::Config.version) ⇒ Boolean
Determines if the version we are working with is or is not final.
- .get_base_pkg_version ⇒ Object
- .get_dash_version ⇒ Object
- .get_debversion ⇒ Object
- .get_dot_version ⇒ Object
- .get_ips_version ⇒ Object
- .get_origversion ⇒ Object
- .get_pwd_version ⇒ Object
- .get_rpmrelease ⇒ Object
- .get_rpmversion ⇒ Object
-
.git_co(ref) ⇒ Object
DEPRECATED METHODS.
- .git_describe ⇒ Object
- .git_describe_version ⇒ Object
- .git_project_name ⇒ Object
- .git_ref_type ⇒ Object
- .git_sha(length = 40) ⇒ Object
- .git_sha_or_tag(length = 40) ⇒ Object
- .git_tagged? ⇒ Boolean
- .is_final? ⇒ Boolean
- .is_git_repo? ⇒ Boolean
- .is_less_than_one? ⇒ Boolean
- .is_odd? ⇒ Boolean
- .is_rc? ⇒ Boolean
- .origversion ⇒ Object
- .pwd_version ⇒ Object
-
.report_json_tags(json_data) ⇒ Object
Human readable output for json tags reporting.
- .rpmrelease ⇒ Object
- .rpmversion ⇒ Object
- .run_git_describe_internal ⇒ Object
- .source_dirty? ⇒ Boolean
- .tagged?(url, ref) ⇒ Boolean
- .uname_r ⇒ Object
-
.versionbump(workdir = nil) ⇒ Object
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.
Class Method Details
.base_pkg_version(version = Pkg::Config.version) ⇒ Object
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
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/packaging/util/version.rb', line 76 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 |
.dash_version ⇒ Object
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.
42 43 44 45 46 47 48 49 50 51 |
# 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 |
.debversion ⇒ Object
16 17 18 |
# File 'lib/packaging/util/version.rb', line 16 def debversion base_pkg_version.join('-') << "#{Pkg::Config.packager}1" end |
.dot_version(version = Pkg::Config.version) ⇒ Object
This version is used for gems and platform types that do not support dashes in the package version
55 56 57 |
# File 'lib/packaging/util/version.rb', line 55 def dot_version(version = Pkg::Config.version) version.tr('-', '.') end |
.el_version ⇒ Object
317 318 319 |
# File 'lib/packaging/util/version.rb', line 317 def el_version raise "Pkg::Util::Version.el_version has been removed" end |
.fail_on_dirty_source ⇒ Object
292 293 294 295 |
# File 'lib/packaging/util/version.rb', line 292 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 |
.final?(version = Pkg::Config.version) ⇒ Boolean
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
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/packaging/util/version.rb', line 111 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 |
.get_base_pkg_version ⇒ Object
262 263 264 265 |
# File 'lib/packaging/util/version.rb', line 262 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 |
.get_dash_version ⇒ Object
243 244 245 246 |
# File 'lib/packaging/util/version.rb', line 243 def get_dash_version Pkg::Util.deprecate('Pkg::Util::Version.get_dash_version', 'Pkg::Util::Version.dash_version') Pkg::Util::Version.dash_version end |
.get_debversion ⇒ Object
267 268 269 270 |
# File 'lib/packaging/util/version.rb', line 267 def get_debversion Pkg::Util.deprecate('Pkg::Util::Version.get_debversion', 'Pkg::Util::Version.debversion') Pkg::Util::Version.debversion end |
.get_dot_version ⇒ Object
252 253 254 255 |
# File 'lib/packaging/util/version.rb', line 252 def get_dot_version Pkg::Util.deprecate('Pkg::Util::Version.get_dot_version', 'Pkg::Util::Version.dot_version') Pkg::Util::Version.dot_version end |
.get_ips_version ⇒ Object
248 249 250 |
# File 'lib/packaging/util/version.rb', line 248 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 |
.get_origversion ⇒ Object
272 273 274 275 |
# File 'lib/packaging/util/version.rb', line 272 def get_origversion Pkg::Util.deprecate('Pkg::Util::Version.get_origversion', 'Pkg::Util::Version.origversion') Pkg::Util::Version.origversion end |
.get_pwd_version ⇒ Object
257 258 259 260 |
# File 'lib/packaging/util/version.rb', line 257 def get_pwd_version Pkg::Util.deprecate('Pkg::Util::Version.get_pwd_version', 'Pkg::Util::Version.pwd_version') Pkg::Util::Version.pwd_version end |
.get_rpmrelease ⇒ Object
282 283 284 285 |
# File 'lib/packaging/util/version.rb', line 282 def get_rpmrelease Pkg::Util.deprecate('Pkg::Util::Version.get_rpmrelease', 'Pkg::Util::Version.rpmrelease') Pkg::Util::Version.rpmrelease end |
.get_rpmversion ⇒ Object
277 278 279 280 |
# File 'lib/packaging/util/version.rb', line 277 def get_rpmversion Pkg::Util.deprecate('Pkg::Util::Version.get_rpmversion', 'Pkg::Util::Version.rpmversion') Pkg::Util::Version.rpmversion end |
.git_co(ref) ⇒ Object
DEPRECATED METHODS
193 194 195 196 |
# File 'lib/packaging/util/version.rb', line 193 def git_co(ref) Pkg::Util.deprecate('Pkg::Util::Version.git_co', 'Pkg::Util::Git.checkout') Pkg::Util::Git.checkout(ref) end |
.git_describe ⇒ Object
203 204 205 206 |
# File 'lib/packaging/util/version.rb', line 203 def git_describe Pkg::Util.deprecate('Pkg::Util::Version.git_describe', 'Pkg::Util::Git.describe') Pkg::Util::Git.describe end |
.git_describe_version ⇒ Object
233 234 235 236 |
# File 'lib/packaging/util/version.rb', line 233 def git_describe_version Pkg::Util.deprecate('Pkg::Util::Version.git_describe_version', 'Pkg::Util::Git.describe') Pkg::Util::Git.describe end |
.git_project_name ⇒ Object
228 229 230 231 |
# File 'lib/packaging/util/version.rb', line 228 def git_project_name Pkg::Util.deprecate('Pkg::Util::Version.git_project_name', 'Pkg::Util::Git.project_name') Pkg::Util::Git.project_name end |
.git_ref_type ⇒ Object
213 214 215 216 |
# File 'lib/packaging/util/version.rb', line 213 def git_ref_type Pkg::Util.deprecate('Pkg::Util::Version.git_ref_type', 'Pkg::Util::Git.ref_type') Pkg::Util::Git.ref_type end |
.git_sha(length = 40) ⇒ Object
208 209 210 211 |
# File 'lib/packaging/util/version.rb', line 208 def git_sha(length = 40) Pkg::Util.deprecate('Pkg::Util::Version.git_sha', 'Pkg::Util::Git.sha') Pkg::Util::Git.sha(length) end |
.git_sha_or_tag(length = 40) ⇒ Object
218 219 220 221 |
# File 'lib/packaging/util/version.rb', line 218 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 |
.git_tagged? ⇒ Boolean
198 199 200 201 |
# File 'lib/packaging/util/version.rb', line 198 def git_tagged? Pkg::Util.deprecate('Pkg::Util::Version.git_tagged?', 'Pkg::Util::Git.tagged?') Pkg::Util::Git.tagged? end |
.is_final? ⇒ Boolean
297 298 299 300 |
# File 'lib/packaging/util/version.rb', line 297 def is_final? Pkg::Util.deprecate('Pkg::Util::Version.is_final?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end |
.is_git_repo? ⇒ Boolean
223 224 225 226 |
# File 'lib/packaging/util/version.rb', line 223 def is_git_repo? Pkg::Util.deprecate('Pkg::Util::Version.is_git_repo?', 'Pkg::Util::Git.repo?') Pkg::Util::Git.repo? end |
.is_less_than_one? ⇒ Boolean
312 313 314 315 |
# File 'lib/packaging/util/version.rb', line 312 def is_less_than_one? Pkg::Util.deprecate('Pkg::Util::Version.is_less_than_one?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end |
.is_odd? ⇒ Boolean
307 308 309 310 |
# File 'lib/packaging/util/version.rb', line 307 def is_odd? Pkg::Util.deprecate('Pkg::Util::Version.is_odd?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end |
.is_rc? ⇒ Boolean
302 303 304 305 |
# File 'lib/packaging/util/version.rb', line 302 def is_rc? Pkg::Util.deprecate('Pkg::Util::Version.is_rc?', 'Pkg::Util::Version.final?') Pkg::Util::Version.final? end |
.origversion ⇒ Object
20 21 22 |
# File 'lib/packaging/util/version.rb', line 20 def origversion Pkg::Config.debversion.split('-')[0] end |
.pwd_version ⇒ Object
12 13 14 |
# File 'lib/packaging/util/version.rb', line 12 def pwd_version Dir.pwd.split('.')[-1] end |
.report_json_tags(json_data) ⇒ Object
Human readable output for json tags reporting. This will load the input json file and output if it “looks tagged” or not
177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/packaging/util/version.rb', line 177 def (json_data) # rubocop:disable Metrics/AbcSize puts 'component: ' + File.basename(json_data['url']) puts 'ref: ' + json_data['ref'].to_s if Pkg::Util::Git.remote_tagged?(json_data['url'], json_data['ref'].to_s) tagged = 'Tagged? [ Yes ]' else tagged = 'Tagged? [ No ]' end col_len = (ENV['COLUMNS'] || 70).to_i puts format("\n%#{col_len}s\n\n", tagged) puts '*' * col_len end |
.rpmrelease ⇒ Object
28 29 30 |
# File 'lib/packaging/util/version.rb', line 28 def rpmrelease base_pkg_version[1] end |
.rpmversion ⇒ Object
24 25 26 |
# File 'lib/packaging/util/version.rb', line 24 def rpmversion base_pkg_version[0] end |
.run_git_describe_internal ⇒ Object
238 239 240 241 |
# File 'lib/packaging/util/version.rb', line 238 def run_git_describe_internal Pkg::Util.deprecate('Pkg::Util::Version.git_describe_version', 'Pkg::Util::Git.describe') Pkg::Util::Git.describe end |
.source_dirty? ⇒ Boolean
287 288 289 290 |
# File 'lib/packaging/util/version.rb', line 287 def source_dirty? Pkg::Util.deprecate('Pkg::Util::Version.source_dirty?', 'Pkg::Util::Git.source_dirty?') Pkg::Util::Git.source_dirty? end |
.tagged?(url, ref) ⇒ Boolean
321 322 323 324 |
# File 'lib/packaging/util/version.rb', line 321 def tagged?(url, ref) Pkg::Util.deprecate('Pkg::Util::Version.tagged?', 'Pkg::Util::Git.remote_tagged?') Pkg::Util::Git.remote_tagged?(url, ref) end |
.uname_r ⇒ Object
6 7 8 9 10 |
# 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 |
.versionbump(workdir = nil) ⇒ Object
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.
rubocop:disable Metrics/AbcSize rubocop:disable Metrics/CyclomaticComplexity rubocop:disable Metrics/PerceivedComplexity
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/packaging/util/version.rb', line 140 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 |