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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -1
- data/CONTRIBUTING.md +2 -2
- data/LICENSE.md +0 -1
- data/README.md +3 -4
- data/lib/turbo_tests/runner.rb +46 -16
- data/lib/turbo_tests/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +10 -11
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 625c5608d1ad3efd6e246de858b37368f126d0e9235684b7f39bf09e53773038
|
|
4
|
+
data.tar.gz: 85d87719d2f6e86a2bb0a44c5c7eeee66dcc859374b10653ae4991b99fff1c00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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 -->
|
data/lib/turbo_tests/runner.rb
CHANGED
|
@@ -294,35 +294,44 @@ module TurboTests
|
|
|
294
294
|
stdin.close
|
|
295
295
|
|
|
296
296
|
# rubocop:disable ThreadSafety/NewThread
|
|
297
|
-
|
|
297
|
+
stdout_thread =
|
|
298
298
|
Thread.new do
|
|
299
|
-
|
|
300
|
-
|
|
299
|
+
begin
|
|
300
|
+
stdout.each_line do |line|
|
|
301
|
+
result = line.split(env["RSPEC_FORMATTER_OUTPUT_ID"])
|
|
301
302
|
|
|
302
|
-
|
|
303
|
-
|
|
303
|
+
initial = result.shift
|
|
304
|
+
print(initial) unless initial.empty?
|
|
304
305
|
|
|
305
|
-
|
|
306
|
-
|
|
306
|
+
message = result.shift
|
|
307
|
+
next unless message
|
|
307
308
|
|
|
308
|
-
|
|
309
|
+
message = JSON.parse(message, symbolize_names: true)
|
|
309
310
|
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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
|
data/lib/turbo_tests/version.rb
CHANGED
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
314
|
-
changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.1.
|
|
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.
|
|
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
|