git_versioner 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|