version_manager 1.0.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.
- checksums.yaml +7 -0
- data/README.md +68 -0
- data/lib/version_manager/configuration.rb +29 -0
- data/lib/version_manager/git/cli.rb +17 -0
- data/lib/version_manager/git/stub.rb +29 -0
- data/lib/version_manager/git.rb +12 -0
- data/lib/version_manager/rake_task.rb +27 -0
- data/lib/version_manager/version.rb +3 -0
- data/lib/version_manager/version_finder.rb +10 -0
- data/lib/version_manager/version_number.rb +33 -0
- data/lib/version_manager/version_tagger.rb +32 -0
- data/lib/version_manager/version_updater.rb +12 -0
- data/lib/version_manager/version_writer.rb +31 -0
- data/lib/version_manager.rb +7 -0
- metadata +126 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4567a65cab744ad2b8e0cba5546a907616df5f56
|
4
|
+
data.tar.gz: 90579a75079d72e8e2dbe1bc1dfb24e5a36bbfe1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ba96ca3be67e8289b7b717b538bc997ea9409967bc5ac927c62ac852a586dc3de2492e8f53d02233c8693a3a52ffd8841a13e0eb0dad447e62027ca5f616bea5
|
7
|
+
data.tar.gz: d29871302090e70b2cf670ae3070727f204fc2839010b108fa373636620503ca4af52dfd75b39e793b7be6218f0b80c0494941f8125c0f7d611324eb4822e5ef
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Version Manager
|
2
|
+
|
3
|
+
Automatically manage version updates and tagging. The new version will be written to your version file,
|
4
|
+
history file and as a tagged git commit.
|
5
|
+
|
6
|
+
## Dependencies
|
7
|
+
|
8
|
+
* Ruby >= 2.2
|
9
|
+
* Rake
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
|
15
|
+
# In Gemfile
|
16
|
+
|
17
|
+
group :development do
|
18
|
+
gem "version_manager"
|
19
|
+
end
|
20
|
+
|
21
|
+
# In a Rake configuration file
|
22
|
+
|
23
|
+
require "version_manager/rake_task"
|
24
|
+
|
25
|
+
VersionManager::RakeTask.new(:release) do |config| # Argument is the namespace for tasks
|
26
|
+
config.version_file = "lib/version.rb" # Path to your version file
|
27
|
+
config.version_constant = "VERSION" # Version constant including namespaces
|
28
|
+
config.history_file = "history.rdoc" # History file to be updated
|
29
|
+
config.tag_format = "v%s" # %s will be replaced with the new version as tag names
|
30
|
+
config.logger = Logger.new # Replace the logger to turn off / modify stdout logging
|
31
|
+
end
|
32
|
+
|
33
|
+
```
|
34
|
+
|
35
|
+
## Usage
|
36
|
+
|
37
|
+
```
|
38
|
+
|
39
|
+
bundle exec rake release:patch # Patch release eg 1.2.3 => 1.2.4
|
40
|
+
bundle exec rake release:minor # Minor release eg 1.2.3 => 1.3.0
|
41
|
+
bundle exec rake release:major # Major release eg 1.2.3 => 2.0.0
|
42
|
+
|
43
|
+
```
|
44
|
+
|
45
|
+
## Configuration
|
46
|
+
|
47
|
+
### `config.version_file`
|
48
|
+
|
49
|
+
The file which will be passed to `load` in order to load your current version number. It should be an absoltue
|
50
|
+
file path or relative to your project's root
|
51
|
+
|
52
|
+
### `config.version_constant`
|
53
|
+
|
54
|
+
The constant which will be loaded as the current version. For example, if your version number is in a module
|
55
|
+
called `MyModule` as the constant `MY_VERSION`, the `version_constant` would be `"MyModule::MY_VERSION"` (as a string)
|
56
|
+
|
57
|
+
### `config.history_file`
|
58
|
+
|
59
|
+
Path to your history file. Currently only supports rdoc format.
|
60
|
+
|
61
|
+
### `config.tag_format`
|
62
|
+
|
63
|
+
The format git tags will be given after version has been updated. `%s` will be replaced with the version number
|
64
|
+
|
65
|
+
### `config.logger`
|
66
|
+
|
67
|
+
The logger to use when printing info messages. By default this just logs the messages with no formatting to STDOUT.
|
68
|
+
If you want to suppress logging you can just use `Logger.new "/dev/null"`
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "logger"
|
2
|
+
|
3
|
+
module VersionManager
|
4
|
+
class Configuration
|
5
|
+
attr_accessor :history_file, :version_file, :version_constant, :tag_format, :logger
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@logger = unformatter_logger
|
9
|
+
@history_file = "history.rdoc"
|
10
|
+
@tag_format = "v%s"
|
11
|
+
@version_file = "lib/version.rb"
|
12
|
+
@version_constant = "VERSION"
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def unformatter_logger
|
18
|
+
logger = Logger.new STDOUT
|
19
|
+
logger.formatter = log_formatter
|
20
|
+
logger
|
21
|
+
end
|
22
|
+
|
23
|
+
def log_formatter
|
24
|
+
proc {|_severity, _datetime, _progname, msg|
|
25
|
+
msg + "\n"
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module VersionManager
|
2
|
+
module Git
|
3
|
+
module CLI
|
4
|
+
def add *files
|
5
|
+
`git add #{files.join(" ")}`
|
6
|
+
end
|
7
|
+
|
8
|
+
def commit message
|
9
|
+
`git commit -m '#{message}'`
|
10
|
+
end
|
11
|
+
|
12
|
+
def tag message
|
13
|
+
`git tag -am '#{message}' #{message}`
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module VersionManager
|
2
|
+
module Git
|
3
|
+
module Stub
|
4
|
+
def add *files
|
5
|
+
@files = files
|
6
|
+
end
|
7
|
+
|
8
|
+
def commit message
|
9
|
+
@commit_message = message
|
10
|
+
end
|
11
|
+
|
12
|
+
def tag message
|
13
|
+
@tag_message = message
|
14
|
+
end
|
15
|
+
|
16
|
+
def files
|
17
|
+
@files
|
18
|
+
end
|
19
|
+
|
20
|
+
def commit_message
|
21
|
+
@commit_message
|
22
|
+
end
|
23
|
+
|
24
|
+
def tag_message
|
25
|
+
@tag_message
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "rake/tasklib"
|
2
|
+
require "version_manager"
|
3
|
+
require "version_manager/version_updater"
|
4
|
+
|
5
|
+
module VersionManager
|
6
|
+
class RakeTask < Rake::TaskLib
|
7
|
+
EXAMPLES = {
|
8
|
+
major: "1.2.3 => 2.0.0",
|
9
|
+
minor: "1.2.3 => 1.3.0",
|
10
|
+
patch: "1.2.3 => 1.2.4",
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
# rubocop: disable Metrics/MethodLength
|
14
|
+
def initialize task_namespace = :release
|
15
|
+
yield(VersionManager.configuration) if block_given?
|
16
|
+
namespace task_namespace do
|
17
|
+
[:major, :minor, :patch].each do |v|
|
18
|
+
desc "Increment your #{v} version number eg #{EXAMPLES[v]}"
|
19
|
+
task v do
|
20
|
+
VersionUpdater.new.call(v)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
# rubocop: enable all
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module VersionManager
|
2
|
+
class VersionNumber
|
3
|
+
attr_reader :major, :minor, :patch, :starting_version
|
4
|
+
|
5
|
+
def initialize version_string
|
6
|
+
@starting_version = version_string
|
7
|
+
@major, @minor, @patch = version_string.split(".").map(&:to_i)
|
8
|
+
end
|
9
|
+
|
10
|
+
def inc_major
|
11
|
+
@major += 1
|
12
|
+
@minor = 0
|
13
|
+
@patch = 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def inc_minor
|
17
|
+
@minor += 1
|
18
|
+
@patch = 0
|
19
|
+
end
|
20
|
+
|
21
|
+
def inc_patch
|
22
|
+
@patch += 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
"#{@major}.#{@minor}.#{@patch}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_tag
|
30
|
+
VersionManager.configuration.tag_format % to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "version_manager/git"
|
2
|
+
|
3
|
+
module VersionManager
|
4
|
+
class VersionTagger
|
5
|
+
def call version
|
6
|
+
logger.info "Committing and tagging..."
|
7
|
+
tag version
|
8
|
+
logger.info "Done"
|
9
|
+
logger.info "Run `git push origin master --tags` to deploy your new tag (#{version.to_tag})"
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def tag version
|
15
|
+
Git.add history_file, version_file
|
16
|
+
Git.commit "Update version to #{version.to_tag}"
|
17
|
+
Git.tag version.to_tag
|
18
|
+
end
|
19
|
+
|
20
|
+
def history_file
|
21
|
+
VersionManager.configuration.history_file
|
22
|
+
end
|
23
|
+
|
24
|
+
def version_file
|
25
|
+
VersionManager.configuration.version_file
|
26
|
+
end
|
27
|
+
|
28
|
+
def logger
|
29
|
+
VersionManager.configuration.logger
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "version_manager/version_finder"
|
2
|
+
require "version_manager/version_writer"
|
3
|
+
|
4
|
+
module VersionManager
|
5
|
+
class VersionUpdater
|
6
|
+
def call update_type
|
7
|
+
v = VersionFinder.new.call
|
8
|
+
v.send(:"inc_#{update_type}")
|
9
|
+
VersionWriter.new.call v
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "version_manager/version_tagger"
|
2
|
+
|
3
|
+
module VersionManager
|
4
|
+
class VersionWriter
|
5
|
+
def call version
|
6
|
+
File.write version_file, updated_version_file(version)
|
7
|
+
File.write history_file, updated_history_file(version) if File.exist?(history_file)
|
8
|
+
VersionTagger.new.call version
|
9
|
+
end
|
10
|
+
|
11
|
+
def updated_version_file new_version
|
12
|
+
File.read(version_file).gsub(new_version.starting_version, new_version.to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
def updated_history_file new_version
|
16
|
+
current_history = File.read history_file
|
17
|
+
date = Date.today.strftime("%d %B %Y")
|
18
|
+
"== #{new_version.to_tag} (#{date})\n\n#{current_history}"
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def history_file
|
24
|
+
VersionManager.configuration.history_file
|
25
|
+
end
|
26
|
+
|
27
|
+
def version_file
|
28
|
+
VersionManager.configuration.version_file
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: version_manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Bowden
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '12.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '12.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.12'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.12'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.47'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.47'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: cucumber
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.4'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.4'
|
83
|
+
description: Increment your project's version and history file automatically
|
84
|
+
email: tom.b1992@gmail.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- README.md
|
90
|
+
- lib/version_manager.rb
|
91
|
+
- lib/version_manager/configuration.rb
|
92
|
+
- lib/version_manager/git.rb
|
93
|
+
- lib/version_manager/git/cli.rb
|
94
|
+
- lib/version_manager/git/stub.rb
|
95
|
+
- lib/version_manager/rake_task.rb
|
96
|
+
- lib/version_manager/version.rb
|
97
|
+
- lib/version_manager/version_finder.rb
|
98
|
+
- lib/version_manager/version_number.rb
|
99
|
+
- lib/version_manager/version_tagger.rb
|
100
|
+
- lib/version_manager/version_updater.rb
|
101
|
+
- lib/version_manager/version_writer.rb
|
102
|
+
homepage: http://github.com/tpbowden/version_manager.git
|
103
|
+
licenses:
|
104
|
+
- MIT
|
105
|
+
metadata: {}
|
106
|
+
post_install_message:
|
107
|
+
rdoc_options: []
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 2.2.0
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
requirements: []
|
121
|
+
rubyforge_project:
|
122
|
+
rubygems_version: 2.4.5.2
|
123
|
+
signing_key:
|
124
|
+
specification_version: 4
|
125
|
+
summary: Convenience tasks for version management
|
126
|
+
test_files: []
|