appraisal2 3.1.2 → 3.1.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 +35 -1
- data/CONTRIBUTING.md +2 -2
- data/FUNDING.md +1 -5
- data/README.md +66 -107
- data/lib/appraisal/bundler_dsl.rb +1 -1
- data/lib/appraisal/dependency_list.rb +1 -1
- data/lib/appraisal/gem_manager/bundler_adapter.rb +23 -11
- data/lib/appraisal.rb +2 -2
- data/lib/appraisal2/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +48 -12
- 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: 5697b5d78bd1b3ef5881a7e0bdce99ae1d786406652771d072f42e9d131c3d13
|
|
4
|
+
data.tar.gz: af85c613932969ec699dc5297a8dc4f7d3601d6ce898aa3d5750eba68d72febc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ce5998ea1956670ef493180dcd23ec3026d9468ff87849424a6c491578be7260a277009cb1be39cb29ede5c68507116b61c0cb8473cbe520c5d426f547c55aff
|
|
7
|
+
data.tar.gz: eed7065a3a876f9416cdc12e6915bdc692c6327dacc13e027b400fc2a120ac06cc1d31b6afb574868c48b76f935212d5938a7adadfc0cd55d44a230cd2e4e57e
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -22,14 +22,46 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
22
22
|
|
|
23
23
|
### Changed
|
|
24
24
|
|
|
25
|
+
- Clarified README Bundler path caching guidance and removed hard paragraph
|
|
26
|
+
wraps from prose.
|
|
27
|
+
|
|
25
28
|
### Deprecated
|
|
26
29
|
|
|
27
30
|
### Removed
|
|
28
31
|
|
|
32
|
+
- Removed unused legacy root and fixture Gemfiles for Ruby 1.8, 2.0, and 2.1.
|
|
33
|
+
|
|
29
34
|
### Fixed
|
|
30
35
|
|
|
36
|
+
- Re-normalized templated Gemfiles to Ruby 1.8-compatible syntax after
|
|
37
|
+
templating.
|
|
38
|
+
- Restored `GEM_HOME` after acceptance specs so generated fixture gems do not leak into later Bundler subprocesses.
|
|
39
|
+
- Stopped passing Bundler's deprecated `bundle install --path` flag when resolving Appraisal `--path` installs.
|
|
40
|
+
- Disabled `ruby/setup-ruby` Bundler caching in the JRuby 9.3 workflow and
|
|
41
|
+
run a serial Bundler install to avoid legacy fallback index failures.
|
|
42
|
+
|
|
31
43
|
### Security
|
|
32
44
|
|
|
45
|
+
## [3.1.3] - 2026-06-22
|
|
46
|
+
|
|
47
|
+
- TAG: [v3.1.3][3.1.3t]
|
|
48
|
+
- COVERAGE: 90.21% -- 820/909 lines in 29 files
|
|
49
|
+
- BRANCH COVERAGE: 79.10% -- 159/201 branches in 29 files
|
|
50
|
+
- 42.25% documented
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- Added support for JRuby 10.1 and TruffleRuby 34.0.
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- Retemplated project metadata and CI/development automation with `kettle-jem` v7.0.0.
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- Updated local GemMine fixture workspace path wiring to use the migrated
|
|
63
|
+
`kettle-dev` organization directory.
|
|
64
|
+
|
|
33
65
|
## [3.1.2] - 2026-06-11
|
|
34
66
|
|
|
35
67
|
- TAG: [v3.1.2][3.1.2t]
|
|
@@ -382,7 +414,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
382
414
|
- code coverage tracked with Coveralls, QLTY.sh, and the kettle-soup-cover gem
|
|
383
415
|
- other minor fixes and improvements
|
|
384
416
|
|
|
385
|
-
[Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.
|
|
417
|
+
[Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.3...HEAD
|
|
418
|
+
[3.1.3]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.2...v3.1.3
|
|
419
|
+
[3.1.3t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.1.3
|
|
386
420
|
[3.1.2]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.1...v3.1.2
|
|
387
421
|
[3.1.2t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.1.2
|
|
388
422
|
[3.1.1]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.0...v3.1.1
|
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/appraisal-rb/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/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).
|
|
@@ -21,34 +21,24 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
21
21
|
|
|
22
22
|
## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
|
|
23
23
|
|
|
24
|
-
Appraisal2 integrates with bundler and rake to test your library against
|
|
25
|
-
different versions of dependencies in repeatable scenarios called "appraisals."
|
|
26
|
-
Appraisal2 is designed to make it easy to check for regressions in your library
|
|
27
|
-
without interfering with day-to-day development using Bundler.
|
|
24
|
+
Appraisal2 integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals." Appraisal2 is designed to make it easy to check for regressions in your library without interfering with day-to-day development using Bundler.
|
|
28
25
|
|
|
29
|
-
Appraisal2 is a hard fork of the venerable appraisal gem,
|
|
30
|
-
which thoughtbot maintained for many years.
|
|
31
|
-
Many thanks to [thoughtbot](https://github.com/thoughtbot/),
|
|
32
|
-
and [Joe Ferris](https://github.com/jferris), the original author!
|
|
26
|
+
Appraisal2 is a hard fork of the venerable appraisal gem, which thoughtbot maintained for many years. Many thanks to [thoughtbot](https://github.com/thoughtbot/), and [Joe Ferris](https://github.com/jferris), the original author!
|
|
33
27
|
|
|
34
28
|
Appraisal2 adds:
|
|
35
29
|
|
|
36
30
|
- support for `eval_gemfile`
|
|
37
|
-
- explicit `generate`, `install`, and `update` workflows, so CI can resolve
|
|
38
|
-
|
|
39
|
-
- `generate-install
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
`generate-update`
|
|
43
|
-
- lifecycle hooks, including `Appraisal.transform_gemfile`, for plugins that
|
|
44
|
-
need to normalize generated appraisal gemfiles before Appraisal2 writes them
|
|
45
|
-
- support for caching gems across appraisals in CI workflows by setting `BUNDLE_PATH` in env
|
|
31
|
+
- explicit `generate`, `install`, and `update` workflows, so CI can resolve already-generated appraisal gemfiles without rewriting them
|
|
32
|
+
- `generate-install` and `generate-update` commands for workflows that need to regenerate appraisal gemfiles before resolving dependencies
|
|
33
|
+
- named appraisal support for `generate`, `generate-install`, and `generate-update`
|
|
34
|
+
- lifecycle hooks, including `Appraisal.transform_gemfile`, for plugins that need to normalize generated appraisal gemfiles before Appraisal2 writes them
|
|
35
|
+
- support for caching gems across appraisals in CI workflows by setting `BUNDLE_PATH` in env; Appraisal2's `--path` option uses Bundler path configuration instead of the deprecated `bundle install --path` CLI flag
|
|
46
36
|
- support for [ORE](https://github.com/contriboss/ore-light) as an alternative gem manager (faster than bundler!)
|
|
47
37
|
- For easy setup in **Gitea** [Actions](https://docs.gitea.com/usage/actions/overview), **Forgejo** [Actions](https://forgejo.org/docs/next/admin/actions/), **Codeberg** [Actions](https://docs.codeberg.org/ci/actions/), or **GitHub** [Actions](https://github.com/marketplace/actions/setup-ruby-with-rv-and-ore) check out [appraisal-rb/setup-ruby-flash](https://github.com/appraisal-rb/setup-ruby-flash)
|
|
48
38
|
- support for Ruby 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6 (all removed, or planned-to-be, in thoughtbot's `appraisal`)
|
|
49
39
|
- NOTE: The [setup-ruby GH Action](https://github.com/ruby/setup-ruby) only ships support for Ruby 2.3+, so older Rubies are no longer tested in CI. Compatibility is assumed thanks to [![Enforced Code Style Linter][💎rlts-img]][💎rlts] enforcing the syntax for the oldest supported Ruby, which is Ruby v1.8. File a bug if you find something broken.
|
|
50
|
-
- Support for JRuby 9.4
|
|
51
|
-
- Support for Truffle Ruby 22.3
|
|
40
|
+
- Support for JRuby 9.2, 9.3, 9.4, 10.0, 10.1
|
|
41
|
+
- Support for Truffle Ruby 22.3, 23.0, 23.1, 24.2, 25.0, 33.0, 34.0
|
|
52
42
|
- Support for MRI Ruby 4+
|
|
53
43
|
- updated and improved documentation
|
|
54
44
|
- many other fixes and improvements. See [CHANGELOG](CHANGELOG.md) for details.
|
|
@@ -57,9 +47,9 @@ Appraisal2 adds:
|
|
|
57
47
|
|
|
58
48
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
59
49
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
60
|
-
| 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]|
|
|
61
|
-
| 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]|
|
|
62
|
-
| Works with MRI Ruby 4 | [![Ruby
|
|
50
|
+
| 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]|
|
|
51
|
+
| 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]|
|
|
52
|
+
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
63
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]|
|
|
64
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]|
|
|
65
55
|
| Works with MRI Ruby 1 | ![Ruby 1.8 Compat][💎ruby-1.8i] ![Ruby 1.9 Compat][💎ruby-1.9i]|
|
|
@@ -79,9 +69,24 @@ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
|
79
69
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
80
70
|
not practical for the current toolchain.
|
|
81
71
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
72
|
+
<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>
|
|
73
|
+
|
|
74
|
+
The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
75
|
+
|
|
76
|
+
<details markdown="1">
|
|
77
|
+
<summary>How kettle-dev manages complexity in tests</summary>
|
|
78
|
+
|
|
79
|
+
| Gem | Source | Role | Daily download rank |
|
|
80
|
+
|-----|--------|------|---------------------|
|
|
81
|
+
| [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) |
|
|
82
|
+
| [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) |
|
|
83
|
+
| [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) |
|
|
84
|
+
| [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) |
|
|
85
|
+
| [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) |
|
|
86
|
+
| [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) |
|
|
87
|
+
| [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [](https://bestgems.org/gems/turbo_tests2) |
|
|
88
|
+
|
|
89
|
+
</details>
|
|
85
90
|
|
|
86
91
|
### Federated DVCS
|
|
87
92
|
|
|
@@ -138,8 +143,7 @@ gem install appraisal2
|
|
|
138
143
|
|
|
139
144
|
## ⚙️ Configuration
|
|
140
145
|
|
|
141
|
-
Create an `Appraisals` file at the root of your project, then define one or
|
|
142
|
-
more dependency scenarios:
|
|
146
|
+
Create an `Appraisals` file at the root of your project, then define one or more dependency scenarios:
|
|
143
147
|
|
|
144
148
|
```ruby
|
|
145
149
|
appraise "rails-7" do
|
|
@@ -151,15 +155,11 @@ appraise "rails-8" do
|
|
|
151
155
|
end
|
|
152
156
|
```
|
|
153
157
|
|
|
154
|
-
Each appraisal starts from your root `Gemfile`, then applies the dependency
|
|
155
|
-
changes declared in the matching `appraise` block. Generated appraisal gemfiles
|
|
156
|
-
are written to `gemfiles/*.gemfile`.
|
|
158
|
+
Each appraisal starts from your root `Gemfile`, then applies the dependency changes declared in the matching `appraise` block. Generated appraisal gemfiles are written to `gemfiles/*.gemfile`.
|
|
157
159
|
|
|
158
160
|
### Generated Gemfile Hooks
|
|
159
161
|
|
|
160
|
-
Appraisal2 3.1.0 adds lifecycle hooks for companion gems and local tooling.
|
|
161
|
-
The primary hook is `Appraisal.transform_gemfile`, which receives generated
|
|
162
|
-
gemfile content before Appraisal2 writes it.
|
|
162
|
+
Appraisal2 3.1.0 adds lifecycle hooks for companion gems and local tooling. The primary hook is `Appraisal.transform_gemfile`, which receives generated gemfile content before Appraisal2 writes it.
|
|
163
163
|
|
|
164
164
|
```ruby
|
|
165
165
|
Appraisal.transform_gemfile do |content, context|
|
|
@@ -169,20 +169,13 @@ Appraisal.transform_gemfile do |content, context|
|
|
|
169
169
|
end
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
-
Hooks run in memory. Appraisal2 writes the final transformed content once, after
|
|
173
|
-
all registered transforms have run. A transform may accept only `content`, or it
|
|
174
|
-
may accept `content, context`. Returning `nil` leaves the current content
|
|
175
|
-
unchanged.
|
|
172
|
+
Hooks run in memory. Appraisal2 writes the final transformed content once, after all registered transforms have run. A transform may accept only `content`, or it may accept `content, context`. Returning `nil` leaves the current content unchanged.
|
|
176
173
|
|
|
177
|
-
This is intended for plugin gems that need deterministic generated output, such
|
|
178
|
-
as style normalization of appraisal gemfiles, without monkey-patching Appraisal2
|
|
179
|
-
internals.
|
|
174
|
+
This is intended for plugin gems that need deterministic generated output, such as style normalization of appraisal gemfiles, without monkey-patching Appraisal2 internals.
|
|
180
175
|
|
|
181
176
|
### Generator Plugins
|
|
182
177
|
|
|
183
|
-
Use `plugin` in `Appraisals` for companion gems that must be loaded while
|
|
184
|
-
Appraisal2 evaluates and generates appraisal gemfiles, but must not be written
|
|
185
|
-
as dependencies in the generated appraisal gemfiles.
|
|
178
|
+
Use `plugin` in `Appraisals` for companion gems that must be loaded while Appraisal2 evaluates and generates appraisal gemfiles, but must not be written as dependencies in the generated appraisal gemfiles.
|
|
186
179
|
|
|
187
180
|
```ruby
|
|
188
181
|
plugin "appraisal2-rubocop",
|
|
@@ -190,19 +183,11 @@ plugin "appraisal2-rubocop",
|
|
|
190
183
|
:optional => true
|
|
191
184
|
```
|
|
192
185
|
|
|
193
|
-
`plugin` requires the requested path in the active generator bundle. It does not
|
|
194
|
-
call `gem`, and it is not serialized into `gemfiles/*.gemfile`. This keeps
|
|
195
|
-
generator-only tooling out of appraisals that target older Rubies, while still
|
|
196
|
-
allowing modern generator workflows to load hooks such as
|
|
197
|
-
`Appraisal.transform_gemfile`.
|
|
186
|
+
`plugin` requires the requested path in the active generator bundle. It does not call `gem`, and it is not serialized into `gemfiles/*.gemfile`. This keeps generator-only tooling out of appraisals that target older Rubies, while still allowing modern generator workflows to load hooks such as `Appraisal.transform_gemfile`.
|
|
198
187
|
|
|
199
|
-
Set `:optional => true` when some workflows evaluate `Appraisals` without the
|
|
200
|
-
plugin dependency installed. This is useful when a CI matrix uses one generator
|
|
201
|
-
bundle for old-Ruby appraisals and another modern workflow provides the plugin.
|
|
188
|
+
Set `:optional => true` when some workflows evaluate `Appraisals` without the plugin dependency installed. This is useful when a CI matrix uses one generator bundle for old-Ruby appraisals and another modern workflow provides the plugin.
|
|
202
189
|
|
|
203
|
-
If the generator bundle needs dependencies that must not be copied into every
|
|
204
|
-
generated appraisal gemfile, wrap those root Gemfile declarations with
|
|
205
|
-
`generator_only` for Appraisal2 and leave the Bundler branch unchanged:
|
|
190
|
+
If the generator bundle needs dependencies that must not be copied into every generated appraisal gemfile, wrap those root Gemfile declarations with `generator_only` for Appraisal2 and leave the Bundler branch unchanged:
|
|
206
191
|
|
|
207
192
|
```ruby
|
|
208
193
|
if respond_to?(:generator_only)
|
|
@@ -214,56 +199,39 @@ else
|
|
|
214
199
|
end
|
|
215
200
|
```
|
|
216
201
|
|
|
217
|
-
Bundler evaluates the `else` branch while installing the active generator
|
|
218
|
-
bundle. Appraisal2 evaluates the `generator_only` branch while parsing the root
|
|
219
|
-
Gemfile, but intentionally does not serialize that block into generated
|
|
220
|
-
appraisal gemfiles.
|
|
202
|
+
Bundler evaluates the `else` branch while installing the active generator bundle. Appraisal2 evaluates the `generator_only` branch while parsing the root Gemfile, but intentionally does not serialize that block into generated appraisal gemfiles.
|
|
221
203
|
|
|
222
204
|
## 🔧 Basic Usage
|
|
223
205
|
|
|
224
|
-
Once you've configured the appraisals you want to use, you need to install the
|
|
225
|
-
dependencies for each appraisal:
|
|
206
|
+
Once you've configured the appraisals you want to use, you need to install the dependencies for each appraisal:
|
|
226
207
|
|
|
227
208
|
$ bundle exec appraisal install
|
|
228
209
|
|
|
229
|
-
This resolves, installs, and locks dependencies for each generated appraisal
|
|
230
|
-
gemfile using bundler. If an appraisal gemfile is missing, `install` generates
|
|
231
|
-
that missing gemfile first, preserving the basic setup workflow.
|
|
210
|
+
This resolves, installs, and locks dependencies for each generated appraisal gemfile using bundler. If an appraisal gemfile is missing, `install` generates that missing gemfile first, preserving the basic setup workflow.
|
|
232
211
|
|
|
233
|
-
When you intentionally want to regenerate every appraisal gemfile before
|
|
234
|
-
installing dependencies, use:
|
|
212
|
+
When you intentionally want to regenerate every appraisal gemfile before installing dependencies, use:
|
|
235
213
|
|
|
236
214
|
$ bundle exec appraisal generate-install
|
|
237
215
|
|
|
238
|
-
Once you have your dependencies set up, you can run any command in a single
|
|
239
|
-
appraisal:
|
|
216
|
+
Once you have your dependencies set up, you can run any command in a single appraisal:
|
|
240
217
|
|
|
241
218
|
$ bundle exec appraisal rails-3 rake test
|
|
242
219
|
|
|
243
|
-
This will run `rake test` using the dependencies configured for Rails 3. You can
|
|
244
|
-
also run each appraisal in turn:
|
|
220
|
+
This will run `rake test` using the dependencies configured for Rails 3. You can also run each appraisal in turn:
|
|
245
221
|
|
|
246
222
|
$ bundle exec appraisal rake test
|
|
247
223
|
|
|
248
|
-
If you want to use only the dependencies from your Gemfile, just run `rake
|
|
249
|
-
test` as normal. This allows you to keep running with the latest versions of
|
|
250
|
-
your dependencies in quick test runs, but keep running the tests in older
|
|
251
|
-
versions to check for regressions.
|
|
224
|
+
If you want to use only the dependencies from your Gemfile, just run `rake test` as normal. This allows you to keep running with the latest versions of your dependencies in quick test runs, but keep running the tests in older versions to check for regressions.
|
|
252
225
|
|
|
253
|
-
In the case that you want to run all the appraisals by default when you run
|
|
254
|
-
`rake`, you can override your default Rake task by putting this into your Rakefile:
|
|
226
|
+
In the case that you want to run all the appraisals by default when you run `rake`, you can override your default Rake task by putting this into your Rakefile:
|
|
255
227
|
|
|
256
228
|
if !ENV["APPRAISAL_INITIALIZED"] && ENV.fetch("CI", "false").casecmp("false") == 0
|
|
257
229
|
task :default => :appraisal
|
|
258
230
|
end
|
|
259
231
|
|
|
260
|
-
(Appraisal2 sets `APPRAISAL_INITIALIZED` environment variable when it runs your
|
|
261
|
-
process. We put a check here to ensure that `appraisal rake` command should run
|
|
262
|
-
your real default task, which usually is your `test` task.)
|
|
232
|
+
(Appraisal2 sets `APPRAISAL_INITIALIZED` environment variable when it runs your process. We put a check here to ensure that `appraisal rake` command should run your real default task, which usually is your `test` task.)
|
|
263
233
|
|
|
264
|
-
Note that this may conflict with your CI setup if you decide to split the test
|
|
265
|
-
into multiple processes by Appraisal2 and you are using `rake` to run tests by
|
|
266
|
-
default.
|
|
234
|
+
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.
|
|
267
235
|
|
|
268
236
|
### Commands
|
|
269
237
|
|
|
@@ -279,10 +247,7 @@ appraisal update [LIST_OF_GEMS] # Update dependencies for each generated apprai
|
|
|
279
247
|
appraisal version # Display the version and exit
|
|
280
248
|
```
|
|
281
249
|
|
|
282
|
-
Since Appraisal2 3.1.0, `install` and `update` do not rewrite existing appraisal
|
|
283
|
-
gemfiles. They operate on the generated files already present under `gemfiles/`.
|
|
284
|
-
This matters in CI and plugin workflows where generated gemfiles may be
|
|
285
|
-
normalized by hooks or committed as stable inputs.
|
|
250
|
+
Since Appraisal2 3.1.0, `install` and `update` do not rewrite existing appraisal gemfiles. They operate on the generated files already present under `gemfiles/`. This matters in CI and plugin workflows where generated gemfiles may be normalized by hooks or committed as stable inputs.
|
|
286
251
|
|
|
287
252
|
Use the command that matches the lifecycle you want:
|
|
288
253
|
|
|
@@ -294,17 +259,13 @@ Use the command that matches the lifecycle you want:
|
|
|
294
259
|
| `generate-install` | Yes | Yes, via install | First setup, or after intentional Appraisals changes |
|
|
295
260
|
| `generate-update` | Yes | Yes, via update | Regenerate gemfiles, then update dependency locks |
|
|
296
261
|
|
|
297
|
-
The deprecated rake task `rake appraisal:install` now delegates to
|
|
298
|
-
`appraisal generate-install`, preserving its historical generate-and-install
|
|
299
|
-
behavior while the CLI commands remain explicit.
|
|
262
|
+
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.
|
|
300
263
|
|
|
301
264
|
### Command Options
|
|
302
265
|
|
|
303
266
|
Built-in dependency commands support the following options:
|
|
304
267
|
|
|
305
|
-
**Important:** These options apply **only** to Appraisal's built-in dependency
|
|
306
|
-
commands. They do **not** apply when running external commands like
|
|
307
|
-
`bundle install` or `bundle update`.
|
|
268
|
+
**Important:** These options apply **only** to Appraisal's built-in dependency commands. They do **not** apply when running external commands like `bundle install` or `bundle update`.
|
|
308
269
|
|
|
309
270
|
| Option | Description |
|
|
310
271
|
|--------|-------------|
|
|
@@ -319,8 +280,7 @@ commands. They do **not** apply when running external commands like
|
|
|
319
280
|
|
|
320
281
|
#### Using Appraisal's built-in commands with named appraisals
|
|
321
282
|
|
|
322
|
-
When using Appraisal's built-in commands with a specific appraisal name, place
|
|
323
|
-
the appraisal name first, then the command, then any options:
|
|
283
|
+
When using Appraisal's built-in commands with a specific appraisal name, place the appraisal name first, then the command, then any options:
|
|
324
284
|
|
|
325
285
|
```bash
|
|
326
286
|
# ✅ Correct order: appraisal <NAME> <COMMAND> [OPTIONS]
|
|
@@ -361,8 +321,7 @@ bundle exec appraisal rails-7 generate-update rails rack
|
|
|
361
321
|
|
|
362
322
|
#### Running external commands with named appraisals
|
|
363
323
|
|
|
364
|
-
For running external commands (like `rake test`, `rspec`, etc.) with a specific appraisal,
|
|
365
|
-
the structure is the same: appraisal name first, then the command:
|
|
324
|
+
For running external commands (like `rake test`, `rspec`, etc.) with a specific appraisal, the structure is the same: appraisal name first, then the command:
|
|
366
325
|
|
|
367
326
|
```bash
|
|
368
327
|
# Run any external command with a specific appraisal's dependencies
|
|
@@ -425,7 +384,7 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
|
|
|
425
384
|
No sponsors yet. Be the first!
|
|
426
385
|
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
427
386
|
|
|
428
|
-
[kettle-readme-backers]: https://github.com/appraisal-rb/appraisal2/blob/main/
|
|
387
|
+
[kettle-readme-backers]: https://github.com/appraisal-rb/appraisal2/blob/main/bin/kettle-readme-backers
|
|
429
388
|
|
|
430
389
|
### Another way to support open-source
|
|
431
390
|
|
|
@@ -437,7 +396,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
437
396
|
|
|
438
397
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
439
398
|
|
|
440
|
-
[![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
|
|
399
|
+
[![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]
|
|
441
400
|
|
|
442
401
|
## 🔐 Security
|
|
443
402
|
|
|
@@ -483,7 +442,7 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
483
442
|
|
|
484
443
|
Also see GitLab Contributors: [https://gitlab.com/appraisal-rb/appraisal2/-/graphs/main][🚎contributors-gl]
|
|
485
444
|
|
|
486
|
-
<details>
|
|
445
|
+
<details markdown="1">
|
|
487
446
|
<summary>⭐️ Star History</summary>
|
|
488
447
|
|
|
489
448
|
<a href="https://star-history.com/appraisal-rb/appraisal2&Date">
|
|
@@ -618,12 +577,8 @@ Thanks for RTFM. ☺️
|
|
|
618
577
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
619
578
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
620
579
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
621
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
622
|
-
[🖇polar]: https://polar.sh/pboling
|
|
623
580
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
624
581
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
625
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
626
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
627
582
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
628
583
|
[🖇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
|
|
629
584
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
@@ -713,11 +668,13 @@ Thanks for RTFM. ☺️
|
|
|
713
668
|
[🚎jruby-9.2-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9.2.yml
|
|
714
669
|
[🚎jruby-9.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9.3.yml
|
|
715
670
|
[🚎jruby-9.4-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9.4.yml
|
|
671
|
+
[🚎jruby-10.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-10.0.yml
|
|
716
672
|
[🚎truby-22.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-22.3.yml
|
|
717
673
|
[🚎truby-23.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-23.0.yml
|
|
718
674
|
[🚎truby-23.1-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-23.1.yml
|
|
719
675
|
[🚎truby-24.2-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-24.2.yml
|
|
720
676
|
[🚎truby-25.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-25.0.yml
|
|
677
|
+
[🚎truby-33.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-33.0.yml
|
|
721
678
|
[🚎2-cov-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/coverage.yml
|
|
722
679
|
[🚎2-cov-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/coverage.yml/badge.svg
|
|
723
680
|
[🚎3-hd-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/heads.yml
|
|
@@ -753,7 +710,6 @@ Thanks for RTFM. ☺️
|
|
|
753
710
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
754
711
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
755
712
|
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
756
|
-
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
757
713
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
758
714
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
759
715
|
[💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
@@ -761,10 +717,13 @@ Thanks for RTFM. ☺️
|
|
|
761
717
|
[💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
762
718
|
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
763
719
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
720
|
+
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
764
721
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
722
|
+
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
765
723
|
[💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
766
724
|
[💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
767
725
|
[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
726
|
+
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
768
727
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
769
728
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
770
729
|
[🤝gh-issues]: https://github.com/appraisal-rb/appraisal2/issues
|
|
@@ -821,7 +780,7 @@ Thanks for RTFM. ☺️
|
|
|
821
780
|
| Package | appraisal2 |
|
|
822
781
|
| Description | 🔍️ Appraisal2 integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals." |
|
|
823
782
|
| Homepage | https://github.com/appraisal-rb/appraisal2 |
|
|
824
|
-
| Source | https://github.com/appraisal-rb/appraisal2
|
|
783
|
+
| Source | https://github.com/appraisal-rb/appraisal2 |
|
|
825
784
|
| License | `MIT` |
|
|
826
|
-
| Funding | https://github.com/sponsors/pboling, https://
|
|
785
|
+
| Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/appraisal-rb, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/appraisal2, https://www.buymeacoffee.com/pboling |
|
|
827
786
|
<!-- kettle-jem:metadata:end -->
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "shellwords"
|
|
4
|
+
|
|
3
5
|
require_relative "base"
|
|
4
6
|
|
|
5
7
|
module Appraisal
|
|
@@ -26,13 +28,12 @@ module Appraisal
|
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
command = commands.join(" || ")
|
|
31
|
+
command = path_config_command(options["path"], command) if options["path"]
|
|
32
|
+
env = install_environment(options)
|
|
33
|
+
command_options = {:gemfile => gemfile_path}
|
|
34
|
+
command_options[:env] = env unless env.empty?
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
env = {"BUNDLE_DISABLE_SHARED_GEMS" => "1"}
|
|
32
|
-
Command.new(command, :gemfile => gemfile_path, :env => env).run
|
|
33
|
-
else
|
|
34
|
-
Command.new(command, :gemfile => gemfile_path).run
|
|
35
|
-
end
|
|
36
|
+
Command.new(command, command_options).run
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
def update(gems = [])
|
|
@@ -69,11 +70,7 @@ module Appraisal
|
|
|
69
70
|
end
|
|
70
71
|
end
|
|
71
72
|
|
|
72
|
-
|
|
73
|
-
if path
|
|
74
|
-
relative_path = project_root.join(options["path"])
|
|
75
|
-
options_strings << "--path #{relative_path}"
|
|
76
|
-
end
|
|
73
|
+
full_options.delete("path")
|
|
77
74
|
|
|
78
75
|
full_options.each do |flag, val|
|
|
79
76
|
options_strings << "--#{flag} #{val}"
|
|
@@ -81,6 +78,21 @@ module Appraisal
|
|
|
81
78
|
|
|
82
79
|
options_strings.join(" ") if options_strings != []
|
|
83
80
|
end
|
|
81
|
+
|
|
82
|
+
def path_config_command(path, command)
|
|
83
|
+
relative_path = project_root.join(path)
|
|
84
|
+
"bundle config set --local path #{Shellwords.escape(relative_path.to_s)} && (#{command})"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def install_environment(options)
|
|
88
|
+
env = {}
|
|
89
|
+
|
|
90
|
+
if options["path"].nil? && Bundler.settings[:path]
|
|
91
|
+
env["BUNDLE_DISABLE_SHARED_GEMS"] = "1"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
env
|
|
95
|
+
end
|
|
84
96
|
end
|
|
85
97
|
end
|
|
86
98
|
end
|
data/lib/appraisal.rb
CHANGED
data/lib/appraisal2/version.rb
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,10 +1,46 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: appraisal2
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.1.
|
|
4
|
+
version: 3.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
+
- Joe Ferris
|
|
8
|
+
- Dan Croak
|
|
9
|
+
- Gabe Berke-Williams
|
|
10
|
+
- Joseph Anthony Pasquale Holsten
|
|
11
|
+
- Nick Quaranto
|
|
12
|
+
- Prem Sichanugrist
|
|
13
|
+
- Gregory Ostermayr
|
|
14
|
+
- osheroff
|
|
15
|
+
- Jason Waldrip
|
|
16
|
+
- Marc Ignacio
|
|
17
|
+
- Phill Baker
|
|
18
|
+
- sanemat
|
|
19
|
+
- Juan González
|
|
20
|
+
- akihiro17
|
|
21
|
+
- Elliot Winkler
|
|
22
|
+
- M.Shibuya
|
|
23
|
+
- Vlad Bokov
|
|
24
|
+
- Geoff Massanek
|
|
25
|
+
- Ian Fosbery
|
|
26
|
+
- Teo Ljungberg
|
|
27
|
+
- Brad Gessler
|
|
28
|
+
- Oli Peate
|
|
7
29
|
- Peter H. Boling
|
|
30
|
+
- Antonis Berkakis
|
|
31
|
+
- Jared Beck
|
|
32
|
+
- Nick Charlton
|
|
33
|
+
- Brian Hawley
|
|
34
|
+
- David Rodríguez
|
|
35
|
+
- James Ebentier
|
|
36
|
+
- Nicolas Rodriguez
|
|
37
|
+
- André Arko
|
|
38
|
+
- Joe Sharp
|
|
39
|
+
- aymeric-ledorze
|
|
40
|
+
- Kyle Fazzari
|
|
41
|
+
- Sebastian Cohnen
|
|
42
|
+
- Yevhenii Ponomarenko
|
|
43
|
+
- Richard Kramer
|
|
8
44
|
bindir: exe
|
|
9
45
|
cert_chain:
|
|
10
46
|
- |
|
|
@@ -88,7 +124,7 @@ dependencies:
|
|
|
88
124
|
version: '2.2'
|
|
89
125
|
- - ">="
|
|
90
126
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: 2.2.
|
|
127
|
+
version: 2.2.15
|
|
92
128
|
type: :development
|
|
93
129
|
prerelease: false
|
|
94
130
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -98,7 +134,7 @@ dependencies:
|
|
|
98
134
|
version: '2.2'
|
|
99
135
|
- - ">="
|
|
100
136
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: 2.2.
|
|
137
|
+
version: 2.2.15
|
|
102
138
|
- !ruby/object:Gem::Dependency
|
|
103
139
|
name: bundler-audit
|
|
104
140
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -142,7 +178,7 @@ dependencies:
|
|
|
142
178
|
version: '2.0'
|
|
143
179
|
- - ">="
|
|
144
180
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: 2.0.
|
|
181
|
+
version: 2.0.6
|
|
146
182
|
type: :development
|
|
147
183
|
prerelease: false
|
|
148
184
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -152,7 +188,7 @@ dependencies:
|
|
|
152
188
|
version: '2.0'
|
|
153
189
|
- - ">="
|
|
154
190
|
- !ruby/object:Gem::Version
|
|
155
|
-
version: 2.0.
|
|
191
|
+
version: 2.0.6
|
|
156
192
|
- !ruby/object:Gem::Dependency
|
|
157
193
|
name: turbo_tests2
|
|
158
194
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -162,7 +198,7 @@ dependencies:
|
|
|
162
198
|
version: '3.1'
|
|
163
199
|
- - ">="
|
|
164
200
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: 3.1.
|
|
201
|
+
version: 3.1.4
|
|
166
202
|
type: :development
|
|
167
203
|
prerelease: false
|
|
168
204
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -172,7 +208,7 @@ dependencies:
|
|
|
172
208
|
version: '3.1'
|
|
173
209
|
- - ">="
|
|
174
210
|
- !ruby/object:Gem::Version
|
|
175
|
-
version: 3.1.
|
|
211
|
+
version: 3.1.4
|
|
176
212
|
- !ruby/object:Gem::Dependency
|
|
177
213
|
name: ruby-progressbar
|
|
178
214
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -216,7 +252,7 @@ dependencies:
|
|
|
216
252
|
version: '2.0'
|
|
217
253
|
- - ">="
|
|
218
254
|
- !ruby/object:Gem::Version
|
|
219
|
-
version: 2.0.
|
|
255
|
+
version: 2.0.3
|
|
220
256
|
type: :development
|
|
221
257
|
prerelease: false
|
|
222
258
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -226,7 +262,7 @@ dependencies:
|
|
|
226
262
|
version: '2.0'
|
|
227
263
|
- - ">="
|
|
228
264
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: 2.0.
|
|
265
|
+
version: 2.0.3
|
|
230
266
|
- !ruby/object:Gem::Dependency
|
|
231
267
|
name: activesupport
|
|
232
268
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -415,10 +451,10 @@ licenses:
|
|
|
415
451
|
- MIT
|
|
416
452
|
metadata:
|
|
417
453
|
homepage_uri: https://appraisal2.galtzo.com
|
|
418
|
-
source_code_uri: https://github.com/appraisal-rb/appraisal2/tree/v3.1.
|
|
419
|
-
changelog_uri: https://github.com/appraisal-rb/appraisal2/blob/v3.1.
|
|
454
|
+
source_code_uri: https://github.com/appraisal-rb/appraisal2/tree/v3.1.3
|
|
455
|
+
changelog_uri: https://github.com/appraisal-rb/appraisal2/blob/v3.1.3/CHANGELOG.md
|
|
420
456
|
bug_tracker_uri: https://github.com/appraisal-rb/appraisal2/issues
|
|
421
|
-
documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.1.
|
|
457
|
+
documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.1.3
|
|
422
458
|
funding_uri: https://github.com/sponsors/pboling
|
|
423
459
|
wiki_uri: https://github.com/appraisal-rb/appraisal2/wiki
|
|
424
460
|
news_uri: https://www.railsbling.com/tags/appraisal2
|
metadata.gz.sig
CHANGED
|
Binary file
|