tomo 1.1.0 → 1.3.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/README.md +5 -5
- data/lib/tomo/cli.rb +1 -3
- data/lib/tomo/cli/common_options.rb +4 -12
- data/lib/tomo/cli/deploy_options.rb +2 -7
- data/lib/tomo/cli/parser.rb +1 -6
- data/lib/tomo/cli/project_options.rb +1 -3
- data/lib/tomo/cli/rules.rb +4 -22
- data/lib/tomo/cli/rules/argument.rb +2 -2
- data/lib/tomo/cli/rules/switch.rb +1 -5
- data/lib/tomo/cli/rules/value_switch.rb +2 -3
- data/lib/tomo/cli/rules_evaluator.rb +3 -13
- data/lib/tomo/cli/usage.rb +1 -3
- data/lib/tomo/commands/default.rb +1 -3
- data/lib/tomo/commands/init.rb +24 -1
- data/lib/tomo/commands/run.rb +1 -3
- data/lib/tomo/configuration.rb +6 -12
- data/lib/tomo/configuration/dsl/error_formatter.rb +1 -1
- data/lib/tomo/configuration/dsl/hosts_and_settings.rb +1 -2
- data/lib/tomo/configuration/plugins_registry.rb +1 -2
- data/lib/tomo/configuration/plugins_registry/gem_resolver.rb +1 -1
- data/lib/tomo/configuration/unknown_environment_error.rb +1 -4
- data/lib/tomo/console.rb +6 -11
- data/lib/tomo/console/menu.rb +1 -2
- data/lib/tomo/host.rb +1 -2
- data/lib/tomo/paths.rb +1 -1
- data/lib/tomo/plugin/bundler/tasks.rb +2 -7
- data/lib/tomo/plugin/core/helpers.rb +1 -1
- data/lib/tomo/plugin/core/tasks.rb +3 -12
- data/lib/tomo/plugin/env/tasks.rb +32 -10
- data/lib/tomo/plugin/git.rb +1 -4
- data/lib/tomo/plugin/git/tasks.rb +4 -14
- data/lib/tomo/plugin/nodenv/tasks.rb +1 -3
- data/lib/tomo/plugin/puma.rb +0 -3
- data/lib/tomo/plugin/puma/tasks.rb +6 -15
- data/lib/tomo/plugin/rails/helpers.rb +1 -1
- data/lib/tomo/plugin/rails/tasks.rb +6 -4
- data/lib/tomo/plugin/testing.rb +1 -3
- data/lib/tomo/remote.rb +1 -3
- data/lib/tomo/runtime.rb +3 -6
- data/lib/tomo/runtime/concurrent_ruby_thread_pool.rb +1 -4
- data/lib/tomo/runtime/execution_plan.rb +1 -4
- data/lib/tomo/runtime/explanation.rb +1 -7
- data/lib/tomo/runtime/settings_required_error.rb +1 -3
- data/lib/tomo/runtime/task_runner.rb +1 -5
- data/lib/tomo/runtime/unknown_task_error.rb +1 -4
- data/lib/tomo/script.rb +1 -5
- data/lib/tomo/shell_builder.rb +5 -10
- data/lib/tomo/ssh/child_process.rb +2 -7
- data/lib/tomo/ssh/connection.rb +5 -18
- data/lib/tomo/ssh/connection_validator.rb +1 -4
- data/lib/tomo/ssh/executable_error.rb +1 -2
- data/lib/tomo/ssh/options.rb +2 -5
- data/lib/tomo/task_api.rb +4 -15
- data/lib/tomo/templates/config.rb.erb +7 -1
- data/lib/tomo/testing/cli_extensions.rb +1 -1
- data/lib/tomo/testing/connection.rb +1 -6
- data/lib/tomo/testing/docker_image.rb +2 -8
- data/lib/tomo/testing/local.rb +1 -3
- data/lib/tomo/testing/ubuntu_setup.sh +1 -2
- data/lib/tomo/version.rb +1 -1
- metadata +8 -135
- data/lib/tomo/configuration/plugin_resolver.rb +0 -63
data/lib/tomo/plugin/testing.rb
CHANGED
data/lib/tomo/remote.rb
CHANGED
@@ -21,9 +21,7 @@ module Tomo
|
|
21
21
|
|
22
22
|
def attach(*command, default_chdir: nil, **command_opts)
|
23
23
|
full_command = shell_builder.build(*command, default_chdir: default_chdir)
|
24
|
-
ssh.ssh_exec(
|
25
|
-
Script.new(full_command, **{ pty: true }.merge(command_opts))
|
26
|
-
)
|
24
|
+
ssh.ssh_exec(Script.new(full_command, **{ pty: true }.merge(command_opts)))
|
27
25
|
end
|
28
26
|
|
29
27
|
def run(*command, attach: false, default_chdir: nil, **command_opts)
|
data/lib/tomo/runtime.rb
CHANGED
@@ -3,8 +3,7 @@ require "time"
|
|
3
3
|
module Tomo
|
4
4
|
class Runtime
|
5
5
|
autoload :ConcurrentRubyLoadError, "tomo/runtime/concurrent_ruby_load_error"
|
6
|
-
autoload :ConcurrentRubyThreadPool,
|
7
|
-
"tomo/runtime/concurrent_ruby_thread_pool"
|
6
|
+
autoload :ConcurrentRubyThreadPool, "tomo/runtime/concurrent_ruby_thread_pool"
|
8
7
|
autoload :Context, "tomo/runtime/context"
|
9
8
|
autoload :Current, "tomo/runtime/current"
|
10
9
|
autoload :ExecutionPlan, "tomo/runtime/execution_plan"
|
@@ -28,8 +27,7 @@ module Tomo
|
|
28
27
|
|
29
28
|
attr_reader :tasks
|
30
29
|
|
31
|
-
def initialize(deploy_tasks:, setup_tasks:, hosts:, task_filter:,
|
32
|
-
settings:, plugins_registry:)
|
30
|
+
def initialize(deploy_tasks:, setup_tasks:, hosts:, task_filter:, settings:, plugins_registry:)
|
33
31
|
@deploy_tasks = deploy_tasks.freeze
|
34
32
|
@setup_tasks = setup_tasks.freeze
|
35
33
|
@hosts = hosts.freeze
|
@@ -68,8 +66,7 @@ module Tomo
|
|
68
66
|
|
69
67
|
private
|
70
68
|
|
71
|
-
attr_reader :deploy_tasks, :setup_tasks, :hosts, :task_filter, :settings,
|
72
|
-
:plugins_registry
|
69
|
+
attr_reader :deploy_tasks, :setup_tasks, :hosts, :task_filter, :settings, :plugins_registry
|
73
70
|
|
74
71
|
def new_task_runner(release_type, args)
|
75
72
|
run_settings = { release_path: release_path_for(release_type) }
|
@@ -4,10 +4,7 @@ begin
|
|
4
4
|
gem "concurrent-ruby", concurrent_ver
|
5
5
|
require "concurrent"
|
6
6
|
rescue LoadError => e
|
7
|
-
Tomo::Runtime::ConcurrentRubyLoadError.raise_with(
|
8
|
-
e.message,
|
9
|
-
version: concurrent_ver
|
10
|
-
)
|
7
|
+
Tomo::Runtime::ConcurrentRubyLoadError.raise_with(e.message, version: concurrent_ver)
|
11
8
|
end
|
12
9
|
|
13
10
|
module Tomo
|
@@ -77,10 +77,7 @@ module Tomo
|
|
77
77
|
def build_plan(tasks, task_filter)
|
78
78
|
tasks.each_with_object([]) do |task, result|
|
79
79
|
steps = hosts.map do |host|
|
80
|
-
HostExecutionStep.new(
|
81
|
-
tasks: task, host: host,
|
82
|
-
task_filter: task_filter, task_runner: task_runner
|
83
|
-
)
|
80
|
+
HostExecutionStep.new(tasks: task, host: host, task_filter: task_filter, task_runner: task_runner)
|
84
81
|
end
|
85
82
|
steps.reject!(&:empty?)
|
86
83
|
result << steps unless steps.empty?
|
@@ -7,10 +7,7 @@ module Tomo
|
|
7
7
|
@concurrency = concurrency
|
8
8
|
end
|
9
9
|
|
10
|
-
# rubocop:disable Metrics/MethodLength
|
11
|
-
# rubocop:disable Metrics/AbcSize
|
12
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
13
|
-
def to_s
|
10
|
+
def to_s # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
14
11
|
desc = []
|
15
12
|
threads = [applicable_hosts.length, concurrency].min
|
16
13
|
desc << "CONCURRENTLY (#{threads} THREADS):" if threads > 1
|
@@ -32,9 +29,6 @@ module Tomo
|
|
32
29
|
end
|
33
30
|
desc.join("\n")
|
34
31
|
end
|
35
|
-
# rubocop:enable Metrics/MethodLength
|
36
|
-
# rubocop:enable Metrics/AbcSize
|
37
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
38
32
|
|
39
33
|
private
|
40
34
|
|
@@ -21,9 +21,7 @@ module Tomo
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def settings_sentence
|
24
|
-
if settings.length == 1
|
25
|
-
return "a value for the #{yellow(settings.first.to_s)} setting."
|
26
|
-
end
|
24
|
+
return "a value for the #{yellow(settings.first.to_s)} setting." if settings.length == 1
|
27
25
|
|
28
26
|
sentence = "values for these settings:\n\n "
|
29
27
|
sentence << settings.map { |s| yellow(s.to_s) }.join("\n ")
|
@@ -19,11 +19,7 @@ module Tomo
|
|
19
19
|
def validate_task!(name)
|
20
20
|
return if tasks_by_name.key?(name)
|
21
21
|
|
22
|
-
UnknownTaskError.raise_with(
|
23
|
-
name,
|
24
|
-
unknown_task: name,
|
25
|
-
known_tasks: tasks_by_name.keys
|
26
|
-
)
|
22
|
+
UnknownTaskError.raise_with(name, unknown_task: name, known_tasks: tasks_by_name.keys)
|
27
23
|
end
|
28
24
|
|
29
25
|
def run(task:, remote:)
|
@@ -17,10 +17,7 @@ module Tomo
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def spelling_suggestion
|
20
|
-
sugg = Error::Suggestions.new(
|
21
|
-
dictionary: known_tasks,
|
22
|
-
word: unknown_task
|
23
|
-
)
|
20
|
+
sugg = Error::Suggestions.new(dictionary: known_tasks, word: unknown_task)
|
24
21
|
sugg.to_console if sugg.any?
|
25
22
|
end
|
26
23
|
|
data/lib/tomo/script.rb
CHANGED
@@ -2,11 +2,7 @@ module Tomo
|
|
2
2
|
class Script
|
3
3
|
attr_reader :script
|
4
4
|
|
5
|
-
def initialize(script,
|
6
|
-
echo: true,
|
7
|
-
pty: false,
|
8
|
-
raise_on_error: true,
|
9
|
-
silent: false)
|
5
|
+
def initialize(script, echo: true, pty: false, raise_on_error: true, silent: false)
|
10
6
|
@script = script
|
11
7
|
@echo = echo
|
12
8
|
@pty = pty
|
data/lib/tomo/shell_builder.rb
CHANGED
@@ -3,8 +3,9 @@ require "shellwords"
|
|
3
3
|
module Tomo
|
4
4
|
class ShellBuilder
|
5
5
|
def self.raw(string)
|
6
|
-
string.
|
7
|
-
|
6
|
+
string.dup.tap do |raw_string|
|
7
|
+
raw_string.define_singleton_method(:shellescape) { string }
|
8
|
+
end
|
8
9
|
end
|
9
10
|
|
10
11
|
def initialize
|
@@ -45,9 +46,7 @@ module Tomo
|
|
45
46
|
end
|
46
47
|
|
47
48
|
def build(*command, default_chdir: nil)
|
48
|
-
if @chdir.empty? && default_chdir
|
49
|
-
return chdir(default_chdir) { build(*command) }
|
50
|
-
end
|
49
|
+
return chdir(default_chdir) { build(*command) } if @chdir.empty? && default_chdir
|
51
50
|
|
52
51
|
command_string = command_to_string(*command)
|
53
52
|
modifiers = [cd_chdir, unset_env, export_env, set_umask].compact.flatten
|
@@ -97,11 +96,7 @@ module Tomo
|
|
97
96
|
def set_umask
|
98
97
|
return if @umask.nil?
|
99
98
|
|
100
|
-
umask_value =
|
101
|
-
@umask.to_s(8).rjust(4, "0")
|
102
|
-
else
|
103
|
-
@umask
|
104
|
-
end
|
99
|
+
umask_value = @umask.is_a?(Integer) ? @umask.to_s(8).rjust(4, "0") : @umask
|
105
100
|
"umask #{umask_value.to_s.shellescape}"
|
106
101
|
end
|
107
102
|
end
|
@@ -30,17 +30,12 @@ module Tomo
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def result
|
33
|
-
Result.new(
|
34
|
-
exit_status: exit_status,
|
35
|
-
stdout: stdout_buffer.string,
|
36
|
-
stderr: stderr_buffer.string
|
37
|
-
)
|
33
|
+
Result.new(exit_status: exit_status, stdout: stdout_buffer.string, stderr: stderr_buffer.string)
|
38
34
|
end
|
39
35
|
|
40
36
|
private
|
41
37
|
|
42
|
-
attr_reader :command, :exit_status, :on_data,
|
43
|
-
:stdout_buffer, :stderr_buffer
|
38
|
+
attr_reader :command, :exit_status, :on_data, :stdout_buffer, :stderr_buffer
|
44
39
|
|
45
40
|
def start_io_thread(source, buffer)
|
46
41
|
new_thread_inheriting_current_vars do
|
data/lib/tomo/ssh/connection.rb
CHANGED
@@ -6,12 +6,7 @@ module Tomo
|
|
6
6
|
module SSH
|
7
7
|
class Connection
|
8
8
|
def self.dry_run(host, options)
|
9
|
-
new(
|
10
|
-
host,
|
11
|
-
options,
|
12
|
-
exec_proc: proc { CLI.exit },
|
13
|
-
child_proc: proc { Result.empty_success }
|
14
|
-
)
|
9
|
+
new(host, options, exec_proc: proc { CLI.exit }, child_proc: proc { Result.empty_success })
|
15
10
|
end
|
16
11
|
|
17
12
|
attr_reader :host
|
@@ -31,16 +26,14 @@ module Tomo
|
|
31
26
|
end
|
32
27
|
|
33
28
|
def ssh_subprocess(script, verbose: false)
|
34
|
-
ssh_args = build_args(script, verbose)
|
29
|
+
ssh_args = build_args(script, verbose: verbose)
|
35
30
|
handle_data = ->(data) { logger.script_output(script, data) }
|
36
31
|
|
37
32
|
logger.script_start(script)
|
38
33
|
result = child_proc.call(*ssh_args, on_data: handle_data)
|
39
34
|
logger.script_end(script, result)
|
40
35
|
|
41
|
-
if result.failure? && script.raise_on_error?
|
42
|
-
raise_run_error(script, ssh_args, result)
|
43
|
-
end
|
36
|
+
raise_run_error(script, ssh_args, result) if result.failure? && script.raise_on_error?
|
44
37
|
|
45
38
|
result
|
46
39
|
end
|
@@ -57,7 +50,7 @@ module Tomo
|
|
57
50
|
Tomo.logger
|
58
51
|
end
|
59
52
|
|
60
|
-
def build_args(script, verbose
|
53
|
+
def build_args(script, verbose: false)
|
61
54
|
options.build_args(host, script, control_path, verbose)
|
62
55
|
end
|
63
56
|
|
@@ -69,13 +62,7 @@ module Tomo
|
|
69
62
|
end
|
70
63
|
|
71
64
|
def raise_run_error(script, ssh_args, result)
|
72
|
-
ScriptError.raise_with(
|
73
|
-
result.output,
|
74
|
-
host: host,
|
75
|
-
result: result,
|
76
|
-
script: script,
|
77
|
-
ssh_args: ssh_args
|
78
|
-
)
|
65
|
+
ScriptError.raise_with(result.output, host: host, result: result, script: script, ssh_args: ssh_args)
|
79
66
|
end
|
80
67
|
end
|
81
68
|
end
|
@@ -27,10 +27,7 @@ module Tomo
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def assert_valid_connection!
|
30
|
-
script = Script.new(
|
31
|
-
"echo hi",
|
32
|
-
silent: !Tomo.debug?, echo: false, raise_on_error: false
|
33
|
-
)
|
30
|
+
script = Script.new("echo hi", silent: !Tomo.debug?, echo: false, raise_on_error: false)
|
34
31
|
res = connection.ssh_subprocess(script, verbose: Tomo.debug?)
|
35
32
|
raise_connection_failure(res) if res.exit_status == 255
|
36
33
|
raise_unknown_error(res) if res.failure? || res.stdout.chomp != "hi"
|
@@ -7,8 +7,7 @@ module Tomo
|
|
7
7
|
hint = if executable.to_s.include?("/")
|
8
8
|
"Is the ssh binary properly installed in this location?"
|
9
9
|
else
|
10
|
-
"Is #{yellow(executable)} installed and in your "
|
11
|
-
"#{blue('$PATH')}?"
|
10
|
+
"Is #{yellow(executable)} installed and in your #{blue('$PATH')}?"
|
12
11
|
end
|
13
12
|
|
14
13
|
<<~ERROR
|
data/lib/tomo/ssh/options.rb
CHANGED
@@ -20,8 +20,7 @@ module Tomo
|
|
20
20
|
freeze
|
21
21
|
end
|
22
22
|
|
23
|
-
# rubocop:disable Metrics/AbcSize
|
24
|
-
def build_args(host, script, control_path, verbose)
|
23
|
+
def build_args(host, script, control_path, verbose) # rubocop:disable Metrics/AbcSize
|
25
24
|
args = [verbose ? "-v" : ["-o", "LogLevel=ERROR"]]
|
26
25
|
args << "-A" if forward_agent
|
27
26
|
args << connect_timeout_option
|
@@ -34,13 +33,11 @@ module Tomo
|
|
34
33
|
|
35
34
|
[executable, args, script.to_s].flatten
|
36
35
|
end
|
37
|
-
# rubocop:enable Metrics/AbcSize
|
38
36
|
|
39
37
|
private
|
40
38
|
|
41
39
|
attr_writer :executable
|
42
|
-
attr_accessor :connect_timeout, :extra_opts, :forward_agent,
|
43
|
-
:reuse_connections, :strict_host_key_checking
|
40
|
+
attr_accessor :connect_timeout, :extra_opts, :forward_agent, :reuse_connections, :strict_host_key_checking
|
44
41
|
|
45
42
|
def control_opts(path, verbose)
|
46
43
|
opts = [
|
data/lib/tomo/task_api.rb
CHANGED
@@ -9,11 +9,7 @@ module Tomo
|
|
9
9
|
def_delegators :context, :paths, :settings
|
10
10
|
|
11
11
|
def die(reason)
|
12
|
-
Runtime::TaskAbortedError.raise_with(
|
13
|
-
reason,
|
14
|
-
task: context.current_task,
|
15
|
-
host: remote.host
|
16
|
-
)
|
12
|
+
Runtime::TaskAbortedError.raise_with(reason, task: context.current_task, host: remote.host)
|
17
13
|
end
|
18
14
|
|
19
15
|
def dry_run?
|
@@ -26,13 +22,9 @@ module Tomo
|
|
26
22
|
|
27
23
|
def merge_template(path)
|
28
24
|
working_path = paths.tomo_config_file&.dirname
|
29
|
-
if working_path && path.start_with?(".")
|
30
|
-
path = File.expand_path(path, working_path)
|
31
|
-
end
|
25
|
+
path = File.expand_path(path, working_path) if working_path && path.start_with?(".")
|
32
26
|
|
33
|
-
unless File.file?(path)
|
34
|
-
Runtime::TemplateNotFoundError.raise_with(path: path)
|
35
|
-
end
|
27
|
+
Runtime::TemplateNotFoundError.raise_with(path: path) unless File.file?(path)
|
36
28
|
template = IO.read(path)
|
37
29
|
ERB.new(template).result(binding)
|
38
30
|
end
|
@@ -49,10 +41,7 @@ module Tomo
|
|
49
41
|
missing = names.flatten.select { |sett| settings[sett].nil? }
|
50
42
|
return if missing.empty?
|
51
43
|
|
52
|
-
Runtime::SettingsRequiredError.raise_with(
|
53
|
-
settings: missing,
|
54
|
-
task: context.current_task
|
55
|
-
)
|
44
|
+
Runtime::SettingsRequiredError.raise_with(settings: missing, task: context.current_task)
|
56
45
|
end
|
57
46
|
alias require_settings require_setting
|
58
47
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
<% if rubocop? -%>
|
2
|
+
# rubocop:disable Style/FormatStringToken
|
3
|
+
<% end -%>
|
1
4
|
plugin "git"
|
2
5
|
plugin "env"
|
3
6
|
plugin "bundler"
|
@@ -15,7 +18,7 @@ set rbenv_ruby_version: <%= RUBY_VERSION.inspect %>
|
|
15
18
|
set nodenv_node_version: <%= node_version&.inspect || "nil # FIXME" %>
|
16
19
|
set nodenv_yarn_version: <%= yarn_version.inspect %>
|
17
20
|
set git_url: <%= git_origin_url&.inspect || "nil # FIXME" %>
|
18
|
-
set git_branch: "
|
21
|
+
set git_branch: <%= git_branch&.inspect || "nil # FIXME" %>
|
19
22
|
set git_exclusions: %w[
|
20
23
|
.tomo/
|
21
24
|
spec/
|
@@ -72,3 +75,6 @@ deploy do
|
|
72
75
|
run "bundler:clean"
|
73
76
|
run "core:log_revision"
|
74
77
|
end
|
78
|
+
<% if rubocop? -%>
|
79
|
+
# rubocop:enable Style/FormatStringToken
|
80
|
+
<% end -%>
|
@@ -2,12 +2,7 @@ module Tomo
|
|
2
2
|
module Testing
|
3
3
|
class Connection < Tomo::SSH::Connection
|
4
4
|
def initialize(host, options)
|
5
|
-
super(
|
6
|
-
host,
|
7
|
-
options,
|
8
|
-
exec_proc: proc { raise MockedExecError },
|
9
|
-
child_proc: method(:mock_child_process)
|
10
|
-
)
|
5
|
+
super(host, options, exec_proc: proc { raise MockedExecError }, child_proc: method(:mock_child_process))
|
11
6
|
end
|
12
7
|
|
13
8
|
def ssh_exec(script)
|
@@ -74,14 +74,8 @@ module Tomo
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def set_up_private_key
|
77
|
-
@private_key_path = File.join(
|
78
|
-
|
79
|
-
"tomo_test_ed25519_#{SecureRandom.hex(8)}"
|
80
|
-
)
|
81
|
-
FileUtils.cp(
|
82
|
-
File.expand_path("tomo_test_ed25519", __dir__),
|
83
|
-
private_key_path
|
84
|
-
)
|
77
|
+
@private_key_path = File.join(Dir.tmpdir, "tomo_test_ed25519_#{SecureRandom.hex(8)}")
|
78
|
+
FileUtils.cp(File.expand_path("tomo_test_ed25519", __dir__), private_key_path)
|
85
79
|
FileUtils.chmod(0o600, private_key_path)
|
86
80
|
end
|
87
81
|
|
data/lib/tomo/testing/local.rb
CHANGED
@@ -41,9 +41,7 @@ module Tomo
|
|
41
41
|
progress(command_str) do
|
42
42
|
output, status = Open3.capture2e(*command)
|
43
43
|
|
44
|
-
if raise_on_error && !status.success?
|
45
|
-
raise "Command failed: #{command_str}\n#{output}"
|
46
|
-
end
|
44
|
+
raise "Command failed: #{command_str}\n#{output}" if raise_on_error && !status.success?
|
47
45
|
|
48
46
|
output
|
49
47
|
end
|
@@ -17,8 +17,7 @@ touch /var/lib/systemd/linger/deployer
|
|
17
17
|
|
18
18
|
# Packages needed for ruby, etc.
|
19
19
|
apt-get -y update
|
20
|
-
apt-get -y install build-essential zlib1g-dev libssl-dev libreadline-dev
|
21
|
-
git-core curl locales libsqlite3-dev
|
20
|
+
apt-get -y install build-essential zlib1g-dev libssl-dev libreadline-dev git-core curl locales libsqlite3-dev
|
22
21
|
|
23
22
|
apt-get -y install tzdata \
|
24
23
|
-o DPkg::options::="--force-confdef" \
|
data/lib/tomo/version.rb
CHANGED
metadata
CHANGED
@@ -1,141 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tomo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Brictson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '2.0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: concurrent-ruby
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.1'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.1'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: minitest
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '5.11'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '5.11'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest-ci
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.4'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '3.4'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: minitest-reporters
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.3'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.3'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '13.0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '13.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rubocop
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - '='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 0.82.0
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - '='
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 0.82.0
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rubocop-minitest
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - '='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 0.9.0
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - '='
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 0.9.0
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop-performance
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - '='
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: 1.5.2
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - '='
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: 1.5.2
|
11
|
+
date: 2020-09-09 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
139
13
|
description: Tomo is a feature-rich deployment tool that contains everything you need
|
140
14
|
to deploy a basic Rails app out of the box. It has an opinionated, production-tested
|
141
15
|
set of defaults, but is easily extensible via a well-documented plugin system. Unlike
|
@@ -191,7 +65,6 @@ files:
|
|
191
65
|
- lib/tomo/configuration/environment.rb
|
192
66
|
- lib/tomo/configuration/glob.rb
|
193
67
|
- lib/tomo/configuration/plugin_file_not_found_error.rb
|
194
|
-
- lib/tomo/configuration/plugin_resolver.rb
|
195
68
|
- lib/tomo/configuration/plugins_registry.rb
|
196
69
|
- lib/tomo/configuration/plugins_registry/file_resolver.rb
|
197
70
|
- lib/tomo/configuration/plugins_registry/gem_resolver.rb
|
@@ -298,9 +171,9 @@ metadata:
|
|
298
171
|
bug_tracker_uri: https://github.com/mattbrictson/tomo/issues
|
299
172
|
changelog_uri: https://github.com/mattbrictson/tomo/releases
|
300
173
|
source_code_uri: https://github.com/mattbrictson/tomo
|
301
|
-
homepage_uri: https://
|
174
|
+
homepage_uri: https://github.com/mattbrictson/tomo
|
302
175
|
documentation_uri: https://tomo-deploy.com/
|
303
|
-
post_install_message:
|
176
|
+
post_install_message:
|
304
177
|
rdoc_options: []
|
305
178
|
require_paths:
|
306
179
|
- lib
|
@@ -315,8 +188,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
315
188
|
- !ruby/object:Gem::Version
|
316
189
|
version: '0'
|
317
190
|
requirements: []
|
318
|
-
rubygems_version: 3.1.
|
319
|
-
signing_key:
|
191
|
+
rubygems_version: 3.1.4
|
192
|
+
signing_key:
|
320
193
|
specification_version: 4
|
321
194
|
summary: A friendly CLI for deploying Rails apps ✨
|
322
195
|
test_files: []
|