diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2fabf19..80b22b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,10 +5,10 @@ From the project root directory, execute the following command: ```sh -python ./manage.py test +make test ``` -### How to maintain `requirements.txt`? +### How to maintain the Requirements File (`requirements.txt`)? The canonical list of installation requirements (including development requirements) is maintained in the [`setup.py`](setup.py) file. @@ -17,7 +17,7 @@ The Requirements File ([`requirements.txt`](requirements.txt)) file must be kept To to automatically generate or update `requirements.txt` based on `setup.py`, run [`pip-tools`](https://github.com/jazzband/pip-tools)’s `pip-compile`: ```sh -python -m piptools compile --output-file=requirements.txt +make generate_requirements_file ``` **Warning:** Due to [limitations](https://github.com/jazzband/pip-tools/issues/908) in `pip-tools`, the same workflow can not be used for generating a `dev-requirements.txt` file, and requirements can not be declared in a `setup.cfg` file. @@ -25,7 +25,7 @@ python -m piptools compile --output-file=requirements.txt ### How to install modules required for development? ```sh -python -m pip install -e ".[dev]" +make install_dev ``` ### How to run a code formatter? @@ -34,10 +34,10 @@ Run [Black](https://black.readthedocs.io/): ```sh # Dry-run, showing what should be rewritten: -python -m black --target-version=py36 --diff . +make check_code_format # Run code format: -python -m black --target-version=py36 . +make format_code ``` ### How to run a linter? @@ -45,5 +45,5 @@ python -m black --target-version=py36 . Run [Flake8](https://flake8.pycqa.org/): ```sh -python -m flake8 +make lint ``` diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b34ec80 --- /dev/null +++ b/Makefile @@ -0,0 +1,39 @@ +.PHONY: \ + clean \ + check_code_format \ + format_code \ + generate_requirements_file \ + install \ + install_dev \ + lint \ + run \ + test + +clean: + # https://stackoverflow.com/a/41386937/162086 + python3 -Bc "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"; \ + python3 -Bc "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()" + +check_code_format: + python3 -m black --target-version=py36 --diff . + +format_code: + python3 -m black --target-version=py36 . + +generate_requirements_file: + python3 -m piptools compile --output-file=requirements.txt + +install: + python3 -m pip install -r requirements.txt + +install_dev: + python3 -m pip install -e ".[dev]" + +lint: + python3 -m flake8 + +run: + python3 ./manage.py runserver --ipv6 + +test: + python3 ./manage.py test diff --git a/README.md b/README.md index 4007ee4..26540c5 100644 --- a/README.md +++ b/README.md @@ -7,5 +7,5 @@ A micro project proposed as a screening task for the [Senior Django Developer](h On a system, or in a virtual environment where [Python](https://www.python.org/) version 3.6 or above, and [`pip`](https://pip.pypa.io/) and [`setuptools`](https://pypi.org/project/setuptools/) are available, run the following command to install required modules: ```sh -python -m pip install -r requirements.txt +make install ```