Documentation is built using Sphinx with the autodoc extension. In order to build the documentation, you can install the necessary packages and then use make:
pip install -r doc_requirements.txt
make make -C docs/ htmlAll documentation source files and configuration are in the docs/source directory.
Documentation for all modules is autogenerated and populated in the reference subdirectory.
Additional reference material, such as tutorials, should be referenced in index.rst.
Changes are gated on:
- Passing unit tests with minimum supported library versions
- 100% test coverage
- PEP8 style compliance, with some exceptions in the tox file
- Incrementing the package version number in setup.py
Additionally, PRs are checked against (but not blocked by):
- Passing unit tests with latest nominally supported versions of all dependencies
- Documentation builds without warnings
In order to run tests locally, you'll need to install additional packages:
pip install -r test_requirements.txtA test runner is available in scripts/run_tests.sh, which gives a convenient one-line invocation for testing.
As it can be easy to forget to verify these prior to pushing,
it's possible to use git hooks
to enforce compliance during normal workflows.
Consider editing .git/hooks/pre-commit or .git/hooks/pre-push
(or adding them and marking them as executable: chmod +x <file>).
For example, you could set your local .git/hooks/pre-commit to be
scripts/run_tests.sh --quiet --exitfirstto make sure you're not on the main branch, you've incremented the package version, you pass the linter and you have complete, passing tests.
This project follows PEP8, with the following exception:
- Maximum line length is 99 characters
Additionally:
- Type hints are strongly encouraged, but not required.
- Positional arguments are strongly discouraged for methods with multiple arguments, especially for multiple arguments of the same type. Keyword-only arguments are preferred instead. Every positional argument should be required.
For additional (non-binding) inspiration, check out the Google Python Style Guide.
This project currently follows a feature branch workflow:
- Feature branches and bugfixes are branched off of
mainand then opened as PRs intomain - Every PR must contain a version bump following semantic versioning
- Backport branches for historical versions are created as-needed off of
main; backports are branched off of and merged into them
During periods of rapid development activity, the branching strategy may change to accommodate it, but it will be kept up to date here.
The main branch does not continuously deploy to pypi.
Rather, releases are cut explicitly by using GitHub's releases.
To create a release:
- Catalog the changes in order to inform release notes
- To do this through the GitHub interface:
- Navigate to the GitHub compare page
- Set the
baseto the most recent tag (which corresponds to the most recent release) - Set the
compareto the commit you want to deploy, typicallymain
- You can use
git diffas well, if you prefer
- To do this through the GitHub interface:
- In another tab, navigate to the GitHub release creation page
- Set the
Targetto the commit you want to deploy, typicallymain - Set the
Tag versiontov{x.y.z}wherex.y.zis the version in setup.py, e.g.v1.2.3 - Set the
Release titleto "GEMD v{x.y.z} is released!" - Populate the release notes with a 1 or 2 sentence summary and
What's New,Improvements,Fixes, andDeprecatedsections, as appropriate
Travis will trigger the deploy due to the addition of the tag. Only commits on the main or backports branches can be released, but it need not be the most recent commit on the branch. The tests contained within this repository are sufficient to verify a release.