verto 0.1.0 → 0.2.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/.ruby-version +1 -0
- data/Dockerfile +43 -0
- data/Gemfile.lock +1 -1
- data/README.md +32 -5
- data/Rakefile +4 -2
- data/docker-entrypoint.sh +11 -0
- data/exe/verto +8 -3
- data/lib/verto/commands/base_command.rb +1 -1
- data/lib/verto/dsl/syntax.rb +23 -1
- data/lib/verto/repositories/tag_repository.rb +1 -1
- data/lib/verto/utils/system_command_executor.rb +9 -4
- data/lib/verto/version.rb +1 -1
- data/lib/verto.rb +27 -0
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ccba2d3e689dff838d612930a75a88c445f40dfb7a783179dee0fd8abdfe207a
|
|
4
|
+
data.tar.gz: d9ac8120dfba52e31efb8c40d8c3d057f499fd73ef69443430a61beb0aaa5a31
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aedc4f24da4845fde6bd377f75a041dd6c6b683cb524a6e58843f80c12c18849d9844c665c65c51853186489f63e5527a8e5a5af310883f64c7b5bcbcdd329ec
|
|
7
|
+
data.tar.gz: 1557b99f71c2e81d69fb7e2c4dfd732bcdd4b86794e3ab71b65e17ce77e3683e593244ca2081fe2c23da08eff2088988ed514730c1322bc1fb5cc2c13fbd759a
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.6.5
|
data/Dockerfile
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
FROM ruby:2.6.5-alpine AS builder
|
|
2
|
+
|
|
3
|
+
ENV BUILD_PACKAGES build-base git
|
|
4
|
+
|
|
5
|
+
RUN mkdir /bundle
|
|
6
|
+
|
|
7
|
+
RUN apk update && \
|
|
8
|
+
apk upgrade && \
|
|
9
|
+
apk add $BUILD_PACKAGES && \
|
|
10
|
+
rm -rf /var/cache/apk/*
|
|
11
|
+
|
|
12
|
+
COPY verto.gemspec Gemfile Gemfile.lock ./
|
|
13
|
+
|
|
14
|
+
COPY lib/verto/version.rb lib/verto/version.rb
|
|
15
|
+
|
|
16
|
+
RUN gem install bundler -v 2.0.2
|
|
17
|
+
|
|
18
|
+
RUN bundle install
|
|
19
|
+
|
|
20
|
+
FROM ruby:2.6.5-alpine
|
|
21
|
+
|
|
22
|
+
ENV DEPENDENCIES git openssh-client
|
|
23
|
+
|
|
24
|
+
RUN apk update && \
|
|
25
|
+
apk upgrade && \
|
|
26
|
+
apk add $DEPENDENCIES && \
|
|
27
|
+
rm -rf /var/cache/apk/*
|
|
28
|
+
|
|
29
|
+
WORKDIR /usr/src/verto
|
|
30
|
+
|
|
31
|
+
COPY --from=builder /usr/local/bundle/ /usr/local/bundle
|
|
32
|
+
|
|
33
|
+
RUN gem install bundler -v 2.0.2
|
|
34
|
+
|
|
35
|
+
COPY . .
|
|
36
|
+
|
|
37
|
+
RUN chmod +x docker-entrypoint.sh
|
|
38
|
+
|
|
39
|
+
RUN rake install
|
|
40
|
+
|
|
41
|
+
WORKDIR /usr/src/project
|
|
42
|
+
|
|
43
|
+
ENTRYPOINT ["/usr/src/verto/docker-entrypoint.sh"]
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -4,15 +4,37 @@ Verto is a CLI to generate git tags (following the [Semantic Versioning](https:/
|
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
+
|
|
8
|
+
### Ruby Gem
|
|
7
9
|
Verto is distributed as a ruby gem, to install run:
|
|
8
10
|
|
|
9
11
|
```
|
|
10
12
|
$ gem install verto
|
|
11
13
|
```
|
|
12
14
|
|
|
15
|
+
|
|
16
|
+
### Docker Image
|
|
17
|
+
|
|
18
|
+
You don't need to install verto in your machine, you can run verto via the docker image
|
|
19
|
+
|
|
20
|
+
To use verto in the same way that you use any other cli, you can set an alias in your `.bashrc`, `.zshrc`, etc:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
alias verto='docker run -v $(pwd):/usr/src/project -it catks/verto'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If you want to use your ssh keys with verto container (for git push) you can set the alias sharing the ssh key file:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
alias verto='docker run -v $(pwd):/usr/src/project -v $HOME/.ssh/known_hosts:/root/.ssh/known_hosts -v $HOME/.ssh/id_rsa:/root/.ssh/id_rsa -e SSH_PRIVATE_KEY=/root/.ssh/id_rsa -it catks/verto'
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Now you can run any verto command! :)
|
|
34
|
+
|
|
13
35
|
## Usage
|
|
14
36
|
|
|
15
|
-
|
|
37
|
+
You can run verto right out of the box without any configuration:
|
|
16
38
|
|
|
17
39
|
```
|
|
18
40
|
verto tag up --patch # Creates a new tag increasing the patch number
|
|
@@ -35,12 +57,12 @@ before { sh('echo "Creating Tag"') }
|
|
|
35
57
|
|
|
36
58
|
context(branch('master')) {
|
|
37
59
|
on('before_tag_creation') {
|
|
38
|
-
|
|
60
|
+
version_changes = "## #{new_version} - #{Time.now.strftime('%d/%m/%Y')}\n"
|
|
39
61
|
exit unless confirm("Create a new release?\n" \
|
|
40
|
-
"#{
|
|
62
|
+
"#{version_changes}"
|
|
41
63
|
)
|
|
42
64
|
|
|
43
|
-
file('CHANGELOG.md').prepend(
|
|
65
|
+
file('CHANGELOG.md').prepend(version_changes)
|
|
44
66
|
git('add CHANGELOG.md')
|
|
45
67
|
git('commit -m "Updates CHANGELOG"')
|
|
46
68
|
}
|
|
@@ -61,6 +83,10 @@ context(branch('qa')) {
|
|
|
61
83
|
}
|
|
62
84
|
}
|
|
63
85
|
|
|
86
|
+
context(branch(/feature.+/)) {
|
|
87
|
+
error "Can't create tags in feature branchs"
|
|
88
|
+
}
|
|
89
|
+
|
|
64
90
|
```
|
|
65
91
|
|
|
66
92
|
#### Verto Syntax
|
|
@@ -71,7 +97,8 @@ context(branch('qa')) {
|
|
|
71
97
|
|
|
72
98
|
1. Complete README.md description
|
|
73
99
|
2. Add a configuration to enable, disable or specify the number of tags that a single commit can have(eg: only one release and one pre-release)
|
|
74
|
-
3.
|
|
100
|
+
3. Configure tag prefix (eg: 'v' to generate v0.1.0)
|
|
101
|
+
4. Improve DSL Syntax Errors Messages(Ruby backtrace is printed currently)
|
|
75
102
|
|
|
76
103
|
## Contributing
|
|
77
104
|
|
data/Rakefile
CHANGED
|
@@ -9,7 +9,9 @@ task :default => :spec
|
|
|
9
9
|
|
|
10
10
|
desc 'Verto REPL'
|
|
11
11
|
task :console do
|
|
12
|
-
|
|
12
|
+
require 'irb'
|
|
13
|
+
ARGV.clear
|
|
14
|
+
IRB.start
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
namespace :temp_repo do
|
|
@@ -20,6 +22,6 @@ namespace :temp_repo do
|
|
|
20
22
|
|
|
21
23
|
desc 'clear the temp git repo'
|
|
22
24
|
task :clear do
|
|
23
|
-
TestRepo.new.clear
|
|
25
|
+
TestRepo.new.clear!
|
|
24
26
|
end
|
|
25
27
|
end
|
data/exe/verto
CHANGED
|
@@ -4,6 +4,11 @@ require_relative '../lib/verto'
|
|
|
4
4
|
|
|
5
5
|
vertofile_path = ENV['VERTOFILE_PATH'] || Pathname.new(Dir.pwd).join('Vertofile').to_s
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
begin
|
|
8
|
+
Verto::DSL.load_file(vertofile_path) if File.exists?(vertofile_path)
|
|
9
|
+
|
|
10
|
+
Verto::MainCommand.start(ARGV)
|
|
11
|
+
rescue Verto::ExitError
|
|
12
|
+
Verto.stderr.puts 'Exiting Verto...'
|
|
13
|
+
exit 1
|
|
14
|
+
end
|
data/lib/verto/dsl/syntax.rb
CHANGED
|
@@ -10,7 +10,11 @@ module Verto
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def branch(*branch_names)
|
|
13
|
-
branch_names.
|
|
13
|
+
branch_names.any? do |branch|
|
|
14
|
+
return branch.match?(current_branch) if branch.is_a?(Regexp)
|
|
15
|
+
|
|
16
|
+
branch.to_s.include? current_branch
|
|
17
|
+
end
|
|
14
18
|
end
|
|
15
19
|
|
|
16
20
|
def context(condition, &block)
|
|
@@ -25,6 +29,10 @@ module Verto
|
|
|
25
29
|
command_executor.run command
|
|
26
30
|
end
|
|
27
31
|
|
|
32
|
+
def sh!(command)
|
|
33
|
+
raise Verto::ExitError unless sh(command).success?
|
|
34
|
+
end
|
|
35
|
+
|
|
28
36
|
def command_options
|
|
29
37
|
Verto.config.command_options
|
|
30
38
|
end
|
|
@@ -61,6 +69,16 @@ module Verto
|
|
|
61
69
|
shell_basic.yes?("#{text} (y/n)")
|
|
62
70
|
end
|
|
63
71
|
|
|
72
|
+
def error(text)
|
|
73
|
+
stderr.puts text
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def error!(text)
|
|
77
|
+
error(text)
|
|
78
|
+
|
|
79
|
+
raise Verto::ExitError
|
|
80
|
+
end
|
|
81
|
+
|
|
64
82
|
private
|
|
65
83
|
|
|
66
84
|
def command_executor
|
|
@@ -70,6 +88,10 @@ module Verto
|
|
|
70
88
|
def shell_basic
|
|
71
89
|
@shell_basic ||= Thor::Shell::Basic.new
|
|
72
90
|
end
|
|
91
|
+
|
|
92
|
+
def stderr
|
|
93
|
+
Verto.stderr
|
|
94
|
+
end
|
|
73
95
|
end
|
|
74
96
|
end
|
|
75
97
|
end
|
|
@@ -2,11 +2,11 @@ require 'open3'
|
|
|
2
2
|
|
|
3
3
|
module Verto
|
|
4
4
|
class SystemCommandExecutor
|
|
5
|
-
include Verto.import['project.path']
|
|
5
|
+
include Verto.import['project.path', 'stdout', 'stderr']
|
|
6
6
|
|
|
7
7
|
class Result < Struct.new(:output, :error, :result)
|
|
8
8
|
def success?
|
|
9
|
-
|
|
9
|
+
result.success?
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def error?
|
|
@@ -16,19 +16,24 @@ module Verto
|
|
|
16
16
|
Error = Class.new(StandardError)
|
|
17
17
|
|
|
18
18
|
def run(command)
|
|
19
|
-
Open3.popen3(command, chdir: path.to_s) do |
|
|
19
|
+
Open3.popen3(command, chdir: path.to_s) do |_, stdout, stderr, wait_thread|
|
|
20
20
|
@output = stdout.read
|
|
21
21
|
@error = stderr.read
|
|
22
22
|
@result = wait_thread.value
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
stdout << @output if stderr
|
|
26
|
+
stderr << @error if stderr
|
|
27
|
+
|
|
25
28
|
Result.new(@output, @error, @result)
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
def run!(command)
|
|
29
|
-
run(command)
|
|
32
|
+
result = run(command)
|
|
30
33
|
|
|
31
34
|
raise Error, @error unless @error.empty?
|
|
35
|
+
|
|
36
|
+
result
|
|
32
37
|
end
|
|
33
38
|
end
|
|
34
39
|
end
|
data/lib/verto/version.rb
CHANGED
data/lib/verto.rb
CHANGED
|
@@ -17,19 +17,42 @@ module Verto
|
|
|
17
17
|
setting :path, './'
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
setting :output do
|
|
21
|
+
setting :stdout_to, nil
|
|
22
|
+
setting :stderr_to, nil
|
|
23
|
+
end
|
|
24
|
+
|
|
20
25
|
setting :hooks, []
|
|
21
26
|
setting :command_options, Class.new(Hash) { alias_method :add, :merge! }.new
|
|
22
27
|
|
|
28
|
+
ExitError = Class.new(Thor::Error)
|
|
29
|
+
CommandError = Class.new(ExitError)
|
|
30
|
+
|
|
23
31
|
def self.root_path
|
|
24
32
|
Pathname.new File.expand_path(File.dirname(__FILE__) + '/..')
|
|
25
33
|
end
|
|
26
34
|
|
|
35
|
+
def self.project_path
|
|
36
|
+
Pathname.new Verto.config.project.path
|
|
37
|
+
end
|
|
27
38
|
|
|
28
39
|
def self.container
|
|
29
40
|
@container ||= Dry::Container.new.tap do |container|
|
|
30
41
|
container.register('system_command_executor') { SystemCommandExecutor.new }
|
|
42
|
+
container.register('system_command_executor_without_output') { SystemCommandExecutor.new(stdout: nil, stderr: nil) }
|
|
43
|
+
|
|
31
44
|
container.register('tag_repository') { TagRepository.new }
|
|
32
45
|
|
|
46
|
+
container.register('stdout', memoize: true) do
|
|
47
|
+
stdout = Verto.config.output.stdout_to
|
|
48
|
+
stdout && Verto.project_path.join(stdout).open('a+') || $stdout
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
container.register('stderr', memoize: true) do
|
|
52
|
+
stderr = Verto.config.output.stderr_to
|
|
53
|
+
stderr && Verto.project_path.join(stderr).open('a+') || $stderr
|
|
54
|
+
end
|
|
55
|
+
|
|
33
56
|
# TODO: Remove project.path from container
|
|
34
57
|
container.namespace('project') do
|
|
35
58
|
register('path') { Verto.config.project.path }
|
|
@@ -40,6 +63,10 @@ module Verto
|
|
|
40
63
|
def self.import
|
|
41
64
|
@import ||= Dry::AutoInject(container)
|
|
42
65
|
end
|
|
66
|
+
|
|
67
|
+
def self.stderr
|
|
68
|
+
Verto.container.resolve('stderr')
|
|
69
|
+
end
|
|
43
70
|
end
|
|
44
71
|
|
|
45
72
|
require "verto/utils/semantic_version.rb"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: verto
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Carlos Atkinson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-02-
|
|
11
|
+
date: 2020-02-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -132,7 +132,9 @@ extra_rdoc_files: []
|
|
|
132
132
|
files:
|
|
133
133
|
- ".gitignore"
|
|
134
134
|
- ".rspec"
|
|
135
|
+
- ".ruby-version"
|
|
135
136
|
- ".travis.yml"
|
|
137
|
+
- Dockerfile
|
|
136
138
|
- Gemfile
|
|
137
139
|
- Gemfile.lock
|
|
138
140
|
- LICENSE.txt
|
|
@@ -140,6 +142,7 @@ files:
|
|
|
140
142
|
- Rakefile
|
|
141
143
|
- bin/console
|
|
142
144
|
- bin/setup
|
|
145
|
+
- docker-entrypoint.sh
|
|
143
146
|
- exe/verto
|
|
144
147
|
- lib/verto.rb
|
|
145
148
|
- lib/verto/commands/base_command.rb
|