Tooling#
Pre-commit hooks#
It is important that all BrainGlobe is consistently formatted for readability, and for clean git diffs. For this
reason, we use pre-commit. Running pre-commit install
will set up
pre-commit hooks to ensure the code is formatted correctly. Currently, these are:
black for code structure formatting (maximum line length set to 79)
mypy a static type checker
ruff does a number of jobs, including enforcing PEP8 and sorting imports
These will prevent code from being committed if any of these hooks fail. To run them individually:
ruff .
black ./
mypy -p name_of_package
You can also execute all the hooks using pre-commit run
. The best time to run this is after you have staged
your changes, but before you commit them.
In the case you see mypy
failing with an error like Library stubs not installed for this-package
, you have
to edit the .pre-commit-config.yaml
file by adding the additional dependency to mypy
:
- id: mypy
additional_dependencies:
- types-setuptools
- types-this-package
Versioning#
We use semantic versioning, which uses a MAJOR
.MINOR
.PATCH
versioning number where these mean:
PATCH = small bugfix
MINOR = new feature
MAJOR = breaking change
Automated versioning#
setuptools_scm
can be used to automatically version each package. It has
been pre-configured in the pyproject.toml
file.
setuptools_scm
will automatically infer the version using git. To manually set a new semantic version, create a tag
and make sure the tag is pushed to GitHub. Make sure you commit any changes you wish to be included in this version.
E.g., to bump the version to 1.0.0
:
git add .
git commit -m "Add new changes"
git tag -a v1.0.0 -m "Bump to version 1.0.0"
git push --follow-tags