turbo_tests2 3.2.2 → 3.2.3
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 +36 -1
- data/README.md +8 -7
- data/lib/turbo_tests/runner.rb +32 -13
- data/lib/turbo_tests/version.rb +4 -1
- data.tar.gz.sig +0 -0
- metadata +4 -4
- 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: 2af1fec1f172642796e8d50a8debcf093fe47adc8631fc38d87f21594208695c
|
|
4
|
+
data.tar.gz: 9c37a6eb91300dd299ccfb54aefe2363ddb53fa679b6114371b8dd84a2bdbbc8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 91c905b362cec739c3e5294abba63cb23226131c2b1763ae57df9197961c5d8d802800931b012a164b194b5a46bd30fa0fece33c2003b1751319bc93dd345472
|
|
7
|
+
data.tar.gz: a781315b43d20f6e482094ce4672fcf29dba858625a6006e63d146e3e4831d168831ad74f2ba3ea93a668e295490bb8e27baaadb0793c5747cb4c1a0a2f97918
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,39 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [3.2.3] - 2026-07-26
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.2.3][3.2.3t]
|
|
36
|
+
- COVERAGE: 96.81% -- 880/909 lines in 10 files
|
|
37
|
+
- BRANCH COVERAGE: 85.17% -- 224/263 branches in 10 files
|
|
38
|
+
- 36.73% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Documentation linting now has its generated `yard-lint` dependency and severity config available in the local bundle.
|
|
43
|
+
|
|
44
|
+
- kettle-jem-template-20260726-001 - Projects now include YARD lint
|
|
45
|
+
configuration and documentation dependencies so documentation issues fail
|
|
46
|
+
before generated docs are refreshed.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- Worker stdout that happens to contain `RSPEC_FORMATTER_OUTPUT_ID` is now kept
|
|
51
|
+
as ordinary output instead of being parsed as an internal formatter message.
|
|
52
|
+
- kettle-jem-template-20260726-002 - Generated version files now document their
|
|
53
|
+
version namespace and constants, reducing warning-only YARD lint output.
|
|
54
|
+
|
|
55
|
+
- kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
|
|
56
|
+
QLTY, and Codecov as optional, so provider outages do not fail CI when local
|
|
57
|
+
coverage thresholds still pass.
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- README guidance now distinguishes the `TurboTests` namespace from the
|
|
62
|
+
published `turbo_tests2` gem and executable names, and its Rake/SimpleCov
|
|
63
|
+
examples now use `turbo_tests2` task filenames while keeping SimpleCov's
|
|
64
|
+
default `coverage/` base directory.
|
|
65
|
+
|
|
33
66
|
## [3.2.2] - 2026-07-25
|
|
34
67
|
|
|
35
68
|
- TAG: [v3.2.2][3.2.2t]
|
|
@@ -415,7 +448,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
415
448
|
|
|
416
449
|
- Initial release
|
|
417
450
|
|
|
418
|
-
[Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.
|
|
451
|
+
[Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.3...HEAD
|
|
452
|
+
[3.2.3]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.2...v3.2.3
|
|
453
|
+
[3.2.3t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.2.3
|
|
419
454
|
[3.2.2]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.1...v3.2.2
|
|
420
455
|
[3.2.2t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.2.2
|
|
421
456
|
[3.2.1]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.0...v3.2.1
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<a href="https://github.com/galtzo-floss/turbo_tests2"><img alt="turbo_tests2 Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/turbo_tests2/avatar-128px.svg" width="20%" align="right"/></a>
|
|
2
2
|
|
|
3
|
-
# 🚀 TurboTests
|
|
3
|
+
# 🚀 TurboTests née TurboTests2
|
|
4
4
|
|
|
5
5
|
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
|
|
6
6
|
|
|
@@ -26,6 +26,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
26
26
|
| I ([@pboling](https://github.com/pboling)) discussed merging this project back into the original `turbo_tests` with [@ilyazub](https://github.com/ilyazub), and we might move in that direction, but it will take time. Since I need this now I'm releasing it as a separate gem/project. We'll be discussing potentially unifying the projects again soon. |
|
|
27
27
|
|
|
28
28
|
`turbo_tests2` is an RSpec parallel test runner built on [grosser/parallel_tests](https://github.com/grosser/parallel_tests). It uses `parallel_tests` for process counts, file grouping, and runtime balancing, then replaces interleaved worker output with incremental summarized RSpec reporting. Source code of this gem is based on [Discourse](https://github.com/discourse/discourse/blob/6b9784cf8a18636bce281a7e4d18e65a0cbc6290/lib/turbo_tests.rb) and [RubyGems](https://github.com/rubygems/rubygems/tree/390335ceb351668cd433bd5bb9823dd021f82533/bundler/tool) work in this area.
|
|
29
|
+
The project namespace remains `TurboTests`; the published gem and executable are `turbo_tests2`.
|
|
29
30
|
|
|
30
31
|
Incremental summarized output doesn't [fit the vision](https://github.com/grosser/parallel_tests/issues/708) of the `parallel_tests` author, and [RSpec doesn't support built-in parallel testing yet](https://github.com/rspec/rspec-rails/issues/2104#issuecomment-658474900). This gem targets RSpec, not every framework supported by `parallel_tests`, and may not be useful once one of the issues above is implemented.
|
|
31
32
|
|
|
@@ -336,7 +337,7 @@ If Rake is present, the CLI will invoke the tasks `turbo_tests2:setup` and `turb
|
|
|
336
337
|
the test suite. These can be used to do work that should only happen once, such as removing files or collating coverage:
|
|
337
338
|
|
|
338
339
|
```ruby
|
|
339
|
-
# lib/tasks/
|
|
340
|
+
# lib/tasks/turbo_tests2.rake
|
|
340
341
|
namespace :turbo_tests2 do
|
|
341
342
|
task setup: :environment do
|
|
342
343
|
# precompile assets once, to avoid doing it per each process
|
|
@@ -366,7 +367,7 @@ require "simplecov"
|
|
|
366
367
|
SimpleCov.start("rails") do
|
|
367
368
|
enable_coverage :branch
|
|
368
369
|
|
|
369
|
-
coverage_dir "coverage
|
|
370
|
+
coverage_dir "coverage/#{ENV["TEST_ENV_NUMBER"]}"
|
|
370
371
|
|
|
371
372
|
formatter SimpleCov::Formatter::SimpleFormatter
|
|
372
373
|
end
|
|
@@ -375,14 +376,14 @@ end
|
|
|
375
376
|
namespace :turbo_tests2 do
|
|
376
377
|
task setup: :environment do
|
|
377
378
|
# remove any existing coverage files to avoid false reporting
|
|
378
|
-
FileUtils.rm_rf("coverage
|
|
379
|
+
FileUtils.rm_rf("coverage")
|
|
379
380
|
end
|
|
380
381
|
|
|
381
382
|
task cleanup: :environment do
|
|
382
383
|
require "simplecov"
|
|
383
384
|
|
|
384
385
|
# report coverage usage based on the results of all tests
|
|
385
|
-
SimpleCov.collate(Dir["coverage
|
|
386
|
+
SimpleCov.collate(Dir["coverage/*/.resultset.json"]) do
|
|
386
387
|
enable_coverage :branch
|
|
387
388
|
|
|
388
389
|
minimum_coverage line: 100, branch: 100
|
|
@@ -769,7 +770,7 @@ Thanks for RTFM. ☺️
|
|
|
769
770
|
[📌gitmoji]: https://gitmoji.dev
|
|
770
771
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
771
772
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
772
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
773
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.909-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
773
774
|
[🔐security]: https://github.com/galtzo-floss/turbo_tests2/blob/main/SECURITY.md
|
|
774
775
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
775
776
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -795,7 +796,7 @@ Thanks for RTFM. ☺️
|
|
|
795
796
|
| Field | Value |
|
|
796
797
|
|---|---|
|
|
797
798
|
| Package | turbo_tests2 |
|
|
798
|
-
| Description | 🚀 turbo_tests2` is an RSpec parallel test runner built on `parallel_tests`. It uses `parallel_tests` for process counts, file grouping, and runtime balancing, then replaces interleaved worker output with incremental summarized RSpec reporting. Source code of `
|
|
799
|
+
| Description | 🚀 `turbo_tests2` is an RSpec parallel test runner built on `parallel_tests`. It uses `parallel_tests` for process counts, file grouping, and runtime balancing, then replaces interleaved worker output with incremental summarized RSpec reporting. Source code of the `turbo_tests2` gem is based on Discourse and RubyGems work in this area (see README.md). |
|
|
799
800
|
| Homepage | https://github.com/galtzo-floss/turbo_tests2 |
|
|
800
801
|
| Source | https://github.com/galtzo-floss/turbo_tests2 |
|
|
801
802
|
| License | `MIT` |
|
data/lib/turbo_tests/runner.rb
CHANGED
|
@@ -434,19 +434,7 @@ module TurboTests
|
|
|
434
434
|
begin
|
|
435
435
|
output_id = env["RSPEC_FORMATTER_OUTPUT_ID"].b
|
|
436
436
|
stdout.each_line do |line|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
initial = result.shift
|
|
440
|
-
append_worker_output(process_id, :stdout, initial) unless initial.empty?
|
|
441
|
-
|
|
442
|
-
message = result.shift
|
|
443
|
-
next unless message
|
|
444
|
-
|
|
445
|
-
message = message.dup.force_encoding(Encoding::UTF_8).scrub
|
|
446
|
-
message = JSON.parse(message, symbolize_names: true)
|
|
447
|
-
|
|
448
|
-
message[:process_id] = process_id
|
|
449
|
-
@messages << message
|
|
437
|
+
parse_worker_stdout_line(line, output_id, process_id)
|
|
450
438
|
end
|
|
451
439
|
rescue IOError
|
|
452
440
|
nil
|
|
@@ -525,6 +513,37 @@ module TurboTests
|
|
|
525
513
|
io.write(msg) if stream_worker_output?
|
|
526
514
|
end
|
|
527
515
|
|
|
516
|
+
def parse_worker_stdout_line(line, output_id, process_id)
|
|
517
|
+
remaining = line.b.dup
|
|
518
|
+
loop do
|
|
519
|
+
before, separator, after = remaining.partition(output_id)
|
|
520
|
+
append_worker_output(process_id, :stdout, before) unless before.empty?
|
|
521
|
+
break if separator.empty?
|
|
522
|
+
|
|
523
|
+
if after.start_with?("{")
|
|
524
|
+
message = parse_worker_json_message(after, process_id)
|
|
525
|
+
if message
|
|
526
|
+
@messages << message
|
|
527
|
+
break
|
|
528
|
+
end
|
|
529
|
+
end
|
|
530
|
+
|
|
531
|
+
append_worker_output(process_id, :stdout, separator)
|
|
532
|
+
remaining = after
|
|
533
|
+
end
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
def parse_worker_json_message(raw_message, process_id)
|
|
537
|
+
message = raw_message.dup.force_encoding(Encoding::UTF_8).scrub
|
|
538
|
+
message = JSON.parse(message, symbolize_names: true)
|
|
539
|
+
return unless message.is_a?(Hash) && message[:type].is_a?(String)
|
|
540
|
+
|
|
541
|
+
message[:process_id] = process_id
|
|
542
|
+
message
|
|
543
|
+
rescue JSON::ParserError
|
|
544
|
+
nil
|
|
545
|
+
end
|
|
546
|
+
|
|
528
547
|
def stream_worker_output?
|
|
529
548
|
@verbose || @worker_output_mode == :stream
|
|
530
549
|
end
|
data/lib/turbo_tests/version.rb
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module TurboTests
|
|
4
|
+
# Version namespace for this gem.
|
|
4
5
|
module Version
|
|
5
|
-
|
|
6
|
+
# Current gem version.
|
|
7
|
+
VERSION = "3.2.3"
|
|
6
8
|
end
|
|
9
|
+
# Current gem version exposed at the traditional constant location.
|
|
7
10
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
8
11
|
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.2.
|
|
4
|
+
version: 3.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Illia
|
|
@@ -314,10 +314,10 @@ licenses:
|
|
|
314
314
|
- MIT
|
|
315
315
|
metadata:
|
|
316
316
|
homepage_uri: https://turbo-tests2.galtzo.com
|
|
317
|
-
source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.2.
|
|
318
|
-
changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.2.
|
|
317
|
+
source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.2.3
|
|
318
|
+
changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.2.3/CHANGELOG.md
|
|
319
319
|
bug_tracker_uri: https://github.com/galtzo-floss/turbo_tests2/issues
|
|
320
|
-
documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.2.
|
|
320
|
+
documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.2.3
|
|
321
321
|
funding_uri: https://github.com/sponsors/pboling
|
|
322
322
|
wiki_uri: https://github.com/galtzo-floss/turbo_tests2/wiki
|
|
323
323
|
news_uri: https://www.railsbling.com/tags/turbo_tests2
|
metadata.gz.sig
CHANGED
|
Binary file
|