turbo_tests2 3.2.15 → 3.2.16

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: b455a333f0fe9a3521173ff0e73b309b74baa6b37da905f5fcfa1a79a5eb075b
4
- data.tar.gz: 8a2f7d15910049b3b8366fd1ed6e604581a6c7444a6e95babdcb2f344e73b054
3
+ metadata.gz: 0ba760f9553f5ac9180f943b7b6ba4292f8e3ae332c2ee8f93d704fb6df39fd8
4
+ data.tar.gz: 308a01984a1da21ef5a1005cd5f333404b8132b6b8b12717f9fcf1e6b213421d
5
5
  SHA512:
6
- metadata.gz: 3cee9299d9a75a189a763621873df30959b68999972212f05f4ea81ba04200c66d9cbb56e2cc402947b58689881b16cdbc25ac9579205c473c4f359a2cab72ca
7
- data.tar.gz: 8ec3ac430a73305ae22bbc58c4ad9e82e0f04f41645853b8da4d50a24f868fe5a6611e5a222774a423df2db89e5176f4f69221ed32adcb85771fab482093b85b
6
+ metadata.gz: d15f6b3dc4601510f2fc2785b722b966fe543352a2408f084160e9b0d064fcf020cb234dbcc22b7c03baca495d1a7c87a13d41e24e74084a4bc43b6fe4aec5ac
7
+ data.tar.gz: be13e868955aacabb64993bab93050538def66c7c341406b082878d9f06d8c3098c701052f40c1e1a7c36eed026de5bc1c6930c7db42ab2e109a8240944c5d48
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,25 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.2.16] - 2026-10-14
34
+
35
+ - TAG: [v3.2.16][3.2.16t]
36
+ - COVERAGE: 95.94% -- 993/1035 lines in 11 files
37
+ - BRANCH COVERAGE: 83.86% -- 265/316 branches in 11 files
38
+ - 39.42% documented
39
+
40
+ ### Fixed
41
+
42
+ - Watchdog kills now actually end the run: kill_remaining_workers takes pids from the live wait_threads (the parallel_tests pid file was unreliable — each track/untrack built a fresh Pids instance, so any normal worker exit wiped the file and the watchdog killed nothing), handle_messages stops at the watchdog sentinel instead of waiting for per-worker exits that can never arrive, and post-kill joins are bounded so a wedged worker can no longer hold the run past the watchdog (observed: CI job printed the stall report, then hung 14 more minutes until cancellation)
43
+
44
+ ### Changed
45
+
46
+ - [kc] kettle-jem/template: updated 32 project files:
47
+ - code and tests (1)
48
+ - dependencies (3)
49
+ - other (1)
50
+ - workflows (27)
51
+
33
52
  ## [3.2.15] - 2026-10-13
34
53
 
35
54
  - TAG: [v3.2.15][3.2.15t]
@@ -742,7 +761,9 @@ Please file a bug if you notice a violation of semantic versioning.
742
761
 
743
762
  - Initial release
744
763
 
745
- [Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.15...HEAD
764
+ [Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.16...HEAD
765
+ [3.2.16]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.15...v3.2.16
766
+ [3.2.16t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.2.16
746
767
  [3.2.15]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.14...v3.2.15
747
768
  [3.2.15t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.2.15
748
769
  [3.2.14]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.13...v3.2.14
data/README.md CHANGED
@@ -859,7 +859,7 @@ Thanks for RTFM. ☺️
859
859
  [📌gitmoji]: https://gitmoji.dev
860
860
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
861
861
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
862
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.022-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
862
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.035-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
863
863
  [🔐security]: https://github.com/galtzo-floss/turbo_tests2/blob/main/SECURITY.md
864
864
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
865
865
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -318,24 +318,41 @@ module TurboTests
318
318
 
319
319
  handle_messages
320
320
 
321
- @threads.each(&:join)
321
+ if @watchdog_fired
322
+ # Workers were SIGKILLed by the watchdog; their reader threads end
323
+ # at EOF and waiters return as the OS reaps them — but if a kill
324
+ # failed (permissions, zombie, pid reuse) an unbounded join here
325
+ # would hang the run anyway, defeating the watchdog. Bound every
326
+ # join and treat any worker that still has not exited as failed.
327
+ @threads.each do |thread|
328
+ thread.join(FORCE_STOP_JOIN)
329
+ thread.kill if thread.alive?
330
+ end
331
+ @wait_threads.each do |wait_thr|
332
+ wait_thr.join(FORCE_STOP_JOIN)
333
+ end
334
+ flush_worker_output unless stream_worker_output?
335
+ exit_status = 1
336
+ else
337
+ @threads.each(&:join)
322
338
 
323
- report_workers_without_results
339
+ report_workers_without_results
324
340
 
325
- report_failed_group(tests_in_groups) if @print_failed_group
341
+ report_failed_group(tests_in_groups) if @print_failed_group
326
342
 
327
- Signal.trap(:INT, old_signal)
343
+ Signal.trap(:INT, old_signal)
328
344
 
329
- statuses = @wait_threads.map(&:value)
345
+ statuses = @wait_threads.map(&:value)
330
346
 
331
- if @reporter.failed_examples.empty? && statuses.all?(&:success?)
332
- flush_successful_worker_output
333
- report_coverage = true
334
- exit_status = 0
335
- else
336
- flush_worker_output unless stream_worker_output?
337
- # From https://github.com/galtzo-floss/turbo_tests2/pull/20/
338
- exit_status = statuses.map(&:exitstatus).max
347
+ if @reporter.failed_examples.empty? && statuses.all?(&:success?)
348
+ flush_successful_worker_output
349
+ report_coverage = true
350
+ exit_status = 0
351
+ else
352
+ flush_worker_output unless stream_worker_output?
353
+ # From https://github.com/galtzo-floss/turbo_tests2/pull/20/
354
+ exit_status = statuses.map(&:exitstatus).max
355
+ end
339
356
  end
340
357
  end
341
358
 
@@ -759,6 +776,11 @@ module TurboTests
759
776
  "turbo_tests2: watchdog fired after #{@watchdog_seconds}s without worker messages; workers killed\n#{stall_report}"
760
777
  )
761
778
  @error = true
779
+ # The run is over: workers were just SIGKILLed. handle_messages must
780
+ # not keep waiting for per-worker exit messages that can never
781
+ # arrive, and the caller must not re-enter this watchdog (which would
782
+ # warn-and-kill in a 1-second spin).
783
+ @watchdog_fired = true
762
784
  return {type: "exit", process_id: :watchdog}
763
785
  end
764
786
  end
@@ -792,7 +814,19 @@ module TurboTests
792
814
  end
793
815
 
794
816
  def kill_remaining_workers
795
- tracked_pids.each do |pid|
817
+ # The live waiter objects are authoritative: the parallel_tests pid file
818
+ # loses entries because every track/untrack call builds a fresh Pids
819
+ # instance whose in-memory list starts empty, so a save overwrites (or,
820
+ # for untrack, empties) the file. After any normal worker exit the file
821
+ # is guaranteed useless — exactly when the watchdog needs it most.
822
+ pids = (@wait_threads || []).map do |wait_thr|
823
+ begin
824
+ wait_thr.pid
825
+ rescue
826
+ nil
827
+ end
828
+ end.compact
829
+ (pids | tracked_pids).each do |pid|
796
830
  begin
797
831
  Process.kill("KILL", pid)
798
832
  rescue
@@ -870,6 +904,10 @@ module TurboTests
870
904
  nil
871
905
  when "exit"
872
906
  process_id = message[:process_id]
907
+ # Watchdog exit: workers were just SIGKILLed and no further per-worker
908
+ # exit messages can be relied upon — stop the loop immediately
909
+ # instead of waiting for process_count exits that never arrive.
910
+ break if process_id == :watchdog
873
911
  next if exited_process_ids.key?(process_id)
874
912
 
875
913
  exited_process_ids[process_id] = true
@@ -4,7 +4,7 @@ module TurboTests
4
4
  # Version namespace for this gem.
5
5
  module Version
6
6
  # Current gem version.
7
- VERSION = "3.2.15"
7
+ VERSION = "3.2.16"
8
8
  end
9
9
  # Current gem version exposed at the traditional constant location.
10
10
  VERSION = Version::VERSION # Traditional Constant Location
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.2.15
4
+ version: 3.2.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Illia
@@ -111,7 +111,7 @@ dependencies:
111
111
  version: '3.1'
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
- version: 3.1.11
114
+ version: 3.1.12
115
115
  type: :development
116
116
  prerelease: false
117
117
  version_requirements: !ruby/object:Gem::Requirement
@@ -121,7 +121,7 @@ dependencies:
121
121
  version: '3.1'
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 3.1.11
124
+ version: 3.1.12
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bundler-audit
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -219,7 +219,7 @@ dependencies:
219
219
  version: '2.0'
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
- version: 2.0.24
222
+ version: 2.0.25
223
223
  type: :development
224
224
  prerelease: false
225
225
  version_requirements: !ruby/object:Gem::Requirement
@@ -229,7 +229,7 @@ dependencies:
229
229
  version: '2.0'
230
230
  - - ">="
231
231
  - !ruby/object:Gem::Version
232
- version: 2.0.24
232
+ version: 2.0.25
233
233
  - !ruby/object:Gem::Dependency
234
234
  name: ruby-progressbar
235
235
  requirement: !ruby/object:Gem::Requirement
@@ -316,10 +316,10 @@ licenses:
316
316
  - MIT
317
317
  metadata:
318
318
  homepage_uri: https://turbo-tests2.galtzo.com
319
- source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.2.15
320
- changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.2.15/CHANGELOG.md
319
+ source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.2.16
320
+ changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.2.16/CHANGELOG.md
321
321
  bug_tracker_uri: https://github.com/galtzo-floss/turbo_tests2/issues
322
- documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.2.15
322
+ documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.2.16
323
323
  funding_uri: https://github.com/sponsors/pboling
324
324
  wiki_uri: https://github.com/galtzo-floss/turbo_tests2/wiki
325
325
  news_uri: https://www.railsbling.com/tags/turbo_tests2
metadata.gz.sig CHANGED
Binary file