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 handles versioning with care — it can be used manually or integrated as a pre-commit hook to automate version bumps and changelog generation based on 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.2.1.tar.gz (35.4 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.2.1-py3-none-any.whl (41.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pezin-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5fea735b3d92a729e94e56f132dcd1c0aff79053530fae258fab1389afbee786
MD5 c3cbf2dda627532f7f008e160cdb973d
BLAKE2b-256 09f0bfd96f35fe8da172ef855813e24d1cbaa107ad0a3c15346d27e15b7e55f2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pezin-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 41.6 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.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 28d6ef3976cbc1baaf624872b15a6ce04dc42382a9b0f36e31c528186e5c5585
MD5 1cbc7e7c4bae4e1535b4bf2ce5983e9d
BLAKE2b-256 bc986cd384598c46dd77403bbc1c5b61801121b897c73e7ba57b12733a47182e

See more details on using hashes here.

Provenance

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