• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kettle-dev / kettle-family / 37887306004
88%

Build:
DEFAULT BRANCH: main
Ran 09 Oct 2026 05:11AM UTC
Jobs 1
Files 38
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

09 Oct 2026 05:10AM UTC coverage: 88.198% (-0.007%) from 88.205%
37887306004

push

github

pboling
🐛 Verify gem uninstall removal and cover it with gem_mine fixtures

Two fixes, both found by replacing synthetic fixtures with real gems.

1. gem uninstall exits 0 when it removes nothing

RubyGems exits 0 and prints "Gem 'name' is not installed" when the target is
absent from GEM_HOME:

    gem uninstall definitely-not-a-real-gem-xyz:9.9.9 --executables  -> exit 0
    gem uninstall minefix:9.9.9                                      -> exit 0

CommandRunner builds the subprocess environment from Bundler.unbundled_env
with unsetenv_others, which drops GEM_HOME and GEM_PATH, so cleanup could
resolve to the wrong gem home, remove nothing, and still report ok. That is
the same silent-success failure mode as the enumeration bug fixed in the
previous commit: a success verdict over work that never happened.

The batch outcome is now verified by re-enumerating installed versions
afterward, and any survivor turns the result into a failure that names it.

Investigated and deliberately not implemented: `gem uninstall -i <root>`
is not a workaround for a gem home other than GEM_HOME. It fails with the
same "not installed in GEM_HOME" error even when the path equals GEM_HOME,
so per-root targeting is not achievable here and no flag is added. That
case already fails loudly with a non-zero exit, and RubyGems' own hint
passes through untouched because verification only intercepts exit-0
no-ops.

2. Specs now install real gems with gem_mine

The enumeration specs previously wrote empty .gemspec files by hand and
stubbed Gem::Specification.find_all_by_name to simulate bundle masking. A
spec that stubs the API cannot fail when the implementation stops calling
it, so it encoded the buggy contract rather than the behaviour -- which is
how the masking shipped unnoticed.

With a real gem_mine-populated GEM_HOME the masking reproduces on its own:

    find_all_by_name("minefix")  -> []          genuinely installed, blind
    filesystem scan              -> ["1.0.0", "1.0.1"]... (continued)

2742 of 3525 branches covered (77.79%)

Branch coverage included in aggregate %.

7 of 7 new or added lines in 1 file covered. (100.0%)

1 existing line in 1 file now uncovered.

6756 of 7244 relevant lines covered (93.26%)

109.44 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
92.03
-0.8% lib/kettle/family/discovery.rb
Jobs
ID Job ID Ran Files Coverage
1 37887306004.1 09 Oct 2026 05:11AM UTC 38
88.2
GitHub Action Run
Source Files on build 37887306004
  • Tree
  • List 38
  • Changed 2
  • Source Changed 1
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #37887306004
  • 103aa567 on github
  • Prev Build on main (#37870173673)
  • Next Build on main (#37932715278)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc