Skip to main content

No project description provided

Project description

changepacks logo

Crates.io PyPI npm bundle size npm version npm downloads license CI codecov GitHub stars GitHub forks GitHub issues GitHub pull requests GitHub last commit Rust Python Node.js Bun

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.9-py3-none-win_amd64.whl (4.2 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

changepacks-0.2.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

changepacks-0.2.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (5.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

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

Uploaded Python 3manylinux: glibc 2.17+ i686

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

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

changepacks-0.2.9-py3-none-macosx_10_12_x86_64.whl (4.3 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 6cc2e014db2c7b246b9904403fc87c572e343a553fb3fe964288ece3aa50522b
MD5 1e44ca9161c696875fb6370d5956e358
BLAKE2b-256 859b258d58b797358ab107d87da9d1887941aa0b088ccfaa5445e38cbc9989be

See more details on using hashes here.

File details

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

File metadata

  • Download URL: changepacks-0.2.9-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.9-py3-none-win32.whl
Algorithm Hash digest
SHA256 25a10dd026d0c5fe846440c55ccab454a795a5097e492638fa8e719dd6fb5f96
MD5 c8cdac24c2bdf27abb9f62af26f22eed
BLAKE2b-256 3e64938e18af2ef48a1697f0cd4e55173e4ca915f8251e2e0de6948708bdfe7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ed178c2033eca67fa6a54023740350852ec8f93ff825b2bc2271f2331bbd4134
MD5 af5ed1e5ce657e97e4abd3d0259b5815
BLAKE2b-256 09dd286eb62c6a69ff8456db1b6710654afa51b86e03959985d8a147fb091704

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 3b14de72bc048b72101829b39d21dcb02365780f54ddb895523493b54bf1b57c
MD5 691ff7a241a96dc1ba8ec50abcc2b89c
BLAKE2b-256 ef38caf3eac458a76530185f2d87dcf71c372c23013e6c0b73491405e0d80336

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 271d4a23aa89b05308e3c5a93d20bb4d21e21a15c9deb78f27455034ac511f97
MD5 d015471e2755913b921afd260905735e
BLAKE2b-256 1a59829c156ef2df6bb44f9ec5363b8a919156978563d828f2aebdf39c648379

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9e905756a84eec1d319b87159e6a81496932392cc54c87ff7ee4015f2f2bb446
MD5 97ced5ae6081cbe6314f39a5c92a2ea5
BLAKE2b-256 3f5897477f458ce4c68003019896bc1a0785d83adb6a53101d9fdbe98be3ad89

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3deb265ab6510c6380d4cf5783f390e68832f4d4774bd6f693198d879f33db37
MD5 b879f5fdf13e7d8f052759ed40645658
BLAKE2b-256 44f2aa6c741f9169049626f646a14d2c0a0b677834db4b570d14d94cb731827e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 7289d650cef5de99bb2893ed4d753dbde6e7be5ff928662a0a8a6e1c602a59c6
MD5 85d06e4b694bd29b3856ad8c03509b62
BLAKE2b-256 1744d3f90ae230d36ddf5813cd01c30c9f8c71db9cdb1dda5d31ce8e5838343c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 af3099c520416d5b1d057939fca6005946856c6ed8f0c06c5b6d2d6416110645
MD5 a84942b3f23d496a353dee610d84f9e4
BLAKE2b-256 45a54d858bde8cededbdcdb0d885a0324909b91a8103b15f07512cea56656721

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d4e963e1b02348348659239063e69240ba7968b596209eb1f53dcfd1d32ac725
MD5 601c9886228458f4c2ead1ab744babcb
BLAKE2b-256 38c39395a960d83568d325fcf491a6a90de97a237eded78013d51e4874f6e141

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ca06aebc2fa14912740e14844f974e50c8cd8a34275aa098dfaaa12e14a14a6c
MD5 b734e430dc342cfac3309e5ff567d41e
BLAKE2b-256 712bf7ceec6e5ba19430a4a866cb92229799b1fbc5769bab51fa4a6a2056243c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a0de71745f1deb8d7939e7ca95df6c686f96b3d24ecb51ecfad035f79098adc
MD5 3def85112875887c06b8f2d64c9afd11
BLAKE2b-256 1b7dfa7a9a8d16a3c4c712d15b9b5db337dd9de04571cc8439b4a68b7bef4557

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.9-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 72e7e68f2270ac8eea8b96d855fd2891caf14f9492a258af0251d257d5a17d79
MD5 924ff9a87daf023a41636b1553c0b9b5
BLAKE2b-256 f639e66d359636f34ba2b9c90b6244a4297804de80559248bae71d8a9bc0dfba

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