Gemfile Upgrade
Input
- ARG =
gem_name(single gem) |--outdated(batch mode)
Workflow (single gem)
Check status:
bundle outdated GEM --strictParse: current, latest, jump type (patch/minor/major)
Locate repo:
bundle info GEM --path # check gemspec for homepage / source_code_uriFetch changelog via WebFetch (try in order, stop on first hit):
https://github.com/OWNER/REPO/releaseshttps://github.com/OWNER/REPO/blob/main/CHANGELOG.mdhttps://github.com/OWNER/REPO/blob/main/HISTORY.mdhttps://github.com/OWNER/REPO/blob/main/NEWS.md
Extract changes between current → target. Flag:
- Major bumps (X.x → Y.x)
- Keywords:
BREAKING,removed,renamed,changed behavior - Migration guides
- Ruby/Rails version requirements
- Deprecations
Present analysis:
## Upgrade Analysis: GEM CURRENT → TARGET ### Version Jump: PATCH | MINOR | MAJOR ### Breaking Changes: [list] ### Migration Required: [steps] ### Deprecations: [list] ### New Features: [list] ### Compatibility: [Ruby/Rails reqs]AskUserQuestion → options:
Upgrade to latest minor (recommended)— safer, bug fixesUpgrade to latest (TARGET)— review breaking changesUpgrade to specific version— prompt for versionSkip
Update Gemfile (Edit):
# latest gem 'GEM', '~> MAJOR.MINOR' # minor only gem 'GEM', '~> CURRENT_MAJOR.CURRENT_MINOR'Run update:
bundle update GEM --conservativeOn failure → show conflicts, suggest dependent updates, offer rollback.
Run tests (auto-detect):
if [ -f spec/spec_helper.rb ]; then bundle exec rspec elif [ -f test/test_helper.rb ]; then bundle exec rails test fi- Pass → step 10
- Fail → show failures, AskUserQuestion:
Rollback|Investigate
Commit:
git add Gemfile Gemfile.lock git commit -m "$(cat <<'EOF' chore(deps): upgrade GEM from CURRENT to TARGET Breaking changes: - [list] Migration notes: - [steps taken] Changelog: URL EOF )"
Workflow (--outdated batch mode)
bundle outdated --strict- Group by jump type:
- PATCH (X.Y.Z → X.Y.Z+1) — usually safe
- MINOR (X.Y → X.Y+1) — review recommended
- MAJOR (X → X+1) — careful review required
- AskUserQuestion (multi-select) presenting all gems grouped by risk
- For each selected gem → run single-gem workflow (steps 1-10)
Rollback
At any failure step:
git checkout -- Gemfile Gemfile.lock
bundle install
Safety Rules
- Always show diff before applying
- Create backup of Gemfile before edit (Edit tool preserves prior content via git)
- Never commit if tests fail
- Default to
--conservativeto avoid cascading updates - Flag major version jumps explicitly in analysis