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.

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.3.tar.gz (35.5 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.3-py3-none-any.whl (42.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pezin-0.0.3.tar.gz
  • Upload date:
  • Size: 35.5 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.3.tar.gz
Algorithm Hash digest
SHA256 b2e48cede279bb0be325580ea7b58a464652facb381a370dd1656dd243a44bef
MD5 2d81a17c04ab5c37f6809a07a0f02bbb
BLAKE2b-256 73524622bc1d5006c8a68d55d2b588ea46d2c58858f6db512d0cc3420a619cfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pezin-0.0.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: pezin-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 42.4 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d025e6893b234c23c3fd16014b1c94dae055a5f2b3f455095cc3595f7a946ec5
MD5 939421e5aae982f50f4453b59126717f
BLAKE2b-256 43028b7fa62ffddda17192e4a928497a72cf583afcf74528a64390637ab6ccc4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pezin-0.0.3-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