selective-ruby-core 0.1.2-x86_64-linux → 0.1.4-x86_64-linux

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: 14a8dd050ca8404ea8339e60ce70d6efe818729113d40b40773cc984846107e1
4
- data.tar.gz: 53e9f422e0f7fb10fd28c3469c07a5a34010148cc6a08ca0f6800230dc864f6d
3
+ metadata.gz: d3cfc0f197ff21e92ff171b597fbafe95612a745c4e00023609e6bed3758d885
4
+ data.tar.gz: 03e2b409801da959d4bb3d08d25cc4dbec3eb90701178661ab0b4570e4eed8c6
5
5
  SHA512:
6
- metadata.gz: 07d4d6629a4737e2f4fd571a9be4dd586671f56275f41d6d34ed4390255ab1d9094c17ffffb1de0e02f7b10b140a7dcaa28457c8be6e44eebdce875bd47d2d7f
7
- data.tar.gz: 38efb142fa8fb83b3b7836d1a9a6127c8063d1371b39a78fb0b4e3207fcbf1d81acb03f263596e28ff3dcb4bcc59119fdd75193742d8cd568216ed74f012112b
6
+ metadata.gz: d41ed8da622421596d36c6e9ae8f7a0f59d5a49570b7f4809eccbf83e4e24a9d4986b361d37b10221b67d31b40ee72ae4c798a33c8e4d78d687f791aeca44c20
7
+ data.tar.gz: 8ee648155ae21cf2e30b360fc5bb3895317c7f112c32e922186c0a09e0bc167c0fbda72cb1488d658ab52f4ab1ea98075834603fe2a88c9191a278e1c2782cfc
data/lib/bin/build_env.sh CHANGED
@@ -4,11 +4,13 @@
4
4
  if [ -n "$GITHUB_ACTIONS" ]; then
5
5
  # Get environment variables
6
6
  platform=github_actions
7
- branch=${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}
7
+ branch=${SELECTIVE_BRANCH:-${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}}
8
8
  pr_title=$SELECTIVE_PR_TITLE
9
- target_branch=${GITHUB_BASE_REF}
9
+ target_branch=${SELECTIVE_TARGET_BRANCH:-$GITHUB_BASE_REF}
10
10
  actor=$GITHUB_ACTOR
11
- sha=$GITHUB_SHA
11
+ sha=${SELECTIVE_SHA:-$GITHUB_SHA}
12
+ run_id=${SELECTIVE_RUN_ID:-$GITHUB_RUN_ID}
13
+ run_attempt=${SELECTIVE_RUN_ATTEMPT:-$GITHUB_RUN_ATTEMPT}
12
14
  commit_message=$(git log --format=%s -n 1 $sha)
13
15
  else
14
16
  platform=$SELECTIVE_PLATFORM
@@ -17,6 +19,8 @@ else
17
19
  target_branch=$SELECTIVE_TARGET_BRANCH
18
20
  actor=$SELECTIVE_ACTOR
19
21
  sha=$SELECTIVE_SHA
22
+ run_id=$SELECTIVE_RUN_ID
23
+ run_attempt=$SELECTIVE_RUN_ATTEMPT
20
24
  commit_message=$(git log --format=%s -n 1 $sha)
21
25
  fi
22
26
 
@@ -29,6 +33,8 @@ cat <<EOF
29
33
  "target_branch": "$target_branch",
30
34
  "actor": "$actor",
31
35
  "sha": "$sha",
36
+ "run_id": "$run_id",
37
+ "run_attempt": "$run_attempt",
32
38
  "commit_message": "$commit_message"
33
39
  }
34
40
  EOF
data/lib/bin/transport CHANGED
Binary file
@@ -14,7 +14,7 @@ module Selective
14
14
  @debug = debug
15
15
  @runner = runner
16
16
  @retries = 0
17
- @runner_id = ENV.fetch("SELECTIVE_RUNNER_ID", generate_runner_id)
17
+ @runner_id = safe_filename(ENV.fetch("SELECTIVE_RUNNER_ID", generate_runner_id))
18
18
  @logger = init_logger(log)
19
19
  end
20
20
 
@@ -23,6 +23,7 @@ module Selective
23
23
  @transport_pid = spawn_transport_process(reconnect ? transport_url + "&reconnect=true" : transport_url)
24
24
 
25
25
  handle_termination_signals(transport_pid)
26
+ wait_for_connectivity
26
27
  run_main_loop
27
28
  rescue NamedPipe::PipeClosedError
28
29
  retry!
@@ -66,8 +67,6 @@ module Selective
66
67
  def run_main_loop
67
68
  loop do
68
69
  message = pipe.read
69
- next sleep(0.1) if message.nil? || message.empty?
70
-
71
70
  response = JSON.parse(message, symbolize_names: true)
72
71
 
73
72
  @logger.info("Received Command: #{response}")
@@ -101,13 +100,15 @@ module Selective
101
100
  def transport_url
102
101
  @transport_url ||= begin
103
102
  api_key = ENV.fetch("SELECTIVE_API_KEY")
104
- run_id = ENV.fetch("SELECTIVE_RUN_ID")
105
- run_attempt = ENV.fetch("SELECTIVE_RUN_ATTEMPT", SecureRandom.uuid)
106
103
  host = ENV.fetch("SELECTIVE_HOST", "wss://app.selective.ci")
107
104
 
108
105
  # Validate that host is a valid websocket url(starts with ws:// or wss://)
109
106
  raise "Invalid host: #{host}" unless host.match?(/^wss?:\/\//)
110
107
 
108
+ run_id = build_env.delete("run_id")
109
+ run_attempt = build_env.delete("run_attempt")
110
+ run_attempt = SecureRandom.uuid if run_attempt.nil? || run_attempt.empty?
111
+
111
112
  params = {
112
113
  "run_id" => run_id,
113
114
  "run_attempt" => run_attempt,
@@ -151,6 +152,31 @@ module Selective
151
152
  end
152
153
  end
153
154
 
155
+ def wait_for_connectivity
156
+ @connectivity = false
157
+
158
+ Thread.new do
159
+ sleep(5)
160
+ unless @connectivity
161
+ puts "Transport process failed to start. Exiting..."
162
+ kill_transport
163
+ exit(1)
164
+ end
165
+ end
166
+
167
+ loop do
168
+ message = pipe.read
169
+
170
+ # The message is nil until the transport opens the pipe
171
+ # for writing. So, we must handle that here.
172
+ next sleep(0.1) if message.nil?
173
+
174
+ response = JSON.parse(message, symbolize_names: true)
175
+ @connectivity = true if response[:command] == "connected"
176
+ break
177
+ end
178
+ end
179
+
154
180
  def handle_termination_signals(pid)
155
181
  ["INT", "TERM"].each do |signal|
156
182
  Signal.trap(signal) do
@@ -173,7 +199,7 @@ module Selective
173
199
 
174
200
  sleep(1)
175
201
  end
176
- rescue NamedPipe::PipeClosedError
202
+ rescue NamedPipe::PipeClosedError, IOError
177
203
  # If the pipe is close, move straight to killing
178
204
  # it forcefully.
179
205
  end
@@ -270,6 +296,13 @@ module Selective
270
296
  @debug
271
297
  end
272
298
 
299
+ def safe_filename(filename)
300
+ filename
301
+ .gsub(/[\/\\:*?"<>|\n\r]+/, '_')
302
+ .gsub(/^\.+|\.+$/, '')
303
+ .strip[0, 255]
304
+ end
305
+
273
306
  def with_error_handling(include_header: true)
274
307
  yield
275
308
  rescue => e
@@ -3,7 +3,7 @@
3
3
  module Selective
4
4
  module Ruby
5
5
  module Core
6
- VERSION = "0.1.2"
6
+ VERSION = "0.1.4"
7
7
  end
8
8
  end
9
9
  end
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.1.2
4
+ version: 0.1.4
5
5
  platform: x86_64-linux
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: 2023-11-14 00:00:00.000000000 Z
12
+ date: 2023-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: zeitwerk