appraisal2 3.1.4 → 3.2.1
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 +148 -1
- data/LICENSE.md +2 -1
- data/README.md +77 -34
- data/lib/appraisal/appraisal.rb +3 -2
- data/lib/appraisal/appraisal_file.rb +1 -1
- data/lib/appraisal/cli.rb +131 -21
- data/lib/appraisal/command.rb +142 -83
- data/lib/appraisal/gem_manager/bundler_adapter.rb +15 -2
- data/lib/appraisal/utils.rb +4 -0
- data/lib/appraisal/version.rb +5 -2
- data/lib/appraisal.rb +2 -0
- data/lib/appraisal2.rb +0 -2
- data.tar.gz.sig +0 -0
- metadata +43 -41
- metadata.gz.sig +0 -0
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -275
- data/FUNDING.md +0 -70
- data/MIT.md +0 -21
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/certs/pboling.pem +0 -27
- data/lib/appraisal2/version.rb +0 -8
- data/sig/appraisal2/version.rbs +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fc5fd8b8ee5e56506c39047160e4a1e4abb4a23062b155a422f65edbc4f2a50e
|
|
4
|
+
data.tar.gz: 05aaff18c45cf9d18712c61c78fd75b28d56690194a41a9a3846991853e789e7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cb587e92052e1f539d372e5555abd4be2ae3033c2915df60e4eb02937d89504e28a8fb06574ccf90f23c030620f7bb7f570862b17d4e706c8b28b1f221fda73d
|
|
7
|
+
data.tar.gz: c0abff7c89b9c3eb14b6ea851de15151a72737dd005742568afd70f00fbcefbd76994e4ebbc7cd4a5f46e714e76b97e3b1eb0c4db22ee7ff43ca6c398e486ce5
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,149 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [3.2.1] - 2026-08-06
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.2.1][3.2.1t]
|
|
36
|
+
- COVERAGE: 90.86% -- 915/1007 lines in 29 files
|
|
37
|
+
- BRANCH COVERAGE: 77.73% -- 185/238 branches in 29 files
|
|
38
|
+
- 43.78% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- kettle-jem-template-20260720-005 - README Support & Community links now
|
|
43
|
+
include RubyForum.
|
|
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
|
+
- kettle-jem-template-20260727-001 - Spec harness documentation now lists the
|
|
48
|
+
RSpec helpers provided by `kettle-test`.
|
|
49
|
+
- kettle-jem-template-20260729-005 - Gemspec metadata now publishes this
|
|
50
|
+
project's RubyForum tag as `mailing_list_uri`, and support docs link to the
|
|
51
|
+
tagged RubyForum community alongside Discord.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- The `appraisal` executable now supports `-v` / `--version` and prints a
|
|
56
|
+
standard startup header on normal runs.
|
|
57
|
+
|
|
58
|
+
- kettle-jem-template-20260720-002 - Development Gemfiles now use the released
|
|
59
|
+
`tree_sitter_language_pack` gem 1.13.3 or newer by default.
|
|
60
|
+
- kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
|
|
61
|
+
cover `version.rb` without redefining constants, or are removed when version
|
|
62
|
+
specs are not managed for the project.
|
|
63
|
+
- kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
|
|
64
|
+
setup-ruby-flash planning and can prepare appraisal-only jobs without
|
|
65
|
+
installing the main Gemfile bundle.
|
|
66
|
+
- kettle-jem-template-20260801-001 - Generated README gem dashboard links now
|
|
67
|
+
use ClickGems instead of BestGems.
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
|
|
71
|
+
- kettle-jem-template-20260720-003 - StructuredMerge Git diff driver config now
|
|
72
|
+
uses the installed `smorg-rb` driver command.
|
|
73
|
+
- kettle-jem-template-20260725-001 - Release pull request branches beginning
|
|
74
|
+
with `feature/release` now run JRuby and TruffleRuby workflows.
|
|
75
|
+
- kettle-jem-template-20260726-002 - Generated version files now document their
|
|
76
|
+
version namespace and constants, reducing warning-only YARD lint output.
|
|
77
|
+
- kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
|
|
78
|
+
QLTY, and Codecov as optional, so provider outages do not fail CI when local
|
|
79
|
+
coverage thresholds still pass.
|
|
80
|
+
- kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
|
|
81
|
+
same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
|
|
82
|
+
installs are not reported as project lint debt.
|
|
83
|
+
- kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
|
|
84
|
+
TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
|
|
85
|
+
before the test suite starts.
|
|
86
|
+
- kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
|
|
87
|
+
setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
|
|
88
|
+
lockfile parser failures on Git and path dependencies.
|
|
89
|
+
- kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
|
|
90
|
+
missing canonical version spec when a project only has shim namespace version
|
|
91
|
+
specs.
|
|
92
|
+
- kettle-jem-template-20260729-001 - Generated JRuby 9.4 workflows now use the
|
|
93
|
+
legacy manual bundle install path, avoiding setup-time Bundler full-index
|
|
94
|
+
failures against `gem.coop`.
|
|
95
|
+
- kettle-jem-template-20260729-003 - Old-Ruby gems below the VersionGem runtime
|
|
96
|
+
floor now get managed minimal `version.rb` files and anonymous-loader version
|
|
97
|
+
specs without adding `version_gem`.
|
|
98
|
+
- kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
|
|
99
|
+
relative to the gemspec directory, so release package contents stay correct
|
|
100
|
+
even when the gemspec is loaded from another working directory.
|
|
101
|
+
|
|
102
|
+
- Restore the package version loader to the implementation namespace after incorrect template-generated version artifacts.
|
|
103
|
+
|
|
104
|
+
- kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
|
|
105
|
+
managed configuration block bindings structurally, preventing mixed block
|
|
106
|
+
parameter names from producing invalid configuration after a merge.
|
|
107
|
+
- kettle-jem-template-20260801-003 - Generated project metadata and
|
|
108
|
+
documentation now normalize configured underscore hostnames to valid
|
|
109
|
+
hyphenated hostnames.
|
|
110
|
+
- kettle-jem-template-20260801-004 - Generated organization README logos now
|
|
111
|
+
use GitHub's stable organization avatar endpoint instead of assuming a
|
|
112
|
+
matching Galtzo-hosted asset exists.
|
|
113
|
+
|
|
114
|
+
- kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
|
|
115
|
+
preserving comments and trailing commas during template updates.
|
|
116
|
+
|
|
117
|
+
- Ruby compatibility workflows now pin the setup-ruby-flash revision that supports the configured compatibility bundle input.
|
|
118
|
+
|
|
119
|
+
- Pin Appraisal subprocess Bundler commands to the version recorded in each appraisal lockfile.
|
|
120
|
+
|
|
121
|
+
- Clear Bundler load paths before switching appraisal subprocesses to a locked Bundler version.
|
|
122
|
+
|
|
123
|
+
- Skip unsupported-engine bundler setup before acceptance-test fixtures are created.
|
|
124
|
+
|
|
125
|
+
- Acceptance fixture Bundler commands now invoke the selected Bundler executable on alternate Ruby engines.
|
|
126
|
+
|
|
127
|
+
- Acceptance fixture Bundler command rewriting now supports Ruby 2.4.
|
|
128
|
+
|
|
129
|
+
- Acceptance test fixture setup now preserves RubyGems default Gem.dir in GEM_PATH for Bundler resolution.
|
|
130
|
+
|
|
131
|
+
## [3.2.0] - 2026-07-18
|
|
132
|
+
|
|
133
|
+
- TAG: [v3.2.0][3.2.0t]
|
|
134
|
+
- COVERAGE: 91.00% -- 910/1000 lines in 29 files
|
|
135
|
+
- BRANCH COVERAGE: 77.54% -- 183/236 branches in 29 files
|
|
136
|
+
- 42.33% documented
|
|
137
|
+
|
|
138
|
+
### Added
|
|
139
|
+
|
|
140
|
+
- `appraisal generate`, `install`, `update`, `generate-install`, and
|
|
141
|
+
`generate-update` can now process appraisals in parallel with
|
|
142
|
+
`--appraisal-jobs` / `-n`, or `APPRAISAL_JOBS`. Appraisal-level
|
|
143
|
+
parallelism defaults to 2 workers; use `-n 1` to run serially. Bundler older
|
|
144
|
+
than 2.1 falls back to serial processing.
|
|
145
|
+
|
|
146
|
+
### Changed
|
|
147
|
+
|
|
148
|
+
- Full dependency updates now run `bundle update --all` to avoid Bundler's
|
|
149
|
+
deprecated implicit full-update form.
|
|
150
|
+
- Acceptance specs now opt into expensive dummy-gem and bundle fixture setup
|
|
151
|
+
through metadata, and reuse a per-worker cached default fixture stage.
|
|
152
|
+
- Generated CI workflows now cache `.rspec_status` and pass it to
|
|
153
|
+
`kettle-test` so `turbo_tests2` can balance workers with historical example
|
|
154
|
+
timings.
|
|
155
|
+
- `generate-install` and `generate-update` now reuse the parsed Appraisals set
|
|
156
|
+
for their generate and install/update phases.
|
|
157
|
+
|
|
158
|
+
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
|
|
159
|
+
repository-only files by default to reduce downstream distro packaging churn.
|
|
160
|
+
|
|
161
|
+
### Fixed
|
|
162
|
+
|
|
163
|
+
- Appraisal command execution now checks whether the `bundle` executable can
|
|
164
|
+
boot before falling back to RubyGems spec probing and Bundler installation,
|
|
165
|
+
preserving TruffleRuby's engine-shipped Bundler in isolated subprocesses.
|
|
166
|
+
- Acceptance fixture Bundler selection now detects TruffleRuby's shipped
|
|
167
|
+
Bundler without reusing a newer Bundler activated by the appraised suite.
|
|
168
|
+
- Acceptance fixture binstubs now pin the selected Bundler version before
|
|
169
|
+
loading generated `bin/bundle` handoff code.
|
|
170
|
+
- Bundler-backed appraisal installs now set `BUNDLE_JOBS` explicitly so the
|
|
171
|
+
configured Appraisal job count also controls Bundler's installer worker
|
|
172
|
+
count in subprocesses.
|
|
173
|
+
- JRuby and TruffleRuby workflows now correctly skip ordinary pull request
|
|
174
|
+
branches unless the branch targets `jruby/`, `truffleruby/`, or `engines/`.
|
|
175
|
+
|
|
33
176
|
## [3.1.4] - 2026-07-01
|
|
34
177
|
|
|
35
178
|
- TAG: [v3.1.4][3.1.4t]
|
|
@@ -429,7 +572,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
429
572
|
- code coverage tracked with Coveralls, QLTY.sh, and the kettle-soup-cover gem
|
|
430
573
|
- other minor fixes and improvements
|
|
431
574
|
|
|
432
|
-
[Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.1
|
|
575
|
+
[Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.2.1...HEAD
|
|
576
|
+
[3.2.1]: https://github.com/appraisal-rb/appraisal2/compare/v3.2.0...v3.2.1
|
|
577
|
+
[3.2.1t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.2.1
|
|
578
|
+
[3.2.0]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.4...v3.2.0
|
|
579
|
+
[3.2.0t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.2.0
|
|
433
580
|
[3.1.4]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.3...v3.1.4
|
|
434
581
|
[3.1.4t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.1.4
|
|
435
582
|
[3.1.3]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.2...v3.1.3
|
data/LICENSE.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This project is made available under the following license.
|
|
4
4
|
Choose the option that best fits your use case:
|
|
5
5
|
|
|
6
|
-
- [MIT](MIT.md)
|
|
6
|
+
- [MIT](https://github.com/appraisal-rb/appraisal2/blob/main/MIT.md)
|
|
7
7
|
|
|
8
8
|
## Copyright Notice
|
|
9
9
|
|
|
@@ -47,4 +47,5 @@ Choose the option that best fits your use case:
|
|
|
47
47
|
- Copyright (c) 2024 Joe Sharp
|
|
48
48
|
- Copyright (c) 2024 Sebastian Cohnen
|
|
49
49
|
- Copyright (c) 2024 Yevhenii Ponomarenko
|
|
50
|
+
- Copyright (c) 2026 Bob McKinven
|
|
50
51
|
- Copyright (c) 2026 Richard Kramer
|
data/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<a href="https://github.com/appraisal-rb"><img alt="appraisal-rb Logo by
|
|
1
|
+
<a href="https://github.com/appraisal-rb"><img alt="appraisal-rb Logo by GitHub" src="https://github.com/appraisal-rb.png?size=192" width="14%" align="right"/></a>
|
|
2
2
|
|
|
3
|
-
# 🔍️
|
|
3
|
+
# 🔍️ appraisal2 / Appraisal
|
|
4
4
|
|
|
5
|
-
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![
|
|
5
|
+
[![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Total downloads][👽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
|
|
|
7
|
-
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the
|
|
7
|
+
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -53,8 +53,8 @@ Appraisal2 adds:
|
|
|
53
53
|
| 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]|
|
|
54
54
|
| Works with MRI Ruby 2 | ![Ruby 2.0 Compat][💎ruby-2.0i] ![Ruby 2.1 Compat][💎ruby-2.1i] ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![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]|
|
|
55
55
|
| Works with MRI Ruby 1 | ![Ruby 1.8 Compat][💎ruby-1.8i] ![Ruby 1.9 Compat][💎ruby-1.9i]|
|
|
56
|
-
| 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] |
|
|
57
|
-
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on
|
|
56
|
+
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![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] |
|
|
57
|
+
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
|
|
58
58
|
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
|
|
59
59
|
| Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
|
|
60
60
|
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
|
|
@@ -76,15 +76,15 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
|
76
76
|
<details markdown="1">
|
|
77
77
|
<summary>How kettle-dev manages complexity in tests</summary>
|
|
78
78
|
|
|
79
|
-
| Gem | Source | Role |
|
|
79
|
+
| Gem | Source | Role | Total downloads |
|
|
80
80
|
|-----|--------|------|---------------------|
|
|
81
|
-
| [appraisal2-rubocop](https://
|
|
82
|
-
| [kettle-dev](https://
|
|
83
|
-
| [kettle-jem](https://
|
|
84
|
-
| [kettle-soup-cover](https://
|
|
85
|
-
| [kettle-test](https://
|
|
86
|
-
| [rubocop-lts](https://
|
|
87
|
-
| [turbo_tests2](https://
|
|
81
|
+
| [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
|
|
82
|
+
| [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
|
|
83
|
+
| [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
|
|
84
|
+
| [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
|
|
85
|
+
| [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [](https://clickgems.clickhouse.com/dashboard/kettle-test) |
|
|
86
|
+
| [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
|
|
87
|
+
| [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
|
|
88
88
|
|
|
89
89
|
</details>
|
|
90
90
|
|
|
@@ -93,17 +93,14 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
|
93
93
|
<details markdown="1">
|
|
94
94
|
<summary>Find this repo on federated forges (Coming soon!)</summary>
|
|
95
95
|
|
|
96
|
-
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
|
|
97
|
-
|
|
98
|
-
| 🧪 [appraisal-rb/appraisal2 on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
|
|
99
|
-
| 🧊 [appraisal-rb/appraisal2 on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
|
|
100
|
-
| 🐙 [appraisal-rb/appraisal2 on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
|
|
101
|
-
| 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
|
|
96
|
+
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
|
|
97
|
+
|-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
|
|
98
|
+
| 🧪 [appraisal-rb/appraisal2 on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
|
|
99
|
+
| 🧊 [appraisal-rb/appraisal2 on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
|
|
100
|
+
| 🐙 [appraisal-rb/appraisal2 on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
|
|
102
101
|
|
|
103
102
|
</details>
|
|
104
103
|
|
|
105
|
-
[gh-discussions]: https://github.com/appraisal-rb/appraisal2/discussions
|
|
106
|
-
|
|
107
104
|
### Enterprise Support [](https://tidelift.com/subscription/pkg/rubygems-appraisal2?utm_source=rubygems-appraisal2&utm_medium=referral&utm_campaign=readme)
|
|
108
105
|
|
|
109
106
|
Available as part of the Tidelift Subscription.
|
|
@@ -121,6 +118,7 @@ The maintainers of this and thousands of other packages are working with Tidelif
|
|
|
121
118
|
|
|
122
119
|
Alternatively:
|
|
123
120
|
|
|
121
|
+
- [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
124
122
|
- [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
125
123
|
- [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork]
|
|
126
124
|
- [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor]
|
|
@@ -233,6 +231,16 @@ In the case that you want to run all the appraisals by default when you run `rak
|
|
|
233
231
|
|
|
234
232
|
Note that this may conflict with your CI setup if you decide to split the test into multiple processes by Appraisal2 and you are using `rake` to run tests by default.
|
|
235
233
|
|
|
234
|
+
#### Using Multiple Appraisals Files
|
|
235
|
+
It's possible to have multiple Appraisals files, each with their own 'gemfiles' folder. Selecting which 'Appraisals' file to use with `ENV["APPRAISALS_FILE"]` and the 'gemfiles' folder with `ENV["APPRAISAL_GEMFILES_ROOT"]`.
|
|
236
|
+
|
|
237
|
+
For example, if you have a different Appraisals set for each version of ruby you test with:
|
|
238
|
+
```ruby
|
|
239
|
+
APPRAISALS_FILE=appraisals_4_0 APPRAISAL_GEMFILES_ROOT=gemfiles_4_0 bundle exec appraisal rake test
|
|
240
|
+
APPRAISALS_FILE=appraisals_3_4 APPRAISAL_GEMFILES_ROOT=gemfiles_3_4 bundle exec appraisal rake test
|
|
241
|
+
APPRAISALS_FILE=appraisals_3_3 APPRAISAL_GEMFILES_ROOT=gemfiles_3_3 bundle exec appraisal rake test
|
|
242
|
+
```
|
|
243
|
+
|
|
236
244
|
### Commands
|
|
237
245
|
|
|
238
246
|
```bash
|
|
@@ -259,6 +267,21 @@ Use the command that matches the lifecycle you want:
|
|
|
259
267
|
| `generate-install` | Yes | Yes, via install | First setup, or after intentional Appraisals changes |
|
|
260
268
|
| `generate-update` | Yes | Yes, via update | Regenerate gemfiles, then update dependency locks |
|
|
261
269
|
|
|
270
|
+
Appraisal2 can process appraisals in parallel with `--appraisal-jobs` / `-n`,
|
|
271
|
+
or with `APPRAISAL_JOBS` when no CLI value is provided. `generate`,
|
|
272
|
+
`generate-install`, and `generate-update` use this for generation. `install`,
|
|
273
|
+
`update`, `generate-install`, and `generate-update` use it to fan out dependency
|
|
274
|
+
resolution across appraisals. External commands run across all appraisals, such
|
|
275
|
+
as `bundle exec appraisal rake test`, use `APPRAISAL_JOBS`. Appraisal-level
|
|
276
|
+
parallelism defaults to 2 workers; use `-n 1` to run serially. When Appraisal2
|
|
277
|
+
is running under Bundler older than 2.1, Appraisal2 falls back to serial
|
|
278
|
+
processing because those Bundler versions do not provide the modern environment
|
|
279
|
+
helpers used to isolate parallel Bundler subprocesses.
|
|
280
|
+
|
|
281
|
+
Install commands keep `--jobs` / `-j` for the selected gem manager. With
|
|
282
|
+
Bundler, `-j` controls `bundle install --jobs`, while `-n` controls how many
|
|
283
|
+
appraisal gemfiles Appraisal2 processes at the same time.
|
|
284
|
+
|
|
262
285
|
The deprecated rake task `rake appraisal:install` now delegates to `appraisal generate-install`, preserving its historical generate-and-install behavior while the CLI commands remain explicit.
|
|
263
286
|
|
|
264
287
|
### Command Options
|
|
@@ -270,12 +293,27 @@ Built-in dependency commands support the following options:
|
|
|
270
293
|
| Option | Description |
|
|
271
294
|
|--------|-------------|
|
|
272
295
|
| `--gem-manager`, `-g` | Gem manager to use: `bundler` (default) or `ore`; applies to `install`, `update`, `generate-install`, and `generate-update` |
|
|
273
|
-
| `--jobs`, `-
|
|
296
|
+
| `--appraisal-jobs`, `-n` | Process appraisals in parallel for `generate`, `install`, `update`, `generate-install`, and `generate-update` (default: 2; use `-n 1` for serial execution; Bundler < 2.1 falls back to serial processing) |
|
|
297
|
+
| `--jobs`, `-j` | Pass a parallel job count to the selected gem manager; applies to `install` and `generate-install` |
|
|
274
298
|
| `--retry` | Retry network and git requests that have failed; applies to `install` and `generate-install` (default: 1) |
|
|
275
299
|
| `--without` | A space-separated list of groups to skip during installation; applies to `install` and `generate-install` |
|
|
276
300
|
| `--full-index` | Run bundle install with the full-index argument; applies to `install` and `generate-install` |
|
|
277
301
|
| `--path` | Install gems in the specified directory; applies to `install` and `generate-install` |
|
|
278
302
|
|
|
303
|
+
```bash
|
|
304
|
+
# Process two appraisals at a time, using the default Appraisal worker count
|
|
305
|
+
bundle exec appraisal generate-install
|
|
306
|
+
|
|
307
|
+
# Process four appraisals at a time
|
|
308
|
+
bundle exec appraisal generate-install -n 4
|
|
309
|
+
|
|
310
|
+
# Process two appraisals at a time, and give each Bundler install four jobs
|
|
311
|
+
bundle exec appraisal generate-install -n 2 -j 4
|
|
312
|
+
|
|
313
|
+
# Run Appraisal serially when parallel appraisal processing is not desired
|
|
314
|
+
bundle exec appraisal generate-install -n 1
|
|
315
|
+
```
|
|
316
|
+
|
|
279
317
|
### Using Commands with Named Appraisals
|
|
280
318
|
|
|
281
319
|
#### Using Appraisal's built-in commands with named appraisals
|
|
@@ -484,7 +522,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
|
484
522
|
## 📄 License
|
|
485
523
|
|
|
486
524
|
The gem is available as open source under the terms of
|
|
487
|
-
the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
525
|
+
the [MIT](https://github.com/appraisal-rb/appraisal2/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
488
526
|
|
|
489
527
|
### © Copyright
|
|
490
528
|
|
|
@@ -533,6 +571,7 @@ See [LICENSE.md][📄license] for the official copyright notice.
|
|
|
533
571
|
- Copyright (c) 2024 Joe Sharp
|
|
534
572
|
- Copyright (c) 2024 Sebastian Cohnen
|
|
535
573
|
- Copyright (c) 2024 Yevhenii Ponomarenko
|
|
574
|
+
- Copyright (c) 2026 Bob McKinven
|
|
536
575
|
- Copyright (c) 2026 Richard Kramer
|
|
537
576
|
|
|
538
577
|
</details>
|
|
@@ -546,11 +585,12 @@ I'm hoping to be able to pay for my kids' health insurance this month,
|
|
|
546
585
|
so if you value the work I am doing, I need your support.
|
|
547
586
|
Please consider sponsoring me or the project.
|
|
548
587
|
|
|
549
|
-
To join the community or get help
|
|
588
|
+
To join the community or get help, use the RubyForum or Discord.
|
|
550
589
|
|
|
590
|
+
[![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
551
591
|
[![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
552
592
|
|
|
553
|
-
To say "thanks!" ☝️ Join the
|
|
593
|
+
To say "thanks!" ☝️ Join the community or 👇️ send money.
|
|
554
594
|
|
|
555
595
|
[![Sponsor appraisal-rb/appraisal2 on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
|
|
556
596
|
|
|
@@ -591,11 +631,14 @@ Thanks for RTFM. ☺️
|
|
|
591
631
|
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
592
632
|
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
|
|
593
633
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
634
|
+
[✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
|
|
635
|
+
[✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
|
|
636
|
+
[✉️ruby-forum]: https://www.rubyforum.org/tag/appraisal2
|
|
594
637
|
|
|
595
638
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
596
639
|
[⛳️gem-namespace]: https://github.com/appraisal-rb/appraisal2
|
|
597
|
-
[⛳️namespace-img]: https://img.shields.io/badge/namespace-
|
|
598
|
-
[⛳️gem-name]: https://
|
|
640
|
+
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Appraisal-3C2D2D.svg?style=square&logo=ruby&logoColor=white
|
|
641
|
+
[⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/appraisal2
|
|
599
642
|
[⛳️name-img]: https://img.shields.io/badge/name-appraisal2-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
|
|
600
643
|
[⛳️tag-img]: https://img.shields.io/github/tag/appraisal-rb/appraisal2.svg
|
|
601
644
|
[⛳️tag]: https://github.com/appraisal-rb/appraisal2/releases
|
|
@@ -636,7 +679,7 @@ Thanks for RTFM. ☺️
|
|
|
636
679
|
[📜src-gl]: https://gitlab.com/appraisal-rb/appraisal2
|
|
637
680
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
638
681
|
[📜src-cb]: https://codeberg.org/appraisal-rb/appraisal2
|
|
639
|
-
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=
|
|
682
|
+
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
|
|
640
683
|
[📜src-gh]: https://github.com/appraisal-rb/appraisal2
|
|
641
684
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
642
685
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
@@ -644,9 +687,9 @@ Thanks for RTFM. ☺️
|
|
|
644
687
|
[📜gh-wiki]: https://github.com/appraisal-rb/appraisal2/wiki
|
|
645
688
|
[📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
|
|
646
689
|
[📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
|
|
647
|
-
[👽dl-rank]: https://
|
|
648
|
-
[👽dl-ranki]: https://img.shields.io/gem/
|
|
649
|
-
[👽version]: https://
|
|
690
|
+
[👽dl-rank]: https://clickgems.clickhouse.com/dashboard/appraisal2
|
|
691
|
+
[👽dl-ranki]: https://img.shields.io/gem/dt/appraisal2.svg
|
|
692
|
+
[👽version]: https://clickgems.clickhouse.com/dashboard/appraisal2
|
|
650
693
|
[👽versioni]: https://img.shields.io/gem/v/appraisal2.svg
|
|
651
694
|
[🏀qlty-mnt]: https://qlty.sh/gh/appraisal-rb/projects/appraisal2
|
|
652
695
|
[🏀qlty-mnti]: https://qlty.sh/gh/appraisal-rb/projects/appraisal2/maintainability.svg
|
|
@@ -752,12 +795,12 @@ Thanks for RTFM. ☺️
|
|
|
752
795
|
[📌gitmoji]: https://gitmoji.dev
|
|
753
796
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
754
797
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
755
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-
|
|
798
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-1.007-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
756
799
|
[🔐security]: https://github.com/appraisal-rb/appraisal2/blob/main/SECURITY.md
|
|
757
800
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
758
801
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
759
802
|
[📄license]: LICENSE.md
|
|
760
|
-
[📄license-ref]: MIT.md
|
|
803
|
+
[📄license-ref]: https://github.com/appraisal-rb/appraisal2/blob/main/MIT.md
|
|
761
804
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
762
805
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
763
806
|
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
|
data/lib/appraisal/appraisal.rb
CHANGED
|
@@ -94,7 +94,7 @@ module Appraisal
|
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def gemfile_path
|
|
97
|
-
|
|
97
|
+
FileUtils.mkdir_p(gemfile_root)
|
|
98
98
|
|
|
99
99
|
gemfile_root.join(gemfile_name).to_s
|
|
100
100
|
end
|
|
@@ -119,7 +119,8 @@ module Appraisal
|
|
|
119
119
|
private
|
|
120
120
|
|
|
121
121
|
def gemfile_root
|
|
122
|
-
|
|
122
|
+
gemfiles_root = ENV["APPRAISAL_GEMFILES_ROOT"] || "gemfiles"
|
|
123
|
+
project_root + gemfiles_root
|
|
123
124
|
end
|
|
124
125
|
|
|
125
126
|
def project_root
|