turbo_tests2 3.1.3 → 3.1.4

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: cfd673d6ae8cb509b581990ab4fc6290d4108c5e3af0cf8a6e9fffe90cd373dc
4
- data.tar.gz: d145b26cd8c021afcb4a3bc7c9f4f94d6885ccdd4e8d8da500f7cb9855ba461a
3
+ metadata.gz: 625c5608d1ad3efd6e246de858b37368f126d0e9235684b7f39bf09e53773038
4
+ data.tar.gz: 85d87719d2f6e86a2bb0a44c5c7eeee66dcc859374b10653ae4991b99fff1c00
5
5
  SHA512:
6
- metadata.gz: a21f56a935b9189674f79fd83c6acb4426c96c44d9616090dc6b6ebac6d7e020745991e8ba7853e006b3e7005cde2469be0cefc784c6519e338bf9c433a06e08
7
- data.tar.gz: c94630c64ff389d5e8f1b6ec8ecd2a1d86307581e4bd740d6847449719142dde4557ad601a381d6338ac30a1a6a9d8dd29c0da14cc556ab6814fb86b2246f5b5
6
+ metadata.gz: 706929b3f66fa575187f9a8b087ced4ef15bb1772caf4506e0c263de558637f382e32943690ef5eae15bcba363ea4c7ab5c60013074e4b5390c130a5b24532bf
7
+ data.tar.gz: a5a332a48caf1e97183b45a6b3c48aa44a17c8dcf5a6a85f855a8757e46ba9d210fcd936e03f6c29bfe3787a37218d0ec77267ae4706e47f25c409e357a1baf5
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,23 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.1.4] - 2026-06-17
34
+
35
+ - TAG: [v3.1.4][3.1.4t]
36
+ - COVERAGE: 94.33% -- 666/706 lines in 16 files
37
+ - BRANCH COVERAGE: 79.11% -- 125/158 branches in 16 files
38
+ - 37.08% documented
39
+
40
+ ### Fixed
41
+
42
+ - Prevented parallel test runs from hanging when a worker process exits but its
43
+ stdout or stderr pipe remains open, a failure mode observed on JRuby
44
+ current/head jobs.
45
+
46
+ - Ensured worker stdout/stderr reader threads are force-stopped after worker
47
+ process exit if an engine keeps them blocked after pipe closure, fixing
48
+ TruffleRuby 25.0 CI failures in the worker pipe cleanup regression spec.
49
+
33
50
  ## [3.1.3] - 2026-06-14
34
51
 
35
52
  - TAG: [v3.1.3][3.1.3t]
@@ -137,7 +154,9 @@ Please file a bug if you notice a violation of semantic versioning.
137
154
 
138
155
  - Initial release
139
156
 
140
- [Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.3...HEAD
157
+ [Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.4...HEAD
158
+ [3.1.4]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.3...v3.1.4
159
+ [3.1.4t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.1.4
141
160
  [3.1.3]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.2...v3.1.3
142
161
  [3.1.3t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.1.3
143
162
  [3.1.2]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.1...v3.1.2
data/CONTRIBUTING.md CHANGED
@@ -109,14 +109,14 @@ Git diff driver setup
109
109
  - Git hosting forges generally ignore external diff drivers, so pull request views may still show raw textual diffs even when local `git diff` uses semantic drivers.
110
110
 
111
111
  ```console
112
- K_JEM_TEMPLATING=true bundle exec kettle-jem install
112
+ K_JEM_TEMPLATING=true kettle-jem install
113
113
  ```
114
114
 
115
115
  Troubleshooting Git diffs
116
116
  - Use `git diff --no-ext-diff` to compare against Git's built-in diff output.
117
117
  - Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect.
118
118
  - If Git reports a missing `smorg-*` executable, rerun `bundle install` and the setup command above, then check `git config --local --get-regexp '^diff\.smorg-'`.
119
- - To remove managed local entries, run `K_JEM_TEMPLATING=true bundle exec kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
119
+ - To remove managed local entries, run `K_JEM_TEMPLATING=true kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
120
120
 
121
121
  For a quick starting point, this repository’s `mise.toml` defines the shared defaults, and `.env.local` can override them locally. Copy `.env.local.example` to `.env.local`, use `KEY=value` lines, and either activate `mise` in your shell or run commands through `mise exec -C /path/to/project -- ...`.
122
122
 
data/LICENSE.md CHANGED
@@ -16,7 +16,6 @@ Choose the option that best fits your use case:
16
16
  - Copyright (c) 2023-2024 Illia
17
17
  - Copyright (c) 2023 mrudzki
18
18
  - Copyright (c) 2023-2024 Sebastien Savater
19
- - Copyright (c) 2024 David Rodriguez
20
19
  - Copyright (c) 2024 Hiroshi SHIBATA
21
20
  - Copyright (c) 2025-2026 Gareth Jones
22
21
  - Copyright (c) 2025-2026 Peter H. Boling
data/README.md CHANGED
@@ -436,7 +436,6 @@ See [LICENSE.md][📄license] for the official copyright notice.
436
436
  - Copyright (c) 2023-2024 Illia
437
437
  - Copyright (c) 2023 mrudzki
438
438
  - Copyright (c) 2023-2024 Sebastien Savater
439
- - Copyright (c) 2024 David Rodriguez
440
439
  - Copyright (c) 2024 Hiroshi SHIBATA
441
440
  - Copyright (c) 2025-2026 Gareth Jones
442
441
  - Copyright (c) 2025-2026 Peter H. Boling
@@ -652,7 +651,7 @@ Thanks for RTFM. ☺️
652
651
  [📌gitmoji]: https://gitmoji.dev
653
652
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
654
653
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
655
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.688-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
654
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.700-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
656
655
  [🔐security]: https://github.com/galtzo-floss/turbo_tests2/blob/main/SECURITY.md
657
656
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
658
657
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -660,7 +659,7 @@ Thanks for RTFM. ☺️
660
659
  [📄license-ref]: MIT.md
661
660
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
662
661
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
663
- [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-✓-259D6C.svg?style=flat&logo=Apache
662
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
664
663
 
665
664
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
666
665
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
@@ -680,7 +679,7 @@ Thanks for RTFM. ☺️
680
679
  | Package | turbo_tests2 |
681
680
  | Description | 🚀 turbo_tests2` is a drop-in replacement for `serpapi/turbo_tests` and `grosser/parallel_tests` with incremental summarized output. Source code of `turbo_test2` gem is based on Discourse and Rubygems work in this area (see README.md). |
682
681
  | Homepage | https://github.com/galtzo-floss/turbo_tests2 |
683
- | Source | https://github.com/galtzo-floss/turbo_tests2/tree/v3.1.3 |
682
+ | Source | https://github.com/galtzo-floss/turbo_tests2 |
684
683
  | License | `MIT` |
685
684
  | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/galtzo-floss, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/turbo_tests2, https://www.buymeacoffee.com/pboling |
686
685
  <!-- kettle-jem:metadata:end -->
@@ -294,35 +294,44 @@ module TurboTests
294
294
  stdin.close
295
295
 
296
296
  # rubocop:disable ThreadSafety/NewThread
297
- @threads <<
297
+ stdout_thread =
298
298
  Thread.new do
299
- stdout.each_line do |line|
300
- result = line.split(env["RSPEC_FORMATTER_OUTPUT_ID"])
299
+ begin
300
+ stdout.each_line do |line|
301
+ result = line.split(env["RSPEC_FORMATTER_OUTPUT_ID"])
301
302
 
302
- initial = result.shift
303
- print(initial) unless initial.empty?
303
+ initial = result.shift
304
+ print(initial) unless initial.empty?
304
305
 
305
- message = result.shift
306
- next unless message
306
+ message = result.shift
307
+ next unless message
307
308
 
308
- message = JSON.parse(message, symbolize_names: true)
309
+ message = JSON.parse(message, symbolize_names: true)
309
310
 
310
- message[:process_id] = process_id
311
- @messages << message
311
+ message[:process_id] = process_id
312
+ @messages << message
313
+ end
314
+ rescue IOError
315
+ nil
312
316
  end
313
317
 
314
318
  @messages << {type: "exit", process_id: process_id}
315
319
  end
316
320
  # rubocop:enable ThreadSafety/NewThread
321
+ @threads << stdout_thread
317
322
 
318
- @threads << start_copy_thread(stderr, $stderr)
323
+ stderr_thread = start_copy_thread(stderr, $stderr)
324
+ @threads << stderr_thread
319
325
 
320
326
  # rubocop:disable ThreadSafety/NewThread
321
327
  @threads << Thread.new do
322
328
  begin
323
329
  status = wait_thr.value
324
330
  @messages << {type: "error"} unless status.success?
331
+ @messages << {type: "exit", process_id: process_id}
325
332
  ensure
333
+ stop_reader_thread(stdout_thread, stdout)
334
+ stop_reader_thread(stderr_thread, stderr)
326
335
  untrack_parallel_pid(wait_thr.pid, pid_file_path)
327
336
  end
328
337
  end
@@ -352,7 +361,9 @@ module TurboTests
352
361
  begin
353
362
  msg = src.readpartial(4096)
354
363
  rescue EOFError
355
- src.close
364
+ close_io(src)
365
+ break
366
+ rescue IOError
356
367
  break
357
368
  else
358
369
  dst.write(msg)
@@ -361,8 +372,18 @@ module TurboTests
361
372
  end
362
373
  end
363
374
 
375
+ def stop_reader_thread(thread, io)
376
+ return if thread.join(0.1)
377
+
378
+ close_io(io)
379
+ return if thread.join(0.1)
380
+
381
+ thread.kill
382
+ thread.join(0.1)
383
+ end
384
+
364
385
  def handle_messages
365
- exited = 0
386
+ exited_process_ids = {}
366
387
 
367
388
  loop do
368
389
  message = @messages.pop
@@ -406,9 +427,12 @@ module TurboTests
406
427
  # Do nothing
407
428
  nil
408
429
  when "exit"
409
- exited += 1
410
- @exited_process_ids << message[:process_id]
411
- break if exited == @num_processes
430
+ process_id = message[:process_id]
431
+ next if exited_process_ids.key?(process_id)
432
+
433
+ exited_process_ids[process_id] = true
434
+ @exited_process_ids << process_id
435
+ break if exited_process_ids.size == @num_processes
412
436
  else
413
437
  warn("Unhandled message in main process: #{message}")
414
438
  end
@@ -418,6 +442,12 @@ module TurboTests
418
442
  rescue Interrupt
419
443
  end
420
444
 
445
+ def close_io(io)
446
+ io.close unless io.closed?
447
+ rescue IOError
448
+ nil
449
+ end
450
+
421
451
  def fail_fast_met
422
452
  !@fail_fast.nil? && @failure_count >= @fail_fast
423
453
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module TurboTests
4
4
  module Version
5
- VERSION = "3.1.3"
5
+ VERSION = "3.1.4"
6
6
  end
7
7
  VERSION = Version::VERSION # Traditional Constant Location
8
8
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbo_tests2
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.3
4
+ version: 3.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Illia
@@ -12,7 +12,6 @@ authors:
12
12
  - Dmitiry Zub☀️
13
13
  - mrudzki
14
14
  - Sebastien Savater
15
- - David Rodriguez
16
15
  - Hiroshi SHIBATA
17
16
  - Gareth Jones
18
17
  - Peter H. Boling
@@ -91,7 +90,7 @@ dependencies:
91
90
  version: '1.1'
92
91
  - - ">="
93
92
  - !ruby/object:Gem::Version
94
- version: 1.1.11
93
+ version: 1.1.12
95
94
  type: :runtime
96
95
  prerelease: false
97
96
  version_requirements: !ruby/object:Gem::Requirement
@@ -101,7 +100,7 @@ dependencies:
101
100
  version: '1.1'
102
101
  - - ">="
103
102
  - !ruby/object:Gem::Version
104
- version: 1.1.11
103
+ version: 1.1.12
105
104
  - !ruby/object:Gem::Dependency
106
105
  name: kettle-dev
107
106
  requirement: !ruby/object:Gem::Requirement
@@ -111,7 +110,7 @@ dependencies:
111
110
  version: '2.2'
112
111
  - - ">="
113
112
  - !ruby/object:Gem::Version
114
- version: 2.2.8
113
+ version: 2.2.10
115
114
  type: :development
116
115
  prerelease: false
117
116
  version_requirements: !ruby/object:Gem::Requirement
@@ -121,7 +120,7 @@ dependencies:
121
120
  version: '2.2'
122
121
  - - ">="
123
122
  - !ruby/object:Gem::Version
124
- version: 2.2.8
123
+ version: 2.2.10
125
124
  - !ruby/object:Gem::Dependency
126
125
  name: bundler-audit
127
126
  requirement: !ruby/object:Gem::Requirement
@@ -253,7 +252,7 @@ dependencies:
253
252
  version: '2.0'
254
253
  - - ">="
255
254
  - !ruby/object:Gem::Version
256
- version: 2.0.1
255
+ version: 2.0.2
257
256
  type: :development
258
257
  prerelease: false
259
258
  version_requirements: !ruby/object:Gem::Requirement
@@ -263,7 +262,7 @@ dependencies:
263
262
  version: '2.0'
264
263
  - - ">="
265
264
  - !ruby/object:Gem::Version
266
- version: 2.0.1
265
+ version: 2.0.2
267
266
  description: "\U0001F680 turbo_tests2` is a drop-in replacement for `serpapi/turbo_tests`
268
267
  and `grosser/parallel_tests` with incremental summarized output. Source code of
269
268
  `turbo_test2` gem is based on Discourse and Rubygems work in this area (see README.md)."
@@ -310,10 +309,10 @@ licenses:
310
309
  - MIT
311
310
  metadata:
312
311
  homepage_uri: https://turbo-tests2.galtzo.com
313
- source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.1.3
314
- changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.1.3/CHANGELOG.md
312
+ source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.1.4
313
+ changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.1.4/CHANGELOG.md
315
314
  bug_tracker_uri: https://github.com/galtzo-floss/turbo_tests2/issues
316
- documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.1.3
315
+ documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.1.4
317
316
  funding_uri: https://github.com/sponsors/pboling
318
317
  wiki_uri: https://github.com/galtzo-floss/turbo_tests2/wiki
319
318
  news_uri: https://www.railsbling.com/tags/turbo_tests2
metadata.gz.sig CHANGED
Binary file