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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

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

Uploaded Python 3manylinux: glibc 2.17+ i686

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

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

changepacks-0.2.5-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.5-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9528d8e5b44d29ca9eead68bcbe60649caeee91f6ccf6674021e02a3eea1b418
MD5 6ee27b5515228ec46d14fbb9c2e484cc
BLAKE2b-256 9f5a1abc843ba2cb3f4c66e3140c47f3a389dde23be71d9eeac1eb83ae05fd03

See more details on using hashes here.

File details

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

File metadata

  • Download URL: changepacks-0.2.5-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.5-py3-none-win32.whl
Algorithm Hash digest
SHA256 e44d668416b17a5e82f17d513aa4389291653b65e42972ee54d9d7b51d900dbc
MD5 fc5b1f85e24d90a43935f95ba29cc79a
BLAKE2b-256 499ca020ccf621c2d57231026cfbadc3a1acc4fa4b99192fc67c42f0dde93fc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0cf96e8d7d6c24d2151b21b6b16af609349c10cd2777a49de49e1de3333602d8
MD5 b90256bfbc0ab66d2e1b8278348b4a26
BLAKE2b-256 c7d761cb132df68ca86170d183b5a793a9826dd3d1fda59782f3648a3cbb0e78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 95d400520f435cff72f31c8b5baa546b3a6f947d50bd84d0a812c257fee79d12
MD5 b39aa02c77f4798705f37b5196c9ee14
BLAKE2b-256 39d66b9647035e0762d1627ad2733aa5e2ade8ee6dbe380b6fde84fecbed6810

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 a36502b39d5d2dc88ca7fa1a07f7fe275a34274a8a7c38540615da925682e868
MD5 32bb17471b23c461fbfa23bd5c85b11b
BLAKE2b-256 947e1d57d8257c29cf0c7059141dda2fb17fd600f9af91926767b1449b1207ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ab4e37f907fc640f69637aad487913a21c47a5939fc018003014b326aca812da
MD5 b43b413a2b2115b25ddef98a706bd84a
BLAKE2b-256 0d86f089fde8cbbc6e6be051fefd1fe4a52f993ab2e599f85c93dc279ac878cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0a141bf566be157d9fd9b3df49f50d9dcdbe97acc48aaa3fe9191a29ccc0b268
MD5 a242b09a054433e7a3ae1c212fbd7ac5
BLAKE2b-256 4e4259251ce9664e14da43ba06a785262c2c002227a9955ff4e93ade8176b06d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 911355f5a7680f0cd9c99027f29a2dae11e615c5284d5037b7e22980b7f51356
MD5 4d23ce0e6e2613f2910f9cb807f2b762
BLAKE2b-256 5831249f2ecc4fbabbf7951262e7a1c592a9c0ffd2c14a75a9ed7b2ff85c5326

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 eee35ae7ee1be40692cafbdbe397310148b9795bc68c04dafb01bff08edab550
MD5 6f140dc85e7950143e324a6ae4109777
BLAKE2b-256 47918f89adf50c6c1272108bb1ddd9ae912764dc2efc368bcfe05eb3af4136c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 5c649cee3da705fdbb010c9c5ded8880ad12df1e984a5187085ca3d80e581b0c
MD5 519492b4d8fa3566df389c39dde779d6
BLAKE2b-256 e1def26fa6080c79dd41c0fd0eb6393355f6343160242d6c5a3d70bc38686477

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fa82220656a78037059174cb970bce6954de85e34ac511bd218d6d0c1befd2a1
MD5 fb03c0ee4795797509e80c91039bf658
BLAKE2b-256 4982732482fb5c9210b3410764ed06d07aa9db2d1ee1c997ca657da17d0a2f37

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d87bd55a2904cd86bd64ee26a1fed2ae315b020c50c8b20a9f611a220119c568
MD5 a795288e41ad11dc11f94343012fdafa
BLAKE2b-256 1f4e4d60d86facb86f00a72eec73366e754dd43cad9a0c02655b3fc1cde80959

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changepacks-0.2.5-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 88b9ead77fb5c552f47afaf272e12bc85af028293d5aea1801b986513ff353b2
MD5 a20296664c2bf170fbb8159726d203d3
BLAKE2b-256 f972b7ac56cfa30d12827233850b9eedc08b12f562648ce24513c821f26a91dd

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