process_bot 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ba4b3227493fa167bf23dfa8338ab83baf626a444eb91ff98d8d7ce40056cc2
4
- data.tar.gz: 605f53e2980a549cb945470e6010877ce2b4eed5f5adef5dd7c80f2f46976332
3
+ metadata.gz: 5f2f79412eb217c8a18aa20f8f54e0009bbc646c51ad253a852889b80d4e2a04
4
+ data.tar.gz: ccb5234f5d4e43d00f1bb12256d01eac975c40e4ed7d8c393ff9c990022fd459
5
5
  SHA512:
6
- metadata.gz: cf82581d6d23036f2bbd5a91587f752b89d45e5c24a045193acd24911eb7ef5e427991baa7d0c6bb9299207c0c67595b4b645fb13743737e5771fde19063edba
7
- data.tar.gz: 49f2aeca472a0a5957b86f70db38be1516faf8503ba04b70108e6ef8bf91b40b1bd2cb241339e79b447ba47290e47a25c81568cf516fbfa057a0745742f7e061
6
+ metadata.gz: 9860f2583903182f3e8cb5ca55dc181fcc0fdd41c2a895f9d50899627b7bcc1279cdfc4089d4ad69f9ed97e36f311f3d4a00949581add9082589e4ab947ea709
7
+ data.tar.gz: 1a54dca286519b9f16786ba142fca462906218fd2ef1fdd0e50cfb75332502ccc4a295706348d1e415c965d253d6c4c8fb6a20758c179caf20696ae2a42677ec
data/.rubocop.yml CHANGED
@@ -4,7 +4,7 @@ AllCops:
4
4
  NewCops: enable
5
5
  TargetRubyVersion: 2.7
6
6
 
7
- require:
7
+ plugins:
8
8
  - rubocop-performance
9
9
  - rubocop-rake
10
10
  - rubocop-rspec
data/Gemfile CHANGED
@@ -5,11 +5,6 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in process_bot.gemspec
6
6
  gemspec
7
7
 
8
- gem "pry"
9
- gem "rake"
10
- gem "rspec"
11
- gem "string-cases"
12
-
13
8
  group :development do
14
9
  gem "rubocop"
15
10
  gem "rubocop-performance"
data/Gemfile.lock CHANGED
@@ -1,8 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- process_bot (0.1.5)
4
+ process_bot (0.1.6)
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.5.1)
17
+ diff-lcs (1.6.2)
14
18
  http2 (0.0.36)
15
19
  string-cases (~> 0)
16
- json (2.10.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.4)
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.26.3)
28
- parser (3.3.7.4)
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.2.1)
45
+ rake (13.3.0)
42
46
  ref (2.0.0)
43
- regexp_parser (2.10.0)
44
- rspec (3.13.0)
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.0)
52
+ rspec-core (3.13.5)
49
53
  rspec-support (~> 3.13.0)
50
- rspec-expectations (3.13.0)
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.0)
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.0)
57
- rubocop (1.75.2)
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.44.0, < 2.0)
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.44.0)
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.5.0)
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.4)
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
@@ -2,8 +2,7 @@
2
2
 
3
3
  require "pathname"
4
4
 
5
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
6
- Pathname.new(__FILE__).realpath)
5
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath)
7
6
 
8
7
  require "bundler/setup"
9
8
  require "optparse"
@@ -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
@@ -54,7 +54,7 @@ module ProcessBot::Capistrano::Puma::Common
54
54
  kind == :ssl
55
55
  end
56
56
 
57
- def tcp
57
+ def tcp # rubocop:disable Naming/PredicateMethod
58
58
  kind == :tcp || ssl?
59
59
  end
60
60
 
@@ -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
@@ -20,7 +20,7 @@ class ProcessBot::ClientSocket
20
20
  end
21
21
 
22
22
  def send_command(data) # rubocop:disable Metrics/AbcSize
23
- logger.log "Sending: #{data}"
23
+ logger.logs "Sending: #{data}"
24
24
  client.puts(JSON.generate(data))
25
25
  response_raw = client.gets
26
26
 
@@ -23,8 +23,8 @@ class ProcessBot::ControlSocket
23
23
  def start_tcp_server
24
24
  tries ||= 0
25
25
  tries += 1
26
- @server = TCPServer.new("localhost", @port)
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.close
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.logs e.message, type: :stderr
72
- logger.logs e.backtrace, type: :stderr
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
 
@@ -5,6 +5,10 @@ class ProcessBot::Logger
5
5
  @options = options
6
6
  end
7
7
 
8
+ def error(output)
9
+ logs(output, type: :stderr)
10
+ end
11
+
8
12
  def log(output, type: :stdout)
9
13
  if type == :stdout || (type == :debug && options[:debug])
10
14
  $stdout.print output
@@ -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
- process.set_stopped
95
+ if current_pid
96
+ Process.kill("TERM", current_pid)
97
+ else
98
+ related_sidekiq_processes = process.runner.related_sidekiq_processes
96
99
 
97
- unless current_pid
98
- warn "#{handler_name} not running with a PID"
99
- return
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 find_sidekiq_pid # rubocop:disable Metrics/AbcSize
73
- Thread.new do
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
- if /sidekiq ([0-9]+\.[0-9]+\.[0-9]+) (#{options.possible_process_titles_joined_regex})/.match?(cmd)
79
- sidekiq_pid = process.data.fetch("pid").to_i
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
- begin
82
- sidekiq_pgid = Process.getpgid(sidekiq_pid)
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
- if subprocess_pgid == sidekiq_pgid
88
- puts "FOUND PID: #{sidekiq_pid}"
88
+ related_processes
89
+ end
89
90
 
90
- @pid = sidekiq_pid
91
- options.events.call(:on_process_started, pid: pid)
91
+ def related_sidekiq_processes
92
+ related_sidekiq_processes = []
92
93
 
93
- break
94
- else
95
- puts "PGID didn't match - Sidekiq: #{sidekiq_pgid} Own: #{subprocess_pgid}"
96
- end
97
- end
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
@@ -29,7 +29,11 @@ class ProcessBot::Process
29
29
  if command == "start"
30
30
  start
31
31
  elsif command == "graceful" || command == "stop"
32
- client.send_command(command: command, options: options.options)
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 set_stopped
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)}"
@@ -1,3 +1,3 @@
1
1
  module ProcessBot
2
- VERSION = "0.1.5".freeze
2
+ VERSION = "0.1.6".freeze
3
3
  end
@@ -0,0 +1,41 @@
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.metadata["rubygems_mfa_required"] = "true"
41
+ 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.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaspernj
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-04-08 00:00:00.000000000 Z
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,62 @@ 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'
27
82
  description: Run and control processes.
28
83
  email:
29
84
  - k@spernj.org
@@ -44,6 +99,7 @@ files:
44
99
  - exe/process_bot
45
100
  - lib/process_bot.rb
46
101
  - lib/process_bot/capistrano.rb
102
+ - lib/process_bot/capistrano/custom.rake
47
103
  - lib/process_bot/capistrano/puma.rake
48
104
  - lib/process_bot/capistrano/puma.rb
49
105
  - lib/process_bot/capistrano/puma/common.rb
@@ -56,11 +112,12 @@ files:
56
112
  - lib/process_bot/options.rb
57
113
  - lib/process_bot/process.rb
58
114
  - lib/process_bot/process/handlers.rb
115
+ - lib/process_bot/process/handlers/custom.rb
59
116
  - lib/process_bot/process/handlers/sidekiq.rb
60
117
  - lib/process_bot/process/runner.rb
61
118
  - lib/process_bot/version.rb
62
119
  - peak_flow.yml
63
- - sig/process_bot.rbs
120
+ - process_bot.gemspec
64
121
  homepage: https://github.com/kaspernj/process_bot
65
122
  licenses:
66
123
  - MIT
@@ -70,7 +127,6 @@ metadata:
70
127
  source_code_uri: https://github.com/kaspernj/process_bot
71
128
  changelog_uri: https://github.com/kaspernj/process_bot/blob/master/CHANGELOG.md
72
129
  rubygems_mfa_required: 'true'
73
- post_install_message:
74
130
  rdoc_options: []
75
131
  require_paths:
76
132
  - lib
@@ -85,8 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
141
  - !ruby/object:Gem::Version
86
142
  version: '0'
87
143
  requirements: []
88
- rubygems_version: 3.1.6
89
- signing_key:
144
+ rubygems_version: 3.6.9
90
145
  specification_version: 4
91
146
  summary: Run and control processes.
92
147
  test_files: []
data/sig/process_bot.rbs DELETED
@@ -1,4 +0,0 @@
1
- module ProcessBot
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end