Contribution Guidelines#
The project practices test-driven development in Git feature (topic) branches. Please maintain a linear commit history by rebasing changes on the latest HEAD of the main branch before submitting them for review as a GitHub pull request.
Development Environment#
Additionally, on Linux it needs lsb-release. On macOS it uses the Command Line Tools for Xcode and MacPorts. Several of the available make targets are listed below. Review the makefile for additional details.
make build-depsInstall the remaining system-level build dependencies. Requires root access via sudo.
make setupCreate (or update) a Python virtual environment named
.venvin the project root directory and perform an editable installation of this project that includes development and testing tools.make pre-commitConfigure optional pre-commit hooks, which require the virtual environment to be active in your code editor or Git porcelain.
make lintCheck code syntax and style.
make cleanReset the development environment, which includes removing the pre-commit hooks.
Code Style#
Guidance
Changes MUST be self-contained and buildable, with updated tests and documentation.
This project follows these code styles:
Python Black and isort
the Google Markdown style guide, but with a more traditional 70-character line limit
Commit Messages#
Guidance
This project REQUIRES Conventional Commits 1.0.0, with which it implements Semantic Versioning 2.0.0.
In commit messages:
Please use English.
Limit the first line to at most 100 characters. Wrap the rest of the commit message at column 70.
Summarize the changes with a one-sentence commit description in the imperative mood, lowercasing the starting verb and omitting ending punctuation.
For the commit type, specify one of build, chore, ci, docs, feat, fix, perf, style, refactor, or test.
Commit Scopes#
Guidance
Per Conventional Commits, a commit scope is an OPTIONAL abbreviation, acronym, codename, or keyword that provides additional context to reviewers by naming the essential component of the change. Changes covering multiple scopes or changes not specific to one scope MUST NOT specify a scope.
An atomic commit can alter multiple files. For example, an interface change could require modifications to class definitions, method calls, property references, and unit tests throughout the project. The commit scope tells reviewers where to focus their analysis. In change logs, commit scopes help sponsors understand the structure of the work going into fixes, features, or breaking changes. However, no commit scopes are currently in use.
Commit Types#
builda change to the build system or external dependencies, e.g., the makefile
chorea miscellaneous tooling or tool configuration change, e.g., the .gitignore file, or a change not covered by the other commit types
cia change to continuous integration/continuous delivery (CI/CD) processes, e.g., GitHub Actions
docsa documentation-only change, including edits to in-line documentation and comments
Hint
Because this is a documentation project, only use the docs commit
type when making changes to project meta-documentation such as
README.md. Use the feat, fix, refactor, and style commit
types to describe content edits.
feata new feature; for documentation projects, new content
fixa bug fix; for documentation projects, a correction
perfa code change that improves performance
refactora code change that neither fixes a bug nor adds a feature, or for documentation projects, an edit that neither makes a correction nor adds content
stylea change that only affects formatting, or a change related to the linter configuration
testa new test or a correction to an existing test