turbo_tests2 3.1.3 → 3.1.5
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 +2 -1
- data/CHANGELOG.md +53 -1
- data/CONTRIBUTING.md +2 -2
- data/FUNDING.md +1 -5
- data/LICENSE.md +0 -1
- data/README.md +35 -21
- data/lib/turbo_tests/cli.rb +11 -8
- data/lib/turbo_tests/runner.rb +46 -16
- data/lib/turbo_tests/version.rb +1 -1
- data/lib/turbo_tests2/rspec/shared_contexts/simplecov_spawn.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +14 -15
- 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: f90eeafc8b6c05ef14d7fba06572f211235589af1259267fad2f68827c4a28ee
|
|
4
|
+
data.tar.gz: '078ceb0bfa26b5f4bd62f0f80349ff58b7723f0479cd6060ee326c0035448980'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0bfed2e3bd0d156bb3663d0b5b4790e6a24b3c0c3d4319dc3ba1a136e1cfcf1bffddcafdc9405de84a508427576b401269b46c7c15040a8fbe2337807f9b9fac
|
|
7
|
+
data.tar.gz: 5fe807746ee1ee044feb9b5efeda224601e2f1076bccc895adb1723605c8c56debe37676a9c5266d76dd5077ad52205c7946a020ec5ce7918cbb9e5d4356a180
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
�c����R\ph
|
|
2
|
+
JJ�{���S���i��Z��{>�@#��P�0K�ve\�.�^�o&� �蒑�X�{�ރ�;��Egč!ػ�����ͥň�RV�f��T�S#���JB_*x������d�8~fB��_����kЪ98q�?�:��������}V�
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,54 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [3.1.5] - 2026-06-23
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.1.5][3.1.5t]
|
|
36
|
+
- COVERAGE: 97.09% -- 634/653 lines in 10 files
|
|
37
|
+
- BRANCH COVERAGE: 88.82% -- 135/152 branches in 10 files
|
|
38
|
+
- 37.08% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Added support for JRuby 10.1 and TruffleRuby 34.0.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Retemplated project metadata and CI/development automation with `kettle-jem` v7.0.0.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- Fixed subprocess coverage setup for SimpleCov v1 by starting coverage
|
|
51
|
+
explicitly in the spawn shim and detecting active coverage via Ruby's
|
|
52
|
+
`Coverage.running?` API.
|
|
53
|
+
- Fixed SimpleCov boot order so kettle-soup-cover formatter configuration loads
|
|
54
|
+
after SimpleCov finishes requiring its defaults.
|
|
55
|
+
|
|
56
|
+
- Added `PARALLEL_PID_FILE` to `turbo_tests2 fan` worker environments so
|
|
57
|
+
SimpleCov parallel result collation does not fail when workers inherit
|
|
58
|
+
`PARALLEL_TEST_GROUPS`.
|
|
59
|
+
- Made CLI integration specs assert combined stdout/stderr output so older
|
|
60
|
+
Ruby engines that emit warnings or RSpec load errors on stderr are covered.
|
|
61
|
+
- Relaxed CLI load-error detail expectations only on TruffleRuby, where some
|
|
62
|
+
supported versions exit nonzero but omit the RSpec load-error summary.
|
|
63
|
+
|
|
64
|
+
## [3.1.4] - 2026-06-17
|
|
65
|
+
|
|
66
|
+
- TAG: [v3.1.4][3.1.4t]
|
|
67
|
+
- COVERAGE: 94.33% -- 666/706 lines in 16 files
|
|
68
|
+
- BRANCH COVERAGE: 79.11% -- 125/158 branches in 16 files
|
|
69
|
+
- 37.08% documented
|
|
70
|
+
|
|
71
|
+
### Fixed
|
|
72
|
+
|
|
73
|
+
- Prevented parallel test runs from hanging when a worker process exits but its
|
|
74
|
+
stdout or stderr pipe remains open, a failure mode observed on JRuby
|
|
75
|
+
current/head jobs.
|
|
76
|
+
|
|
77
|
+
- Ensured worker stdout/stderr reader threads are force-stopped after worker
|
|
78
|
+
process exit if an engine keeps them blocked after pipe closure, fixing
|
|
79
|
+
TruffleRuby 25.0 CI failures in the worker pipe cleanup regression spec.
|
|
80
|
+
|
|
33
81
|
## [3.1.3] - 2026-06-14
|
|
34
82
|
|
|
35
83
|
- TAG: [v3.1.3][3.1.3t]
|
|
@@ -137,7 +185,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
137
185
|
|
|
138
186
|
- Initial release
|
|
139
187
|
|
|
140
|
-
[Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.
|
|
188
|
+
[Unreleased]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.5...HEAD
|
|
189
|
+
[3.1.5]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.4...v3.1.5
|
|
190
|
+
[3.1.5t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.1.5
|
|
191
|
+
[3.1.4]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.3...v3.1.4
|
|
192
|
+
[3.1.4t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.1.4
|
|
141
193
|
[3.1.3]: https://github.com/galtzo-floss/turbo_tests2/compare/v3.1.2...v3.1.3
|
|
142
194
|
[3.1.3t]: https://github.com/galtzo-floss/turbo_tests2/releases/tag/v3.1.3
|
|
143
195
|
[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/FUNDING.md
CHANGED
|
@@ -6,7 +6,7 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
|
|
|
6
6
|
|
|
7
7
|
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal]
|
|
8
8
|
|
|
9
|
-
[![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
9
|
+
[![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
10
10
|
|
|
11
11
|
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
|
|
12
12
|
[⛳liberapay]: https://liberapay.com/pboling/donate
|
|
@@ -16,12 +16,8 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
|
|
|
16
16
|
[🖇osc-sponsors-i]: https://opencollective.com/galtzo-floss/sponsors/badge.svg?style=flat
|
|
17
17
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
18
18
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
19
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
20
|
-
[🖇polar]: https://polar.sh/pboling
|
|
21
19
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
22
20
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
23
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
24
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
25
21
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
26
22
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
27
23
|
[🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
|
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
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
`if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
|
|
12
12
|
|
|
13
|
-
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
13
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
14
14
|
|
|
15
|
-
<details>
|
|
15
|
+
<details markdown="1">
|
|
16
16
|
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
17
17
|
|
|
18
18
|
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
@@ -66,9 +66,9 @@ Finished in 2 minute 25.15 seconds (files took 0 seconds to load)
|
|
|
66
66
|
|
|
67
67
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
68
68
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
69
|
-
| Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
70
|
-
| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
|
|
71
|
-
| Works with MRI Ruby 4 | [![Ruby
|
|
69
|
+
| Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
70
|
+
| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
|
|
71
|
+
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
72
72
|
| Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
|
|
73
73
|
| Works with MRI Ruby 2 | [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
|
|
74
74
|
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
@@ -87,9 +87,24 @@ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
|
87
87
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
88
88
|
not practical for the current toolchain.
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
<a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
|
|
91
|
+
|
|
92
|
+
The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
93
|
+
|
|
94
|
+
<details markdown="1">
|
|
95
|
+
<summary>How kettle-dev manages complexity in tests</summary>
|
|
96
|
+
|
|
97
|
+
| Gem | Source | Role | Daily download rank |
|
|
98
|
+
|-----|--------|------|---------------------|
|
|
99
|
+
| [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](https://bestgems.org/gems/appraisal2) |
|
|
100
|
+
| [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [](https://bestgems.org/gems/appraisal2-rubocop) |
|
|
101
|
+
| [kettle-dev](https://bestgems.org/gems/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [](https://bestgems.org/gems/kettle-dev) |
|
|
102
|
+
| [kettle-jem](https://bestgems.org/gems/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [](https://bestgems.org/gems/kettle-jem) |
|
|
103
|
+
| [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [](https://bestgems.org/gems/kettle-soup-cover) |
|
|
104
|
+
| [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [](https://bestgems.org/gems/kettle-test) |
|
|
105
|
+
| [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [](https://bestgems.org/gems/rubocop-lts) |
|
|
106
|
+
|
|
107
|
+
</details>
|
|
93
108
|
|
|
94
109
|
### Federated DVCS
|
|
95
110
|
|
|
@@ -318,7 +333,7 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
|
|
|
318
333
|
No sponsors yet. Be the first!
|
|
319
334
|
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
320
335
|
|
|
321
|
-
[kettle-readme-backers]: https://github.com/galtzo-floss/turbo_tests2/blob/main/
|
|
336
|
+
[kettle-readme-backers]: https://github.com/galtzo-floss/turbo_tests2/blob/main/bin/kettle-readme-backers
|
|
322
337
|
|
|
323
338
|
### Another way to support open-source
|
|
324
339
|
|
|
@@ -330,7 +345,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
330
345
|
|
|
331
346
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
332
347
|
|
|
333
|
-
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
348
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
334
349
|
|
|
335
350
|
## 🔐 Security
|
|
336
351
|
|
|
@@ -376,7 +391,7 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
376
391
|
|
|
377
392
|
Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/turbo_tests2/-/graphs/main][🚎contributors-gl]
|
|
378
393
|
|
|
379
|
-
<details>
|
|
394
|
+
<details markdown="1">
|
|
380
395
|
<summary>⭐️ Star History</summary>
|
|
381
396
|
|
|
382
397
|
<a href="https://star-history.com/galtzo-floss/turbo_tests2&Date">
|
|
@@ -436,7 +451,6 @@ See [LICENSE.md][📄license] for the official copyright notice.
|
|
|
436
451
|
- Copyright (c) 2023-2024 Illia
|
|
437
452
|
- Copyright (c) 2023 mrudzki
|
|
438
453
|
- Copyright (c) 2023-2024 Sebastien Savater
|
|
439
|
-
- Copyright (c) 2024 David Rodriguez
|
|
440
454
|
- Copyright (c) 2024 Hiroshi SHIBATA
|
|
441
455
|
- Copyright (c) 2025-2026 Gareth Jones
|
|
442
456
|
- Copyright (c) 2025-2026 Peter H. Boling
|
|
@@ -483,12 +497,8 @@ Thanks for RTFM. ☺️
|
|
|
483
497
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
484
498
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
485
499
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
486
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
487
|
-
[🖇polar]: https://polar.sh/pboling
|
|
488
500
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
489
501
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
490
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
491
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
492
502
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
493
503
|
[🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
|
|
494
504
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
@@ -578,11 +588,13 @@ Thanks for RTFM. ☺️
|
|
|
578
588
|
[🚎jruby-9.2-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/jruby-9.2.yml
|
|
579
589
|
[🚎jruby-9.3-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/jruby-9.3.yml
|
|
580
590
|
[🚎jruby-9.4-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/jruby-9.4.yml
|
|
591
|
+
[🚎jruby-10.0-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/jruby-10.0.yml
|
|
581
592
|
[🚎truby-22.3-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/truffleruby-22.3.yml
|
|
582
593
|
[🚎truby-23.0-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/truffleruby-23.0.yml
|
|
583
594
|
[🚎truby-23.1-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/truffleruby-23.1.yml
|
|
584
595
|
[🚎truby-24.2-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/truffleruby-24.2.yml
|
|
585
596
|
[🚎truby-25.0-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/truffleruby-25.0.yml
|
|
597
|
+
[🚎truby-33.0-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/truffleruby-33.0.yml
|
|
586
598
|
[🚎2-cov-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/coverage.yml
|
|
587
599
|
[🚎2-cov-wfi]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/coverage.yml/badge.svg
|
|
588
600
|
[🚎3-hd-wf]: https://github.com/galtzo-floss/turbo_tests2/actions/workflows/heads.yml
|
|
@@ -612,7 +624,6 @@ Thanks for RTFM. ☺️
|
|
|
612
624
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
613
625
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
614
626
|
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
615
|
-
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
616
627
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
617
628
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
618
629
|
[💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
@@ -620,10 +631,13 @@ Thanks for RTFM. ☺️
|
|
|
620
631
|
[💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
621
632
|
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
622
633
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
634
|
+
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
623
635
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
636
|
+
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
624
637
|
[💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
625
638
|
[💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
626
639
|
[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
640
|
+
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
627
641
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
628
642
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
629
643
|
[🤝gh-issues]: https://github.com/galtzo-floss/turbo_tests2/issues
|
|
@@ -652,7 +666,7 @@ Thanks for RTFM. ☺️
|
|
|
652
666
|
[📌gitmoji]: https://gitmoji.dev
|
|
653
667
|
[📌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
668
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
655
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
669
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.653-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
656
670
|
[🔐security]: https://github.com/galtzo-floss/turbo_tests2/blob/main/SECURITY.md
|
|
657
671
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
658
672
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -660,7 +674,7 @@ Thanks for RTFM. ☺️
|
|
|
660
674
|
[📄license-ref]: MIT.md
|
|
661
675
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
662
676
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
663
|
-
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A
|
|
677
|
+
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
|
|
664
678
|
|
|
665
679
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
|
666
680
|
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
|
@@ -680,7 +694,7 @@ Thanks for RTFM. ☺️
|
|
|
680
694
|
| Package | turbo_tests2 |
|
|
681
695
|
| 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
696
|
| Homepage | https://github.com/galtzo-floss/turbo_tests2 |
|
|
683
|
-
| Source | https://github.com/galtzo-floss/turbo_tests2
|
|
697
|
+
| Source | https://github.com/galtzo-floss/turbo_tests2 |
|
|
684
698
|
| License | `MIT` |
|
|
685
|
-
| Funding | https://github.com/sponsors/pboling, https://
|
|
699
|
+
| Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/galtzo-floss, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/turbo_tests2, https://www.buymeacoffee.com/pboling |
|
|
686
700
|
<!-- kettle-jem:metadata:end -->
|
data/lib/turbo_tests/cli.rb
CHANGED
|
@@ -194,12 +194,15 @@ module TurboTests
|
|
|
194
194
|
end
|
|
195
195
|
|
|
196
196
|
processes = ParallelTests.determine_number_of_processes(count)
|
|
197
|
-
pids =
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
197
|
+
pids = ParallelTests.with_pid_file do
|
|
198
|
+
(1..processes).map do |process_id|
|
|
199
|
+
env = {
|
|
200
|
+
"TEST_ENV_NUMBER" => process_id.to_s,
|
|
201
|
+
"PARALLEL_TEST_GROUPS" => processes.to_s,
|
|
202
|
+
"PARALLEL_PID_FILE" => ParallelTests.pid_file_path
|
|
203
|
+
}
|
|
204
|
+
Process.spawn(env, *args)
|
|
205
|
+
end
|
|
203
206
|
end
|
|
204
207
|
statuses = pids.map { |pid| Process.wait2(pid).last }
|
|
205
208
|
|
|
@@ -263,9 +266,9 @@ module TurboTests
|
|
|
263
266
|
begin
|
|
264
267
|
require "rake"
|
|
265
268
|
rescue LoadError
|
|
266
|
-
# :
|
|
269
|
+
# simplecov:disable
|
|
267
270
|
return # rake is optional
|
|
268
|
-
# :
|
|
271
|
+
# simplecov:enable
|
|
269
272
|
end
|
|
270
273
|
|
|
271
274
|
# Pass an empty argv so Rake doesn't parse the current process's ARGV,
|
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
|
@@ -13,7 +13,7 @@ RSpec.shared_context("with simplecov spawn coverage") do
|
|
|
13
13
|
original_rubyopt = ENV.fetch("RUBYOPT", nil)
|
|
14
14
|
original_cov_min_hard = ENV.fetch("K_SOUP_COV_MIN_HARD", nil)
|
|
15
15
|
begin
|
|
16
|
-
if defined?(SimpleCov) &&
|
|
16
|
+
if defined?(SimpleCov) && defined?(Coverage) && Coverage.respond_to?(:running?) && Coverage.running?
|
|
17
17
|
spawn_path = simplecov_spawn_path
|
|
18
18
|
raise ArgumentError, "Expected SimpleCov spawn shim at #{spawn_path}" unless File.file?(spawn_path)
|
|
19
19
|
|
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.5
|
|
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.13
|
|
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.13
|
|
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.15
|
|
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.15
|
|
125
124
|
- !ruby/object:Gem::Dependency
|
|
126
125
|
name: bundler-audit
|
|
127
126
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -179,7 +178,7 @@ dependencies:
|
|
|
179
178
|
version: '3.1'
|
|
180
179
|
- - ">="
|
|
181
180
|
- !ruby/object:Gem::Version
|
|
182
|
-
version: 3.1.
|
|
181
|
+
version: 3.1.3
|
|
183
182
|
type: :development
|
|
184
183
|
prerelease: false
|
|
185
184
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -189,7 +188,7 @@ dependencies:
|
|
|
189
188
|
version: '3.1'
|
|
190
189
|
- - ">="
|
|
191
190
|
- !ruby/object:Gem::Version
|
|
192
|
-
version: 3.1.
|
|
191
|
+
version: 3.1.3
|
|
193
192
|
- !ruby/object:Gem::Dependency
|
|
194
193
|
name: kettle-test
|
|
195
194
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -199,7 +198,7 @@ dependencies:
|
|
|
199
198
|
version: '2.0'
|
|
200
199
|
- - ">="
|
|
201
200
|
- !ruby/object:Gem::Version
|
|
202
|
-
version: 2.0.
|
|
201
|
+
version: 2.0.6
|
|
203
202
|
type: :development
|
|
204
203
|
prerelease: false
|
|
205
204
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -209,7 +208,7 @@ dependencies:
|
|
|
209
208
|
version: '2.0'
|
|
210
209
|
- - ">="
|
|
211
210
|
- !ruby/object:Gem::Version
|
|
212
|
-
version: 2.0.
|
|
211
|
+
version: 2.0.6
|
|
213
212
|
- !ruby/object:Gem::Dependency
|
|
214
213
|
name: ruby-progressbar
|
|
215
214
|
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.3
|
|
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.3
|
|
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.5
|
|
313
|
+
changelog_uri: https://github.com/galtzo-floss/turbo_tests2/blob/v3.1.5/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.5
|
|
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
|