Skip to main content

Python commitizen client tool

Project description

Python 3 command line utility to standardize commit messages and bump version

Travis Conventional Commits PyPI Package latest release Supported versions Codecov Example running commitizen

About

Interactive tool to commit based on established rules (like conventional commits).

It comes with some defaults commit styles, like conventional commits and jira and it’s easily extendable.

It’s useful for teams, because it is possible to standardize the commiting style.

Also includes an automatic version bump system based on semver.

Installation

pip install -U commitizen
poetry add commitizen --dev

Global installation

sudo pip3 install -U commitizen

Features

  • Prompt your commit rules to the user

  • Display information about your commit rules (schema, example, info)

  • Auto bump version based on semver using your rules (currently there is only support for conventionalcommits)

  • Future: New documentation

  • Future: Autochangelog

Commit rules

This client tool prompts the user with information about the commit.

Based on conventional commits

This is an example of how the git messages history would look like:

BREAKING CHANGE: command send has been removed
fix: minor typos in code
feat: new command update
docs: improved commitizens tab in readme
feat(cz): jira smart commits
refactor(cli): renamed all to ls command
feat: info command for angular
docs(README): added badges
docs(README): added about, installation, creating, etc
feat(config): new loads from ~/.cz and working project .cz .cz.cfg and setup.cfg

Commitizens

These are the available commiting styles by default:

The installed ones can be checked with:

cz ls

Commiting

Run in your terminal

cz commit

or the shortcut

cz c

Usage

$ cz --help
usage: cz [-h] [--debug] [-n NAME] [--version]
        {ls,commit,c,example,info,schema,bump} ...

Commitizen is a cli tool to generate conventional commits.
For more information about the topic go to https://conventionalcommits.org/

optional arguments:
-h, --help            show this help message and exit
--debug               use debug mode
-n NAME, --name NAME  use the given commitizen
--version             get the version of the installed commitizen

commands:
{ls,commit,c,example,info,schema,bump}
    ls                  show available commitizens
    commit (c)          create new commit
    example             show commit example
    info                show information about the cz
    schema              show commit schema
    bump                bump semantic version based on the git log

Configuration

New!: Support for pyproject.toml

In your pyproject.toml you can add an entry like this:

[tool.commitizen]
name = cz_conventional_commits
version = "0.1.0"
files = [
    "src/__version__.py",
    "pyproject.toml"
]

Also, you can create in your project folder a file called .cz, .cz.cfg or in your setup.cfg or if you want to configure the global default in your user’s home folder a .cz file with the following information:

[commitizen]
name = cz_conventional_commits
version = 0.1.0
files = [
    "src/__version__.py",
    "pyproject.toml"
    ]

The extra tab at the end (]) is required.

Creating a commiter

Create a file starting with cz_ for example cz_jira.py. This prefix is used to detect the plugin. Same method flask uses

Inherit from BaseCommitizen and you must define questions and message. The others are optionals.

from commitizen import BaseCommitizen

class JiraCz(BaseCommitizen):

    def questions(self):
        """Questions regarding the commit message.

        :rtype: list
        """
        questions = [
            {
                'type': 'input',
                'name': 'title',
                'message': 'Commit title'
            },
            {
                'type': 'input',
                'name': 'issue',
                'message': 'Jira Issue number:'
            },
        ]
        return questions

    def message(self, answers):
        """Generate the message with the given answers.

        :type answers: dict
        :rtype: string
        """
        return '{0} (#{1})'.format(answers['title'], answers['issue'])

    def example(self):
        """Provide an example to help understand the style (OPTIONAL)
        Used by cz example.

        :rtype: string
        """
        return 'Problem with user (#321)'

    def schema(self):
        """Show the schema used (OPTIONAL)

        :rtype: string
        """
        return '<title> (<issue>)'

    def info(self):
        """Explanation of the commit rules. (OPTIONAL)
        :rtype: string
        """
        return 'We use this because is useful'


discover_this = JiraCz  # used by the plugin system

The next file required is setup.py modified from flask version

from distutils.core import setup

setup(
    name='JiraCommitizen',
    version='0.1.0',
    py_modules=['cz_jira'],
    license='MIT',
    long_description='this is a long description',
    install_requires=['commitizen']
)

So at the end we would have

.
├── cz_jira.py
└── setup.py

And that’s it, you can install it without uploading to pypi by simply doing pip install . If you feel like it should be part of the repo, create a PR.

Python 2 support

There’s no longer support for python 2. Nor planned suppport.

Contributing

Feel free to create a PR.

  1. Clone the repo.

  2. Add your modifications

  3. Create a virtualenv

  4. Run pytest -s --cov-report term-missing --cov=commitizen tests/

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

commitizen-1.1.0.tar.gz (19.3 kB view details)

Uploaded Source

Built Distribution

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

commitizen-1.1.0-py3-none-any.whl (48.4 kB view details)

Uploaded Python 3

File details

Details for the file commitizen-1.1.0.tar.gz.

File metadata

  • Download URL: commitizen-1.1.0.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.11 CPython/3.7.3rc1 Linux/4.19.0-4-amd64

File hashes

Hashes for commitizen-1.1.0.tar.gz
Algorithm Hash digest
SHA256 bea49c592abf2844a0cd2fb723edee5068bbd16fdcea1325c36d433bf78a520c
MD5 d2f371a69874a7a02e4fb0ebac799bec
BLAKE2b-256 56614ffee1cf4b41d82c71a6fd6d94764104011af9c934a6fa6123267db9a9d7

See more details on using hashes here.

File details

Details for the file commitizen-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: commitizen-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 48.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.11 CPython/3.7.3rc1 Linux/4.19.0-4-amd64

File hashes

Hashes for commitizen-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 16e70a604b794e0bdb07a0622e2dfb36bbc062d82327873d4f6f0ca962558627
MD5 db35fb933ba8398e3fa10cf53164add2
BLAKE2b-256 26483590c14f6e330eb0e626744e4caa9c1824164a1948b1d3f22a99f6920c88

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