From 2489bb9b040412fa62a0be0fbdcf942b7bd85c17 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Thu, 6 Feb 2020 15:01:56 +0300 Subject: [PATCH] Adds CONTRIBUTING.md (#319) * Adds CONTRIBUTING.md Closes #206 Refs #274 * Update CONTRIBUTING.md --- CONTRIBUTING.md | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..bf99f53 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,111 @@ +# How to contribute + +## Tutorials + +If you want to start working on this project, +you will need to get familiar with these projects: + +- [Django docs](https://docs.djangoproject.com/en/dev/) +- [Typing in Python](https://inventwithpython.com/blog/2019/11/24/type-hints-for-busy-python-programmers/) +- [How to write custom mypy plugins](https://mypy.readthedocs.io/en/stable/extending_mypy.html) +- [Typechecking Django and DRF](https://sobolevn.me/2019/08/typechecking-django-and-drf) guide +- [Testing mypy stubs, plugins, and types](https://sobolevn.me/2019/08/testing-mypy-types) guide + +It is also recommended to take a look at these resources: + +- [Awesome Python Typing](https://github.com/typeddjango/awesome-python-typing) + + +## Dev documentation + +TODO + + +## Dependencies + +We use `pip` to manage the dependencies. + +To install them you would need to activate your `virtualenv` and run `install` command: + +```bash +pip install -r ./dev-requirements.txt +``` + + +## Tests and linters + +We use `mypy`, `pytest`, `flake8`, and `black` for quality control. +Here's [how we run our CI](https://github.com/typeddjango/django-stubs/blob/master/.travis.yml). + +### Typechecking + +To run typechecking use: + +```bash +mypy ./mypy_django_plugin +``` + +### Testing + +There are unit tests and type-related tests. + +To run unit tests: + +```bash +pytest +``` + +Type-related tests ensure that different Django versions do work correctly. +To run type-related tests: + +```bash +python ./scripts/typecheck_tests.py --django_version=2.2 +python ./scripts/typecheck_tests.py --django_version=3.0 +``` + +Currently we only support two Django versions. + +### Linting + +To run auto-formatting: + +```bash +isort -rc . +black django-stubs/ +``` + +To run linting: + +```bash +flake8 +flake8 --config flake8-pyi.ini +``` + + +## Submitting your code + +We use [trunk based](https://trunkbaseddevelopment.com/) +development (we also sometimes call it `wemake-git-flow`). + +What the point of this method? + +1. We use protected `master` branch, + so the only way to push your code is via pull request +2. We use issue branches: to implement a new feature or to fix a bug + create a new branch named `issue-$TASKNUMBER` +3. Then create a pull request to `master` branch +4. We use `git tag`s to make releases, so we can track what has changed + since the latest release + +So, this way we achieve an easy and scalable development process +which frees us from merging hell and long-living branches. + +In this method, the latest version of the app is always in the `master` branch. + + +## Other help + +You can contribute by spreading a word about this library. +It would also be a huge contribution to write +a short article on how you are using this project. +You can also share your best practices with us.