appraisal2 3.0.0 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48c10cc390c3e867c853049163f6aace2a3980439f6fae81dc6c689131b431a4
4
- data.tar.gz: 2db45bd980fc49813d3f4f70dd40dc604b492b6ff8e6954eb93f2b71a4aa9b52
3
+ metadata.gz: 0d99024fa22281da747f8273842cf8651188efb08ae7a264b2fbe762bcb7f087
4
+ data.tar.gz: 70bcb60456ae4e863f19f1f66fa55acc6c517df8c239d0c00de76bbddb722096
5
5
  SHA512:
6
- metadata.gz: d74930e7289feb1f3731044f42616a71fe8da8d6c899929dedff8e3381dfcf6bd7c5481413c4086d508bd5c10668e29540d86a30ef6f65b74a87887043b3af85
7
- data.tar.gz: 73a486be485a24ab59234bd0dd97bf93b3c388a1f5c46fcbc73a6809ff248571e81380d009560fe9937e16aa4654bc812b3e81fd1d6ece9caa5f2085d9201720
6
+ metadata.gz: 50235c55423b943d379f64eb92a176d9a93e927affa4fd6de9e0e5af2e6358989a73950ca765b5f3b7aa326dbdec732f8b30632c26487dc94eb3fa3f71fabfc5
7
+ data.tar.gz: 9243c48f2572f09ab117fe0a906222f2883938809bfea5318f2b331395fd265c9ad36580c0a34dc00aec7f9952e0d1fd2ba0f375990ae274975a1774d26704d3
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -6,23 +6,93 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [Unreleased]
9
+
9
10
  ### Added
11
+
10
12
  ### Changed
13
+
11
14
  ### Deprecated
15
+
12
16
  ### Removed
17
+
13
18
  ### Fixed
19
+
14
20
  ### Security
15
21
 
16
- ## [3.0.0] - 2025-07-27
17
- - Initial release as hard fork, from [appraisal v3.0.0.rc1](https://github.com/thoughtbot/appraisal/commit/602cdd9b5f8cb8f36992733422f69312b172f427), with many improvements - by @pboling
22
+ ## [3.0.1] - 2026-02-06
23
+
24
+ - TAG: [v3.0.1][3.0.1t]
25
+ - COVERAGE: 77.11% -- 603/782 lines in 27 files
26
+ - BRANCH COVERAGE: 83.96% -- 89/106 branches in 27 files
27
+ - 43.03% documented
28
+
29
+ ### Added
30
+
31
+ - Support for [ore-light](https://github.com/contriboss/ore-light) as an alternative gem manager via `--gem-manager=ore` CLI option
32
+ - New `GemManager::OreAdapter` class implementing ore-light integration
33
+ - New `GemManager::BundlerAdapter` class (extracted from existing bundler logic)
34
+ - New `GemManager::Factory` class for creating gem manager adapters
35
+ - New `GemManager::Base` abstract base class defining the gem manager interface
36
+ - New `OreNotAvailableError` and `UnknownGemManagerError` error classes
37
+ - Acceptance tests for ore install and update commands (tagged with `:ore` metadata for conditional execution)
38
+ - Unit tests for all gem manager adapter classes
39
+ - README documentation for ore usage, including installation, CLI options, and example workflows
40
+ - New `-g` / `--gem-manager` CLI option to select gem manager (bundler or ore) for install/update commands
41
+ - New `Appraisal::Customize.reset!` class method to reset customization state (useful for testing)
42
+ - Improved test coverage from 66.7% to 76.4% line coverage, 61.5% to 77.4% branch coverage
43
+ - New unit tests for `BundlerDSL` class (including APPRAISAL_INDENTER variations)
44
+ - New unit tests for `Command` class
45
+ - New unit tests for `Conditional` class
46
+ - New unit tests for `Source` class
47
+ - New unit tests for `Git` class
48
+ - New unit tests for `Path` class
49
+ - New unit tests for `OrderedHash` class
50
+ - New unit tests for `Dependency` class
51
+ - New unit tests for `Group` class
52
+ - New unit tests for `Platform` class
53
+ - New unit tests for `GemManager::Factory` class
54
+ - New unit tests for error classes (`AppraisalsNotFound`, `OreNotAvailableError`, `UnknownGemManagerError`)
55
+ - Enhanced `DependencyList` tests with edge cases
56
+ - Enhanced `Gemfile` tests with load/run/dup edge cases
57
+ - Added documentation on hostile takeover of RubyGems
58
+ - https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo
59
+ - CLI configs for RuboCop, RubyGems, YARD, and JRuby (for local development only)
60
+
61
+ ### Changed
62
+
63
+ - Improved test isolation for acceptance tests to prevent modification of parent project's Gemfile.lock
64
+ - Added `BUNDLE_APP_CONFIG` isolation to prevent reading/writing parent's `.bundle/config`
65
+ - Added explicit `BUNDLE_GEMFILE` prefix to all bundle commands in tests
66
+ - Added `BUNDLE_LOCKFILE` environment variable to explicitly control where lockfiles are written
67
+ - Set `BUNDLE_IGNORE_FUNDING_REQUESTS` and `BUNDLE_DISABLE_SHARED_GEMS` for cleaner test output
68
+ - Added `BUNDLE_USER_CACHE` isolation to prevent polluting user's gem cache
69
+ - Fixed overly broad `File` stubs in unit tests that interfered with RSpec error formatting
70
+ - Changed `bundle_without_spec.rb` to use `skip_for` instead of `pending_for` to prevent test setup from running on unsupported Ruby versions (which was polluting the project Gemfile.lock with test gems)
71
+ - YARD CLI config switch from custom Kramdown support to yard-fence
72
+
73
+ ### Fixed
74
+
75
+ - Fixed `BundlerAdapter#install` not passing `gemfile_path` to `Command.new`, which caused bundler to potentially write to the wrong Gemfile.lock when `Bundler.with_original_env` reset the environment
76
+ - Fixed ore-light adapter path resolution: ore now runs from the gemfile's directory so relative path dependencies resolve correctly (ore resolves paths relative to working directory, not gemfile location)
77
+ - Fixed Thor `invoke(:generate, [])` call in `update` command to pass empty options hash, preventing argument leakage
78
+
79
+ ### Security
80
+
81
+ - Ore adapter now uses array-based command construction for `Kernel.system` calls instead of string interpolation, preventing potential shell injection vulnerabilities
82
+
83
+ ## [3.0.0] - 2025-07-28
84
+
85
+ - Initial release as a hard fork of [appraisal v3.0.0.rc1](https://github.com/thoughtbot/appraisal/commit/602cdd9b5f8cb8f36992733422f69312b172f427) with many improvements - by @pboling
18
86
  - support for `eval_gemfile`
19
87
  - 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`)
20
- - 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]](https://github.com/rubocop-lts/rubocop-lts) enforcing the syntax for the oldest supported Ruby, which is Ruby v1.8. File a bug if you find something broken.
88
+ - 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](https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white)](https://github.com/rubocop-lts/rubocop-lts) enforcing the syntax for the oldest supported Ruby, which is Ruby v1.8. File a bug if you find something broken.
21
89
  - Support for JRuby 9.4+
22
90
  - updated and improved documentation
23
91
  - maintainability tracked with QLTY.sh and the reek gem
24
92
  - code coverage tracked with Coveralls, QLTY.sh, and the kettle-soup-cover gem
25
93
  - other minor fixes and improvements
26
94
 
27
- [Unreleased]: https://gitlab.com/appraisal-rb/appraisal2/-/compare/v3.0.0...HEAD
28
- [3.0.0]: https://gitlab.com/appraisal-rb/appraisal2/-/compare/602cdd9b5f8cb8f36992733422f69312b172f427...v3.0.0
95
+ [Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.1...HEAD
96
+ [3.0.1]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.0...v3.0.1
97
+ [3.0.1t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.1
98
+ [3.0.0]: https://github.com/appraisal-rb/appraisal2/compare/602cdd9b5f8cb8f36992733422f69312b172f427...v3.0.0
data/README.md CHANGED
@@ -1,14 +1,11 @@
1
- <p align="center">
2
- <a href="https://discord.gg/3qme4XHNKN" target="_blank" rel="noopener">
3
- <img width="120px" src="https://github.com/galtzo-floss/shields-badge/raw/main/docs/images/logo/galtzo-floss-logos-original.svg?raw=true" alt="Galtzo.com Logo by Aboling0, CC BY-SA 4.0">
4
- </a>
5
- <a href="https://appraisal2.galtzo.com" target="_blank" rel="noopener">
6
- <img width="120px" src="https://github.com/appraisal-rb/appraisal2/raw/main/docs/images/logo/LoupeAppraiser.svg?raw=true" alt="appraisal-rb Logo by Aboling0, CC BY-SA 4.0">
7
- </a>
8
- <a href="https://www.ruby-lang.org/" target="_blank" rel="noopener">
9
- <img width="120px" src="https://github.com/galtzo-floss/shields-badge/raw/main/docs/images/logo/ruby-logo-198px.svg?raw=true" alt="Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5">
10
- </a>
11
- </p>
1
+ [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-discord] [![Appraisal2 Logo by Aboling0, CC BY-SA 4.0][🖼️appraisal2-i]][🖼️appraisal2] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang]
2
+
3
+ [🖼️galtzo-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
4
+ [🖼️galtzo-discord]: https://discord.gg/3qme4XHNKN
5
+ [🖼️appraisal2-i]: https://logos.galtzo.com/assets/images/appraisal-rb/appraisal2/avatar-192px.svg
6
+ [🖼️appraisal2]: https://github.com/appraisal-rb/appraisal2
7
+ [🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg
8
+ [🖼️ruby-lang]: https://github.com/ruby-lang
12
9
 
13
10
  # 🔍️ Appraisal2
14
11
 
@@ -16,12 +13,19 @@
16
13
 
17
14
  - You, possibly
18
15
 
19
- [![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Depfu][🔑depfui♻️]][🔑depfu] [![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 Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
16
+ [![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Depfu][🔑depfui♻️]][🔑depfu] [![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] [![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]
20
17
 
21
18
  ---
22
19
 
23
20
  [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
24
21
 
22
+ <details>
23
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
24
+
25
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
26
+
27
+ </details>
28
+
25
29
  ## 🌻 Synopsis
26
30
 
27
31
  Appraisal2 integrates with bundler and rake to test your library against
@@ -37,6 +41,8 @@ and [Joe Ferris](https://github.com/jferris), the original author!
37
41
  Appraisal2 adds:
38
42
 
39
43
  - support for `eval_gemfile`
44
+ - support for [ORE](https://github.com/contriboss/ore-light) as an alternative gem manager (faster than bundler!)
45
+ - 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)
40
46
  - 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`)
41
47
  - 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.
42
48
  - Support for JRuby 9.4+
@@ -83,6 +89,9 @@ pollute the global namespace, one alternative is
83
89
 
84
90
  ### 🔒 Secure Installation
85
91
 
92
+ <details>
93
+ <summary>For Medium or High Security Installations</summary>
94
+
86
95
  `appraisal2` is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
87
96
  [stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
88
97
  by following the instructions below.
@@ -111,6 +120,8 @@ bundle config set --global trust-policy MediumSecurity
111
120
 
112
121
  NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
113
122
 
123
+ </details>
124
+
114
125
  ## 🔧 Basic Setup
115
126
 
116
127
  Setting up appraisal2 requires an `Appraisals` file (similar to a `Gemfile`) in
@@ -134,6 +145,173 @@ your `Gemfile`, so you don't need to repeat anything that's the same for each
134
145
  appraisal. If something is specified in both the Gemfile and an appraisal, the
135
146
  version from the appraisal takes precedence.
136
147
 
148
+ ### Examples of usage in the wild
149
+
150
+ Appraisal2 can be setup to achieve many different things, from testing against
151
+ different versions of services, like MySQL, Redis, or Memcached, and their drivers,
152
+ different versions of gems, different platforms, and running different types of validations
153
+ which each require a distinct set of gems.
154
+ It can also help developers to follow the [official recommendation](https://github.com/rubygems/bundler-site/pull/501) (since 2017) of the bundler team,
155
+ to commit the \[main\] `Gemfile.lock` for **both** apps **and** gems. It does this by giving you alternate gemfiles that won't have their `gemfiles/*.gemfile.lock` committed, so you can simply commit the main one without breaking CI.
156
+
157
+ Having so many different use cases means it can be helpful to others to see how you have done your implementation. If you are willing to spend the time documenting, please send a PR to update this table with another Appraisal2-using project, linking to the specific workflows people can check to see how it is done!
158
+
159
+ | # | gem | locked / unlocked deps | analysis / services | SemVer / HEAD deps | Rubies | os |
160
+ |---|-------------------------------------------------------------------------------|----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----|
161
+ | 1 | [omniauth-identity][1-gh]<br>[![Star][1-⭐️i]][1-gh]<br>[![Rank][1-🔢i]][1-🧰] | [![🔒️][1-🔒️i]][1-🔒️]<br>[![un🔒️][1-un🔒️i]][1-un🔒️] | [![Style][1-as⚙️i]][1-as⚙️]<br>[![Coverage][1-ac⚙️i]][1-ac⚙️]<br>[![Svcs][1-sc⚙️i]][1-sc⚙️]<br>[![L-Svcs][1-sl⚙️i]][1-sl⚙️]<br>[![S-Svcs][1-ss⚙️i]][1-ss⚙️]<br>[![U-Svcs][1-su⚙️i]][1-su⚙️]<br>[![A-Svcs][1-sa⚙️i]][1-sa⚙️]<br>[![J-Svcs][1-sj⚙️i]][1-sj⚙️]<br>[![AJ-Svcs][1-saj⚙️i]][1-saj⚙️] | [![Current][1-⏰i]][1-⏰]<br>[![Deps@HEAD][1-👟i]][1-👟] | [![Supported][1-👴i]][1-👴]<br>[![Unsupported][1-u👴i]][1-u👴]<br>[![Legacy][1-l👴i]][1-l👴]<br>[![Ancient][1-a👴i]][1-a👴]<br>[![JRuby][1-ji]][1-j]<br>[![JRuby Ancient][1-ja👴i]][1-ja👴]<br>[![Head][1-🗣️i]][1-🗣️] | ❌ |
162
+ | 2 | [rspec-stubbed_env][2-gh]<br>[![Star][2-⭐️i]][2-gh]<br>[![Rank][2-🔢i]][2-🧰] | [![🔒️][2-🔒️i]][2-🔒️]<br>[![un🔒️][2-un🔒️i]][2-un🔒️] | [![Style][2-as⚙️i]][2-as⚙️]<br>[![Coverage][2-ac⚙️i]][2-ac⚙️] | [![Current][2-⏰i]][2-⏰] | [![Supported][2-👴i]][2-👴]<br>[![Unsupported][2-u👴i]][2-u👴]<br>[![Legacy][2-l👴i]][2-l👴]<br>[![Ancient][2-a👴i]][2-a👴]<br>[![JRuby][2-ji]][2-j]<br>[![Truffle][2-ti]][2-t]<br>[![Head][2-🗣️i]][2-🗣️] | ❌ |
163
+ | 3 | [silent_stream][3-gh]<br>[![Star][3-⭐️i]][3-gh]<br>[![Rank][3-🔢i]][3-🧰] | [![🔒️][3-🔒️i]][3-🔒️]<br>[![un🔒️][3-un🔒️i]][3-un🔒️] | [![Style][3-as⚙️i]][3-as⚙️]<br>[![Coverage][3-ac⚙️i]][3-ac⚙️] | [![Current][3-⏰i]][3-⏰] | [![Supported][3-👴i]][3-👴]<br>[![Unsupported][3-u👴i]][3-u👴]<br>[![Legacy][3-l👴i]][3-l👴]<br>[![Ancient][3-a👴i]][3-a👴]<br>[![JRuby][3-ji]][3-j]<br>[![Truffle][3-ti]][3-t]<br>[![Head][3-🗣️i]][3-🗣️] | ❌ |
164
+ | 4 | [oauth2][4-gh]<br>[![Star][4-⭐️i]][4-gh]<br>[![Rank][4-🔢i]][4-🧰] | [![🔒️][4-🔒️i]][4-🔒️]<br>[![un🔒️][4-un🔒️i]][4-un🔒️] | [![Style][4-as⚙️i]][4-as⚙️]<br>[![Coverage][4-ac⚙️i]][4-ac⚙️]<br>[![Svcs][4-sc⚙️i]][4-sc⚙️]<br>[![L-Svcs][4-sl⚙️i]][4-sl⚙️]<br>[![S-Svcs][4-ss⚙️i]][4-ss⚙️]<br>[![U-Svcs][4-su⚙️i]][4-su⚙️]<br>[![A-Svcs][4-sa⚙️i]][4-sa⚙️]<br>[![J-Svcs][4-sj⚙️i]][4-sj⚙️]<br>[![AJ-Svcs][4-saj⚙️i]][4-saj⚙️] | [![Current][4-⏰i]][4-⏰]<br>[![Deps@HEAD][4-👟i]][4-👟] | [![Supported][4-👴i]][4-👴]<br>[![Unsupported][4-u👴i]][4-u👴]<br>[![Legacy][4-l👴i]][4-l👴]<br>[![Ancient][4-a👴i]][4-a👴]<br>[![JRuby][4-ji]][4-j]<br>[![JRuby Ancient][4-ja👴i]][4-ja👴]<br>[![Head][4-🗣️i]][4-🗣️] | ❌ |
165
+
166
+ [1-gh]: https://github.com/omniauth/omniauth-identity
167
+ [1-🧰]: https://www.ruby-toolbox.com/projects/omniauth-identity
168
+ [1-⭐️i]: https://img.shields.io/github/stars/omniauth/omniauth-identity
169
+ [1-🔢i]: https://img.shields.io/gem/rd/omniauth-identity.svg
170
+ [1-🔒️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/deps_locked.yml
171
+ [1-🔒️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/deps_locked.yml/badge.svg
172
+ [1-un🔒️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/deps_unlocked.yml
173
+ [1-un🔒️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/deps_unlocked.yml/badge.svg
174
+ [1-as⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/style.yml
175
+ [1-as⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/style.yml/badge.svg
176
+ [1-ac⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/coverage.yml
177
+ [1-ac⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/coverage.yml/badge.svg
178
+ [1-sc⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/current-svc-adapters.yml
179
+ [1-sc⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/current-svc-adapters.yml/badge.svg
180
+ [1-sl⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/legacy-svc-adapters.yml
181
+ [1-sl⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/legacy-svc-adapters.yml/badge.svg
182
+ [1-ss⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/supported-svc-adapters.yml
183
+ [1-ss⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/supported-svc-adapters.yml/badge.svg
184
+ [1-su⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/unsupported-svc-adapters.yml
185
+ [1-su⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/unsupported-svc-adapters.yml/badge.svg
186
+ [1-sa⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/ancient-svc-adapters.yml
187
+ [1-sa⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/ancient-svc-adapters.yml/badge.svg
188
+ [1-sj⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/jruby-svc-adapters.yml
189
+ [1-sj⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby-svc-adapters.yml/badge.svg
190
+ [1-saj⚙️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/jruby-ancient-svc-adapters.yml
191
+ [1-saj⚙️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby-ancient-svc-adapters.yml/badge.svg
192
+ [1-⏰]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/current.yml
193
+ [1-⏰i]: https://github.com/omniauth/omniauth-identity/actions/workflows/current.yml/badge.svg
194
+ [1-j]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/jruby.yml
195
+ [1-ji]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby.yml/badge.svg
196
+ [1-👟]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/current-runtime-heads.yml
197
+ [1-👟i]: https://github.com/omniauth/omniauth-identity/actions/workflows/current-runtime-heads.yml/badge.svg
198
+ [1-👴]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/supported.yml
199
+ [1-👴i]: https://github.com/omniauth/omniauth-identity/actions/workflows/supported.yml/badge.svg
200
+ [1-u👴]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/unsupported.yml
201
+ [1-u👴i]: https://github.com/omniauth/omniauth-identity/actions/workflows/unsupported.yml/badge.svg
202
+ [1-l👴]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/legacy.yml
203
+ [1-l👴i]: https://github.com/omniauth/omniauth-identity/actions/workflows/legacy.yml/badge.svg
204
+ [1-a👴]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/ancient.yml
205
+ [1-a👴i]: https://github.com/omniauth/omniauth-identity/actions/workflows/ancient.yml/badge.svg
206
+ [1-ja👴]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/jruby-ancient.yml
207
+ [1-ja👴i]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby-ancient.yml/badge.svg
208
+ [1-🗣️]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/heads.yml
209
+ [1-🗣️i]: https://github.com/omniauth/omniauth-identity/actions/workflows/heads.yml/badge.svg
210
+ [1-gh]: https://github.com/omniauth/omniauth-identity
211
+
212
+ [2-gh]: https://github.com/pboling/rspec-stubbed_env
213
+ [2-🧰]: https://www.ruby-toolbox.com/projects/rspec-stubbed_env
214
+ [2-⭐️i]: https://img.shields.io/github/stars/pboling/rspec-stubbed_env
215
+ [2-🔢i]: https://img.shields.io/gem/rd/rspec-stubbed_env.svg
216
+ [2-🔒️]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/deps_locked.yml
217
+ [2-🔒️i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/deps_locked.yml/badge.svg
218
+ [2-un🔒️]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/deps_unlocked.yml
219
+ [2-un🔒️i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/deps_unlocked.yml/badge.svg
220
+ [2-as⚙️]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/style.yml
221
+ [2-as⚙️i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/style.yml/badge.svg
222
+ [2-ac⚙️]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/coverage.yml
223
+ [2-ac⚙️i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/coverage.yml/badge.svg
224
+ [2-⏰]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/current.yml
225
+ [2-⏰i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/current.yml/badge.svg
226
+ [2-j]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/jruby.yml
227
+ [2-ji]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/jruby.yml/badge.svg
228
+ [2-t]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/truffle.yml
229
+ [2-ti]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/truffle.yml/badge.svg
230
+ [2-👴]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/supported.yml
231
+ [2-👴i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/supported.yml/badge.svg
232
+ [2-u👴]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/unsupported.yml
233
+ [2-u👴i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/unsupported.yml/badge.svg
234
+ [2-l👴]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/legacy.yml
235
+ [2-l👴i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/legacy.yml/badge.svg
236
+ [2-a👴]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/ancient.yml
237
+ [2-a👴i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/ancient.yml/badge.svg
238
+ [2-🗣️]: https://github.com/pboling/rspec-stubbed_env/blob/main/.github/workflows/heads.yml
239
+ [2-🗣️i]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/heads.yml/badge.svg
240
+
241
+ [3-gh]: https://github.com/pboling/silent_stream
242
+ [3-🧰]: https://www.ruby-toolbox.com/projects/silent_stream
243
+ [3-⭐️i]: https://img.shields.io/github/stars/pboling/silent_stream
244
+ [3-🔢i]: https://img.shields.io/gem/rd/silent_stream.svg
245
+ [3-🔒️]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/deps_locked.yml
246
+ [3-🔒️i]: https://github.com/pboling/silent_stream/actions/workflows/deps_locked.yml/badge.svg
247
+ [3-un🔒️]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/deps_unlocked.yml
248
+ [3-un🔒️i]: https://github.com/pboling/silent_stream/actions/workflows/deps_unlocked.yml/badge.svg
249
+ [3-as⚙️]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/style.yml
250
+ [3-as⚙️i]: https://github.com/pboling/silent_stream/actions/workflows/style.yml/badge.svg
251
+ [3-ac⚙️]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/coverage.yml
252
+ [3-ac⚙️i]: https://github.com/pboling/silent_stream/actions/workflows/coverage.yml/badge.svg
253
+ [3-⏰]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/current.yml
254
+ [3-⏰i]: https://github.com/pboling/silent_stream/actions/workflows/current.yml/badge.svg
255
+ [3-j]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/jruby.yml
256
+ [3-ji]: https://github.com/pboling/silent_stream/actions/workflows/jruby.yml/badge.svg
257
+ [3-t]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/truffle.yml
258
+ [3-ti]: https://github.com/pboling/silent_stream/actions/workflows/truffle.yml/badge.svg
259
+ [3-👴]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/supported.yml
260
+ [3-👴i]: https://github.com/pboling/silent_stream/actions/workflows/supported.yml/badge.svg
261
+ [3-u👴]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/unsupported.yml
262
+ [3-u👴i]: https://github.com/pboling/silent_stream/actions/workflows/unsupported.yml/badge.svg
263
+ [3-l👴]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/legacy.yml
264
+ [3-l👴i]: https://github.com/pboling/silent_stream/actions/workflows/legacy.yml/badge.svg
265
+ [3-a👴]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/ancient.yml
266
+ [3-a👴i]: https://github.com/pboling/silent_stream/actions/workflows/ancient.yml/badge.svg
267
+ [3-🗣️]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/heads.yml
268
+ [3-🗣️i]: https://github.com/pboling/silent_stream/actions/workflows/heads.yml/badge.svg
269
+
270
+ [4-gh]: https://github.com/ruby-oauth/oauth2
271
+ [4-🧰]: https://www.ruby-toolbox.com/projects/oauth2
272
+ [4-⭐️i]: https://img.shields.io/github/stars/ruby-oauth/oauth2
273
+ [4-🔢i]: https://img.shields.io/gem/rd/oauth2.svg
274
+ [4-🔒️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/deps_locked.yml
275
+ [4-🔒️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/deps_locked.yml/badge.svg
276
+ [4-un🔒️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/deps_unlocked.yml
277
+ [4-un🔒️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/deps_unlocked.yml/badge.svg
278
+ [4-as⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/style.yml
279
+ [4-as⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/style.yml/badge.svg
280
+ [4-ac⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/coverage.yml
281
+ [4-ac⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/coverage.yml/badge.svg
282
+ [4-sc⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/current-svc-adapters.yml
283
+ [4-sc⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/current-svc-adapters.yml/badge.svg
284
+ [4-sl⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/legacy-svc-adapters.yml
285
+ [4-sl⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/legacy-svc-adapters.yml/badge.svg
286
+ [4-ss⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/supported-svc-adapters.yml
287
+ [4-ss⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/supported-svc-adapters.yml/badge.svg
288
+ [4-su⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/unsupported-svc-adapters.yml
289
+ [4-su⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/unsupported-svc-adapters.yml/badge.svg
290
+ [4-sa⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/ancient-svc-adapters.yml
291
+ [4-sa⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/ancient-svc-adapters.yml/badge.svg
292
+ [4-sj⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby-svc-adapters.yml
293
+ [4-sj⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-svc-adapters.yml/badge.svg
294
+ [4-saj⚙️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby-ancient-svc-adapters.yml
295
+ [4-saj⚙️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-ancient-svc-adapters.yml/badge.svg
296
+ [4-⏰]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/current.yml
297
+ [4-⏰i]: https://github.com/ruby-oauth/oauth2/actions/workflows/current.yml/badge.svg
298
+ [4-j]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby.yml
299
+ [4-ji]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby.yml/badge.svg
300
+ [4-👟]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/current-runtime-heads.yml
301
+ [4-👟i]: https://github.com/ruby-oauth/oauth2/actions/workflows/current-runtime-heads.yml/badge.svg
302
+ [4-👴]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/supported.yml
303
+ [4-👴i]: https://github.com/ruby-oauth/oauth2/actions/workflows/supported.yml/badge.svg
304
+ [4-u👴]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/unsupported.yml
305
+ [4-u👴i]: https://github.com/ruby-oauth/oauth2/actions/workflows/unsupported.yml/badge.svg
306
+ [4-l👴]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/legacy.yml
307
+ [4-l👴i]: https://github.com/ruby-oauth/oauth2/actions/workflows/legacy.yml/badge.svg
308
+ [4-a👴]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/ancient.yml
309
+ [4-a👴i]: https://github.com/ruby-oauth/oauth2/actions/workflows/ancient.yml/badge.svg
310
+ [4-ja👴]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby-ancient.yml
311
+ [4-ja👴i]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-ancient.yml/badge.svg
312
+ [4-🗣️]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/heads.yml
313
+ [4-🗣️i]: https://github.com/ruby-oauth/oauth2/actions/workflows/heads.yml/badge.svg
314
+
137
315
  ## ⚒️ Basic Usage
138
316
 
139
317
  Once you've configured the appraisals you want to use, you need to install the
@@ -158,7 +336,7 @@ your dependencies in quick test runs, but keep running the tests in older
158
336
  versions to check for regressions.
159
337
 
160
338
  In the case that you want to run all the appraisals by default when you run
161
- `rake`, you can override your default Rake task by put this into your Rakefile:
339
+ `rake`, you can override your default Rake task by putting this into your Rakefile:
162
340
 
163
341
  if !ENV["APPRAISAL_INITIALIZED"] && ENV.fetch("CI", "false").casecmp("false") == 0
164
342
  task :default => :appraisal
@@ -184,6 +362,95 @@ appraisal update [LIST_OF_GEMS] # Remove all generated gemfiles and lockfiles,
184
362
  appraisal version # Display the version and exit
185
363
  ```
186
364
 
365
+ ### Command Options
366
+
367
+ The `install` and `update` commands support several options:
368
+
369
+ | Option | Description |
370
+ |--------|-------------|
371
+ | `--gem-manager`, `-g` | Gem manager to use: `bundler` (default) or `ore` |
372
+ | `--jobs`, `-j` | Install gems in parallel using the given number of workers |
373
+ | `--retry` | Retry network and git requests that have failed (default: 1) |
374
+ | `--without` | A space-separated list of groups to skip during installation |
375
+ | `--full-index` | Run bundle install with the full-index argument |
376
+ | `--path` | Install gems in the specified directory |
377
+
378
+ ## 🦀 Using Ore (Alternative Gem Manager)
379
+
380
+ Appraisal2 supports [ORE](https://github.com/contriboss/ore-light) as an alternative to Bundler
381
+ for dependency resolution and installation. Ore is a fast gem manager written in Go that aims
382
+ to be a drop-in replacement for Bundler.
383
+
384
+ ### Installing Ore
385
+
386
+ You can install ORE via:
387
+
388
+ ```bash
389
+ # Install ORE Light (no Ruby required for download)
390
+ # Installs to ~/.local/bin by default (no sudo needed)
391
+ curl -fsSL https://raw.githubusercontent.com/contriboss/ore-light/master/scripts/install.sh | bash
392
+
393
+ # For system-wide installation to /usr/local/bin
394
+ curl -fsSL https://raw.githubusercontent.com/contriboss/ore-light/master/scripts/install.sh | bash -s -- --system
395
+ ```
396
+
397
+ ### Using Ore with Appraisal2
398
+
399
+ To use ORE instead of bundler, pass the `--gem-manager=ore` option:
400
+
401
+ ```bash
402
+ # Install dependencies using ORE
403
+ bundle exec appraisal install --gem-manager=ore
404
+
405
+ # Update dependencies using ORE
406
+ bundle exec appraisal update --gem-manager=ore
407
+ ```
408
+
409
+ You can also use the short form:
410
+
411
+ ```bash
412
+ bundle exec appraisal install -g ore
413
+ ```
414
+
415
+ ### Ore-Specific Options
416
+
417
+ When using ORE, some options are translated to ORE's equivalents:
418
+
419
+ | Appraisal Option | Ore Equivalent | Notes |
420
+ |------------------|----------------|-------------------------------------|
421
+ | `--jobs=N` | `-workers=N` | Only used when N > 1 |
422
+ | `--path=DIR` | `-vendor=DIR` | Sets the gem installation directory |
423
+ | `--without=GROUPS` | `-without=GROUP1,GROUP2` | Groups are comma-separated in ORE |
424
+ | `--retry` | *(ignored)* | ORE handles retries internally |
425
+ | `--full-index` | *(ignored)* | Not applicable to ORE |
426
+
427
+ ### Example Workflow with ORE
428
+
429
+ ```bash
430
+ # Generate appraisal gemfiles
431
+ bundle exec appraisal generate
432
+
433
+ # Install dependencies using ORE (faster than bundler)
434
+ bundle exec appraisal install --gem-manager=ore --jobs=4
435
+
436
+ # Run tests against all appraisals
437
+ bundle exec appraisal rspec
438
+
439
+ # Update a specific gem using ORE
440
+ bundle exec appraisal update rack --gem-manager=ore
441
+ ```
442
+
443
+ ### When to Use Ore
444
+
445
+ Ore can be particularly beneficial when:
446
+
447
+ - You have many appraisals and want faster installation
448
+ - You're in a CI environment where installation speed matters
449
+ - You want to take advantage of ORE's parallel resolution capabilities
450
+
451
+ Note that ORE must be installed separately and available in your PATH.
452
+ If you specify ORE and it is not available, appraisal2 will raise an error.
453
+
187
454
  Under the hood
188
455
  --------------
189
456
 
@@ -264,7 +531,7 @@ end
264
531
 
265
532
  **Appraisal2.root.gemfile**
266
533
  ```ruby
267
- source "https://rubygems.org"
534
+ source "https://gem.coop"
268
535
 
269
536
  # Appraisal2 Root Gemfile is for running appraisal to generate the Appraisal2 Gemfiles
270
537
  # We do not load the standard Gemfile, as it is tailored for local development,
@@ -421,6 +688,8 @@ See [CONTRIBUTING.md][🤝contributing].
421
688
 
422
689
  [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
423
690
 
691
+ [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov]
692
+
424
693
  ### 🪇 Code of Conduct
425
694
 
426
695
  Everyone interacting with this project's codebases, issue trackers,
@@ -493,7 +762,7 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
493
762
  <a href="https://discord.gg/3qme4XHNKN">
494
763
  Galtzo.com
495
764
  <picture>
496
- <img src="https://github.com/galtzo-floss/shields-badge/raw/main/docs/images/logo/galtzo-floss-logos-wordless.svg?raw=true" alt="Galtzo.com Logo by Aboling0, CC BY-SA 4.0" width="24">
765
+ <img src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px-blank.svg" alt="Galtzo.com Logo (wordless) by Aboling0, CC BY-SA 4.0" width="24">
497
766
  </picture>
498
767
  </a>, and Appraisal2 contributors
499
768
  </li>
@@ -506,13 +775,13 @@ Having arrived at the bottom of the page, please endure a final supplication.
506
775
  The primary maintainer of this gem, Peter Boling, wants
507
776
  Ruby to be a great place for people to solve problems, big and small.
508
777
  Please consider supporting his efforts via the giant yellow link below,
509
- or one of smaller ones, depending on button size preference.
778
+ or one of the smaller ones, depending on button size preference.
510
779
 
511
780
  [![Buy me a latte][🖇buyme-img]][🖇buyme]
512
781
 
513
782
  [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
514
783
 
515
- P.S. If you need help️, or want to say thanks, 👇 Join the Discord.
784
+ P.S. If you need help or want to say thanks, 👇 Join the Discord.
516
785
 
517
786
  [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
518
787
 
@@ -626,6 +895,12 @@ P.S. If you need help️, or want to say thanks, 👇 Join the Discord.
626
895
  [🚎10-j9.4-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9-4.yml/badge.svg
627
896
  [🚎11-c-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current.yml
628
897
  [🚎11-c-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current.yml/badge.svg
898
+ [🚎12-crh-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current-runtime-heads.yml
899
+ [🚎12-crh-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current-runtime-heads.yml/badge.svg
900
+ [🚎13-🔒️-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/deps_locked.yml
901
+ [🚎13-🔒️-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/deps_locked.yml/badge.svg
902
+ [🚎14-🔓️-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/deps_unlocked.yml
903
+ [🚎14-🔓️-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/deps_unlocked.yml/badge.svg
629
904
  [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
630
905
  [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
631
906
  [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
@@ -668,7 +943,7 @@ P.S. If you need help️, or want to say thanks, 👇 Join the Discord.
668
943
  [📌gitmoji]:https://gitmoji.dev
669
944
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
670
945
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
671
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.186-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
946
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.782-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
672
947
  [🔐security]: SECURITY.md
673
948
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
674
949
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -697,4 +972,4 @@ Once fixed, these should look much nicer.
697
972
  [![CodeCov Test Coverage][🔑codecovi♻️]][🔑codecov]
698
973
  [![Coverage Graph][🔑codecov-g♻️]][🔑codecov]
699
974
 
700
- </details>
975
+ </details>