selective-ruby-core 0.1.1-x86_64-linux → 0.1.3-x86_64-linux

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: 3fe8f6598750b984fce4859e7a6c0f84321f7fba8ff2f6218ce924f5eba484d1
4
- data.tar.gz: c7fcac04f71b35197d2267fc128ea7b0c8d19637f3f0640a9367782dd35687f4
3
+ metadata.gz: 61626d843514502b6ebb7bd829345d0a18bc76603fe7c2568838371321eeb3ae
4
+ data.tar.gz: 360dcffb94500fb62dcb6ce0ce5c9bce85a71247a3750f10a1edec5f1532458c
5
5
  SHA512:
6
- metadata.gz: 881086af89fa21f30a906cd6a546b144057bb61140e4f99a3813918a9248a233d75ac169ea051fdbedde70e68f6656020b41b40f9cbc325591046a28d4b6b3cd
7
- data.tar.gz: abfb6e8be51923474af4bd01e928bbb61f99358d3dbf23c35ebb284d9fa4a7cb2c4528eaf28add4e51ab5de89919c1263f462215d5e0d742bd0711481dccfd06
6
+ metadata.gz: 8886c9761492e0ee4fc892e2605c2aab1c7e508d2d1a04af7ea9d0d1c80b3d9a03244ed56e4587b36ff7695fc31697db8538ac7e11d241132a026dd04aaf91db
7
+ data.tar.gz: 779c4a1e9bf5057b2f89d0b4f991a7c149a29f4f70d7df85a4d362f4369cca4885ce42ba3e5837de8685828b47bab84bc1f1840bc942fbe55a5e0505cf14c7ee
data/lib/bin/build_env.sh CHANGED
@@ -3,20 +3,24 @@
3
3
  # Detect the platform (only GitHub Actions in this case)
4
4
  if [ -n "$GITHUB_ACTIONS" ]; then
5
5
  # Get environment variables
6
- platform="github_actions"
7
- branch="${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}"
8
- pr_title="$PR_TITLE"
9
- target_branch="${GITHUB_BASE_REF}"
10
- actor="$GITHUB_ACTOR"
11
- sha="$GITHUB_SHA"
6
+ platform=github_actions
7
+ branch=${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}
8
+ pr_title=$SELECTIVE_PR_TITLE
9
+ target_branch=${GITHUB_BASE_REF}
10
+ actor=$GITHUB_ACTOR
11
+ sha=$GITHUB_SHA
12
+ run_id=$GITHUB_RUN_ID
13
+ run_attempt=$GITHUB_RUN_ATTEMPT
12
14
  commit_message=$(git log --format=%s -n 1 $sha)
13
15
  else
14
- platform="$SELECTIVE_PLATFORM"
15
- branch="$SELECTIVE_BRANCH"
16
- pr_title="$SELECTIVE_PR_TITLE"
17
- target_branch="$SELECTIVE_TARGET_BRANCH"
18
- actor="$SELECTIVE_ACTOR"
19
- sha="$SELECTIVE_SHA"
16
+ platform=$SELECTIVE_PLATFORM
17
+ branch=$SELECTIVE_BRANCH
18
+ pr_title=$SELECTIVE_PR_TITLE
19
+ target_branch=$SELECTIVE_TARGET_BRANCH
20
+ actor=$SELECTIVE_ACTOR
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
@@ -1,6 +1,8 @@
1
1
  require "logger"
2
2
  require "uri"
3
3
  require "json"
4
+ require "fileutils"
5
+ require "open3"
4
6
 
5
7
  module Selective
6
8
  module Ruby
@@ -8,12 +10,12 @@ module Selective
8
10
  class Controller
9
11
  @@selective_suppress_reporting = false
10
12
 
11
- def initialize(runner, debug = false)
13
+ def initialize(runner, debug: false, log: false)
12
14
  @debug = debug
13
15
  @runner = runner
14
16
  @retries = 0
15
17
  @runner_id = ENV.fetch("SELECTIVE_RUNNER_ID", generate_runner_id)
16
- @logger = Logger.new("log/#{runner_id}.log")
18
+ @logger = init_logger(log)
17
19
  end
18
20
 
19
21
  def start(reconnect: false)
@@ -52,6 +54,15 @@ module Selective
52
54
 
53
55
  BUILD_ENV_SCRIPT_PATH = "../../../bin/build_env.sh".freeze
54
56
 
57
+ def init_logger(enabled)
58
+ if enabled
59
+ FileUtils.mkdir_p("log")
60
+ Logger.new("log/#{runner_id}.log")
61
+ else
62
+ Logger.new("/dev/null")
63
+ end
64
+ end
65
+
55
66
  def run_main_loop
56
67
  loop do
57
68
  message = pipe.read
@@ -90,13 +101,15 @@ module Selective
90
101
  def transport_url
91
102
  @transport_url ||= begin
92
103
  api_key = ENV.fetch("SELECTIVE_API_KEY")
93
- run_id = ENV.fetch("SELECTIVE_RUN_ID")
94
- run_attempt = ENV.fetch("SELECTIVE_RUN_ATTEMPT", SecureRandom.uuid)
95
104
  host = ENV.fetch("SELECTIVE_HOST", "wss://app.selective.ci")
96
105
 
97
106
  # Validate that host is a valid websocket url(starts with ws:// or wss://)
98
107
  raise "Invalid host: #{host}" unless host.match?(/^wss?:\/\//)
99
108
 
109
+ run_id = build_env.delete("run_id")
110
+ run_attempt = build_env.delete("run_attempt")
111
+ run_attempt = SecureRandom.uuid if run_attempt.nil? || run_attempt.empty?
112
+
100
113
  params = {
101
114
  "run_id" => run_id,
102
115
  "run_attempt" => run_attempt,
@@ -111,8 +124,10 @@ module Selective
111
124
  end
112
125
 
113
126
  def build_env
114
- result = `#{Pathname.new(__dir__) + BUILD_ENV_SCRIPT_PATH}`
115
- JSON.parse(result)
127
+ @build_env ||= begin
128
+ result = `#{Pathname.new(__dir__) + BUILD_ENV_SCRIPT_PATH}`
129
+ JSON.parse(result)
130
+ end
116
131
  end
117
132
 
118
133
  def spawn_transport_process(url)
@@ -123,7 +138,6 @@ module Selective
123
138
  # The get_transport script is not released with the gem, so this
124
139
  # code is intended for development/CI purposes.
125
140
  if !File.exist?(transport_path) && File.exist?(get_transport_path)
126
- require "open3"
127
141
  output, status = Open3.capture2e(get_transport_path)
128
142
  if !status.success?
129
143
  puts <<~TEXT
@@ -175,8 +189,8 @@ module Selective
175
189
 
176
190
  def handle_command(response)
177
191
  case response[:command]
178
- when "init"
179
- print_init(response[:runner_id])
192
+ when "print_notice"
193
+ print_notice(response[:message])
180
194
  when "test_manifest"
181
195
  handle_test_manifest
182
196
  when "run_test_cases"
@@ -189,10 +203,11 @@ module Selective
189
203
  handle_print_message(response[:message])
190
204
  when "close"
191
205
  handle_close(response[:exit_status])
192
-
193
- # This is here for the sake of test where we
194
- # cannot exit but we need to break the loop
206
+ # This return is here for the sake of test where
207
+ # we cannot exit but we need to break the loop
195
208
  return false
209
+ else
210
+ raise "Unknown command received: #{response[:command]}" if debug?
196
211
  end
197
212
 
198
213
  true
@@ -207,10 +222,9 @@ module Selective
207
222
  def handle_test_manifest
208
223
  self.class.restore_reporting!
209
224
  @logger.info("Sending Response: test_manifest")
210
- write({type: "test_manifest", data: {
211
- test_cases: runner.manifest["examples"],
212
- modified_test_files: modified_test_files
213
- }})
225
+ data = {test_cases: runner.manifest["examples"]}
226
+ data[:modified_test_files] = modified_test_files unless modified_test_files.nil?
227
+ write({type: "test_manifest", data: data})
214
228
  end
215
229
 
216
230
  def handle_run_test_cases(test_cases)
@@ -227,9 +241,17 @@ module Selective
227
241
  end
228
242
 
229
243
  def modified_test_files
230
- # Todo: This should find files changed in the current branch
231
- `git diff --name-only`.split("\n").filter do |f|
232
- f.match?(/^#{runner.base_test_path}/)
244
+ @modified_test_files ||= begin
245
+ target_branch = build_env["target_branch"]
246
+ return [] if target_branch.nil? || target_branch.empty?
247
+
248
+ output, status = Open3.capture2e("git diff #{target_branch} --name-only")
249
+
250
+ if status.success?
251
+ output.split("\n").filter do |f|
252
+ f.match?(/^#{runner.base_test_path}/)
253
+ end
254
+ end
233
255
  end
234
256
  end
235
257
 
@@ -285,10 +307,10 @@ module Selective
285
307
  TEXT
286
308
  end
287
309
 
288
- def print_init(runner_id)
310
+ def print_notice(message)
289
311
  puts_indented <<~TEXT
290
312
  #{banner}
291
- Runner ID: #{runner_id.gsub("selgen-", "")}
313
+ #{message}
292
314
  TEXT
293
315
  end
294
316
 
@@ -3,7 +3,7 @@
3
3
  module Selective
4
4
  module Ruby
5
5
  module Core
6
- VERSION = "0.1.1"
6
+ VERSION = "0.1.3"
7
7
  end
8
8
  end
9
9
  end
@@ -24,6 +24,7 @@ module Selective
24
24
  class Init
25
25
  def initialize(args)
26
26
  @debug = !args.delete("--debug").nil?
27
+ @log = !args.delete("--log").nil?
27
28
  @runner_name, @args, @command = parse_args(args)
28
29
  require_runner
29
30
  end
@@ -34,10 +35,10 @@ module Selective
34
35
 
35
36
  private
36
37
 
37
- attr_reader :debug, :runner_name, :args, :command
38
+ attr_reader :debug, :log, :runner_name, :args, :command
38
39
 
39
40
  def run
40
- Selective::Ruby::Core::Controller.new(runner, debug).send(command)
41
+ Selective::Ruby::Core::Controller.new(runner, debug: debug, log: log).send(command)
41
42
  end
42
43
 
43
44
  def parse_args(args)
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.1
4
+ version: 0.1.3
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-03 00:00:00.000000000 Z
12
+ date: 2023-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: zeitwerk