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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

changepacks-0.2.1-py3-none-musllinux_1_2_aarch64.whl (4.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

changepacks-0.2.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (4.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

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

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

changepacks-0.2.1-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.1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2bb2c9db8dd186c3227f613ff030ff93fdc25ee2b1a09b9f5e248f604403ff34
MD5 d4a659217b31bb6ac9e8e9cb8217f981
BLAKE2b-256 4df1697c85428cb964d4f3bf5c08ba57974cf2ab1f5965cbd2e6c381fda93d5e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: changepacks-0.2.1-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.1-py3-none-win32.whl
Algorithm Hash digest
SHA256 0326a233850857c7fecb25b7b8b9d56e01bdbbdc28d3e72b1ac96573fbf6cb77
MD5 9a4296bb79aa2f495d808a266604f025
BLAKE2b-256 d5efc52b9c37a43e2e7d38e46425881f247506e19a8628ab1286e871c200c537

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3d0cdd1e819cdd4f687b1e42ebe4703acf567eadd92e30882c9830cb600e8243
MD5 b3b160060925851cc4541c08758f389d
BLAKE2b-256 ff4d167d6d2d621730bda348f1869b0505d59f44711c9d73cbba5957b7f7a10b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 97006075dcfba00147ecdd41ef2fb97925ab9e67ebe3866a7895e80c279373da
MD5 aa7605a753963183fe7f8a5a4521270f
BLAKE2b-256 431db9569cb11bf686dd1bda42e11df6e0f555e110e03ec26786ac59ede183a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 4baf12a390cc40bb6eacf8ef8d2d36b898aab7078d493197724589a10be488e3
MD5 a7373a7bfb07299ef6ac00579f524342
BLAKE2b-256 f37ecdaaa0072169109d00f579570c9774d6e6bfa3e705ccf7ac546816e5dc4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ce404308079a1576edcafc9a099812a2d4e9bd208e689963089faa2b9bd9999e
MD5 91daec406199c53827ea1cd14513e381
BLAKE2b-256 e8bea51a12768e1d0cf137294aefb7f80cae0aea8a517bbd70d0e7a5de1e8e7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 40e943e8dff62a807068e62c5491669b9f486d38a48cde265dab79a0ff6dfe49
MD5 bf6437453051441183f17fa698ee788a
BLAKE2b-256 509ab35814ab88045dd79ce29e1f9b14fe1e6d16530a49b6cf3f811b956dda72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1da9e24fe339eaf9b0301a24cb4c44980226026d686dd4ef66cf637a03b5ae8e
MD5 7d9c965fb133c416ddc6eab0e7d86533
BLAKE2b-256 56f0234bf493b9f8b3d68396cb9651f66b690a17bb62c524ec45d1e8fd4f37a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5028bc035046cb8edd92d9daa918206485df8c302b19a5f46f4f5be889ac21f9
MD5 d5d55384f34143058129d6d6ab8c031c
BLAKE2b-256 f4957619902c91c40035973c4ed8d499497439efbf563703891c4ac04bcfb7db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 c4037d240636b686d8501cc5aade841d841858887d9512503fbdb040269b58ec
MD5 af0baf39e43f4ee7a46460352c78ee0c
BLAKE2b-256 daa53c39d735e30e5bfbc1ba372ac2c085c00481e8cc47f053621c0180f623a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 862e40592e19ca4b28ccccf585255c77e0e333da422d2ceccba206859a26e4e0
MD5 d14baa7a6222e7e71c3ff908bf465a49
BLAKE2b-256 ec5d42176f41eda95d745fd33f99d65655f3891177337d85442f4853fe7c6b2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e7e3191c0845144c6f61d040b86fbef3f423ee2bd7e1e8321a1ab55d01d5cb57
MD5 8be3addb19769b7c841f8fb2e3cb4ffe
BLAKE2b-256 7254a9f8002e49b87d461787bad640007c3a829cd87fe853690d1e88ced24549

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c88e3892a0b099d15c10f45c48e5bd847bd2963da2a1431f83c8dc9a1dee67a0
MD5 3fb1f8f8cf8ad35fca3b0fa0daacfe99
BLAKE2b-256 cd08fac22de52a5fc761cc106837c70da51a58ca307c7222bbbc29008cbf33b6

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