Skip to main content

No project description provided

Project description

changepacks logo

changepacks 📦

A unified version management and changelog tool for multi-language projects.

Overview

changepacks is a CLI tool that helps you efficiently manage versioning and changelogs across different programming languages and package managers. It provides a unified interface for managing versions in Node.js, Python, Rust, and Dart projects.

Features

  • 🚀 Multi-language Support: Native support for Node.js, Python, Rust, and Dart
  • 📝 Unified Version Management: Consistent versioning across different package managers
  • 🔄 Automated Updates: Smart version bumping based on project changes
  • CLI Interface: Simple and intuitive command-line interface
  • 🎯 Project Detection: Automatic detection of projects in your workspace
  • 📊 Status Tracking: Track which projects need version updates

Supported Languages & Package Managers

Language Package Manager File Status
Node.js npm, pnpm, yarn package.json ✅ Supported
Python pip, uv pyproject.toml ✅ Supported
Rust Cargo Cargo.toml ✅ Supported
Dart pub pubspec.yaml ✅ Supported

Installation

winget install Changepacks.Changepacks

cargo install changepacks

pip install changepacks
uv add changepacks
# run
uvx changepacks

npm install @changepacks/cli
bun install @changepacks/cli
pnpm install @changepacks/cli
yarn install @changepacks/cli
# run
npx @changepacks/cli
bunx @changepacks/cli
pnpm dlx @changepacks/cli

Requirements

  • Rust 1.91+ (for development)
  • Cargo
  • Git repository (for project detection)

Build from Source

git clone https://github.com/changepacks/changepacks.git
cd changepacks
cargo build --release

The binary will be available at target/release/changepacks (or target/release/changepacks.exe on Windows).

Usage

Initialize Project

Initialize changepacks in your repository:

changepacks init

This creates a .changepacks/ directory with configuration files.

Check Project Status

Discover and display all projects in your workspace:

changepacks check

Filter by project type:

changepacks check --filter workspace  # Show only workspaces
changepacks check --filter package    # Show only packages

Update Versions

Update project versions based on changes:

changepacks update

Options:

changepacks update --dry-run    # Preview changes without applying
changepacks update --yes        # Skip confirmation prompts

Publish Packages

Publish packages to their respective registries:

changepacks publish

Options:

changepacks publish --dry-run           # Preview what would be published without actually publishing
changepacks publish --yes               # Skip confirmation prompts
changepacks publish --format json       # Output results in JSON format
changepacks publish --remote            # Use remote branch for change detection

The publish command will:

  1. Discover all projects in your workspace
  2. Show which projects will be published
  3. Execute the publish command for each project (using language-specific defaults or custom commands from config)

Default publish commands by language:

  • Node.js: npm publish
  • Python: uv publish
  • Rust: cargo publish
  • Dart: dart pub publish

Check Config

View the loaded changepacks config (from .changepacks/config.json):

changepacks config

This prints the merged and defaulted configuration, for example:

{
  "ignore": [
    "**/*",
    "!crates/changepacks/Cargo.toml",
    "!bridge/node/package.json",
    "!bridge/python/pyproject.toml"
  ],
  "baseBranch": "main",
  "latestPackage": "crates/changepacks/Cargo.toml",
  "publish": {
    "node": "npm publish",
    "python": "uv publish",
    "rust": "cargo publish",
    "dart": "dart pub publish",
    "bridge/node/package.json": "npm publish --access public"
  }
}

You can edit .changepacks/config.json to customize:

  • Files/projects to ignore (ignore) using glob patterns (default: empty).
  • The base branch to compare against for changes (baseBranch, default: "main").
  • The default main package for versioning (latestPackage, optional).
  • Custom publish commands (publish):
    • Set language-specific commands using language keys: "node", "python", "rust", "dart".
    • Set project-specific commands using relative paths (e.g., "bridge/node/package.json").
    • If not specified, default commands are used (see Publish Packages section).

If the config file is missing or empty, sensible defaults are used.

Default Command

Running changepacks without arguments starts an interactive session to select projects and create a changepack log.

Project Structure

changepacks/
├── crates/
│   ├── cli/          # CLI interface and commands
│   ├── core/         # Core types and traits
│   ├── node/         # Node.js project support
│   ├── python/       # Python project support
│   ├── rust/         # Rust project support
│   ├── dart/         # Dart project support
│   └── utils/        # Utility functions
├── examples/         # Example projects for testing
├── Cargo.toml        # Workspace configuration
└── README.md

How It Works

  1. Project Detection: Scans your repository for supported project files
  2. Change Tracking: Monitors file changes to determine which projects need updates
  3. Version Management: Provides unified version bumping across different package managers
  4. Update Coordination: Ensures consistent versioning across related projects

Development

Build Workspace

cargo build

Run Tests

cargo test

Lint Check

cargo clippy

Run Examples

Test with example projects:

cd examples/node/common
changepacks check

Architecture

The project is built with a modular architecture:

  • Core: Defines common traits and types for workspaces and packages
  • Language Crates: Implement language-specific project detection and management
  • CLI: Provides the user interface and command orchestration
  • Utils: Shared utilities for path handling, version calculation, and more

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Sponsors

We're grateful to our sponsors for supporting changepacks development! If you're interested in sponsoring this project, please get in touch.

Used By

The following open-source projects and companies are using changepacks:

If you're using changepacks in your project, we'd love to feature you here! Please open a Pull Request to add your project or company.

License

This project is distributed under the MIT License. See the LICENSE file for more details.

Roadmap

  • Node.js package management support
  • Python package management support
  • Rust package management support
  • Dart package management support
  • CI/CD integration support
  • Plugin system for additional languages

Support

If you encounter any issues or have feature requests, please let us know on the Issues page.

Inspirations

  • changesets - Version management for JavaScript projects

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

changepacks-0.2.8-py3-none-win_amd64.whl (4.2 MB view details)

Uploaded Python 3Windows x86-64

changepacks-0.2.8-py3-none-win32.whl (3.9 MB view details)

Uploaded Python 3Windows x86

changepacks-0.2.8-py3-none-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

changepacks-0.2.8-py3-none-musllinux_1_2_i686.whl (4.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

changepacks-0.2.8-py3-none-musllinux_1_2_armv7l.whl (4.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

changepacks-0.2.8-py3-none-musllinux_1_2_aarch64.whl (4.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

changepacks-0.2.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

changepacks-0.2.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (5.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

changepacks-0.2.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (4.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

changepacks-0.2.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

changepacks-0.2.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

changepacks-0.2.8-py3-none-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

changepacks-0.2.8-py3-none-macosx_10_12_x86_64.whl (4.2 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file changepacks-0.2.8-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 43ab7e54e5e54ac1d5f5398c61ec7907daaef775c8519aa2c475b91fa54e286e
MD5 20fd421785e0ad0194a79f837eb860d4
BLAKE2b-256 92084a38577642c3cbd4de93a8ab2d9f7caa1919ed712747b5c67171909169f3

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-win32.whl.

File metadata

  • Download URL: changepacks-0.2.8-py3-none-win32.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.10.2

File hashes

Hashes for changepacks-0.2.8-py3-none-win32.whl
Algorithm Hash digest
SHA256 b4bb19ebec2ad3777eb31f9564560cd1ed263f5e422def67c5162ea04aca9046
MD5 b862843cc1217762018baa59cc4c2a9a
BLAKE2b-256 b70eb419c0dc7f603376eb86ab38d876af931a782f757fda9d41c062c60ea9f6

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b0fca73d8e2c610c382750f2b873922640342ae9e7851e9bf5d505f197e61ab5
MD5 3a3627bef3158b81312ed1736e41533d
BLAKE2b-256 360e47d811fca8abf3733903c9518ca75af797d25cda96fafd24cfa81d235295

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 c5546e80bfc082cd2a072c64767fe255d028cf9d457ac1fadb79c6cea94b8b69
MD5 52b7dc563d35f7b93558da2a0889f34e
BLAKE2b-256 71ab27494efb04316c7a4a1ac51d83d69612e408d9d75bdb5dad5d97cb73ec6b

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 16b591b7b18c2a5d572b5def87215f17a462ef5acfccda9339f52bb4e37b008e
MD5 c7c43cda80a27962d52ea94f13772ad6
BLAKE2b-256 836d7ad89d4403cd3c767a9996d1480a368ce2b38ade52e2093024908661af78

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e5a549900ae28ff81fec12dfbe310d40e696bbf1f0760333408c919790a24819
MD5 1ce4544ada61775a024236bb72d0dd61
BLAKE2b-256 476825c92556744c5abd409e05d30da5648a6553fb425ffd630e27add32393a9

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28a2bdf31b2847717ba0aade2d55970888031a9504ef73d444f997a69e5e6dd3
MD5 6d02d5e5118b7cc0cf3c07f49c675ba6
BLAKE2b-256 314b49b83ee938b8095942c9b3b1d56d3fd553a958fe85945435ff2acb2232a8

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 2003e3e011a8edaaccca6f2f459c69d9ff604165f77cc2647814de430dfe98d1
MD5 1c67a356d6ca9b111ffa8ebac7325259
BLAKE2b-256 39abeb618e00315031ffa0ce17298be816408ee7c4eb43fa99a0a5720e18e7dd

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 69b080d4bd8140b2cc87f2cb8fd3d40d6bf7b21e5d202c0da3cdc819ff86c4d4
MD5 5c9fdee5ca9ef1b5783513cb23bddef1
BLAKE2b-256 4092399c9dd933a2d48a8e0797965be22de512a255026b0a41532d52adc92427

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 3a8391d32a1d33987981f00ba6cf5a779268229bca09e51f89351e59c46cdb50
MD5 da0648a6f95691547a67908ebcd05018
BLAKE2b-256 ab00682063e35c642354bccbbc29bea3eb256d3709f77e6f700117ebce42002e

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2298fe6867c57f5cacf285002cbe4358ff457867d1a8aabe73f1b343059cbe90
MD5 0b3cb249843de1eb2e381522b0fb332f
BLAKE2b-256 75af1548e3d3a4239c8db57f1b4155a2f433b0e77e617aba7b9e5233fd19f3ab

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 77c1a45edfcdf2daf12ab93247dd670827f016227e4f2d37fb086defcf84f9a3
MD5 3d2276e038de77e951e289074f5b7669
BLAKE2b-256 9d6ed07e7a21cc9bb9208881a1bb018c777f386d602f2d704fd37aa18457fc36

See more details on using hashes here.

File details

Details for the file changepacks-0.2.8-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.8-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cdd0a7305d3f78728a3d94cee271062493bfcee49c9581991a05e72946b22307
MD5 0eaecf426f138d8f2ad47d0f9a57ba23
BLAKE2b-256 35f18bd1d7a56de8c4cba0cd899cf5411c9b6a8bfa553d23f67b10d661b8dc32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page