diff options
Diffstat (limited to 'CONTRIBUTING.md')
-rw-r--r-- | CONTRIBUTING.md | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..0e08bc3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,112 @@ +# Contributing + +Thank you for your interest in contributing to installer. We welcome all +contributions and greatly appreciate your effort! + +## Code of Conduct + +Everyone interacting in the pip project's codebases, issue trackers, chat rooms, +and mailing lists is expected to follow the [PyPA Code of Conduct][coc]. + +[coc]: https://www.pypa.io/en/latest/code-of-conduct/ + +## Bugs and Feature Requests + +If you have found any bugs or would like to request a new feature, please do +check if there is an existing issue already filed for the same, in the project's +GitHub [issue tracker]. If not, please file a new issue. + +If you want to help out by fixing bugs, choose an open issue in the [issue +tracker] to work on and claim it by posting a comment saying "I would like to +work on this.". Feel free to ask any doubts in the issue thread. + +While working on implementing the feature, please go ahead and file a pull +request. Filing a pull request early allows for getting feedback as early as +possible. + +[issue tracker]: https://github.com/pradyunsg/installer/issues + +## Pull Requests + +Pull Requests should be small to facilitate easier review. Keep them +self-contained, and limited in scope. Studies have shown that review quality +falls off as patch size grows. Sometimes this will result in many small PRs to +land a single large feature. + +Checklist: + +1. All pull requests _must_ be made against the `main` branch. +2. Include tests for any functionality you implement. Any contributions helping + improve existing tests are welcome. +3. Update documentation as necessary and provide documentation for any new + functionality. + +## Development + +[nox] is used to simplify invocation and usage of all the tooling used during +development. + +[nox]: https://github.com/theacodes/nox + +### Code Convention + +This codebase uses the following tools for enforcing a code convention: + +- [black] for code formatting +- [isort] for import sorting +- [mypy] for static type checking +- [pre-commit] for managing all the linters + +To run all the linters: + +```sh-session +$ nox -s lint +``` + +[black]: https://github.com/psf/black +[isort]: https://github.com/timothycrosley/isort +[mypy]: https://github.com/python/mypy +[pre-commit]: https://pre-commit.com/ + +### Testing + +This codebase uses [pytest] as the testing framework and [coverage] for +generating code coverage metrics. We enforce a strict 100% test coverage policy +for all code contributions, although [code coverage isn't everything]. + +To run all the tests: + +```sh-session +$ nox -s test +``` + +nox has been configured to forward any additional arguments it is given to +pytest. This enables the use of [pytest's rich CLI]. + +``` +$ # Using file name +$ nox -s test -- tests/*.py +$ # Using markers +$ nox -s test -- -m unit +$ # Using keywords +$ nox -s test -- -k "basic" +``` + +[pytest]: https://docs.pytest.org/en/stable/ +[coverage]: https://coverage.readthedocs.io/ +[code coverage isn't everything]: + https://bryanpendleton.blogspot.com/2011/02/code-coverage-isnt-everything-but-its.html +[pytest's rich cli]: + https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests + +### Documentation + +This codebase uses [Sphinx] for generating documentation. + +To build the documentation: + +```sh-session +$ nox -s docs +``` + +[sphinx]: https://www.sphinx-doc.org/ |