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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

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

Uploaded Python 3manylinux: glibc 2.17+ i686

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

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

changepacks-0.2.6-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.6-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 033a51310152e07323bd5cbc5df1968a728ab65dcc4addebaad6ff9214ead73c
MD5 20dc5a33f61907c36ae6e708c9d8dbcf
BLAKE2b-256 c0bf060fa08881e5394fe186cc7fea3df23ce33ca534b672cea83473b6c71628

See more details on using hashes here.

File details

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

File metadata

  • Download URL: changepacks-0.2.6-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.6-py3-none-win32.whl
Algorithm Hash digest
SHA256 a864771655ff6cca4fce1bb298bb43efab1e5d2a5e62631dd67f1eabf19f836c
MD5 3c5bee91f2edc038907d685bf15b89e5
BLAKE2b-256 05f5d425e785f053f00383fcba7ccc9a7768dbd1508b3a2397051ac90e283fbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8cb63af88d77b432674829ac319f931d74d8b1f6879cdcc531e48b1ad7c53528
MD5 17608efd0eb6db9e08195dd1d3faaa2d
BLAKE2b-256 15eb550dcce6cb47923b619f123d7e6437d33982d9c216a71b341c95b333c912

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 ec67561415bbe5803b98316b768e7e980e9a624d547f4487b69ab08e41102763
MD5 56d89e5750dc0af28cc624db231cd0ab
BLAKE2b-256 e18bd3bc8dfe634bc72a7fcf6af60d42045ed19fabbfbad9ad95cc6081c62110

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 55e5b19355b299dbe32a3d92348be0b86b77a782a18d9c510e592154d00b5cf8
MD5 cd372869527117341a3c91da40c097b7
BLAKE2b-256 ef7f074c46d5ee80998e6c100bc41123c1c256a1830d91e21f2a2d0e5aafe177

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 88d5e04f50d01577732217e892cc4c7b5b880f01bcf6f75214714f0f821b9839
MD5 6f8bebb0b5e3b24a97b1d998de73f9b4
BLAKE2b-256 1f46444e57b344425d6030278ed6762783a91e28730a622e9c08cac38fc109a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 902b19f76cdc883297b76ed4a0d49ebc09e3d75744ac21088a1ec88b0aaa4ec1
MD5 35d918054447396f08b92bbc50d0300a
BLAKE2b-256 7fc5e530befa0800b1c5cecdbebe9c418eda4f17c33d35b73e9be5bd758f6872

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 4ab667f7c8e0d5cc1da8515fc53b3eecf5d0c7c5cb44712a86246e9eac22a67b
MD5 086b32c68ae1821fa8cc3bd4189e356b
BLAKE2b-256 fa0516c327958a09116a2c58fc4639e3ce7ea614016ad0e085ee27562520bbf7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 aa06047db5042fb0d5db05528cb709a26003f508739c8596f3e095a3d52fbe4c
MD5 e7616df76ba29e2d35e79fab58c0109c
BLAKE2b-256 6b7f58b561e21336c6ed4f97f448066a8c7a66beb90404110e888b6825105619

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d8f53cf94e6649f3f649456b88fdd5a610a54ffeab4c6cc58134eac6019f0d74
MD5 7b9bde83d38bb861b58745f992e83cbb
BLAKE2b-256 7a0358550c0561642624755ba4420466b3c4890acb17d9a09419e8a7fb493822

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2bcde58d7759623786874fe436df24fe23470974b0e2108cdd7716dfbb6dc890
MD5 fed4d53b5b13b355254a3ad7969fd162
BLAKE2b-256 57468b7b8f30fff967b79a7604feab629a126e6fc8950a5aba276eb47316b0ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 081d78f79eb09263f1329c6c93436414c2a5ec44c13d500c571eadb07be978be
MD5 e4de9e2ed0a8c1ddf763f656cbf5fff4
BLAKE2b-256 cf6967b65f28eaac83a5dd8da93b77c6094620f2813f2a36556d1976e1e86c29

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.6-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 87baf92cd0232e0fd441c9879d4f1116e65a030a5d48aa95b4afc662ae5d48a0
MD5 11480c7d7f6fa53822ab20f1debaa83a
BLAKE2b-256 1f7557fadbcef90a1e1149680a993ebf148a244d0c7a60f51a44f333e2fa44d3

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