tomo 1.21.2 → 1.22.1
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/lib/tomo/cli/common_options.rb +3 -0
- data/lib/tomo/error.rb +1 -1
- data/lib/tomo/logger.rb +8 -0
- data/lib/tomo/plugin/puma/tasks.rb +5 -2
- data/lib/tomo/plugin/rails/tasks.rb +4 -0
- data/lib/tomo/runtime/execution_plan.rb +1 -1
- data/lib/tomo/runtime/settings_interpolation.rb +13 -2
- data/lib/tomo/task_api.rb +4 -0
- data/lib/tomo/testing/cli_tester.rb +1 -0
- data/lib/tomo/testing/systemctl.rb +3 -3
- data/lib/tomo/version.rb +1 -1
- data/lib/tomo.rb +6 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5ab6df6968dd42a95ca984a38b14a817c0d0a947454441d844515fdc0dae5f8b
|
|
4
|
+
data.tar.gz: 02acf3183ca8fd770437d67a33efa21fe32b56af223d6b0c281b89a549b3fc97
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9328f7bcc5b49da0af09bec1a1cb03bbbef8a47b7fd31e2105005ab644ac4fcf93f17b432041a6ae158f45393adb881627ef0d8a4b218df818a6d945611bae0c
|
|
7
|
+
data.tar.gz: f9d299f3fca94e68d67e8a44e669a0e24ce84b9c8afcb1f9615ac272dfee1c9a93d53f352c3e1535ffb749a9cbca6f0b6786861b03a29a0f911544e62b8ae59d
|
|
@@ -11,6 +11,9 @@ module Tomo
|
|
|
11
11
|
option :debug, "--[no-]debug", "Enable/disable verbose debug logging" do |debug|
|
|
12
12
|
Tomo.debug = debug
|
|
13
13
|
end
|
|
14
|
+
option :quiet, "--[no-]quiet", "Silence all progress output" do |quiet|
|
|
15
|
+
Tomo.quiet = quiet
|
|
16
|
+
end
|
|
14
17
|
option :trace, "--[no-]trace", "Display full backtrace on error" do |trace|
|
|
15
18
|
CLI.show_backtrace = trace
|
|
16
19
|
end
|
data/lib/tomo/error.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Tomo
|
|
|
6
6
|
|
|
7
7
|
include Colors
|
|
8
8
|
|
|
9
|
-
def self.raise_with(message=nil, attributes)
|
|
9
|
+
def self.raise_with(message=nil, attributes) # rubocop:disable Style/OptionalArguments
|
|
10
10
|
err = new(message)
|
|
11
11
|
attributes.each { |attr, value| err.public_send(:"#{attr}=", value) }
|
|
12
12
|
raise err
|
data/lib/tomo/logger.rb
CHANGED
|
@@ -15,6 +15,7 @@ module Tomo
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def script_start(script)
|
|
18
|
+
return if Tomo.quiet?
|
|
18
19
|
return unless script.echo?
|
|
19
20
|
|
|
20
21
|
puts yellow(script.echo_string)
|
|
@@ -27,6 +28,7 @@ module Tomo
|
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def script_end(script, result)
|
|
31
|
+
return if Tomo.quiet?
|
|
30
32
|
return unless result.failure?
|
|
31
33
|
return unless script.silent?
|
|
32
34
|
return unless script.raise_on_error?
|
|
@@ -35,14 +37,20 @@ module Tomo
|
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
def connect(host)
|
|
40
|
+
return if Tomo.quiet?
|
|
41
|
+
|
|
38
42
|
puts gray("→ Connecting to #{host}")
|
|
39
43
|
end
|
|
40
44
|
|
|
41
45
|
def task_start(task)
|
|
46
|
+
return if Tomo.quiet?
|
|
47
|
+
|
|
42
48
|
puts blue("• #{task}")
|
|
43
49
|
end
|
|
44
50
|
|
|
45
51
|
def info(message)
|
|
52
|
+
return if Tomo.quiet?
|
|
53
|
+
|
|
46
54
|
puts message
|
|
47
55
|
end
|
|
48
56
|
|
|
@@ -4,6 +4,9 @@ module Tomo::Plugin::Puma
|
|
|
4
4
|
class Tasks < Tomo::TaskLibrary
|
|
5
5
|
SystemdUnit = Struct.new(:name, :template, :path)
|
|
6
6
|
|
|
7
|
+
# Exposed to allow override during unit tests
|
|
8
|
+
def self.polling_delay = 1
|
|
9
|
+
|
|
7
10
|
def setup_systemd # rubocop:disable Metrics/AbcSize
|
|
8
11
|
linger_must_be_enabled!
|
|
9
12
|
|
|
@@ -90,7 +93,7 @@ module Tomo::Plugin::Puma
|
|
|
90
93
|
def wait_until
|
|
91
94
|
timeout = settings[:puma_check_timeout].to_i
|
|
92
95
|
start = Time.now.to_i
|
|
93
|
-
delay =
|
|
96
|
+
delay = self.class.polling_delay
|
|
94
97
|
|
|
95
98
|
loop do
|
|
96
99
|
sleep delay
|
|
@@ -99,7 +102,7 @@ module Tomo::Plugin::Puma
|
|
|
99
102
|
elapsed = Time.now.to_i - start
|
|
100
103
|
return false if elapsed >= timeout
|
|
101
104
|
|
|
102
|
-
delay = [delay +
|
|
105
|
+
delay = [delay + self.class.polling_delay, timeout - elapsed].min
|
|
103
106
|
end
|
|
104
107
|
end
|
|
105
108
|
|
|
@@ -10,6 +10,10 @@ module Tomo::Plugin::Rails
|
|
|
10
10
|
remote.rails("console", settings[:run_args], attach: true)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
def query
|
|
14
|
+
remote.rails("query", settings[:run_args], attach: true)
|
|
15
|
+
end
|
|
16
|
+
|
|
13
17
|
def db_console
|
|
14
18
|
remote.rails("dbconsole", "--include-password", settings[:run_args], attach: true)
|
|
15
19
|
end
|
|
@@ -26,7 +26,7 @@ module Tomo
|
|
|
26
26
|
|
|
27
27
|
case applicable_hosts.length
|
|
28
28
|
when 1 then applicable_hosts.first.to_s
|
|
29
|
-
when 2 then applicable_hosts.
|
|
29
|
+
when 2 then applicable_hosts.join(" and ")
|
|
30
30
|
else
|
|
31
31
|
"#{applicable_hosts.first} and #{applicable_hosts.length - 1} other hosts"
|
|
32
32
|
end
|
|
@@ -23,11 +23,22 @@ module Tomo
|
|
|
23
23
|
|
|
24
24
|
def fetch(name, stack=[])
|
|
25
25
|
raise_circular_dependency_error(name, stack) if stack.include?(name)
|
|
26
|
+
|
|
27
|
+
stack += [name]
|
|
26
28
|
value = settings.fetch(name)
|
|
27
|
-
return value unless value.is_a?(String)
|
|
28
29
|
|
|
30
|
+
if value.is_a?(String)
|
|
31
|
+
interpolate_string(value, stack)
|
|
32
|
+
elsif value.is_a?(Hash)
|
|
33
|
+
value.transform_values { |v| v.is_a?(String) ? interpolate_string(v, stack) : v }
|
|
34
|
+
else
|
|
35
|
+
value
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def interpolate_string(value, stack)
|
|
29
40
|
value.gsub(/%{(\w+)}/) do
|
|
30
|
-
fetch(Regexp.last_match[1].to_sym, stack
|
|
41
|
+
fetch(Regexp.last_match[1].to_sym, stack)
|
|
31
42
|
end
|
|
32
43
|
end
|
|
33
44
|
|
data/lib/tomo/task_api.rb
CHANGED
|
@@ -120,7 +120,7 @@ class Unit
|
|
|
120
120
|
end
|
|
121
121
|
end
|
|
122
122
|
|
|
123
|
-
class Service < Unit
|
|
123
|
+
class Service < Unit # rubocop:disable Style/OneClassPerFile
|
|
124
124
|
def is_active # rubocop:disable Naming/PredicatePrefix
|
|
125
125
|
exit(false) unless started?
|
|
126
126
|
puts "active"
|
|
@@ -176,8 +176,8 @@ class Service < Unit
|
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
def with_detached_io
|
|
179
|
-
null_in = File.open(File::NULL, "r")
|
|
180
|
-
null_out = File.open(File::NULL, "w")
|
|
179
|
+
null_in = File.open(File::NULL, "r") # rubocop:disable Style/FileOpen
|
|
180
|
+
null_out = File.open(File::NULL, "w") # rubocop:disable Style/FileOpen
|
|
181
181
|
$stdin.reopen(null_in)
|
|
182
182
|
$stderr.reopen(null_out)
|
|
183
183
|
$stdout.reopen(null_out)
|
data/lib/tomo/version.rb
CHANGED
data/lib/tomo.rb
CHANGED
|
@@ -27,7 +27,7 @@ module Tomo
|
|
|
27
27
|
|
|
28
28
|
class << self
|
|
29
29
|
attr_accessor :logger
|
|
30
|
-
attr_writer :debug, :dry_run
|
|
30
|
+
attr_writer :debug, :dry_run, :quiet
|
|
31
31
|
|
|
32
32
|
def debug?
|
|
33
33
|
!!@debug
|
|
@@ -37,6 +37,10 @@ module Tomo
|
|
|
37
37
|
!!@dry_run
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
def quiet?
|
|
41
|
+
!!@quiet
|
|
42
|
+
end
|
|
43
|
+
|
|
40
44
|
def bundled?
|
|
41
45
|
!!(defined?(Bundler) && ENV["BUNDLE_GEMFILE"])
|
|
42
46
|
end
|
|
@@ -44,5 +48,6 @@ module Tomo
|
|
|
44
48
|
|
|
45
49
|
self.debug = false
|
|
46
50
|
self.dry_run = false
|
|
51
|
+
self.quiet = false
|
|
47
52
|
self.logger = Logger.new
|
|
48
53
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tomo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.22.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matt Brictson
|
|
@@ -188,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
188
188
|
- !ruby/object:Gem::Version
|
|
189
189
|
version: '0'
|
|
190
190
|
requirements: []
|
|
191
|
-
rubygems_version: 4.0.
|
|
191
|
+
rubygems_version: 4.0.17
|
|
192
192
|
specification_version: 4
|
|
193
193
|
summary: A friendly CLI for deploying Rails apps ✨
|
|
194
194
|
test_files: []
|