Skip to main content

Python Conventional Commit Checker

Project description

The Python Conventional Commit Checker.

PyPI Version Documentation Status

What is pccc?

pccc is a PyParsing based grammar and script for parsing and verifying a commit message is a conventional commit. The default grammar follows the specification, but allows for the definition of types in addition to feat and fix and for the definition of project specific scopes and footers in compliance with the specification. The maximum line lengths of the commit header and commit body and spelling can also be checked.

Currently, the script interface will load configuration options and a commit message and attempt to parse it. If there are no parse exceptions, it will return 0, otherwise 1. This interface should be usable at the git commit-msg hook stage now. It can also be configured to ignore certain automatically generated commits (from git pull for instance) if it is not desirable or possible to generate those commits as conventional commits (preferable).

Parsing Grammar

Github Closes Issue Syntax

  • KEYWORD = ‘(close[ds]?|fix(?:es|ed)?|resolve[ds]?)’

  • OWNER = ‘^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$’

  • REPOSITORY = ‘^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$’

  • ISSUE-NUMBER = ‘#d+’

  • Single issue in same repository: KEYWORD #ISSUE-NUMBER

  • Single issue in different repository: KEYWORD OWNER/REPOSITORY ISSUE-NUMBER

  • Multiple issues: use full syntax for each issue

The parser in pccc requires separating multiple issues on the Github-issues line with “, “.

See:

  1. https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue/

  2. https://github.com/shinn/github-username-regex/

Roadmap

  1. Implement complete interoperability with TOML, JSON, YAML, and BespON for configuration. (target: 0.5.0)

    • Config().__str__() should output any format * TOML (finished: 0.4.3) * JSON (finished: 0.4.3) * YAML * BespON

    • streamline testing fixture data formats

  2. Implement spell checking. (target: 0.5.0)

    • create spelling validation function for validation mode

    • if enabled, mirror raw commit and questionable words to standard output and return a non-zero exit code

    • questionable words will be ignored by adding the words to the commented ignore-spelling: `` field (``r"^\s*#\s*ignore-spelling:\s+).

  3. Implement simple output reformatting, with configuration options and validation functions, operating in the validation/reformatting mode described previously. (target: 0.6.0)

    • footer separator as “: “ or “ #”

    • “BREAKING-CHANGE” or “BREAKING CHANGE”

    • set breaking flag (!) and/or “BREAKING-CHANGE”

    • correct token capitalization (“BREAKING-CHANGE” not “breaking-change” or “Breaking-Change”; “Signed-off-by” not “Signed-Off-By” or “signed-off-by”)

  4. Implement partial parsing on failure for correction and improved exception handling. (target: 0.7.0 or later)

    • header partial parsing

    • body partial parsing

    • breaking change partial parsing

    • footer partial parsing

  5. Feature freeze, strict semantic versioning, and finish alpha and beta. (from 0.7.0 onward; first stable will be at 1.0.0)

  6. Implement custom hooks for handling per-project footers. (target: 2.0.0 or later)

Installation

Install pccc with:

pip install pccc
pip freeze > requirements.txt

or add as a poetry dev-dependency.

If you desire a package locally built with poetry, download the source, change the appropriate lines in pyproject.toml, and rebuild.

To use as a git commit-msg hook, copy the script pccc to .git/hooks/commit-msg and set the file as executable or integrate the script or module into your existing commit-msg hook. pccc relies on git setting the current working directory of the script to the root of the repository (where pyproject.toml or package.json typically lives). If this is not the repository default, pass the configuration file path as an argument or symlink from the current working directory to an appropriate configuration file.

Usage

Console:

pccc COMMIT_MSG
cat COMMIT_MSG | pccc

In Python:

>>> import pccc
>>> ccr = pccc.ConventionalCommitRunner()
>>> ccr.options.load()
>>> ccr.raw = "some commit message"
>>> ccr.clean()
>>> ccr.parse()
>>> if ccr.exc == None:
...     print(ccr)

See the source and documentation for more information.

Configuration

See pccc.toml for an example [tool.pccc] section that may be copied into a pyproject.toml file. The same entries may be used in a pccc entry in package.json for JavaScript/TypeScript projects.

Author

Jeremy A Gray

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

pccc-0.4.7.tar.gz (297.9 kB view hashes)

Uploaded Source

Built Distribution

pccc-0.4.7-py3-none-any.whl (29.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page