deps-update
Bump outdated Hex deps — inventory, snapshot changelogs, update, fix breaks, split reviewable PRs (patches bundled, majors solo). Use to upgrade/bump Elixir dependencies or when versions fall behind. NOT for deps.get failures (/phx:investigate).
适合你,如果你需要保持Elixir项目依赖最新并自动修复兼容性问题
npx oh-my-skill add oliver-kriska/claude-elixir-phoenix/deps-updatecurl -fsSL https://oh-my-skill.com/install.sh | bash -s -- oliver-kriska/claude-elixir-phoenix/deps-updatenpx oh-my-skill verify oliver-kriska/claude-elixir-phoenix/deps-update怎么用
商店整理自技能原文 · 版本 88c1194 · 表述以原文为准当您要求更新Elixir项目的依赖时,AI会检查项目中的第三方包,获取最新版本,修复更新后可能出现的代码错误,并将更改分组提交到版本控制,最终为您创建可审查的拉取请求(PR)。它会自动修改项目的配置文件(如mix.exs和mix.lock)并运行测试。
当您输入“/phx:deps-update”命令,或者提到需要升级/更新Elixir依赖时触发。例如,当您说“更新依赖”或“检查依赖是否有新版本”时。
技能原文 SKILL.md
Dependency Update (Freshness)
Inventory → update → fix breaks → grouped PRs. This is the only MUTATING deps skill: it edits mix.exs, mix.lock, and source. Security scanning stays in /phx:deps-audit; the vet ledger stays in /phx:deps-vet.
Usage
/phx:deps-update # inventory + interactive scope pick /phx:deps-update --scope patch # bundle all patch bumps, one PR /phx:deps-update --pkg phoenix_live_view # one package (+ coupled group) /phx:deps-update --dry-run # inventory only, no changes
Iron Laws
- NEVER cross a major version without an explicit
mix.exsedit —mix deps.updatestays within requirements. Edit the constraint first; addoverride: trueonly whenmix hex.outdated <pkg>shows a transitive consumer blocking. One major per PR - ALWAYS snapshot the changelog delta BEFORE updating — capture
deps/<pkg>/CHANGELOG.md, then delta viamix hex.package diff. Never update blind - NEVER claim an update is safe without verification — run
/phx:verify(compile --warnings-as-errors + test). "Compiles" ≠ "works" - ALWAYS move coupled packages together — Phoenix core, Ecto, Ash, Oban, telemetry families update in the SAME step/commit (see
${CLAUDE_SKILL_DIR}/references/coupled-groups.md) - NEVER commit a partial bump —
mix.lock+mix.exsedits + (for Phoenix-family)assets/package-lock.jsonin ONE commit - HAND OFF security to
/phx:deps-audit— run it on the lock diff before any PR; don't reimplement audit rules hex.outdatedexit 1 is normal — it means "deps are outdated", not failure. Capture with|| true
Workflow
Phase 0: Discover
Read mix.exs: deps list, umbrella (apps_path:), git/path deps, private orgs (organization:/repo: in tuples), Phoenix/Ash presence. Create scratch dir .claude/deps-update/{YYYY-MM-DD}/.
Phase 1: Inventory
mix hex.outdated --all || true — parse the text table (no JSON exists; see ${CLAUDE_SKILL_DIR}/references/update-mechanics.md). Classify each row patch/minor/major by semver delta; Update not possible = blocked major (mix.exs constraint). Write inventory.md to scratch. Render grouped table: Patch / Minor / Major / Blocked / Git-deps (manual). --dry-run stops here.
Phase 2: Scope (AskUserQuestion)
Present groups with counts and risk. Default recommendation: "Patches (N) — low risk, bundle into one PR". --scope/--pkg flags skip the prompt. When ≥2 members of a coupled group are outdated, force them into one step even under a narrower scope.
Phase 3: Per-Package Update Loop
For each selected package, in coupled-group order:
- Snapshot
deps/<pkg>/CHANGELOG.md→scratch/before/ - Update — patch/minor:
mix deps.update <pkg> [coupled...]; major: editmix.exsconstraint (+override: trueif needed), thenmix deps.update <pkg> git diff mix.lock→ the REAL{pkg, old, new}set (hex.outdated says what could change; the lock diff says what did)- Changelog delta:
mix hex.package diff <pkg> <old>..<new>— keep the CHANGELOG hunk. Empty →gh api repos/{o}/{r}/releasesfallback → compare-URL note (see${CLAUDE_SKILL_DIR}/references/changelog-sources.md) - Write
scratch/{pkg}-{old}-{new}.md - Phoenix-family in the diff +
assets/package.jsonexists →npm install --prefix assets, stageassets/package-lock.jsonwith the same commit
Phase 4: Verify
Run /phx:verify. On failure → Phase 5; else Phase 6.
Phase 5: Breaking-Change Fixes
Read the changelog deltas for "breaking"/"removed"/"deprecated" + the compile/test errors. Fix source (apply the sibling-file check). Re-verify.
Phase 6: Security Handoff
Run /phx:deps-audit on the working mix.lock diff (its Mode B default). BLOCK findings → surface and offer /phx:deps-vet <pkg> <ver> for accepted risks. Never skip this before a PR.
Phase 7: Group, Commit, PR
Apply the splitting strategy (${CLAUDE_SKILL_DIR}/references/pr-strategy.md): patches bundled, minors by area, majors solo, coupled groups always together. PR bodies cite the changelog excerpt, the https://diff.hex.pm/diff/<pkg>/<old>..<new> link, verification result, and the deps-audit risk band. Stage lock + mix.exs + package-lock together.
Integration
/phx:deps-update (mutating) → /phx:deps-audit (security, Mode B)
│ │ BLOCK → /phx:deps-vet (ledger)
└→ /phx:verify (gate) → grouped commits / PRs
References
${CLAUDE_SKILL_DIR}/references/update-mechanics.md— hex.outdated parsing, update vs unlock+get, majors, lock-diff${CLAUDE_SKILL_DIR}/references/changelog-sources.md— hex.package diff, gh fallbacks, private orgs${CLAUDE_SKILL_DIR}/references/coupled-groups.md— must-move-together groups + edge cases${CLAUDE_SKILL_DIR}/references/pr-strategy.md— grouping rules, area buckets, PR template, scratch layout