Skip to content

Repository files navigation

Commitizen

Python 3 command line utility to standardize commit messages
Conventional CommitsPyPI Package latest releaseSupported versions

This is an interactive tool to commit based on some rules (like conventional commits).

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

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

pip install commitizen

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

Based on conventional commits

Example running commitizen

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

docs: improved commitizens tab in readme
feat(cz): jira smart commits
refactor(cli): renamed all to ls command
refactor(cz): renamed angular cz to conventional changelog cz
feat: info command for angular
docs(README): added badges
docs(LICENSE): new one
docs(README): added about, installation, creating, etc
chore(bumpversion): configured and added as dev dep
feat(config): new loads from ~/.cz and working project .cz .cz.cfg and setup.cfg

These are the available commiting styles by default:

The installed ones can be checked with:

cz ls

Run in your terminal

cz commit

or the shortcut

cz c
usage: cz [-h] [--debug] [-n NAME] [--version]
{ls,commit,c,example,info,schema} ...
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}
ls show available commitizens
commit (c) create new commit
example show commit example
info show information about the cz
schema show commit schema

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

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.

fromcommitizenimportBaseCommitizenclassJiraCz(BaseCommitizen):
defquestions(self):
"""Questions regarding the commit message. Must have 'whaaaaat' format. More info: https://github.com/finklabs/whaaaaat/ :rtype: list """questions= [
{
'type': 'input',
'name': 'title',
'message': 'Commit title'
},
{
'type': 'input',
'name': 'issue',
'message': 'Jira Issue number:'
},
]
returnquestionsdefmessage(self, answers):
"""Generate the message with the given answers. :type answers: dict :rtype: string """return'{0} (#{1})'.format(answers['title'], answers['issue'])
defexample(self):
"""Provide an example to help understand the style (OPTIONAL) Used by cz example. :rtype: string """return'Problem with user (#321)'defschema(self):
"""Show the schema used (OPTIONAL) :rtype: string """return'<title> (<issue>)'definfo(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

fromdistutils.coreimportsetupsetup(
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.

Support for the old version of python (python 2) is limited, there are some things that won't work, like aliases of commands, so, to commit run:

cz commit
  • [ ] auto changelog integration
  • [ ] tests

About

Create commiting rules for projects

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages