turbo_tests2 3.2.1 โ 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 +57 -1
- data/README.md +8 -7
- data/exe/turbo_tests2 +1 -1
- data/lib/turbo_tests/runner.rb +32 -13
- data/lib/turbo_tests/version.rb +4 -1
- data.tar.gz.sig +0 -0
- metadata +28 -8
- 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,58 @@ 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
|
+
|
|
66
|
+
## [3.2.2] - 2026-07-25
|
|
67
|
+
|
|
68
|
+
- TAG: [v3.2.2][3.2.2t]
|
|
69
|
+
- COVERAGE: 96.88% -- 869/897 lines in 10 files
|
|
70
|
+
- BRANCH COVERAGE: 84.44% -- 217/257 branches in 10 files
|
|
71
|
+
- 34.69% documented
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
|
|
75
|
+
- The `turbo_tests2` executable startup header is now shown only when
|
|
76
|
+
`--verbose` is passed; `-v` and `--version` still print just the executable
|
|
77
|
+
version and exit.
|
|
78
|
+
|
|
79
|
+
- kettle-jem-template-20260725-002 - Generated gemspec templates now include
|
|
80
|
+
`anonymous_loader` as a development dependency, and version specs use it to
|
|
81
|
+
execute generated `version.rb` files for coverage without redefining package
|
|
82
|
+
constants. Managed version specs are removed when `version_gem` is disabled
|
|
83
|
+
or incompatible with the project's runtime Ruby floor.
|
|
84
|
+
|
|
33
85
|
## [3.2.1] - 2026-07-25
|
|
34
86
|
|
|
35
87
|
- TAG: [v3.2.1][3.2.1t]
|
|
@@ -396,7 +448,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
396
448
|
|
|
397
449
|
- Initial release
|
|
398
450
|
|
|
399
|
-
[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
|
|
454
|
+
[3.2.2]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.1...v3.2.2
|
|
455
|
+
[3.2.2t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.2.2
|
|
400
456
|
[3.2.1]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.2.0...v3.2.1
|
|
401
457
|
[3.2.1t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.2.1
|
|
402
458
|
[3.2.0]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.14...v3.2.0
|
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/exe/turbo_tests2
CHANGED
|
@@ -11,6 +11,6 @@ end
|
|
|
11
11
|
# Alias for `turbo_tests` โ turbo_tests2 is a drop-in replacement for turbo_tests.
|
|
12
12
|
require "turbo_tests2"
|
|
13
13
|
|
|
14
|
-
puts "== #{script_basename} v#{TurboTests::Version::VERSION} =="
|
|
14
|
+
puts "== #{script_basename} v#{TurboTests::Version::VERSION} ==" if ARGV.include?("--verbose")
|
|
15
15
|
|
|
16
16
|
TurboTests::CLI.new(ARGV).run
|
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
|
|
@@ -169,6 +169,26 @@ dependencies:
|
|
|
169
169
|
- - ">="
|
|
170
170
|
- !ruby/object:Gem::Version
|
|
171
171
|
version: 1.0.4
|
|
172
|
+
- !ruby/object:Gem::Dependency
|
|
173
|
+
name: anonymous_loader
|
|
174
|
+
requirement: !ruby/object:Gem::Requirement
|
|
175
|
+
requirements:
|
|
176
|
+
- - "~>"
|
|
177
|
+
- !ruby/object:Gem::Version
|
|
178
|
+
version: '0.1'
|
|
179
|
+
- - ">="
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: 0.1.3
|
|
182
|
+
type: :development
|
|
183
|
+
prerelease: false
|
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
185
|
+
requirements:
|
|
186
|
+
- - "~>"
|
|
187
|
+
- !ruby/object:Gem::Version
|
|
188
|
+
version: '0.1'
|
|
189
|
+
- - ">="
|
|
190
|
+
- !ruby/object:Gem::Version
|
|
191
|
+
version: 0.1.3
|
|
172
192
|
- !ruby/object:Gem::Dependency
|
|
173
193
|
name: appraisal2
|
|
174
194
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -232,7 +252,7 @@ dependencies:
|
|
|
232
252
|
version: '1.0'
|
|
233
253
|
- - ">="
|
|
234
254
|
- !ruby/object:Gem::Version
|
|
235
|
-
version: 1.0.
|
|
255
|
+
version: 1.0.7
|
|
236
256
|
type: :development
|
|
237
257
|
prerelease: false
|
|
238
258
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -242,7 +262,7 @@ dependencies:
|
|
|
242
262
|
version: '1.0'
|
|
243
263
|
- - ">="
|
|
244
264
|
- !ruby/object:Gem::Version
|
|
245
|
-
version: 1.0.
|
|
265
|
+
version: 1.0.7
|
|
246
266
|
- !ruby/object:Gem::Dependency
|
|
247
267
|
name: gitmoji-regex
|
|
248
268
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -252,7 +272,7 @@ dependencies:
|
|
|
252
272
|
version: '2.0'
|
|
253
273
|
- - ">="
|
|
254
274
|
- !ruby/object:Gem::Version
|
|
255
|
-
version: 2.0.
|
|
275
|
+
version: 2.0.6
|
|
256
276
|
type: :development
|
|
257
277
|
prerelease: false
|
|
258
278
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -262,7 +282,7 @@ dependencies:
|
|
|
262
282
|
version: '2.0'
|
|
263
283
|
- - ">="
|
|
264
284
|
- !ruby/object:Gem::Version
|
|
265
|
-
version: 2.0.
|
|
285
|
+
version: 2.0.6
|
|
266
286
|
description: "\U0001F680 turbo_tests2` is an RSpec parallel test runner built on `parallel_tests`.
|
|
267
287
|
It uses `parallel_tests` for process counts, file grouping, and runtime balancing,
|
|
268
288
|
then replaces interleaved worker output with incremental summarized RSpec reporting.
|
|
@@ -294,10 +314,10 @@ licenses:
|
|
|
294
314
|
- MIT
|
|
295
315
|
metadata:
|
|
296
316
|
homepage_uri: https://turbo-tests2.galtzo.com
|
|
297
|
-
source_code_uri: https://github.com/galtzo-floss/turbo_tests2/tree/v3.2.
|
|
298
|
-
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
|
|
299
319
|
bug_tracker_uri: https://github.com/galtzo-floss/turbo_tests2/issues
|
|
300
|
-
documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.2.
|
|
320
|
+
documentation_uri: https://www.rubydoc.info/gems/turbo_tests2/3.2.3
|
|
301
321
|
funding_uri: https://github.com/sponsors/pboling
|
|
302
322
|
wiki_uri: https://github.com/galtzo-floss/turbo_tests2/wiki
|
|
303
323
|
news_uri: https://www.railsbling.com/tags/turbo_tests2
|
metadata.gz.sig
CHANGED
|
Binary file
|