vump 1.0.2 → 1.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.
- checksums.yaml +4 -4
- data/README.adoc +46 -0
- data/VERSION +1 -1
- data/lib/cli.rb +5 -4
- data/lib/vump.rb +19 -18
- data/lib/vump/semver/version_modules/file_modules/keepachangelog.rb +50 -0
- data/lib/vump/semver/version_modules/file_modules/npm.rb +29 -0
- data/lib/vump/semver/version_modules/file_modules/npm_lock.rb +15 -0
- data/lib/vump/semver/version_modules/file_modules/version_file.rb +26 -0
- data/lib/vump/semver/version_modules/read_write_version_module.rb +45 -0
- data/lib/vump/semver/version_modules/vcs_modules/git.rb +19 -0
- data/vump.gemspec +6 -1
- metadata +7 -6
- data/lib/vump/semver/module/keepachangelog.rb +0 -48
- data/lib/vump/semver/module/npm.rb +0 -27
- data/lib/vump/semver/module/npm_lock.rb +0 -13
- data/lib/vump/semver/module/version_file.rb +0 -24
- data/lib/vump/semver/read_write_version_module.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 613a312760f307d42f96f1019b0a884e23b6e91c
|
4
|
+
data.tar.gz: ab8ed5aa2d16a536805a697b09d9c1b1c06e2afe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8683c206999fab3d91440c675af837385b5b6e2a05c53af56811324d1f78155830a62fbb1fc8ad88708932ab119ebca6a79405a128aab1aee6e9c708e4eebc00
|
7
|
+
data.tar.gz: 7d5522467b1e8468f416075fb2795b3c62834b47b25823d698a3125398887614f0a22076ad6e1c061532bc2246919f9055bf11f2d0a112d52c91155bb1718564
|
data/README.adoc
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
Jaroslav Šmolík <grissius@gmail.com>
|
3
3
|
:semver: https://semver.org/[semver]
|
4
4
|
:git: https://git-scm.com/[git]
|
5
|
+
:rubychangelog: https://rubygems.org/gems/keepachangelog[keepachangelog]
|
6
|
+
|
7
|
+
image:https://travis-ci.org/grissius/vump.svg["Build Status", link="https://travis-ci.org/grissius/vump"]
|
8
|
+
image:https://img.shields.io/gem/v/vump.svg?style=flat[Gem Version, link="https://rubygems.org/gems/vump"]
|
9
|
+
image:https://img.shields.io/badge/yard-docs-blue.svg[Yard Docs, link="http://www.rubydoc.info/github/grissius/vump"]
|
5
10
|
|
6
11
|
CLI tool to easily manage projects using {semver} and automate menial version raising.
|
7
12
|
|
@@ -18,6 +23,15 @@ When working on a project with version management, increasing a version is a mun
|
|
18
23
|
|
19
24
|
Which is exhausting. If following any standards at all, like {semver}, keepachagnelog etc, it does not require any human input, but to decide which version to increase.
|
20
25
|
|
26
|
+
== Install
|
27
|
+
```
|
28
|
+
gem install vump
|
29
|
+
```
|
30
|
+
=== Requirements
|
31
|
+
|
32
|
+
* ruby >= 2.2
|
33
|
+
|
34
|
+
|
21
35
|
== Usage
|
22
36
|
In root of project directory, choose which version (from {semver}) to bump, and supply it as a sole argument.
|
23
37
|
```
|
@@ -39,3 +53,35 @@ WARNING: As the interface implies, your project must follow the {semver} specifi
|
|
39
53
|
`vump --version`:: Print program version
|
40
54
|
`vump --verbose patch`, `vump -v patch`:: Print debug logs
|
41
55
|
`vump --silent patch`, `vump -s patch`:: Print only warning and error logs
|
56
|
+
|
57
|
+
== Current modules
|
58
|
+
|
59
|
+
[WARNING]
|
60
|
+
====
|
61
|
+
Non-trivial modules do not operate on text, but parsed objects, which might result in ugly diffs after first usage.
|
62
|
+
|
63
|
+
If you encounter any fishy :fish: behaviour due to this let me know!
|
64
|
+
====
|
65
|
+
|
66
|
+
VERSION::
|
67
|
+
Find and bump version in `./VERSION` file.
|
68
|
+
+
|
69
|
+
* Expect just verison with whitepsaces around
|
70
|
+
* Write version followed by a newline.
|
71
|
+
|
72
|
+
Npm::
|
73
|
+
Find and bump version in `./package.json` file.
|
74
|
+
+
|
75
|
+
* Parse JSON, modify as object.
|
76
|
+
* Serialize back to JSON, append newline.
|
77
|
+
NpmLock::
|
78
|
+
Find and bump version in `./package-lock.json` file
|
79
|
+
+
|
80
|
+
* Same as Npm.
|
81
|
+
Keepachangelog::
|
82
|
+
Find and bump version in `./CHANGELOG.md` file.
|
83
|
+
+
|
84
|
+
* Parse changelog by {rubychangelog}.
|
85
|
+
* Add changes from `Unreleased` version to new release with current date.
|
86
|
+
* Add empty `Unreleased` version.
|
87
|
+
* Serialize back into markdown.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0
|
1
|
+
1.1.0
|
data/lib/cli.rb
CHANGED
@@ -20,6 +20,7 @@ module Vump
|
|
20
20
|
opt.on('-v', '--verbose') { options[:verbose] = true }
|
21
21
|
opt.on('-s', '--silent') { options[:silent] = true }
|
22
22
|
end.parse!
|
23
|
+
setup(options)
|
23
24
|
[options, args]
|
24
25
|
end
|
25
26
|
|
@@ -52,13 +53,13 @@ module Vump
|
|
52
53
|
def self.start(argv)
|
53
54
|
options, args = parse_argv(argv)
|
54
55
|
if options[:version]
|
55
|
-
|
56
|
+
Vump.logger.info "vump #{Vump::VERSION}"
|
57
|
+
elsif options[:help]
|
58
|
+
Vump.logger.info Vump::SUMMARY
|
56
59
|
elsif valid_args(args)
|
57
60
|
Vump.orchestrate(args)
|
58
61
|
else
|
59
|
-
|
60
|
-
puts Vump::SUMMARY if options[:help]
|
61
|
-
puts 'vump <major|minor|patch>'
|
62
|
+
Vump.logger.info 'vump <major|minor|patch>'
|
62
63
|
end
|
63
64
|
end
|
64
65
|
end
|
data/lib/vump.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require File.expand_path('vump/semver/semver', __dir__)
|
2
|
-
Dir[File.expand_path('vump/semver/
|
2
|
+
Dir[File.expand_path('vump/semver/version_modules/file_modules/*.rb', __dir__)]
|
3
|
+
.each { |file| require file }
|
4
|
+
Dir[File.expand_path('vump/semver/version_modules/vcs_modules/*.rb', __dir__)]
|
3
5
|
.each { |file| require file }
|
4
6
|
require 'logger'
|
5
7
|
|
@@ -27,15 +29,15 @@ module Vump
|
|
27
29
|
end
|
28
30
|
|
29
31
|
def self.modules(base = Dir.pwd)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
mods_vers = Vump::VersionModules::FileModules
|
33
|
+
.constants
|
34
|
+
.map { |m| Vump::VersionModules::FileModules.const_get(m) }
|
35
|
+
.select { |m| m.is_a? Class }
|
36
|
+
.map { |m| m.new(base) }
|
37
|
+
.map { |m| [m, m.read] }
|
38
|
+
.select { |_m, v| v }
|
37
39
|
# "unzip"
|
38
|
-
|
40
|
+
mods_vers.empty? ? [[], []] : mods_vers.transpose
|
39
41
|
end
|
40
42
|
|
41
43
|
# Format CLI output
|
@@ -49,18 +51,17 @@ module Vump
|
|
49
51
|
else
|
50
52
|
new_version = bump(args.first, Vump::Semver.new(current_versions.first))
|
51
53
|
v_modules.each { |m| m.write(new_version.to_s) }
|
52
|
-
|
54
|
+
Vump::VersionModules::VcsModules::Git.revise(v_modules, new_version)
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
56
|
-
def self.git(modules, release_version)
|
57
|
-
return unless File.exist?(Dir.pwd + '/.git')
|
58
|
-
modules.each { |m| `git add #{m.path}` }
|
59
|
-
`git commit -m "Release #{release_version}"` unless modules.empty?
|
60
|
-
`git tag "v#{release_version}"`
|
61
|
-
end
|
62
|
-
|
63
58
|
# Module containing all worker modules to be executed on bump
|
64
|
-
module
|
59
|
+
module VersionModules
|
60
|
+
# All file read/write modules to be exectued
|
61
|
+
module FileModules
|
62
|
+
end
|
63
|
+
# All VCS modules to be exectued
|
64
|
+
module VcsModules
|
65
|
+
end
|
65
66
|
end
|
66
67
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'date'
|
3
|
+
require 'keepachangelog'
|
4
|
+
require_relative '../read_write_version_module'
|
5
|
+
require_relative '../../monkey/keepachangelog'
|
6
|
+
|
7
|
+
module Vump
|
8
|
+
module VersionModules
|
9
|
+
module FileModules
|
10
|
+
# [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
11
|
+
class KeepAChangeLog < Vump::VersionModules::ReadWriteVersionModule
|
12
|
+
def self.name
|
13
|
+
'CHANGELOG.md'
|
14
|
+
end
|
15
|
+
|
16
|
+
def path
|
17
|
+
@base + '/CHANGELOG.md'
|
18
|
+
end
|
19
|
+
|
20
|
+
def scrape(str)
|
21
|
+
Keepachangelog::MarkdownParser
|
22
|
+
.parse(str)['versions']
|
23
|
+
.keys
|
24
|
+
.reject { |v| v == 'Unreleased' }
|
25
|
+
.first
|
26
|
+
end
|
27
|
+
|
28
|
+
def compose(new_version)
|
29
|
+
content = Keepachangelog::MarkdownParser.parse(@read_contents)
|
30
|
+
content = release_changelog(content, new_version)
|
31
|
+
parser = Keepachangelog::Parser.new
|
32
|
+
parser.parsed_content = content
|
33
|
+
parser.to_md + "\n"
|
34
|
+
end
|
35
|
+
|
36
|
+
def release_changelog(changelog, new_version)
|
37
|
+
versions = changelog['versions']
|
38
|
+
# inherit all from unreleased
|
39
|
+
versions[new_version] = versions['Unreleased']
|
40
|
+
.clone
|
41
|
+
# update date
|
42
|
+
versions[new_version]['date'] = Date.today.to_s
|
43
|
+
# reset unreleased
|
44
|
+
versions['Unreleased']['changes'] = {}
|
45
|
+
changelog
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'json'
|
2
|
+
require_relative '../read_write_version_module'
|
3
|
+
|
4
|
+
module Vump
|
5
|
+
module VersionModules
|
6
|
+
module FileModules
|
7
|
+
# Npm version module for package.json
|
8
|
+
class Npm < Vump::VersionModules::ReadWriteVersionModule
|
9
|
+
def self.name
|
10
|
+
'package.json'
|
11
|
+
end
|
12
|
+
|
13
|
+
def path
|
14
|
+
@base + '/package.json'
|
15
|
+
end
|
16
|
+
|
17
|
+
def scrape(str)
|
18
|
+
JSON.parse(str)['version']
|
19
|
+
end
|
20
|
+
|
21
|
+
def compose(new_version)
|
22
|
+
json = JSON.parse(@read_contents)
|
23
|
+
json['version'] = new_version
|
24
|
+
JSON.pretty_generate(json) + "\n"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../read_write_version_module'
|
2
|
+
|
3
|
+
module Vump
|
4
|
+
module VersionModules
|
5
|
+
module FileModules
|
6
|
+
# Module for VERSION file
|
7
|
+
class VersionFile < Vump::VersionModules::ReadWriteVersionModule
|
8
|
+
def self.name
|
9
|
+
'VERSION'
|
10
|
+
end
|
11
|
+
|
12
|
+
def path
|
13
|
+
@base + '/VERSION'
|
14
|
+
end
|
15
|
+
|
16
|
+
def scrape(str)
|
17
|
+
str.strip
|
18
|
+
end
|
19
|
+
|
20
|
+
def compose(new_version)
|
21
|
+
new_version + "\n"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Vump
|
2
|
+
module VersionModules
|
3
|
+
# Read write version module archetype
|
4
|
+
class ReadWriteVersionModule
|
5
|
+
def initialize(base)
|
6
|
+
@base = base
|
7
|
+
end
|
8
|
+
|
9
|
+
def read
|
10
|
+
name = self.class.name
|
11
|
+
if File.file?(path)
|
12
|
+
@read_contents = File.read(path)
|
13
|
+
ver = scrape(@read_contents)
|
14
|
+
Vump.logger.debug("#{name} read `#{ver}` from `#{path}`")
|
15
|
+
else
|
16
|
+
Vump.logger.debug("#{name} could not find `#{path}`")
|
17
|
+
end
|
18
|
+
ver
|
19
|
+
end
|
20
|
+
|
21
|
+
def write(new_version)
|
22
|
+
name = self.class.name
|
23
|
+
File.write(path, compose(new_version))
|
24
|
+
Vump.logger.debug("#{name} bumped to `#{new_version}` in `#{path}`")
|
25
|
+
Vump.logger.info("#{name} successfully bumped!")
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.name
|
29
|
+
raise NotImplementedError
|
30
|
+
end
|
31
|
+
|
32
|
+
def path
|
33
|
+
raise NotImplementedError
|
34
|
+
end
|
35
|
+
|
36
|
+
def scrape(_str)
|
37
|
+
raise NotImplementedError
|
38
|
+
end
|
39
|
+
|
40
|
+
def compose(_new_version)
|
41
|
+
raise NotImplementedError
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Vump
|
2
|
+
module VersionModules
|
3
|
+
module VcsModules
|
4
|
+
# Git VCS module
|
5
|
+
class Git
|
6
|
+
def self.revise(modules, release_version)
|
7
|
+
return unless File.exist?(Dir.pwd + '/.git')
|
8
|
+
modules.each { |m| `git add #{m.path}` }
|
9
|
+
msg = "Release #{release_version}"
|
10
|
+
tag = "v#{release_version}"
|
11
|
+
`git commit -m "#{msg}"` unless modules.empty?
|
12
|
+
Vump.logger.info "Git commit \"#{msg}\" created"
|
13
|
+
`git tag "#{tag}"`
|
14
|
+
Vump.logger.info "Git tag \"#{tag}\" created"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/vump.gemspec
CHANGED
@@ -14,7 +14,12 @@ Gem::Specification.new do |s|
|
|
14
14
|
Semantic version bumper. CLI tool to easily manage projects using semver and automate menial version raising.
|
15
15
|
DESCRIPTION
|
16
16
|
|
17
|
-
s.files
|
17
|
+
s.files = Dir['bin/*',
|
18
|
+
'lib/**/*',
|
19
|
+
'*.gemspec',
|
20
|
+
'LICENSE*',
|
21
|
+
'README*',
|
22
|
+
'VERSION']
|
18
23
|
s.executables = Dir['bin/*'].map { |f| File.basename(f) }
|
19
24
|
s.has_rdoc = 'yard'
|
20
25
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vump
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jaroslav Šmolík
|
@@ -80,13 +80,14 @@ files:
|
|
80
80
|
- lib/cli.rb
|
81
81
|
- lib/vump.rb
|
82
82
|
- lib/vump/meta.rb
|
83
|
-
- lib/vump/semver/module/keepachangelog.rb
|
84
|
-
- lib/vump/semver/module/npm.rb
|
85
|
-
- lib/vump/semver/module/npm_lock.rb
|
86
|
-
- lib/vump/semver/module/version_file.rb
|
87
83
|
- lib/vump/semver/monkey/keepachangelog.rb
|
88
|
-
- lib/vump/semver/read_write_version_module.rb
|
89
84
|
- lib/vump/semver/semver.rb
|
85
|
+
- lib/vump/semver/version_modules/file_modules/keepachangelog.rb
|
86
|
+
- lib/vump/semver/version_modules/file_modules/npm.rb
|
87
|
+
- lib/vump/semver/version_modules/file_modules/npm_lock.rb
|
88
|
+
- lib/vump/semver/version_modules/file_modules/version_file.rb
|
89
|
+
- lib/vump/semver/version_modules/read_write_version_module.rb
|
90
|
+
- lib/vump/semver/version_modules/vcs_modules/git.rb
|
90
91
|
- lib/vump/version.rb
|
91
92
|
- vump.gemspec
|
92
93
|
homepage: https://github.com/grissius/vump
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'date'
|
3
|
-
require 'keepachangelog'
|
4
|
-
require_relative '../read_write_version_module'
|
5
|
-
require_relative '../monkey/keepachangelog'
|
6
|
-
|
7
|
-
module Vump
|
8
|
-
module VersionModule
|
9
|
-
# [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
10
|
-
class KeepAChangeLog < ReadWriteVersionModule
|
11
|
-
def self.name
|
12
|
-
'CHANGELOG.md'
|
13
|
-
end
|
14
|
-
|
15
|
-
def path
|
16
|
-
@base + '/CHANGELOG.md'
|
17
|
-
end
|
18
|
-
|
19
|
-
def scrape(str)
|
20
|
-
Keepachangelog::MarkdownParser
|
21
|
-
.parse(str)['versions']
|
22
|
-
.keys
|
23
|
-
.reject { |v| v == 'Unreleased' }
|
24
|
-
.first
|
25
|
-
end
|
26
|
-
|
27
|
-
def compose(new_version)
|
28
|
-
content = Keepachangelog::MarkdownParser.parse(@read_contents)
|
29
|
-
content = release_changelog(content, new_version)
|
30
|
-
parser = Keepachangelog::Parser.new
|
31
|
-
parser.parsed_content = content
|
32
|
-
parser.to_md + "\n"
|
33
|
-
end
|
34
|
-
|
35
|
-
def release_changelog(changelog, new_version)
|
36
|
-
versions = changelog['versions']
|
37
|
-
# inherit all from unreleased
|
38
|
-
versions[new_version] = versions['Unreleased']
|
39
|
-
.clone
|
40
|
-
# update date
|
41
|
-
versions[new_version]['date'] = Date.today.to_s
|
42
|
-
# reset unreleased
|
43
|
-
versions['Unreleased']['changes'] = {}
|
44
|
-
changelog
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require_relative '../read_write_version_module'
|
3
|
-
|
4
|
-
module Vump
|
5
|
-
module VersionModule
|
6
|
-
# Npm version module for package.json
|
7
|
-
class Npm < ReadWriteVersionModule
|
8
|
-
def self.name
|
9
|
-
'package.json'
|
10
|
-
end
|
11
|
-
|
12
|
-
def path
|
13
|
-
@base + '/package.json'
|
14
|
-
end
|
15
|
-
|
16
|
-
def scrape(str)
|
17
|
-
JSON.parse(str)['version']
|
18
|
-
end
|
19
|
-
|
20
|
-
def compose(new_version)
|
21
|
-
json = JSON.parse(@read_contents)
|
22
|
-
json['version'] = new_version
|
23
|
-
JSON.pretty_generate(json) + "\n"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require_relative '../read_write_version_module'
|
2
|
-
|
3
|
-
module Vump
|
4
|
-
module VersionModule
|
5
|
-
# Module for VERSION file
|
6
|
-
class VersionFile < ReadWriteVersionModule
|
7
|
-
def self.name
|
8
|
-
'VERSION'
|
9
|
-
end
|
10
|
-
|
11
|
-
def path
|
12
|
-
@base + '/VERSION'
|
13
|
-
end
|
14
|
-
|
15
|
-
def scrape(str)
|
16
|
-
str.strip
|
17
|
-
end
|
18
|
-
|
19
|
-
def compose(new_version)
|
20
|
-
new_version + "\n"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Vump
|
2
|
-
# Read write version module archetype
|
3
|
-
class ReadWriteVersionModule
|
4
|
-
def initialize(base)
|
5
|
-
@base = base
|
6
|
-
end
|
7
|
-
|
8
|
-
def read
|
9
|
-
name = self.class.name
|
10
|
-
if File.file?(path)
|
11
|
-
@read_contents = File.read(path)
|
12
|
-
ver = scrape(@read_contents)
|
13
|
-
Vump.logger.debug("#{name} read `#{ver}` from `#{path}`")
|
14
|
-
else
|
15
|
-
Vump.logger.debug("#{name} could not find `#{path}`")
|
16
|
-
end
|
17
|
-
ver
|
18
|
-
end
|
19
|
-
|
20
|
-
def write(new_version)
|
21
|
-
name = self.class.name
|
22
|
-
File.write(path, compose(new_version))
|
23
|
-
Vump.logger.debug("#{name} bumped to `#{new_version}` in `#{path}`")
|
24
|
-
Vump.logger.info("#{name} successfully bumped!")
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.name
|
28
|
-
raise NotImplementedError
|
29
|
-
end
|
30
|
-
|
31
|
-
def path
|
32
|
-
raise NotImplementedError
|
33
|
-
end
|
34
|
-
|
35
|
-
def scrape(_str)
|
36
|
-
raise NotImplementedError
|
37
|
-
end
|
38
|
-
|
39
|
-
def compose(_new_version)
|
40
|
-
raise NotImplementedError
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|