-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
113 lines (88 loc) · 3.26 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
SHELL := /bin/bash
PACKAGE_DIR := fzw
TESTS_DIR := tests
GREP := grep
AWK := awk
SORT := sort
RM := rm
FIND := find
XARGS := xargs
CAT := cat
DOCKER_COMPOSE := docker-compose
PYTHON := python
PIP_INSTALL_OPTS :=
PIP_COMPILE := pip-compile
PIP_COMPILE_OPTS :=
FLAKE8 := flake8
FLAKE8_OPTS :=
FLAKE8_ARGS := ${ARGS}
MYPY := mypy
MYPY_OPTS :=
MYPY_ARGS := ${ARGS}
PYLINT := pylint
PYLINT_OPTS := --rcfile=setup.cfg --load-plugins pylint_django --load-plugins pylint_django.checkers.migrations --load-plugins pylint_enums --django-settings-module=fzw.settings
PYLINT_ARGS := ${ARGS}
PYTEST := py.test
PYTEST_OPTS := -v
PYTEST_ARGS := ${ARGS}
.PHONY: help
help: ## display this help screen
@grep -E '^[\.a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.PHONY: all
all: check test ## check code, test
.PHONY: dev.setup
dev.setup: dev.install dev.setup-db ## install and setup the database
.PHONY: dev.setup-db
dev.setup-db: docker.start-db db.migrate db.load-fixtures dev.setup-admin ## start, migrate, load fixtures, setup base admin user
.PHONY: dev.setup-admin
dev.setup-admin: ## setup admin user if not created. use only for local development!
${PYTHON} manage.py shell -c 'from django.contrib.auth.models import User; (User.objects.create_superuser("admin", password="admin"), print("User admin created")) if not User.objects.filter(username="admin").exists() else print("User admin was already created")'
.PHONY: dev.serve
dev.serve: ## run development server
DEBUG=1 ${PYTHON} manage.py runserver 0:8000
.PHONY: dev.install
dev.install: ## install all pip requirements
${PYTHON} -m pip install ${PIP_INSTALL_OPTS} -r requirements-all.txt ${ARGS}
.PHONY: dev.update-requirements
dev.update-requirements: ## update pip requirements using the .in files
${PIP_COMPILE} ${PIP_COMPILE_OPTS} --upgrade requirements.in
${PIP_COMPILE} ${PIP_COMPILE_OPTS} --upgrade requirements.txt requirements-dev.in -o requirements-all.txt
.PHONY: test.unit
test.unit: ## run unit tests
${PYTEST} ${PYTEST_OPTS} ${PYTEST_ARGS}
.PHONY: test
test: test.unit ## run tests
.PHONY: check
check: check.flake8 check.mypy check.pylint ## run checks: flake8, mypy, pylint
.PHONY: check.flake8
check.flake8: ## run flake8
${FLAKE8} ${FLAKE8_OPTS} ${FLAKE8_ARGS}
.PHONY: check.mypy
check.mypy: ## run mypy
${MYPY} ${MYPY_OPTS} ${PACKAGE_DIR} ${MYPY_ARGS}
.PHONY: check.pylint
check.pylint: ## run pylint
${PYLINT} ${PYLINT_OPTS} ${PACKAGE_DIR} ${TESTS_DIR} ./*.py ${ARGS}
.PHONY: docker.start-db
docker.start-db: ## start database (via docker)
${DOCKER_COMPOSE} up --detach
.PHONY: docker.stop-db
docker.stop-db: ## stop database (via docker)
${DOCKER_COMPOSE} down
.PHONY: db.migrate
db.migrate: ## migrate database
${PYTHON} manage.py migrate
.PHONY: db.load-fixtures
db.load-fixtures: ## load fixtures
${PYTHON} manage.py loaddata --format yaml fixtures/topic_categories.yaml
${PYTHON} manage.py loaddata --format yaml fixtures/manipulation_categories.yaml
.PHONY: clean
clean: ## remove generated files
-${RM} -r .tox
-${RM} -r .pytest_cache
-${RM} -r .mypy_cache
${FIND} "." -iname '__pycache__' -type d -print0 | ${XARGS} -0 ${RM} -r
-${RM} TEST-*.xml
-${RM} .coverage
-${RM} coverage.xml
-${RM} -r coverage_html_report