selective-ruby-core 0.1.2-x86_64-darwin → 0.1.4-x86_64-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: de5a1cbd67c1d87b590371321c194cd39ebb4c48262b2cebcbf9af3a167d4d37
4
- data.tar.gz: 1b9841d87eae5f184b4a2048262a7871b48339d0b31f22f8b0f1311d2c79932c
3
+ metadata.gz: 3b804fafa6a74937094d9db0ceef94c23c00d25c1b86434326f6cbf9d16794ae
4
+ data.tar.gz: 1d44b1a5aab3c8c2c2c47682d32dab1f66e360bdb53a1b94bc147137de9b85a3
5
5
  SHA512:
6
- metadata.gz: 32ba16bd2e9818f3bbdd0687715c4804688f12fbf16981688f879615318a6dd17d1f5b7ac7e76e10fa6c159ded6b54bf2e77b2e98affc2e4580935db90fbf345
7
- data.tar.gz: 5036c3e0f58bd830f5c7362f051baf5654c85020bd473aa2f9de32b16c3517714b37ac004ec770e3b63d0f8e659593257084b005b1467f5143fbfdbce54830cb
6
+ metadata.gz: 4b14e06eeff150dd1240894af5f2d94342664d817b9f4e6c6d6507b966cb4617330d64a4193fa680d07ad847b867757487f7e2844878b6d2965b89a86c1ff76e
7
+ data.tar.gz: 4cf8e3503bb17eff51f6637329c9a86677e26b56e5b8808f7e9da949b58ff7a92b3975748ed0adfae753e5d4b9fd19e364c2150ec8fa5df9ce9b43dc9aca3ef6
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-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: 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