Skip to content

Commit 91cb449

Browse files
AI Assistantclaude
andcommitted
fix(ruby/gem): add Ruby to audit and require rbenv before gem update
Problem: gem update failed with apt-managed Ruby - gem showed as outdated but Ruby wasn't audited - gem update --system fails on apt-managed Ruby with error: "Your RubyGems was installed through APT, and upgrading it through RubyGems itself is unsupported" - No dependency ordering between Ruby and gem Solution: Add Ruby auditing and enforce rbenv requirement Changes to cli_audit.py: - Added Ruby to TOOLS tuple for auditing - Ruby now shows in audit output (status: UNKNOWN due to version format) - Processing order: Ruby (order 32) → gem (order 33) Changes to install_gem.sh: - Added check_rbenv_ruby() to detect if Ruby is rbenv-managed - update_gem() now checks and refuses to update apt-managed gem - Provides clear error message: "Please install Ruby via rbenv first" - reconcile_gem() automatically installs Ruby via rbenv if needed Expected workflow: 1. make upgrade → shows Ruby (apt 3.2 → rbenv 3.3.6+) 2. User installs Ruby → removes apt, installs rbenv 3. make upgrade → shows gem (3.4.20 → 3.7.2) 4. User updates gem → gem update --system works (rbenv-managed) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 0ece67e commit 91cb449

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

cli_audit.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,7 @@ class Tool:
807807
Tool("pnpm", ("pnpm",), "npm", ("pnpm",)),
808808
Tool("yarn", ("yarn",), "npm", ("yarn",)),
809809
Tool("composer", ("composer",), "gh", ("composer", "composer")),
810+
Tool("ruby", ("ruby",), "gh", ("ruby", "ruby")),
810811
Tool("gem", ("gem",), "gh", ("rubygems", "rubygems")),
811812
# 2) Core developer tools and utilities
812813
Tool("fd", ("fd", "fdfind"), "gh", ("sharkdp", "fd")),

scripts/install_gem.sh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,23 @@ ensure_rbenv_loaded() {
1616
fi
1717
}
1818

19+
check_rbenv_ruby() {
20+
ensure_rbenv_loaded
21+
22+
# Check if Ruby is rbenv-managed
23+
local ruby_path
24+
ruby_path="$(command -v ruby 2>/dev/null || echo '')"
25+
26+
case "$ruby_path" in
27+
"$HOME/.rbenv/"*)
28+
return 0 # rbenv-managed
29+
;;
30+
*)
31+
return 1 # not rbenv-managed (apt, system, or missing)
32+
;;
33+
esac
34+
}
35+
1936
update_gem() {
2037
ensure_rbenv_loaded
2138

@@ -24,6 +41,16 @@ update_gem() {
2441
return 1
2542
fi
2643

44+
# Check if Ruby is rbenv-managed before trying to update gem
45+
if ! check_rbenv_ruby; then
46+
echo "[gem] Error: Ruby is not rbenv-managed (currently apt/system)" >&2
47+
echo "[gem] Cannot update gem via 'gem update --system' for apt-managed Ruby" >&2
48+
echo "[gem] Please install Ruby via rbenv first:" >&2
49+
echo "[gem] make install-ruby" >&2
50+
echo "[gem] or: scripts/install_ruby.sh reconcile" >&2
51+
return 1
52+
fi
53+
2754
local before after path
2855
before="$(gem --version 2>/dev/null || echo '<none>')"
2956

@@ -58,6 +85,9 @@ reconcile_gem() {
5885
if ! command -v gem >/dev/null 2>&1; then
5986
echo "[gem] gem not found. Installing Ruby (which includes gem)..."
6087
"$DIR/install_ruby.sh" reconcile || true
88+
elif ! check_rbenv_ruby; then
89+
echo "[gem] Ruby is not rbenv-managed. Installing Ruby via rbenv first..."
90+
"$DIR/install_ruby.sh" reconcile || true
6191
fi
6292

6393
update_gem

0 commit comments

Comments
 (0)