process_bot 0.1.5 → 0.1.7
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/.rubocop.yml +4 -1
- data/Gemfile +0 -12
- data/Gemfile.lock +22 -22
- data/exe/process_bot +1 -2
- data/lib/process_bot/capistrano/custom.rake +31 -0
- data/lib/process_bot/capistrano/puma/common.rb +1 -1
- data/lib/process_bot/capistrano/sidekiq_helpers.rb +5 -1
- data/lib/process_bot/client_socket.rb +1 -1
- data/lib/process_bot/control_socket.rb +9 -5
- data/lib/process_bot/logger.rb +4 -0
- data/lib/process_bot/process/handlers/custom.rb +54 -0
- data/lib/process_bot/process/handlers/sidekiq.rb +13 -6
- data/lib/process_bot/process/runner.rb +67 -25
- data/lib/process_bot/process.rb +22 -3
- data/lib/process_bot/version.rb +1 -1
- data/process_bot.gemspec +46 -0
- metadata +118 -7
- data/sig/process_bot.rbs +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ad440af9b1434b442a4218048fa3fe4cb30cf9c665a35921be56726b62c87c0
|
4
|
+
data.tar.gz: f22b106cdc6776984c23bdb927289d6200323c5ed12bbbf5333a8fdd74208013
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05f49f202c18920426c9e5e970eb87e751b05a1c0e4ac7c247cf4cff3d3a4862741799c8241c412470c4cde94d3a5b887a2b00f6a69932ea6869d606264a2716
|
7
|
+
data.tar.gz: be201d774359d37df8a068881b3bc48e8d65491945c63cf076a2cfc14deee29266b56ef91313e64f862032e51eb748a0e4f3533573fc7120beb71fc20078e734
|
data/.rubocop.yml
CHANGED
@@ -4,11 +4,14 @@ AllCops:
|
|
4
4
|
NewCops: enable
|
5
5
|
TargetRubyVersion: 2.7
|
6
6
|
|
7
|
-
|
7
|
+
plugins:
|
8
8
|
- rubocop-performance
|
9
9
|
- rubocop-rake
|
10
10
|
- rubocop-rspec
|
11
11
|
|
12
|
+
Gemspec/DevelopmentDependencies:
|
13
|
+
Enabled: false
|
14
|
+
|
12
15
|
Layout/AccessModifierIndentation:
|
13
16
|
EnforcedStyle: outdent
|
14
17
|
|
data/Gemfile
CHANGED
@@ -4,15 +4,3 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in process_bot.gemspec
|
6
6
|
gemspec
|
7
|
-
|
8
|
-
gem "pry"
|
9
|
-
gem "rake"
|
10
|
-
gem "rspec"
|
11
|
-
gem "string-cases"
|
12
|
-
|
13
|
-
group :development do
|
14
|
-
gem "rubocop"
|
15
|
-
gem "rubocop-performance"
|
16
|
-
gem "rubocop-rake"
|
17
|
-
gem "rubocop-rspec"
|
18
|
-
end
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
process_bot (0.1.
|
4
|
+
process_bot (0.1.7)
|
5
5
|
knjrbfw (>= 0.0.116)
|
6
|
+
pry
|
7
|
+
rake
|
8
|
+
rspec
|
9
|
+
string-cases
|
6
10
|
|
7
11
|
GEM
|
8
12
|
remote: https://rubygems.org/
|
@@ -10,10 +14,10 @@ GEM
|
|
10
14
|
ast (2.4.3)
|
11
15
|
coderay (1.1.3)
|
12
16
|
datet (0.0.25)
|
13
|
-
diff-lcs (1.
|
17
|
+
diff-lcs (1.6.2)
|
14
18
|
http2 (0.0.36)
|
15
19
|
string-cases (~> 0)
|
16
|
-
json (2.
|
20
|
+
json (2.13.2)
|
17
21
|
knjrbfw (0.0.116)
|
18
22
|
datet
|
19
23
|
http2
|
@@ -21,11 +25,11 @@ GEM
|
|
21
25
|
ruby_process
|
22
26
|
tsafe
|
23
27
|
wref (>= 0.0.8)
|
24
|
-
language_server-protocol (3.17.0.
|
28
|
+
language_server-protocol (3.17.0.5)
|
25
29
|
lint_roller (1.1.0)
|
26
30
|
method_source (1.1.0)
|
27
|
-
parallel (1.
|
28
|
-
parser (3.3.
|
31
|
+
parallel (1.27.0)
|
32
|
+
parser (3.3.9.0)
|
29
33
|
ast (~> 2.4.1)
|
30
34
|
racc
|
31
35
|
php4r (0.0.4)
|
@@ -38,23 +42,23 @@ GEM
|
|
38
42
|
method_source (~> 1.0)
|
39
43
|
racc (1.8.1)
|
40
44
|
rainbow (3.1.1)
|
41
|
-
rake (13.
|
45
|
+
rake (13.3.0)
|
42
46
|
ref (2.0.0)
|
43
|
-
regexp_parser (2.
|
44
|
-
rspec (3.13.
|
47
|
+
regexp_parser (2.11.2)
|
48
|
+
rspec (3.13.1)
|
45
49
|
rspec-core (~> 3.13.0)
|
46
50
|
rspec-expectations (~> 3.13.0)
|
47
51
|
rspec-mocks (~> 3.13.0)
|
48
|
-
rspec-core (3.13.
|
52
|
+
rspec-core (3.13.5)
|
49
53
|
rspec-support (~> 3.13.0)
|
50
|
-
rspec-expectations (3.13.
|
54
|
+
rspec-expectations (3.13.5)
|
51
55
|
diff-lcs (>= 1.2.0, < 2.0)
|
52
56
|
rspec-support (~> 3.13.0)
|
53
|
-
rspec-mocks (3.13.
|
57
|
+
rspec-mocks (3.13.5)
|
54
58
|
diff-lcs (>= 1.2.0, < 2.0)
|
55
59
|
rspec-support (~> 3.13.0)
|
56
|
-
rspec-support (3.13.
|
57
|
-
rubocop (1.
|
60
|
+
rspec-support (3.13.5)
|
61
|
+
rubocop (1.80.0)
|
58
62
|
json (~> 2.3)
|
59
63
|
language_server-protocol (~> 3.17.0.2)
|
60
64
|
lint_roller (~> 1.1.0)
|
@@ -62,10 +66,10 @@ GEM
|
|
62
66
|
parser (>= 3.3.0.2)
|
63
67
|
rainbow (>= 2.2.2, < 4.0)
|
64
68
|
regexp_parser (>= 2.9.3, < 3.0)
|
65
|
-
rubocop-ast (>= 1.
|
69
|
+
rubocop-ast (>= 1.46.0, < 2.0)
|
66
70
|
ruby-progressbar (~> 1.7)
|
67
71
|
unicode-display_width (>= 2.4.0, < 4.0)
|
68
|
-
rubocop-ast (1.
|
72
|
+
rubocop-ast (1.46.0)
|
69
73
|
parser (>= 3.3.7.2)
|
70
74
|
prism (~> 1.4)
|
71
75
|
rubocop-performance (1.25.0)
|
@@ -75,7 +79,7 @@ GEM
|
|
75
79
|
rubocop-rake (0.7.1)
|
76
80
|
lint_roller (~> 1.1)
|
77
81
|
rubocop (>= 1.72.1)
|
78
|
-
rubocop-rspec (3.
|
82
|
+
rubocop-rspec (3.6.0)
|
79
83
|
lint_roller (~> 1.1)
|
80
84
|
rubocop (~> 1.72, >= 1.72.1)
|
81
85
|
ruby-progressbar (1.13.0)
|
@@ -86,7 +90,7 @@ GEM
|
|
86
90
|
string-cases (0.0.4)
|
87
91
|
string-strtr (0.0.3)
|
88
92
|
tsafe (0.0.12)
|
89
|
-
unicode-display_width (3.1.
|
93
|
+
unicode-display_width (3.1.5)
|
90
94
|
unicode-emoji (~> 4.0, >= 4.0.4)
|
91
95
|
unicode-emoji (4.0.4)
|
92
96
|
wref (0.0.11)
|
@@ -98,14 +102,10 @@ PLATFORMS
|
|
98
102
|
|
99
103
|
DEPENDENCIES
|
100
104
|
process_bot!
|
101
|
-
pry
|
102
|
-
rake
|
103
|
-
rspec
|
104
105
|
rubocop
|
105
106
|
rubocop-performance
|
106
107
|
rubocop-rake
|
107
108
|
rubocop-rspec
|
108
|
-
string-cases
|
109
109
|
|
110
110
|
BUNDLED WITH
|
111
111
|
2.3.8
|
data/exe/process_bot
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
git_plugin = self
|
2
|
+
|
3
|
+
namespace :process_bot do
|
4
|
+
namespace :custom do
|
5
|
+
desc "Stops the custom command"
|
6
|
+
task :stop do
|
7
|
+
git_plugin.process_bot_command(
|
8
|
+
process_bot_data,
|
9
|
+
:stop,
|
10
|
+
"--handler" => "custom",
|
11
|
+
"--name" => ENV.fetch("PROCESS_BOT_CUSTOM_ID")
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Starts a custom command"
|
16
|
+
task :start do
|
17
|
+
git_plugin.process_bot_command(
|
18
|
+
process_bot_data,
|
19
|
+
:start,
|
20
|
+
"--handler" => "custom",
|
21
|
+
"--name" => ENV.fetch("PROCESS_BOT_CUSTOM_ID")
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Restart a custom command"
|
26
|
+
task :restart do
|
27
|
+
invoke! "process_bot:custom:stop"
|
28
|
+
invoke! "process_bot:custom:start"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -32,7 +32,7 @@ module ProcessBot::Capistrano::SidekiqHelpers # rubocop:disable Metrics/ModuleLe
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def process_bot_command(process_bot_data, command) # rubocop:disable Metrics/AbcSize
|
35
|
+
def process_bot_command(process_bot_data, command, args = {}) # rubocop:disable Metrics/AbcSize
|
36
36
|
raise "No port in process bot data? #{process_bot_data}" unless process_bot_data["port"]
|
37
37
|
|
38
38
|
mode = "exec"
|
@@ -55,6 +55,10 @@ module ProcessBot::Capistrano::SidekiqHelpers # rubocop:disable Metrics/ModuleLe
|
|
55
55
|
"--command #{command} " \
|
56
56
|
"--port #{process_bot_data.fetch("port")}"
|
57
57
|
|
58
|
+
args.each do |key, value|
|
59
|
+
backend_command << "#{key} #{value}"
|
60
|
+
end
|
61
|
+
|
58
62
|
if command == :graceful && !fetch(:process_bot_wait_for_gracefully_stopped).nil?
|
59
63
|
backend_command << " --wait-for-gracefully-stopped #{fetch(:process_bot_wait_for_gracefully_stopped)}"
|
60
64
|
end
|
@@ -23,8 +23,8 @@ class ProcessBot::ControlSocket
|
|
23
23
|
def start_tcp_server
|
24
24
|
tries ||= 0
|
25
25
|
tries += 1
|
26
|
-
@server =
|
27
|
-
rescue Errno::EADDRNOTAVAIL => e
|
26
|
+
@server = actually_start_tcp_server("localhost", @port)
|
27
|
+
rescue Errno::EADDRINUSE, Errno::EADDRNOTAVAIL => e
|
28
28
|
if tries <= 100
|
29
29
|
@port += 1
|
30
30
|
retry
|
@@ -33,8 +33,12 @@ class ProcessBot::ControlSocket
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
def actually_start_tcp_server(host, port)
|
37
|
+
TCPServer.new(host, port)
|
38
|
+
end
|
39
|
+
|
36
40
|
def stop
|
37
|
-
server
|
41
|
+
server&.close
|
38
42
|
end
|
39
43
|
|
40
44
|
def run_client_loop
|
@@ -68,8 +72,8 @@ class ProcessBot::ControlSocket
|
|
68
72
|
process.__send__(command_type, **command_options)
|
69
73
|
client.puts(JSON.generate(type: "success"))
|
70
74
|
rescue => e # rubocop:disable Style/RescueStandardError
|
71
|
-
logger.
|
72
|
-
logger.
|
75
|
+
logger.error e.message
|
76
|
+
logger.error e.backtrace
|
73
77
|
|
74
78
|
client.puts(JSON.generate(type: "error", message: e.message, backtrace: e.backtrace))
|
75
79
|
|
data/lib/process_bot/logger.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
class ProcessBot::Process::Handlers::Custom
|
2
|
+
attr_reader :options, :process
|
3
|
+
|
4
|
+
def initialize(process)
|
5
|
+
@process = process
|
6
|
+
@options = process.options
|
7
|
+
end
|
8
|
+
|
9
|
+
def current_pid
|
10
|
+
process.current_pid
|
11
|
+
end
|
12
|
+
|
13
|
+
def daemonize
|
14
|
+
logger.logs "Daemonize!"
|
15
|
+
|
16
|
+
pid = Process.fork do
|
17
|
+
Process.daemon
|
18
|
+
yield
|
19
|
+
end
|
20
|
+
|
21
|
+
Process.detach(pid) if pid
|
22
|
+
end
|
23
|
+
|
24
|
+
def false_value?(value)
|
25
|
+
!value || value == "false"
|
26
|
+
end
|
27
|
+
|
28
|
+
def fetch(*args, **opts)
|
29
|
+
options.fetch(*args, **opts)
|
30
|
+
end
|
31
|
+
|
32
|
+
def logger
|
33
|
+
@logger ||= ProcessBot::Logger.new(options: options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_option(key, value)
|
37
|
+
raise "Unknown option for Sidekiq handler: #{key}" unless options.key?(key)
|
38
|
+
|
39
|
+
set(key, value)
|
40
|
+
end
|
41
|
+
|
42
|
+
def set(*args, **opts)
|
43
|
+
options.set(*args, **opts)
|
44
|
+
end
|
45
|
+
|
46
|
+
def start_command
|
47
|
+
"bash -c 'cd #{options.fetch(:release_path)} && #{options.options.fetch(:custom_command)}'"
|
48
|
+
end
|
49
|
+
|
50
|
+
def stop(**_args)
|
51
|
+
puts "Stop related processes"
|
52
|
+
process.runner.stop_related_processes
|
53
|
+
end
|
54
|
+
end
|
@@ -92,20 +92,27 @@ class ProcessBot::Process::Handlers::Sidekiq
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def stop(**_args)
|
95
|
-
|
95
|
+
if current_pid
|
96
|
+
Process.kill("TERM", current_pid)
|
97
|
+
else
|
98
|
+
related_sidekiq_processes = process.runner.related_sidekiq_processes
|
96
99
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
+
if related_sidekiq_processes.empty?
|
101
|
+
logger.error "#{handler_name} didn't have any processes running"
|
102
|
+
else
|
103
|
+
related_sidekiq_processes.each do |related_sidekiq_process|
|
104
|
+
Process.kill("TERM", related_sidekiq_process.pid)
|
105
|
+
end
|
106
|
+
end
|
100
107
|
end
|
101
|
-
|
102
|
-
Process.kill("TERM", current_pid)
|
103
108
|
end
|
104
109
|
|
105
110
|
def wait_for_no_jobs # rubocop:disable Metrics/AbcSize
|
106
111
|
loop do
|
107
112
|
found_process = false
|
108
113
|
|
114
|
+
raise "No current PID for Sidekiq" unless current_pid
|
115
|
+
|
109
116
|
Knj::Unix_proc.list("grep" => current_pid) do |process|
|
110
117
|
process_command = process.data.fetch("cmd")
|
111
118
|
process_pid = process.data.fetch("pid").to_i
|
@@ -1,14 +1,15 @@
|
|
1
1
|
require "knjrbfw"
|
2
2
|
|
3
3
|
class ProcessBot::Process::Runner
|
4
|
-
attr_reader :command, :exit_status, :logger, :monitor, :options, :pid, :stop_time, :subprocess_pid
|
4
|
+
attr_reader :command, :exit_status, :handler_instance, :handler_name, :logger, :monitor, :options, :pid, :stop_time, :subprocess_pid
|
5
5
|
|
6
|
-
def initialize(command:, logger:, options:)
|
6
|
+
def initialize(command:, handler_instance:, handler_name:, logger:, options:)
|
7
7
|
@command = command
|
8
|
+
@handler_instance = handler_instance
|
9
|
+
@handler_name = handler_name
|
8
10
|
@logger = logger
|
9
11
|
@monitor = Monitor.new
|
10
12
|
@options = options
|
11
|
-
@output = []
|
12
13
|
end
|
13
14
|
|
14
15
|
def output(output:, type:)
|
@@ -52,11 +53,13 @@ class ProcessBot::Process::Runner
|
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
55
|
-
find_sidekiq_pid
|
56
|
+
find_sidekiq_pid if handler_name == "sidekiq"
|
56
57
|
|
57
58
|
stdout_reader_thread.join
|
58
59
|
stderr_reader_thread.join
|
59
60
|
|
61
|
+
logger.logs "Process stopped"
|
62
|
+
|
60
63
|
@stop_time = Time.new
|
61
64
|
end
|
62
65
|
end
|
@@ -69,32 +72,71 @@ class ProcessBot::Process::Runner
|
|
69
72
|
options.fetch(:application)
|
70
73
|
end
|
71
74
|
|
72
|
-
def
|
73
|
-
|
74
|
-
while running? && !pid
|
75
|
-
Knj::Unix_proc.list("grep" => "sidekiq") do |process|
|
76
|
-
cmd = process.data.fetch("cmd")
|
75
|
+
def related_processes
|
76
|
+
related_processes = []
|
77
77
|
|
78
|
-
|
79
|
-
|
78
|
+
Knj::Unix_proc.list do |process|
|
79
|
+
begin
|
80
|
+
process_pgid = Process.getpgid(process.pid)
|
81
|
+
rescue Errno::ESRCH
|
82
|
+
# Process no longer running
|
83
|
+
end
|
80
84
|
|
81
|
-
|
82
|
-
|
83
|
-
rescue Errno::ESRCH
|
84
|
-
# Process no longer running
|
85
|
-
end
|
85
|
+
related_processes << process if subprocess_pgid == process_pgid
|
86
|
+
end
|
86
87
|
|
87
|
-
|
88
|
-
|
88
|
+
related_processes
|
89
|
+
end
|
89
90
|
|
90
|
-
|
91
|
-
|
91
|
+
def related_sidekiq_processes
|
92
|
+
related_sidekiq_processes = []
|
92
93
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
94
|
+
Knj::Unix_proc.list("grep" => "sidekiq") do |process|
|
95
|
+
cmd = process.data.fetch("cmd")
|
96
|
+
|
97
|
+
if /sidekiq ([0-9]+\.[0-9]+\.[0-9]+) (#{options.possible_process_titles_joined_regex})/.match?(cmd)
|
98
|
+
sidekiq_pid = process.data.fetch("pid").to_i
|
99
|
+
|
100
|
+
begin
|
101
|
+
sidekiq_pgid = Process.getpgid(sidekiq_pid)
|
102
|
+
rescue Errno::ESRCH
|
103
|
+
# Process no longer running
|
104
|
+
end
|
105
|
+
|
106
|
+
related_sidekiq_processes << process if subprocess_pgid == sidekiq_pgid
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
related_sidekiq_processes
|
111
|
+
end
|
112
|
+
|
113
|
+
def stop_related_processes
|
114
|
+
loop do
|
115
|
+
processes = related_processes
|
116
|
+
|
117
|
+
if processes.length <= 0
|
118
|
+
logger.logs "No related processes could be found"
|
119
|
+
break
|
120
|
+
else
|
121
|
+
processes.each do |process|
|
122
|
+
logger.logs "Terminating PID #{process.pid}: #{process.data.fetch("cmd")}"
|
123
|
+
Process.kill("TERM", process.pid)
|
124
|
+
end
|
125
|
+
|
126
|
+
sleep 0.5
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def find_sidekiq_pid
|
132
|
+
Thread.new do
|
133
|
+
while running? && !pid
|
134
|
+
related_sidekiq_processes.each do |related_sidekiq_process| # rubocop:disable Lint/UnreachableLoop
|
135
|
+
puts "FOUND PID: #{related_sidekiq_process.pid}"
|
136
|
+
@pid = related_sidekiq_process.pid
|
137
|
+
options.events.call(:on_process_started, pid: related_sidekiq_process.pid)
|
138
|
+
|
139
|
+
break
|
98
140
|
end
|
99
141
|
|
100
142
|
unless pid
|
data/lib/process_bot/process.rb
CHANGED
@@ -29,7 +29,11 @@ class ProcessBot::Process
|
|
29
29
|
if command == "start"
|
30
30
|
start
|
31
31
|
elsif command == "graceful" || command == "stop"
|
32
|
-
|
32
|
+
begin
|
33
|
+
client.send_command(command: command, options: options.options)
|
34
|
+
rescue Errno::ECONNREFUSED => e
|
35
|
+
raise e unless options[:ignore_no_process_bot]
|
36
|
+
end
|
33
37
|
else
|
34
38
|
raise "Unknown command: #{command}"
|
35
39
|
end
|
@@ -68,6 +72,10 @@ class ProcessBot::Process
|
|
68
72
|
update_process_title
|
69
73
|
end
|
70
74
|
|
75
|
+
def set_stopped
|
76
|
+
@stopped = true
|
77
|
+
end
|
78
|
+
|
71
79
|
def start_control_socket
|
72
80
|
@control_socket = ProcessBot::ControlSocket.new(options: options, process: self)
|
73
81
|
@control_socket.start
|
@@ -88,15 +96,26 @@ class ProcessBot::Process
|
|
88
96
|
end
|
89
97
|
end
|
90
98
|
|
91
|
-
def
|
99
|
+
def stop(**args)
|
100
|
+
puts "Stop process #{args}"
|
92
101
|
@stopped = true
|
102
|
+
handler_instance.stop
|
93
103
|
end
|
94
104
|
|
95
105
|
def run
|
96
|
-
runner = ProcessBot::Process::Runner.new(command: handler_instance.start_command, logger: logger, options: options)
|
97
106
|
runner.run
|
98
107
|
end
|
99
108
|
|
109
|
+
def runner
|
110
|
+
@runner ||= ProcessBot::Process::Runner.new(
|
111
|
+
command: handler_instance.start_command,
|
112
|
+
handler_name: handler_name,
|
113
|
+
handler_instance: handler_instance,
|
114
|
+
logger: logger,
|
115
|
+
options: options
|
116
|
+
)
|
117
|
+
end
|
118
|
+
|
100
119
|
def update_process_title
|
101
120
|
process_args = {application: options[:application], handler: handler_name, id: options[:id], pid: current_pid, port: port}
|
102
121
|
@current_process_title = "ProcessBot #{JSON.generate(process_args)}"
|
data/lib/process_bot/version.rb
CHANGED
data/process_bot.gemspec
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/process_bot/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "process_bot"
|
7
|
+
spec.version = ProcessBot::VERSION
|
8
|
+
spec.authors = ["kaspernj"]
|
9
|
+
spec.email = ["k@spernj.org"]
|
10
|
+
|
11
|
+
spec.summary = "Run and control processes."
|
12
|
+
spec.description = "Run and control processes."
|
13
|
+
spec.homepage = "https://github.com/kaspernj/process_bot"
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = ">= 2.7.0"
|
16
|
+
|
17
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
|
+
|
19
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
+
spec.metadata["source_code_uri"] = "https://github.com/kaspernj/process_bot"
|
21
|
+
spec.metadata["changelog_uri"] = "https://github.com/kaspernj/process_bot/blob/master/CHANGELOG.md"
|
22
|
+
|
23
|
+
# Specify which files should be added to the gem when it is released.
|
24
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
27
|
+
f.match(%r{\A(?:(?:bin|pkg|test|spec|features)/|\.(?:git|github|travis|circleci)|appveyor)})
|
28
|
+
end
|
29
|
+
end
|
30
|
+
spec.bindir = "exe"
|
31
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
32
|
+
spec.require_paths = ["lib"]
|
33
|
+
|
34
|
+
spec.add_dependency "knjrbfw", ">= 0.0.116"
|
35
|
+
spec.add_dependency "pry"
|
36
|
+
spec.add_dependency "rake"
|
37
|
+
spec.add_dependency "rspec"
|
38
|
+
spec.add_dependency "string-cases"
|
39
|
+
|
40
|
+
spec.add_development_dependency "rubocop"
|
41
|
+
spec.add_development_dependency "rubocop-performance"
|
42
|
+
spec.add_development_dependency "rubocop-rake"
|
43
|
+
spec.add_development_dependency "rubocop-rspec"
|
44
|
+
|
45
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: process_bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: knjrbfw
|
@@ -24,6 +23,118 @@ dependencies:
|
|
24
23
|
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
25
|
version: 0.0.116
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: pry
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: rake
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: rspec
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: string-cases
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
type: :runtime
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rubocop
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: rubocop-performance
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rubocop-rake
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
type: :development
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: rubocop-rspec
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
type: :development
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
27
138
|
description: Run and control processes.
|
28
139
|
email:
|
29
140
|
- k@spernj.org
|
@@ -44,6 +155,7 @@ files:
|
|
44
155
|
- exe/process_bot
|
45
156
|
- lib/process_bot.rb
|
46
157
|
- lib/process_bot/capistrano.rb
|
158
|
+
- lib/process_bot/capistrano/custom.rake
|
47
159
|
- lib/process_bot/capistrano/puma.rake
|
48
160
|
- lib/process_bot/capistrano/puma.rb
|
49
161
|
- lib/process_bot/capistrano/puma/common.rb
|
@@ -56,11 +168,12 @@ files:
|
|
56
168
|
- lib/process_bot/options.rb
|
57
169
|
- lib/process_bot/process.rb
|
58
170
|
- lib/process_bot/process/handlers.rb
|
171
|
+
- lib/process_bot/process/handlers/custom.rb
|
59
172
|
- lib/process_bot/process/handlers/sidekiq.rb
|
60
173
|
- lib/process_bot/process/runner.rb
|
61
174
|
- lib/process_bot/version.rb
|
62
175
|
- peak_flow.yml
|
63
|
-
-
|
176
|
+
- process_bot.gemspec
|
64
177
|
homepage: https://github.com/kaspernj/process_bot
|
65
178
|
licenses:
|
66
179
|
- MIT
|
@@ -70,7 +183,6 @@ metadata:
|
|
70
183
|
source_code_uri: https://github.com/kaspernj/process_bot
|
71
184
|
changelog_uri: https://github.com/kaspernj/process_bot/blob/master/CHANGELOG.md
|
72
185
|
rubygems_mfa_required: 'true'
|
73
|
-
post_install_message:
|
74
186
|
rdoc_options: []
|
75
187
|
require_paths:
|
76
188
|
- lib
|
@@ -85,8 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
197
|
- !ruby/object:Gem::Version
|
86
198
|
version: '0'
|
87
199
|
requirements: []
|
88
|
-
rubygems_version: 3.
|
89
|
-
signing_key:
|
200
|
+
rubygems_version: 3.6.9
|
90
201
|
specification_version: 4
|
91
202
|
summary: Run and control processes.
|
92
203
|
test_files: []
|
data/sig/process_bot.rbs
DELETED