turbo_tests2 3.1.2 → 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 +33 -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 +16 -18
- 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,34 @@ 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
|
+
|
|
50
|
+
## [3.1.3] - 2026-06-14
|
|
51
|
+
|
|
52
|
+
- TAG: [v3.1.3][3.1.3t]
|
|
53
|
+
- COVERAGE: 94.62% -- 651/688 lines in 16 files
|
|
54
|
+
- BRANCH COVERAGE: 79.33% -- 119/150 branches in 16 files
|
|
55
|
+
- 37.08% documented
|
|
56
|
+
|
|
57
|
+
### Fixed
|
|
58
|
+
|
|
59
|
+
- Restored `docs/CNAME` so the generated documentation site keeps its custom domain.
|
|
60
|
+
|
|
33
61
|
## [3.1.2] - 2026-06-08
|
|
34
62
|
|
|
35
63
|
- TAG: [v3.1.2][3.1.2t]
|
|
@@ -126,7 +154,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
126
154
|
|
|
127
155
|
- Initial release
|
|
128
156
|
|
|
129
|
-
[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
|
|
160
|
+
[3.1.3]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.2...v3.1.3
|
|
161
|
+
[3.1.3t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.1.3
|
|
130
162
|
[3.1.2]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.1...v3.1.2
|
|
131
163
|
[3.1.2t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.1.2
|
|
132
164
|
[3.1.1]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.0...v3.1.1
|
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
|
|
@@ -10,10 +10,8 @@ authors:
|
|
|
10
10
|
- Serge Bedzhyk
|
|
11
11
|
- Bo Anderson
|
|
12
12
|
- Dmitiry Zub☀️
|
|
13
|
-
- Illia
|
|
14
13
|
- mrudzki
|
|
15
14
|
- Sebastien Savater
|
|
16
|
-
- David Rodriguez
|
|
17
15
|
- Hiroshi SHIBATA
|
|
18
16
|
- Gareth Jones
|
|
19
17
|
- Peter H. Boling
|
|
@@ -92,7 +90,7 @@ dependencies:
|
|
|
92
90
|
version: '1.1'
|
|
93
91
|
- - ">="
|
|
94
92
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: 1.1.
|
|
93
|
+
version: 1.1.12
|
|
96
94
|
type: :runtime
|
|
97
95
|
prerelease: false
|
|
98
96
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -102,27 +100,27 @@ dependencies:
|
|
|
102
100
|
version: '1.1'
|
|
103
101
|
- - ">="
|
|
104
102
|
- !ruby/object:Gem::Version
|
|
105
|
-
version: 1.1.
|
|
103
|
+
version: 1.1.12
|
|
106
104
|
- !ruby/object:Gem::Dependency
|
|
107
105
|
name: kettle-dev
|
|
108
106
|
requirement: !ruby/object:Gem::Requirement
|
|
109
107
|
requirements:
|
|
110
108
|
- - "~>"
|
|
111
109
|
- !ruby/object:Gem::Version
|
|
112
|
-
version: '2.
|
|
110
|
+
version: '2.2'
|
|
113
111
|
- - ">="
|
|
114
112
|
- !ruby/object:Gem::Version
|
|
115
|
-
version: 2.
|
|
113
|
+
version: 2.2.10
|
|
116
114
|
type: :development
|
|
117
115
|
prerelease: false
|
|
118
116
|
version_requirements: !ruby/object:Gem::Requirement
|
|
119
117
|
requirements:
|
|
120
118
|
- - "~>"
|
|
121
119
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: '2.
|
|
120
|
+
version: '2.2'
|
|
123
121
|
- - ">="
|
|
124
122
|
- !ruby/object:Gem::Version
|
|
125
|
-
version: 2.
|
|
123
|
+
version: 2.2.10
|
|
126
124
|
- !ruby/object:Gem::Dependency
|
|
127
125
|
name: bundler-audit
|
|
128
126
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -180,7 +178,7 @@ dependencies:
|
|
|
180
178
|
version: '3.1'
|
|
181
179
|
- - ">="
|
|
182
180
|
- !ruby/object:Gem::Version
|
|
183
|
-
version: 3.1.
|
|
181
|
+
version: 3.1.2
|
|
184
182
|
type: :development
|
|
185
183
|
prerelease: false
|
|
186
184
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -190,7 +188,7 @@ dependencies:
|
|
|
190
188
|
version: '3.1'
|
|
191
189
|
- - ">="
|
|
192
190
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: 3.1.
|
|
191
|
+
version: 3.1.2
|
|
194
192
|
- !ruby/object:Gem::Dependency
|
|
195
193
|
name: kettle-test
|
|
196
194
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -200,7 +198,7 @@ dependencies:
|
|
|
200
198
|
version: '2.0'
|
|
201
199
|
- - ">="
|
|
202
200
|
- !ruby/object:Gem::Version
|
|
203
|
-
version: 2.0.
|
|
201
|
+
version: 2.0.5
|
|
204
202
|
type: :development
|
|
205
203
|
prerelease: false
|
|
206
204
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -210,7 +208,7 @@ dependencies:
|
|
|
210
208
|
version: '2.0'
|
|
211
209
|
- - ">="
|
|
212
210
|
- !ruby/object:Gem::Version
|
|
213
|
-
version: 2.0.
|
|
211
|
+
version: 2.0.5
|
|
214
212
|
- !ruby/object:Gem::Dependency
|
|
215
213
|
name: ruby-progressbar
|
|
216
214
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -254,7 +252,7 @@ dependencies:
|
|
|
254
252
|
version: '2.0'
|
|
255
253
|
- - ">="
|
|
256
254
|
- !ruby/object:Gem::Version
|
|
257
|
-
version: 2.0.
|
|
255
|
+
version: 2.0.2
|
|
258
256
|
type: :development
|
|
259
257
|
prerelease: false
|
|
260
258
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -264,7 +262,7 @@ dependencies:
|
|
|
264
262
|
version: '2.0'
|
|
265
263
|
- - ">="
|
|
266
264
|
- !ruby/object:Gem::Version
|
|
267
|
-
version: 2.0.
|
|
265
|
+
version: 2.0.2
|
|
268
266
|
description: "\U0001F680 turbo_tests2` is a drop-in replacement for `serpapi/turbo_tests`
|
|
269
267
|
and `grosser/parallel_tests` with incremental summarized output. Source code of
|
|
270
268
|
`turbo_test2` gem is based on Discourse and Rubygems work in this area (see README.md)."
|
|
@@ -311,10 +309,10 @@ licenses:
|
|
|
311
309
|
- MIT
|
|
312
310
|
metadata:
|
|
313
311
|
homepage_uri: https://turbo-tests2.galtzo.com
|
|
314
|
-
source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.1.
|
|
315
|
-
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
|
|
316
314
|
bug_tracker_uri: https://github.com/galtzo-floss/turbo_tests2/issues
|
|
317
|
-
documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.1.
|
|
315
|
+
documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.1.4
|
|
318
316
|
funding_uri: https://github.com/sponsors/pboling
|
|
319
317
|
wiki_uri: https://github.com/galtzo-floss/turbo_tests2/wiki
|
|
320
318
|
news_uri: https://www.railsbling.com/tags/turbo_tests2
|
metadata.gz.sig
CHANGED
|
Binary file
|