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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

changepacks-0.2.2-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.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (5.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

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

Uploaded Python 3manylinux: glibc 2.17+ i686

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

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

changepacks-0.2.2-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.2-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 ea5d2272358e15548c86b4fa3c9186a252b28e0443c28ed95af420e56fec02f4
MD5 e397ecc188d07934b9ebe943dd05c670
BLAKE2b-256 54728bb1fc1c9b156818446c343f11d0168d8ebef911bd5cffb39ab23dbbd56e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: changepacks-0.2.2-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.1

File hashes

Hashes for changepacks-0.2.2-py3-none-win32.whl
Algorithm Hash digest
SHA256 2aa61042d77fccaabcbd4bd2c27091ab2eea18eb2175ff1c9c1fb6f8562039db
MD5 696b0972ad33bcb073a103163a1f33a6
BLAKE2b-256 7b52078dcdc3630b4e6ca7bcb5ee6e40478e82e6797ebee98ae9f14d3f4d7171

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8fcb442567fb4f656e565ffbb4e234c97c7e017d5ac8037a4532e13a5814828e
MD5 418e39881a3a1677d4fa4f5f72ad748f
BLAKE2b-256 70e7e9e8765a06209364023725f8525f7fc7359d5b800f0d95907d9a0337623e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 c8e5429fbf7513886aba6102ed3f34038a8c71d039f111308fd54dcc3b67af4d
MD5 d1369ee8edf7235c285882081da3716a
BLAKE2b-256 f070db2f2b33d5e73cdc555b0d9b664b53e69b76dc05ab8aab3069b200c87ae0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 cdfba70c728bf64effd35265a361bfe8ba95bfa238580a9b6922035e928586ae
MD5 8cc5cf25fe9c58aad6b6a9e5fe7c461e
BLAKE2b-256 8b8b8a8175da0eb02d444bccbfae1ac4c2940ca7dc3767a65881ef23f4848528

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b0d40f1a0d7cbdd1ef6e3b6974d6a0a275f909c9a8053bd32f1c543a6f55854d
MD5 09abcf78bab116be3cef24acee71a5c6
BLAKE2b-256 3cf0b5214cdbf6a9e4838a7f3553ff62abab17704e4a32bd1466f243af66a17d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a44ef328deb448cf6c7ffeb3ae3a2164356a986efabfc6fce9f7bf0d2d0ea22d
MD5 068a6e1b83930dbf4f8df09963c2e86e
BLAKE2b-256 abd0b972a77f2821ea8e0e86a58f3f9e95e30cade0b59dbc4f57cccdd4c0848b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 b6e76be18dc2d3d8dae8dedaf169710bc9d6fc6193dabd5a07a9df2bc01b6d81
MD5 4998c93b28c49f11da592d3d5417356e
BLAKE2b-256 095663762a0fb47d9fe97520fcdbbb630d243a5ffdb0ad688de111345affe8b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3c41c8d9236023a6f20ee4315f6d4f45242bac8591e59a00acb91e7f240e0063
MD5 67aee5e669384b3fb6f9682df87bb913
BLAKE2b-256 81887068b4f2c6bcd5883405f75cef424e42d855dedc468ad83294a5cd393765

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 37eee36cefb38614475b2bd2e269c4dfc472891f948f2444115ed8013ddac995
MD5 44f443501f3a6c6476f02bfebf7cc862
BLAKE2b-256 03e45612ccedeb0f028b092fe666add561086c6be2293a1ba753036318d50ff0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a61fb44f8d77d4e4d7e1230929cadf06979c5d1b30019effadb6738375753fea
MD5 4cae05d62a56a3b43d3bcb66d07ef498
BLAKE2b-256 fb4a4ece4c053c1218356b308f2bb0ca45c8b5c98347ad8936bdd653a515a75e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f3978a716a7a94bd6873b7d93594465432d0ecc4003333975cf00e7a586731f5
MD5 05b6edfdb04bbb7d84760546fb0b5651
BLAKE2b-256 f260ee95cd1ac90ea7448e8341785251cfc2d60637a728a215c2fa3261c5344f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.2-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 660d74a2f940eaaff96b3478e92bd79e9bd8ebbc836469185036f0d19a60d56e
MD5 26cf453b49d26926ef1fd2f911c7e751
BLAKE2b-256 e98e963bcaa2f71630ce45a70f71b3fb5b6a5abbb2cce69b8bf217c28b9b7af6

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