selective-ruby-core 0.2.2-arm64-darwin → 0.2.3-arm64-darwin

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba838f033885b51cf4b81bf1afa5927309bcedecc4515da20bddd4846b47b50f
4
- data.tar.gz: '0538f47a08feda07e5bb093be6a6ba67079bd9a275a8f0a103bfc3761b41580e'
3
+ metadata.gz: 65a9d5ea2fc988fb01cc1966ec4eea098a9149593b0217fea94e74d8dfb9191d
4
+ data.tar.gz: c6c330b10973b8d83ee8ae51947e22b1cbe0bb2893c7beaf340f4dd91deed152
5
5
  SHA512:
6
- metadata.gz: fa4075a64900caf106a6249759607e04db3e4b501eff896c219c97acc43d221832e361069962a89411d6a199cd6ac2fbb47e48a5438767fbf000b6163870c924
7
- data.tar.gz: a014af993dc61153f6a41c76a68b47987a88d6ba972e78ffd376ad6264c1136ba12d7912342affad0ec21ddb3b80e305f3e2830487d28ae14b2ecf341258a9da
6
+ metadata.gz: 14788a8944552736e727242a3be3b5eb8240523f4b7b881836cc9ff95a00814fac741e6756a4a25b153439dece54c02e76732998dc282d7f4a6b07df50c4c15d
7
+ data.tar.gz: cdb477933ff7b2ebf328efc0ac5aa88bfaccdde6a4e7fe0ef27a6ac83256837596808fe3393d06fcb31d564b712c29a8d1caf40ad100aa104949c995f306f5a4
@@ -8,6 +8,7 @@ module Selective
8
8
  class Controller
9
9
  include Helper
10
10
  @@selective_suppress_reporting = false
11
+ @@report_at_finish = {}
11
12
 
12
13
  REQUIRED_CONFIGURATION = {
13
14
  "host" => "SELECTIVE_HOST",
@@ -33,7 +34,7 @@ module Selective
33
34
  handle_termination_signals(transport_pid)
34
35
  wait_for_connectivity
35
36
  run_main_loop
36
- rescue NamedPipe::PipeClosedError
37
+ rescue ConnectionLostError
37
38
  retry!
38
39
  rescue => e
39
40
  with_error_handling { raise e }
@@ -57,12 +58,16 @@ module Selective
57
58
  @@selective_suppress_reporting
58
59
  end
59
60
 
61
+ def self.report_at_finish
62
+ @@report_at_finish
63
+ end
64
+
60
65
  private
61
66
 
62
67
  attr_reader :runner, :pipe, :transport_pid, :retries, :logger, :runner_id, :diff
63
68
 
64
69
  def get_runner_id
65
- runner_id = build_env.delete("runner_id")
70
+ runner_id = build_env["runner_id"]
66
71
  return generate_runner_id if runner_id.nil? || runner_id.empty?
67
72
 
68
73
  runner_id
@@ -90,10 +95,10 @@ module Selective
90
95
  def retry!
91
96
  @retries += 1
92
97
 
93
- with_error_handling { raise "Too many retries" } if retries > 4
98
+ with_error_handling { raise "Too many retries" } if retries > 10
94
99
 
95
- puts("Retrying in #{retries} seconds...")
96
- sleep(retries)
100
+ puts("Retrying in #{retries} seconds...") if debug?
101
+ sleep(retries > 4 ? 4 : retries)
97
102
  kill_transport
98
103
 
99
104
  pipe.reset!
@@ -109,29 +114,30 @@ module Selective
109
114
  end
110
115
 
111
116
  def transport_url(reconnect: false)
112
- @transport_url ||= begin
113
- api_key = build_env.delete("api_key")
114
- host = build_env.delete("host")
115
- run_id = build_env.delete("run_id")
116
- run_attempt = build_env.delete("run_attempt")
117
+ base_transport_url_params[:reconnect] = true if reconnect
118
+ query_string = URI.encode_www_form(base_transport_url_params)
119
+ "#{build_env["host"]}/transport/websocket?#{query_string}"
120
+ end
121
+
122
+ def base_transport_url_params
123
+ @base_transport_url_params ||= begin
124
+ api_key = build_env["api_key"]
125
+ run_id = build_env["run_id"]
126
+ run_attempt = build_env["run_attempt"]
117
127
 
118
- params = {
128
+ metadata = build_env.reject { |k,v| %w(host runner_id api_key run_id run_attempt).include?(k) }
129
+
130
+ {
131
+ "api_key" => api_key,
119
132
  "run_id" => run_id,
120
133
  "run_attempt" => run_attempt,
121
- "api_key" => api_key,
122
134
  "runner_id" => runner_id,
123
135
  "language" => "ruby",
124
136
  "core_version" => Selective::Ruby::Core::VERSION,
125
137
  "framework" => runner.framework,
126
138
  "framework_version" => runner.framework_version,
127
139
  "framework_wrapper_version" => runner.wrapper_version,
128
- }.merge(metadata: build_env.to_json)
129
-
130
- prams[:reconnect] = true if reconnect
131
-
132
- query_string = URI.encode_www_form(params)
133
-
134
- "#{host}/transport/websocket?#{query_string}"
140
+ }.merge(metadata: metadata.to_json)
135
141
  end
136
142
  end
137
143
 
@@ -224,7 +230,7 @@ module Selective
224
230
 
225
231
  sleep(1)
226
232
  end
227
- rescue NamedPipe::PipeClosedError, IOError
233
+ rescue ConnectionLostError, IOError
228
234
  # If the pipe is close, move straight to killing
229
235
  # it forcefully.
230
236
  end
@@ -270,8 +276,11 @@ module Selective
270
276
  runner.run_test_cases(data[:test_case_ids])
271
277
  end
272
278
 
279
+ # Todo: Rename this command to match the method name
280
+ # on the runner wrapper. We should do something similar
281
+ # to normalize handle_print_notice and handle_print_message
273
282
  def handle_remove_failed_test_case_result(data)
274
- runner.remove_failed_test_case_result(data[:test_case_id])
283
+ runner.remove_test_case_result(data[:test_case_id])
275
284
  end
276
285
 
277
286
  def handle_print_message(data)
@@ -281,7 +290,13 @@ module Selective
281
290
  def handle_close(data)
282
291
  exit_status = data[:exit_status]
283
292
  self.class.restore_reporting!
284
- with_error_handling { runner.finish } unless exit_status.is_a?(Integer)
293
+
294
+ with_error_handling do
295
+ Selective::Ruby::Core::Controller.report_at_finish[:connection_retries] = @retries
296
+ write({type: "report_at_finish", data: Selective::Ruby::Core::Controller.report_at_finish})
297
+
298
+ runner.finish unless exit_status.is_a?(Integer)
299
+ end
285
300
 
286
301
  kill_transport
287
302
  pipe.delete_pipes
@@ -9,7 +9,7 @@ module Selective
9
9
  FILE_CORRELATION_COLLECTOR_PATH = File.join(ROOT_GEM_PATH, "lib", "bin", "file_correlation_collector.sh")
10
10
 
11
11
  def initialize(diff, num_commits, target_branch)
12
- @diff = diff
12
+ @diff = diff.reject {|f| f =~ /^spec\// }
13
13
  @num_commits = num_commits
14
14
  @target_branch = target_branch
15
15
  end
@@ -2,8 +2,6 @@ module Selective
2
2
  module Ruby
3
3
  module Core
4
4
  class NamedPipe
5
- class PipeClosedError < StandardError; end
6
-
7
5
  attr_reader :read_pipe_path, :write_pipe_path
8
6
 
9
7
  def initialize(read_pipe_path, write_pipe_path, skip_reset: false)
@@ -44,7 +42,7 @@ module Selective
44
42
  write_pipe.write("\n")
45
43
  write_pipe.flush
46
44
  rescue Errno::EPIPE
47
- raise PipeClosedError
45
+ raise ConnectionLostError
48
46
  end
49
47
  end
50
48
 
@@ -54,7 +52,7 @@ module Selective
54
52
  message = read_pipe.gets.chomp
55
53
  rescue NoMethodError => e
56
54
  if e.name == :chomp
57
- raise PipeClosedError
55
+ raise ConnectionLostError
58
56
  else
59
57
  raise e
60
58
  end
@@ -3,7 +3,7 @@
3
3
  module Selective
4
4
  module Ruby
5
5
  module Core
6
- VERSION = "0.2.2"
6
+ VERSION = "0.2.3"
7
7
  end
8
8
  end
9
9
  end
@@ -14,6 +14,7 @@ module Selective
14
14
  module Ruby
15
15
  module Core
16
16
  class Error < StandardError; end
17
+ class ConnectionLostError < StandardError; end
17
18
 
18
19
  ROOT_GEM_PATH = Gem.loaded_specs["selective-ruby-core"].full_gem_path
19
20
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selective-ruby-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: arm64-darwin
6
6
  authors:
7
7
  - Benjamin Wood
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-01-26 00:00:00.000000000 Z
12
+ date: 2024-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: zeitwerk