lib/physique/tasks/versionizer.rb in physique-0.3.10 vs lib/physique/tasks/versionizer.rb in physique-0.4.0

- old
+ new

@@ -1,113 +1,113 @@ -require 'xsemver' -require 'albacore/logging' - -module Physique - module Tasks - # Versionizer does versioning ITS OWN WAY! - # - # Defines ENV vars: - # * BUILD_VERSION - # * NUGET_VERSION - # * FORMAL_VERSION - # - # Publishes symbol :build_version - module Versionizer - # adds a new task with the given symbol to the Rake/Albacore application - # You can use this like any other albacore method, such as build, - # in order to give it parameters or dependencies, but there is no - # configuration object that you can configure. Copy-n-paste this - # code if you want something of your own. - # - def self.new(*sym) - version = gitflow_version(XSemVer::SemVer.find) - version_data = define_versions(version) - - Albacore.subscribe :build_version do |data| - ENV['BUILD_VERSION'] = data.build_version - ENV['NUGET_VERSION'] = data.nuget_version - ENV['FORMAL_VERSION'] = data.formal_version - ENV['LONG_VERSION'] = data.long_version - end - - Albacore.define_task(*sym) do - Albacore.publish :build_version, OpenStruct.new(version_data) - end - - Albacore.define_task :version do - puts version_data.inspect - end - end - - def self.define_versions(semver) - build = build_number - - { - # just a monotonic inc - :semver => semver, - :build_number => build, - :current_branch => current_branch, - - # purely M.m.p format - :formal_version => "#{semver.format('%M.%m.%p')}", - - # four-numbers version, useful if you're dealing with COM/Windows - :long_version => "#{semver.format('%M.%m.%p')}.#{build}", - - # extensible number w/ git hash - :build_version => "#{semver.format('%M.%m.%p%s')}.#{last_commit[0]}", - - # nuget (not full semver 2.0.0-rc.1 support) see http://nuget.codeplex.com/workitem/1796 - :nuget_version => semver.format('%M.%m.%p%s') - } - end - - # load the commit data - # returns: [short-commit :: String] - # - def self.last_commit - begin - `git rev-parse --short HEAD`.chomp[0,6] - rescue - (ENV['BUILD_VCS_NUMBER'] || '000000')[0,6] - end - end - - # Determine the current branch - # returns: branch name - # - def self.current_branch - begin - `git rev-parse --abbrev-ref HEAD`.chomp - rescue - 'master' - end - end - - def self.gitflow_version(version) - return unless ENV.include?('BUILD_NUMBER') - version.special = gitflow_special - version - end - - def self.build_number - ENV['BUILD_NUMBER'] || '0' - end - - def self.gitflow_special - prefix = special_prefix - return version.special if prefix == 'master' - - "#{prefix}#{build_number}" - end - - def self.special_prefix - # TODO: There is a better way to do this. - branch_name = current_branch - return 'release' if branch_name.start_with? 'release/' - return 'hotfix' if branch_name.start_with? 'hotfix/' - return 'feature' if branch_name.start_with? 'feature/' - branch_name - end - end - end +require 'xsemver' +require 'albacore/logging' + +module Physique + module Tasks + # Versionizer does versioning ITS OWN WAY! + # + # Defines ENV vars: + # * BUILD_VERSION + # * NUGET_VERSION + # * FORMAL_VERSION + # + # Publishes symbol :build_version + module Versionizer + # adds a new task with the given symbol to the Rake/Albacore application + # You can use this like any other albacore method, such as build, + # in order to give it parameters or dependencies, but there is no + # configuration object that you can configure. Copy-n-paste this + # code if you want something of your own. + # + def self.new(*sym) + version = gitflow_version(XSemVer::SemVer.find) + version_data = define_versions(version) + + Albacore.subscribe :build_version do |data| + ENV['BUILD_VERSION'] = data.build_version + ENV['NUGET_VERSION'] = data.nuget_version + ENV['FORMAL_VERSION'] = data.formal_version + ENV['LONG_VERSION'] = data.long_version + end + + Albacore.define_task(*sym) do + Albacore.publish :build_version, OpenStruct.new(version_data) + end + + Albacore.define_task :version do + puts version_data.inspect + end + end + + def self.define_versions(semver) + build = build_number + + { + # just a monotonic inc + :semver => semver, + :build_number => build, + :current_branch => current_branch, + + # purely M.m.p format + :formal_version => "#{semver.format('%M.%m.%p')}", + + # four-numbers version, useful if you're dealing with COM/Windows + :long_version => "#{semver.format('%M.%m.%p')}.#{build}", + + # extensible number w/ git hash + :build_version => "#{semver.format('%M.%m.%p%s')}.#{last_commit[0]}", + + # nuget (not full semver 2.0.0-rc.1 support) see http://nuget.codeplex.com/workitem/1796 + :nuget_version => semver.format('%M.%m.%p%s') + } + end + + # load the commit data + # returns: [short-commit :: String] + # + def self.last_commit + begin + `git rev-parse --short HEAD`.chomp[0,6] + rescue + (ENV['BUILD_VCS_NUMBER'] || '000000')[0,6] + end + end + + # Determine the current branch + # returns: branch name + # + def self.current_branch + begin + `git rev-parse --abbrev-ref HEAD`.chomp + rescue + 'master' + end + end + + def self.gitflow_version(version) + return unless ENV.include?('BUILD_NUMBER') + version.special = gitflow_special + version + end + + def self.build_number + ENV['BUILD_NUMBER'] || '0' + end + + def self.gitflow_special + prefix = special_prefix + return version.special if prefix == 'master' + + "#{prefix}#{build_number}" + end + + def self.special_prefix + # TODO: There is a better way to do this. + branch_name = current_branch + return 'release' if branch_name.start_with? 'release/' + return 'hotfix' if branch_name.start_with? 'hotfix/' + return 'feature' if branch_name.start_with? 'feature/' + branch_name + end + end + end end \ No newline at end of file