Skip to content

Repository files navigation

deps2changesets

CLI tool to automatically generate changesets from dependency changes in Git commits.

Features

  • 🔍 Package detection - Detects all packages with dependency changes
  • 📝 Changeset generation - Parses package.json diffs to create meaningful changeset summaries
  • 📦 Monorepo support - Works with npm/yarn/pnpm workspaces using @manypkg/get-packages

Installation

npm install -g @izumisy/deps2changesets

Or use with npx:

npx @izumisy/deps2changesets

Note: The short alias deps2cs is only available when globally installed. When using npx, use the full package name @izumisy/deps2changesets.

Usage

Basic Usage

Generate changesets for dependency changes between commits:

# Compare main to HEAD (default, ideal for dependabot branches)
npx @izumisy/deps2changesets
# Compare specific commits using Git range syntax
npx @izumisy/deps2changesets --range abc123..def456
# Compare branches
npx @izumisy/deps2changesets --range main..feature-branch
# Compare from a specific ref to HEAD
npx @izumisy/deps2changesets --range main..

Options

OptionShortDescriptionDefault
--range-rGit commit range (e.g., main..HEAD, a1b2c3..d4e5f6)main..HEAD
--release-type-tRelease type for changesets (patch, minor, major)patch
--cwd-cWorking directoryCurrent directory
--dry-run-dPreview changes without creating changesetsfalse
--include-deps-iAdditional dependency types to include (comma-separated: prod, dev, peer, optional)prod

Note: By default, only production dependencies are included in changesets. Use --include-deps to include changes from devDependencies, peerDependencies, or optionalDependencies.

Examples

# Generate patch changesets for changes from main (default)
npx @izumisy/deps2changesets
# Generate changesets for a specific range
npx @izumisy/deps2changesets --range HEAD~3..HEAD
# Generate minor changesets
npx @izumisy/deps2changesets --range main..HEAD --release-type minor
# Run in a specific directory
npx @izumisy/deps2changesets --cwd /path/to/repo
# Preview changes without creating changesets
npx @izumisy/deps2changesets --dry-run
# Include devDependencies changes
npx @izumisy/deps2changesets --include-deps=dev
# Include both devDependencies and peerDependencies changes
npx @izumisy/deps2changesets --include-deps=dev,peer

How it Works

  1. Detects changed files - Uses Git to get changed files between commits
  2. Filters package.json files - Identifies which packages have dependency changes
  3. Parses diffs - Extracts dependency changes (added/updated/removed) from package.json files
  4. Maps to workspace packages - Uses @manypkg/get-packages to match files to workspace packages
  5. Generates changesets - Creates changesets with human-readable summaries

Generated changeset:

---"my-package": patch---
Dependencies updated
- Updated [lodash](https://www.npmjs.com/package/lodash) (^4.17.19 -> ^4.17.21)
- Added [axios](https://www.npmjs.com/package/axios) (^1.4.0)

GitHub Actions

You can automate changeset generation for Dependabot PRs using the provided GitHub Action.

# .github/workflows/dependabot-changeset.ymlname: Dependabot Changeseton:
pull_request:
types: [opened, synchronize]permissions:
contents: writepull-requests: writejobs:
generate-changeset:
runs-on: ubuntu-latestif: github.actor == 'dependabot[bot]'steps:
- name: Checkoutuses: actions/checkout@v4with:
ref: ${{ github.head_ref }}
- name: Generate and commit changesetuses: izumisy/deps2changesets@v1

Remember to set versioning-strategy: increase to reflect version updates on package.json file.

Action Inputs

InputDescriptionDefault
release-typeRelease type for changesets (patch, minor, major)patch
include-depsDependency types to include (comma-separated: prod, dev, peer, optional)prod
commit-messageCommit message for the changesetchore: add changeset for dependency update

Example with Options

- name: Generate and commit changesetuses: izumisy/deps2changesets@v1with:
release-type: minorinclude-deps: prod,devcommit-message: 'chore: add changeset for deps update'

Usecase

License

See LICENSE file for details.

About

CLI tool to automatically generate changesets from dependency changes in Git commits. Built-in monorepo support and Github Action included.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages