cobra_commander 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/cobra_commander.gemspec +2 -0
- data/lib/cobra_commander/executor.rb +11 -10
- data/lib/cobra_commander/executor/component_exec.rb +23 -0
- data/lib/cobra_commander/executor/multi_exec.rb +45 -0
- data/lib/cobra_commander/version.rb +1 -1
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d77734cb3eeb9f21c539f66a92d15e8aa94030046db7cdad3be8f6ed191c00aa
|
4
|
+
data.tar.gz: feacbdfbafb7baf191948e81014d9335b1cddf4a1ddd0f0a2aeac13af823efb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd926a0cc0bf9978b9b3dae6319e5b33853a2191f0d3b82645e696355a671769bf23894de45a58fb02fe5d0bb302c986d2ec8b3d71559c414248a82e2822c921
|
7
|
+
data.tar.gz: 60c750c84313992647cf94463ecc31fda2e5e3502f21a6eaacf4d6dbf206eddb8cacbd28d8925547c2851034bb64e3775413467f0c00962397e42af7484ac986
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## Version 0.9.0 - 2020-08-26
|
6
|
+
|
7
|
+
* Add support for parallel task execution to `cobra exec`.
|
8
|
+
|
5
9
|
## Version 0.8.1 - 2020-07-29
|
6
10
|
|
7
11
|
* Fix CobraCommander::Executor when running [`bundler`](https://bundler.io/) based commands (i.e.: `bundle exec rspec`)
|
data/cobra_commander.gemspec
CHANGED
@@ -37,6 +37,8 @@ DESCRIPTION
|
|
37
37
|
spec.add_dependency "bundler", "~> 1.17"
|
38
38
|
spec.add_dependency "thor", ["< 2.0", ">= 0.18.1"]
|
39
39
|
spec.add_dependency "ruby-graphviz", "~> 1.2.3"
|
40
|
+
spec.add_dependency "tty-command", "~> 0.9.0"
|
41
|
+
spec.add_dependency "tty-spinner", "~> 0.9.3"
|
40
42
|
|
41
43
|
spec.add_development_dependency "bundler", "~> 1.17"
|
42
44
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -1,18 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "executor/component_exec"
|
4
|
+
require_relative "executor/multi_exec"
|
5
|
+
|
3
6
|
module CobraCommander
|
4
7
|
# Execute commands on all components of a ComponentTree
|
5
8
|
module Executor
|
6
|
-
def self.exec(components, command,
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
9
|
+
def self.exec(components, command, output = $stdout, status_output = $stderr)
|
10
|
+
components = Array(components)
|
11
|
+
exec = if components.size == 1
|
12
|
+
ComponentExec.new(components.first)
|
13
|
+
else
|
14
|
+
MultiExec.new(components)
|
15
|
+
end
|
16
|
+
exec.run(command, output: output, spin_output: status_output)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tty-command"
|
4
|
+
|
5
|
+
module CobraCommander
|
6
|
+
module Executor
|
7
|
+
# Execute a command on a single component
|
8
|
+
class ComponentExec
|
9
|
+
def initialize(component)
|
10
|
+
@component = component
|
11
|
+
end
|
12
|
+
|
13
|
+
def run(command, output: $stdout, **cmd_options)
|
14
|
+
tty = TTY::Command.new(pty: true, printer: :quiet, output: output)
|
15
|
+
Bundler.with_original_env do
|
16
|
+
@component.root_paths.all? do |path|
|
17
|
+
tty.run!(command, chdir: path, **cmd_options).success?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tty-spinner"
|
4
|
+
|
5
|
+
require_relative "component_exec"
|
6
|
+
|
7
|
+
module CobraCommander
|
8
|
+
module Executor
|
9
|
+
# Executes a command on multiple components simultaniously
|
10
|
+
class MultiExec
|
11
|
+
def initialize(components)
|
12
|
+
@components = components
|
13
|
+
end
|
14
|
+
|
15
|
+
def run(command, output: $stdout, spin_output: $stderr, only_output_on_error: true, **cmd_options)
|
16
|
+
cmmd_output = StringIO.new
|
17
|
+
multi = TTY::Spinner::Multi.new("Running #{command}", output: spin_output)
|
18
|
+
@components.each do |component|
|
19
|
+
component_exec(multi, component, command, only_output_on_error: only_output_on_error,
|
20
|
+
stderr: :stdout, output: cmmd_output,
|
21
|
+
**cmd_options)
|
22
|
+
end
|
23
|
+
multi.auto_spin
|
24
|
+
output << cmmd_output.string
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def component_exec(multi, component, command, **options)
|
31
|
+
exec = ComponentExec.new(component)
|
32
|
+
multi.register(*spinner(component.name)) do |spin|
|
33
|
+
exec.run(command, **options) ? spin.success : spin.error
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def spinner(title)
|
38
|
+
pastel = Pastel.new
|
39
|
+
[":spinner #{title}", format: :bouncing,
|
40
|
+
success_mark: pastel.green("[DONE]"),
|
41
|
+
error_mark: pastel.red("[ERROR]")]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cobra_commander
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Langfeld
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-08-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -60,6 +60,34 @@ dependencies:
|
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: 1.2.3
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: tty-command
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.9.0
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.9.0
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
name: tty-spinner
|
79
|
+
requirement: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.9.3
|
84
|
+
type: :runtime
|
85
|
+
prerelease: false
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 0.9.3
|
63
91
|
- !ruby/object:Gem::Dependency
|
64
92
|
name: bundler
|
65
93
|
requirement: !ruby/object:Gem::Requirement
|
@@ -200,6 +228,8 @@ files:
|
|
200
228
|
- lib/cobra_commander/dependencies/yarn/package_repo.rb
|
201
229
|
- lib/cobra_commander/dependencies/yarn_workspace.rb
|
202
230
|
- lib/cobra_commander/executor.rb
|
231
|
+
- lib/cobra_commander/executor/component_exec.rb
|
232
|
+
- lib/cobra_commander/executor/multi_exec.rb
|
203
233
|
- lib/cobra_commander/output.rb
|
204
234
|
- lib/cobra_commander/output/ascii_tree.rb
|
205
235
|
- lib/cobra_commander/output/flat_list.rb
|