version-manager 0.0.4 → 0.0.5
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 +4 -4
- data/README.md +20 -0
- data/lib/version-manager.rb +2 -2
- data/lib/version-manager/cli.rb +7 -1
- data/lib/version-manager/make.rb +4 -4
- data/lib/version-manager/release_version.rb +12 -13
- data/lib/version-manager/vcs/git.rb +4 -0
- data/lib/version-manager/version.rb +1 -1
- data/lib/version-manager/version_storage.rb +20 -1
- data/version-manager.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb8ca0a693505ca6d8683707210fb91d1ee4de14
|
4
|
+
data.tar.gz: 65aba765dfb701b27f0ca76295dcc85139647019
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff3cbeb177bcc900da57fb05ea24c8c848691542f672f054d0ebf91364a884c567db021531e42940072b82dd1fe7e6314edce6129289d0b2ec4b6fa244427bda
|
7
|
+
data.tar.gz: 678bd6b32fcddec75f4ce89ead9fc5530dad52d9e43a9916fa82566310c59cd92f5a42d8a98af72f3f9cb45101b79c20b13c6435854030f3ab45935c5ffd5c8b
|
data/README.md
CHANGED
@@ -1,2 +1,22 @@
|
|
1
1
|
# version-manager
|
2
2
|
versioning lib (with Git support) written in Ruby
|
3
|
+
|
4
|
+
## Information:
|
5
|
+
The gem purpose is to automate process of releasing a new version. It can be used with [semver](http://semver.org/).
|
6
|
+
There are three version components: major, minor and patch (MAJOR.MINOR.PATCH).
|
7
|
+
Major and minor versions should be updated from the master branch. Patch version should be updated from the release branch.
|
8
|
+
By default, release version has a format like: release-MAJOR.MINOR.
|
9
|
+
Also, a tag is being created alongside with a branch. It has a format like: MAJOR.MINOR.PATCH.
|
10
|
+
|
11
|
+
## Installation:
|
12
|
+
gem install version-manager
|
13
|
+
|
14
|
+
## Usage:
|
15
|
+
|
16
|
+
### Bump a new version:
|
17
|
+
manver make major
|
18
|
+
manver make minor
|
19
|
+
manver make patch
|
20
|
+
|
21
|
+
### Switch to the latest version:
|
22
|
+
manver latest
|
data/lib/version-manager.rb
CHANGED
@@ -2,6 +2,7 @@ require 'docopt'
|
|
2
2
|
require 'git'
|
3
3
|
require 'pathname'
|
4
4
|
require 'logger'
|
5
|
+
require 'inquirer'
|
5
6
|
|
6
7
|
ROOT_DIR = Dir.pwd
|
7
8
|
|
@@ -12,8 +13,7 @@ module VersionManager
|
|
12
13
|
default_commit_message: -> (version) { "Bumped to version #{version}" },
|
13
14
|
options: {
|
14
15
|
remote: 'origin',
|
15
|
-
master_branch: 'master'
|
16
|
-
log: Logger.new(STDOUT)
|
16
|
+
master_branch: 'master'
|
17
17
|
}
|
18
18
|
},
|
19
19
|
authorized_branches: {
|
data/lib/version-manager/cli.rb
CHANGED
@@ -44,14 +44,20 @@ module VersionManager
|
|
44
44
|
storage = build_storage
|
45
45
|
version = storage.latest_version
|
46
46
|
return puts 'There are no any versions.' unless version
|
47
|
-
VCS.build.
|
47
|
+
VCS.build.switch_branch(version.branch)
|
48
48
|
end
|
49
49
|
|
50
50
|
def make_release(release_type)
|
51
51
|
storage = build_storage
|
52
52
|
version = storage.latest_version
|
53
|
+
|
54
|
+
new_version = version.public_send("bump_#{release_type}")
|
55
|
+
return if version && !Ask.confirm("You are going to upgrade version to #{new_version}. Do it? [Y/n]", default: false)
|
53
56
|
version = retrieve_initial_version unless version
|
57
|
+
|
54
58
|
Make.new(version, VCS.build, storage).public_send("#{release_type}!")
|
59
|
+
rescue VersionManager::VersionStorage::WrongLatestVersionError => e
|
60
|
+
puts "There is inappropriate version #{e.version} in your local/remote repository. Please remove it"
|
55
61
|
end
|
56
62
|
|
57
63
|
def build_storage
|
data/lib/version-manager/make.rb
CHANGED
@@ -21,19 +21,19 @@ module VersionManager
|
|
21
21
|
def major!
|
22
22
|
raise BranchIsNotUpToDateError unless vcs.master_state_actual?
|
23
23
|
raise ForbiddenBranchError unless appropriate_branch_for?('major')
|
24
|
-
default_strategy {
|
24
|
+
default_strategy { version.bump_major }
|
25
25
|
end
|
26
26
|
|
27
27
|
def minor!
|
28
28
|
raise BranchIsNotUpToDateError unless vcs.master_state_actual?
|
29
29
|
raise ForbiddenBranchError unless appropriate_branch_for?('minor')
|
30
|
-
default_strategy {
|
30
|
+
default_strategy { version.bump_minor }
|
31
31
|
end
|
32
32
|
|
33
33
|
def patch!
|
34
34
|
raise BranchIsNotUpToDateError unless vcs.state_actual?
|
35
35
|
raise ForbiddenBranchError unless appropriate_branch_for?('patch')
|
36
|
-
version.bump_patch
|
36
|
+
version = version.bump_patch
|
37
37
|
vcs.commit(version_storage.store(version), default_commit_message)
|
38
38
|
vcs.add_tag(version.to_s, default_commit_message)
|
39
39
|
vcs.push_tag(version.to_s)
|
@@ -50,7 +50,7 @@ module VersionManager
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def default_strategy
|
53
|
-
yield
|
53
|
+
@version = yield
|
54
54
|
vcs.create_branch!(version.branch)
|
55
55
|
vcs.commit(version_storage.store(version), default_commit_message)
|
56
56
|
vcs.add_tag(version.to_s, default_commit_message)
|
@@ -8,10 +8,10 @@ module VersionManager
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def initialize(version_input)
|
12
|
-
version_components = version_input.dup
|
13
|
-
|
14
|
-
version_components =
|
11
|
+
def initialize(*version_input)
|
12
|
+
version_components = Array(version_input.dup.flatten)
|
13
|
+
if version_components.size == 1
|
14
|
+
version_components = version_components.first.scan(/(\d+)\.{1}(\d+)\.?(\d*)(?:--(\w+))?/).flatten
|
15
15
|
raise ArgumentError, 'Incorrect version format' if version_components.all?(&:nil?) || version_components.empty?
|
16
16
|
end
|
17
17
|
@major, @minor, @patch = version_components[0..2].map(&:to_i)
|
@@ -39,22 +39,20 @@ module VersionManager
|
|
39
39
|
find { |res| res != 0 } || 0
|
40
40
|
end
|
41
41
|
|
42
|
+
def -(other_version)
|
43
|
+
self.class.new(parts.zip(other_version.parts).map { |x, y| x - y })
|
44
|
+
end
|
45
|
+
|
42
46
|
def bump_major
|
43
|
-
@major
|
44
|
-
@minor = 0
|
45
|
-
@patch = 0
|
46
|
-
recalculate_parts
|
47
|
+
self.class.new(@major + 1, 0, 0)
|
47
48
|
end
|
48
49
|
|
49
50
|
def bump_minor
|
50
|
-
@minor
|
51
|
-
@patch = 0
|
52
|
-
recalculate_parts
|
51
|
+
self.class.new(@major, @minor + 1, 0)
|
53
52
|
end
|
54
53
|
|
55
54
|
def bump_patch
|
56
|
-
@patch
|
57
|
-
recalculate_parts
|
55
|
+
self.class.new(@major, @minor, @patch + 1)
|
58
56
|
end
|
59
57
|
|
60
58
|
def self.valid?(version)
|
@@ -69,6 +67,7 @@ module VersionManager
|
|
69
67
|
|
70
68
|
def recalculate_parts
|
71
69
|
@parts = [major, minor, patch].map(&:to_i)
|
70
|
+
self
|
72
71
|
end
|
73
72
|
end
|
74
73
|
end
|
@@ -15,6 +15,10 @@ module VersionManager
|
|
15
15
|
git.branch(branch_name).checkout
|
16
16
|
end
|
17
17
|
|
18
|
+
def switch_branch(branch_name) # checkout moves commits to new branch
|
19
|
+
git.lib.send(:command, 'checkout', branch_name)
|
20
|
+
end
|
21
|
+
|
18
22
|
def show_file(branch, filepath)
|
19
23
|
git.object("#{branch}:#{filepath}").contents
|
20
24
|
rescue StandardError
|
@@ -1,5 +1,12 @@
|
|
1
1
|
module VersionManager
|
2
2
|
class VersionStorage
|
3
|
+
class WrongLatestVersionError < StandardError
|
4
|
+
attr_reader :version
|
5
|
+
def initialize(version)
|
6
|
+
@version = version
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
3
10
|
def initialize(vcs, storage_options)
|
4
11
|
@filename = storage_options[:filename]
|
5
12
|
@filepath = storage_options[:filepath]
|
@@ -18,7 +25,7 @@ module VersionManager
|
|
18
25
|
name = name.split('/').last
|
19
26
|
ReleaseVersion.new(name) if name.include?('release-') && ReleaseVersion.valid?(name)
|
20
27
|
end
|
21
|
-
version = versions
|
28
|
+
version = select_appropriate_version(versions)
|
22
29
|
file_content = vcs.show_file(version.branch, relative_path) if version
|
23
30
|
version = ReleaseVersion.new(file_content) if file_content && ReleaseVersion.valid?(file_content)
|
24
31
|
version
|
@@ -35,5 +42,17 @@ module VersionManager
|
|
35
42
|
def full_path
|
36
43
|
File.expand_path(File.join(filepath, filename))
|
37
44
|
end
|
45
|
+
|
46
|
+
def select_appropriate_version(versions)
|
47
|
+
sorted_versions = versions.compact.sort
|
48
|
+
prev_last_version, last_version = sorted_versions.last(2)
|
49
|
+
return prev_last_version unless last_version
|
50
|
+
diff = last_version - prev_last_version
|
51
|
+
is_appropriate = diff.major == 1
|
52
|
+
is_appropriate ||= diff.major == 0 && diff.minor == 1
|
53
|
+
is_appropriate ||= diff.major == 0 && diff.minor == 0 && diff.patch == 1
|
54
|
+
raise WrongLatestVersionError.new(last_version) unless is_appropriate
|
55
|
+
last_version
|
56
|
+
end
|
38
57
|
end
|
39
58
|
end
|
data/version-manager.gemspec
CHANGED
@@ -21,5 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
22
22
|
spec.add_development_dependency 'rake', '~> 10.0'
|
23
23
|
spec.add_dependency 'docopt', '~> 0.5'
|
24
|
+
spec.add_dependency 'inquirer', '~> 0.2'
|
24
25
|
spec.add_dependency 'git', '~> 1.3'
|
25
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: version-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- isolo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: inquirer
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.2'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: git
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|