Skip to main content

Automated version bumping and changelog management using conventional commits

Project description

🚀 Pezin

CI PyPI version Python 3.12+ License: MIT Downloads

A tool that care about versions, you could you manually or it could be used as a pre-commit hook to automate version bumping and changelog management using conventional commits.

Bump version UP

Features

  • 🔄 Automatic version bumping based on conventional commits
  • 🌍 Universal language support - Python, Node.js, C/C++, Rust, PHP, Go, Java, .NET, and any custom patterns
  • 📁 Multi-file version management - Update multiple version files simultaneously
  • 🎨 Advanced pattern system - Component-level version control with rich template formatting
  • 📝 Automated changelog generation with comparison links
  • 🎣 Git pre-commit hook integration with reliable amend detection
  • CLI tool for manual version management
  • 🏷️ Pre-release version support (alpha, beta, rc)
  • 🔧 Flexible version formats - Support any prefix/suffix pattern (v1.2.3, 1.2.3v, release-1.2.3)

Quick Start

Installation

Install from PyPI:

pip install pezin

Or install the latest development version:

pip install git+https://github.com/tatus9/pezin.git

Setup Git Hook

Add to your .pre-commit-config.yaml:

repos:
  - repo: https://github.com/tatus9/pezin
    rev: v0.1.2  # Use the latest version
    hooks:
      - id: pezin

Install the hooks:

pip install pre-commit pezin
pre-commit install --hook-type commit-msg

Start Using

Just commit with conventional commit format:

git commit -m "feat: add user authentication"    # 1.0.0 → 1.1.0
git commit -m "fix: resolve login bug"           # 1.1.0 → 1.1.1
git commit -m "feat!: redesign API"              # 1.1.1 → 2.0.0

Your version files will be automatically updated!

Conventional Commits

Type Version Bump Example
feat: Minor (1.0.0 → 1.1.0) feat: add user dashboard
fix: Patch (1.0.0 → 1.0.1) fix: resolve login issue
feat!: Major (1.0.0 → 2.0.0) feat!: redesign API
docs:, chore:, etc. No bump docs: update readme

Special tokens:

  • [skip-bump] - Skip version bump
  • [force-major] - Force major bump
  • [pre-release=beta] - Add pre-release label

CLI Usage

# Check versions
pezin -v                       # Shows current project + pezin versions
pezin version                  # Same as above

# Manual version bumping
pezin minor                    # Bump minor version
pezin patch --dry-run          # Preview changes
pezin major --pre-release rc   # Pre-release version

# Custom configuration
pezin patch --config package.json
pezin minor --skip-changelog

# Multi-language project example
# Updates pyproject.toml, package.json, version.h simultaneously
git commit -m "feat: add multi-platform support"

Python API

from pezin import Version, ConventionalCommit, ChangelogManager

# Parse and bump version
version = Version.parse("1.2.3")
new_version = version.bump("minor")
print(str(new_version))  # "1.3.0"

# Parse commit message
commit = ConventionalCommit.parse(
    "feat(api)!: add new endpoint\n\nBREAKING CHANGE: new auth"
)
print(commit.breaking)  # True

# Update changelog
config = ChangelogConfig(repo_url="https://github.com/tatus9/pezin.git")
manager = ChangelogManager(config)
manager.update_changelog(
    Path("CHANGELOG.md"),
    str(new_version),
    [commit]
)

Conventional Commits Guide

Pezin follows the Conventional Commits specification:

Basic Format

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Version Bump Rules

  • feat: Minor version bump (1.0.0 → 1.1.0) - New features
  • fix: Patch version bump (1.0.0 → 1.0.1) - Bug fixes
  • ! or BREAKING CHANGE: Major version bump (1.0.0 → 2.0.0) - Breaking changes

Other Commit Types (no version bump)

  • docs: Documentation changes
  • style: Code style/formatting changes
  • refactor: Code refactoring without functional changes
  • perf: Performance improvements
  • test: Adding or updating tests
  • chore: Maintenance tasks, dependency updates
  • ci: CI/CD configuration changes
  • build: Build system changes

Special Footer Tokens

Control version bumping behavior with footer tokens:

# Skip version bump entirely
git commit -m "feat: new feature

[skip-bump]"

# Force specific bump type
git commit -m "docs: update readme

[force-patch]"

# Add pre-release label
git commit -m "feat: beta feature

[pre-release=beta]"

Available tokens:

  • [skip-bump]: Skip version bump
  • [force-major]: Force major bump (1.0.0 → 2.0.0)
  • [force-minor]: Force minor bump (1.0.0 → 1.1.0)
  • [force-patch]: Force patch bump (1.0.0 → 1.0.1)
  • [pre-release=label]: Add pre-release label (alpha, beta, rc)

Documentation

Examples

Contributing

We welcome contributions!

License

MIT License - feel free to use this project for any purpose.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pezin-0.0.2.tar.gz (35.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pezin-0.0.2-py3-none-any.whl (42.5 kB view details)

Uploaded Python 3

File details

Details for the file pezin-0.0.2.tar.gz.

File metadata

  • Download URL: pezin-0.0.2.tar.gz
  • Upload date:
  • Size: 35.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pezin-0.0.2.tar.gz
Algorithm Hash digest
SHA256 83ffb91188b6076efcb618840aa07df5237c9002dfaa77e9ae2b520bd1ad7708
MD5 07a2354d0aa85155524f4a95f7a666d0
BLAKE2b-256 e164b7e9486c47c9ae5358f03535563377f859efe9320150e14bed5dd00279e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pezin-0.0.2.tar.gz:

Publisher: release.yml on tatus9/pezin

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pezin-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: pezin-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 42.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pezin-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ffb16e3cfe6fbb69824d38b718acf445434deeed5c7759914efff786aa69c7e2
MD5 78ae8825ddf76c2450de25a1b2adf8d5
BLAKE2b-256 2c2a86eeddb96ee7d1b23022f54b7dc2b0f962f20b0a48278ccb213a1379c8c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pezin-0.0.2-py3-none-any.whl:

Publisher: release.yml on tatus9/pezin

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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