-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
144 lines (112 loc) · 2.65 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
.PHONY: all develop test lint clean doc format
.PHONY: clean clean-build clean-pyc clean-test coverage dist docs install lint lint/flake8
# The package name
PKG=flask_super
all: test lint
#
# Setup
#
## Install development dependencies and pre-commit hook (env must be already activated)
develop: install-deps activate-pre-commit configure-git
install-deps:
@echo "--> Installing dependencies"
pip install -U pip setuptools wheel
poetry install
activate-pre-commit:
@echo "--> Activating pre-commit hook"
pre-commit install
configure-git:
@echo "--> Configuring git"
git config branch.autosetuprebase always
#
# testing & checking
#
.PHONY: test test-randomly test-with-coverage test-with-typeguard clean-test lint audit
## Run python tests
test:
@echo "--> Running Python tests"
pytest --ff -x -p no:randomly
@echo ""
test-randomly:
@echo "--> Running Python tests in random order"
pytest
@echo ""
test-with-coverage:
@echo "--> Running Python tests"
py.test --cov $(PKG)
@echo ""
test-with-typeguard:
@echo "--> Running Python tests with typeguard"
pytest --typeguard-packages=${PKG}
@echo ""
## Cleanup tests artifacts
clean-test: ## remove test and coverage artifacts
rm -fr .tox/
rm -f .coverage
rm -fr htmlcov/
rm -fr .pytest_cache
## Lint / check typing
lint:
adt check src tests
# Alt
#lint:
# ruff src tests/test*.py
# mypy --show-error-codes src
# flake8 src tests/test*.py
# # python -m pyanalyze --config-file pyproject.toml src
# lint-imports
# make hadolint
# vulture --min-confidence 80 src
# deptry . --extend-exclude .nox --extend-exclude .tox
# # TODO later
# # mypy --check-untyped-defs src
## Run a security audit
audit:
pip-audit
safety check
#
# Formatting
#
.PHONY: format
## Format / beautify code
format:
docformatter -i -r src
black src
isort src tests
#
# Everything else
#
.PHONY: help install doc doc-html doc-pdf clean tidy update-deps publish
help:
@inv help-make
install:
poetry install
doc: doc-html doc-pdf
doc-html:
sphinx-build -W -b html docs/ docs/_build/html
doc-pdf:
sphinx-build -W -b latex docs/ docs/_build/latex
make -C docs/_build/latex all-pdf
## Cleanup repository
clean:
rm -f **/*.pyc
find . -type d -empty -delete
rm -rf *.egg-info *.egg .coverage .eggs .cache .mypy_cache .pyre \
.pytest_cache .pytest .DS_Store docs/_build docs/cache docs/tmp \
dist build pip-wheel-metadata junit-*.xml htmlcov coverage.xml
## Cleanup harder
tidy: clean
rm -rf .nox
rm -rf node_modules
rm -rf instance
## Update dependencies
update-deps:
pip install -U pip setuptools wheel
poetry update
poetry show -o
## Publish to PyPI
publish: clean
git push
git push --tags
poetry build
twine upload dist/*