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