git_versioner 0.0.1 → 0.1.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.
- data/Gemfile +5 -7
- data/Rakefile +3 -9
- data/lib/git_versioner/railtie.rb +13 -2
- data/lib/git_versioner/version.rb +1 -1
- data/lib/git_versioner.rb +56 -3
- data/lib/tasks/git_versioner.rake +81 -0
- metadata +84 -3
data/Gemfile
CHANGED
@@ -1,9 +1,7 @@
|
|
1
|
-
source
|
1
|
+
source :rubygems
|
2
2
|
|
3
|
-
|
4
|
-
gem
|
5
|
-
|
3
|
+
group :development, :test do
|
4
|
+
gem 'rb-fsevent', require: false if RUBY_PLATFORM =~ /darwin/i
|
5
|
+
end
|
6
6
|
|
7
|
-
|
8
|
-
# gem 'ruby-debug'
|
9
|
-
# gem 'ruby-debug19'
|
7
|
+
gemspec
|
data/Rakefile
CHANGED
@@ -3,16 +3,10 @@ require "bundler/gem_tasks"
|
|
3
3
|
require 'rake'
|
4
4
|
require 'rdoc/task'
|
5
5
|
|
6
|
-
require '
|
6
|
+
require 'rspec/core/rake_task'
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
t.libs << 'test'
|
11
|
-
t.pattern = 'test/**/*_test.rb'
|
12
|
-
t.verbose = false
|
13
|
-
end
|
14
|
-
|
15
|
-
task :default => :test
|
8
|
+
RSpec::Core::RakeTask.new('spec')
|
9
|
+
task :default => :spec
|
16
10
|
|
17
11
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
18
12
|
rdoc.rdoc_dir = 'rdoc'
|
@@ -2,11 +2,22 @@ require 'git_versioner/view_helpers'
|
|
2
2
|
|
3
3
|
module GitVersioner
|
4
4
|
class Railtie < ::Rails::Railtie
|
5
|
+
rake_tasks do
|
6
|
+
load 'tasks/git_versioner.rake'
|
7
|
+
end
|
8
|
+
|
5
9
|
initializer "git_versioner.versionize" do
|
6
|
-
|
7
|
-
|
10
|
+
GitVersioner.format do
|
11
|
+
if Rails.env == 'production'
|
12
|
+
'v%{version_number}'
|
13
|
+
else
|
14
|
+
'v%{version_number}-g%{git_hash}'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
GitVersioner.memorize do
|
8
18
|
Rails.env == 'production'
|
9
19
|
end
|
20
|
+
Rails.application.class.parent::VERSION = GitVersioner
|
10
21
|
end
|
11
22
|
|
12
23
|
initializer "git_versioner.view_helpers" do
|
data/lib/git_versioner.rb
CHANGED
@@ -1,9 +1,42 @@
|
|
1
1
|
require 'git_versioner/railtie' if defined?(Rails)
|
2
2
|
|
3
3
|
module GitVersioner
|
4
|
+
# = Git Versioner
|
5
|
+
# Git Versioner generates version number.
|
6
|
+
#
|
7
|
+
# To read a VERSION file pass the path the file to be read
|
8
|
+
#
|
9
|
+
# GitVersioner.version_file_path = Rails.root.join('VERSION').to_s
|
10
|
+
# GitVersioner.version_file_path # => '/path/to/rails/root/VERSION'
|
11
|
+
#
|
12
|
+
# Format version
|
13
|
+
#
|
14
|
+
# Available format variables:
|
15
|
+
# version_number: read version file provided from version file path
|
16
|
+
# git_hash: short hash reference for HEAD
|
17
|
+
#
|
18
|
+
# Use block to conditionally set format
|
19
|
+
# GitVersioner.format do
|
20
|
+
# if env == 'production'
|
21
|
+
# 'v%{version_number}'
|
22
|
+
# else
|
23
|
+
# 'v%{version_number}-g%{git_hash}'
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# VERSION file `1.0.0`
|
28
|
+
#
|
29
|
+
# GitVersioner.version_file_path = /path/to/VERSION
|
30
|
+
# GitVersioner.format = "v%{version_number}"
|
31
|
+
# GitVersioner.version # => 'v1.0.0'
|
32
|
+
#
|
33
|
+
# GitVersioner.format = "g%{git_hash}"
|
34
|
+
# GitVersioner.version
|
4
35
|
class << self
|
5
36
|
|
6
|
-
attr_writer :memorize
|
37
|
+
attr_writer :memorize, :format
|
38
|
+
attr_accessor :version_file_path
|
39
|
+
|
7
40
|
def memorize
|
8
41
|
@memorize = yield if block_given?
|
9
42
|
@memorize
|
@@ -13,6 +46,11 @@ module GitVersioner
|
|
13
46
|
memorize == true
|
14
47
|
end
|
15
48
|
|
49
|
+
def format
|
50
|
+
@format = yield if block_given?
|
51
|
+
@format
|
52
|
+
end
|
53
|
+
|
16
54
|
def version
|
17
55
|
if memorize?
|
18
56
|
@version ||= calculate_version
|
@@ -22,9 +60,24 @@ module GitVersioner
|
|
22
60
|
end
|
23
61
|
alias :to_s :version
|
24
62
|
|
25
|
-
private
|
26
63
|
def calculate_version
|
27
|
-
|
64
|
+
formatted_version = format.dup
|
65
|
+
%W[version_number git_hash].each do |var|
|
66
|
+
formatted_version.gsub! /%{#{var}}/, self.send(var)
|
67
|
+
end
|
68
|
+
formatted_version
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
def version_number
|
73
|
+
return '' unless version_file_path
|
74
|
+
if File.exists? version_file_path
|
75
|
+
File.read version_file_path
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def git_hash
|
80
|
+
`git rev-parse --short HEAD`.strip
|
28
81
|
end
|
29
82
|
end
|
30
83
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
namespace :version do
|
2
|
+
|
3
|
+
def write_version(version)
|
4
|
+
File.open(version_path, 'w') do |f|
|
5
|
+
f.write(version)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def read_version
|
10
|
+
make_sure_file_exists!
|
11
|
+
File.read(version_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
def version_path
|
15
|
+
ENV['VERSION_PATH'] ||= Rails.root.join('VERSION').to_s if Rails
|
16
|
+
ENV['VERSION_PATH']
|
17
|
+
end
|
18
|
+
|
19
|
+
def version_path!
|
20
|
+
raise "Please provide a VERSION_PATH" unless version_path
|
21
|
+
version_path
|
22
|
+
end
|
23
|
+
|
24
|
+
def make_sure_file_exists!
|
25
|
+
raise 'VERSION file doesn\'t exists. Please run `rake version:init`' unless File.exists? version_path!
|
26
|
+
end
|
27
|
+
|
28
|
+
class Version
|
29
|
+
REGEXP = /^\d+\.\d+\.\d+$/
|
30
|
+
attr_accessor :major, :minor, :patch
|
31
|
+
|
32
|
+
def initialize(version)
|
33
|
+
raise ArgumentError.new("Not a valid SemVer Version (http://semver.org)") unless version =~ REGEXP
|
34
|
+
@major, @minor, @patch = version.split('.').map &:to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_a
|
38
|
+
[@major, @minor, @patch]
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_s
|
42
|
+
self.to_a.join('.')
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_h
|
46
|
+
keys = [:major, :minor, :patch]
|
47
|
+
Hash[keys.zip(self.to_a)]
|
48
|
+
end
|
49
|
+
|
50
|
+
def bump(segment='patch')
|
51
|
+
raise ArgumentError.new("Not a valid segment ['major', 'minor', 'patch']") unless %W[major minor patch].include? segment
|
52
|
+
self.send "#{segment}=", self.send(segment) + 1
|
53
|
+
self.patch = 0 if %W[major minor].include? segment
|
54
|
+
self.minor = 0 if %W[major].include? segment
|
55
|
+
self.to_s
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
task :current => :environment do
|
60
|
+
puts read_version
|
61
|
+
end
|
62
|
+
|
63
|
+
task :init => :environment do
|
64
|
+
version = Version.new(ENV['VERSION'] ||= '0.0.1')
|
65
|
+
raise "Version file already exists" if File.exists? version_path!
|
66
|
+
write_version(version)
|
67
|
+
puts "Version file created and version set to #{version}"
|
68
|
+
end
|
69
|
+
|
70
|
+
desc "Bump version (specify segment with SEGMENT=segment 'major', 'minor' or 'patch')"
|
71
|
+
task :bump => :environment do
|
72
|
+
segment = ENV['SEGMENT'] || 'patch'
|
73
|
+
version = Version.new read_version
|
74
|
+
version.bump segment
|
75
|
+
write_version(version)
|
76
|
+
puts "Version bumped to #{version}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
desc "Get the current version"
|
81
|
+
task :version => 'version:current'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_versioner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,88 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-12-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec-rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rails
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.0.17
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.0.17
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: capybara
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.4.0
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.4.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: sqlite3
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
14
94
|
description:
|
15
95
|
email:
|
16
96
|
- brian@brianboughton.com
|
@@ -22,6 +102,7 @@ files:
|
|
22
102
|
- lib/git_versioner/version.rb
|
23
103
|
- lib/git_versioner/view_helpers.rb
|
24
104
|
- lib/git_versioner.rb
|
105
|
+
- lib/tasks/git_versioner.rake
|
25
106
|
- LICENSE
|
26
107
|
- Rakefile
|
27
108
|
- Gemfile
|