-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
131 lines (101 loc) · 2.5 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
# convenient makefile
SHELL = /bin/bash
.ONESHELL:
MODULE = ProxyPatternPool
F.md = $(wildcard *.md docs/*.md)
F.pdf = $(F.md:%.md=%.pdf)
# PYTHON = /snap/bin/pypy3
# PYTHON = python3
PYTHON = python
PYTEST = pytest --log-level=debug --capture=tee-sys
PYTOPT =
.PHONY: check.mypy
check.mypy: dev
source venv/bin/activate
mypy --implicit-optional $(MODULE).py
.PHONY: check.pyright
check.pyright: dev
source venv/bin/activate
pyright $(MODULE).py
IGNORE = E227,E402,E501,W504
.PHONY: check.ruff
check.ruff: dev
source venv/bin/activate
ruff check $(MODULE).py
.PHONY: check.flake8
check.flake8: dev
source venv/bin/activate
flake8 --ignore=E128,$(IGNORE) $(MODULE).py
.PHONY: check.black
check.black: dev
source venv/bin/activate
black --check $(MODULE).py
.PHONY: check.pytest
check.pytest: dev
source venv/bin/activate
$(PYTEST) $(PYTOPT) test.py
# expected coverage may be overriden
COVER = 100.0
.PHONY: check.coverage
check.coverage: dev
source venv/bin/activate
coverage run -m $(PYTEST) $(PYTOPT) test.py
# coverage html $(MODULE).py
coverage report --fail-under=$(COVER) --show-missing --precision=1 --include='*/$(MODULE).py'
.PHONY: check.pymarkdown
check.pymarkdown: dev
source venv/bin/activate
pymarkdown scan $(F.md)
.PHONY: check.docs
check.docs: check.pymarkdown
# check.black check.pyright
.PHONY: check
check: check.pyright check.pymarkdown check.ruff check.pytest check.coverage
.PHONY: clean
clean:
$(MAKE) -C docs clean
$(RM) -r __pycache__ */__pycache__ dist build .mypy_cache .pytest_cache .coverage htmlcov .ruff_cache _site/
$(RM) $(F.pdf)
.PHONY: clean.venv
clean.venv: clean
$(RM) -r venv *.egg-info
.PHONY: clean.dev
clean.dev: clean.venv
venv:
$(PYTHON) -m venv venv
source venv/bin/activate
pip install -U pip
.PHONY: dev
dev: venv/.dev
venv/.dev: venv
source venv/bin/activate
pip install -e .[dev,local]
touch $@
# documentation
venv/.doc: venv
source venv/bin/activate
pip install -e .[doc]
touch $@
.PHONY: doc
doc: venv/.doc check.docs
source venv/bin/activate
mkdocs build
.PHONY: pub
pub: venv/.pub
# only on local venv
venv/.pub: dev
source venv/bin/activate
pip install -e .[pub]
touch $@
# generate source and built distribution
dist: pub
source venv/bin/activate
$(PYTHON) -m build
.PHONY: publish
publish: dist
# provide pypi login/pw or token somewhere…
echo venv/bin/twine upload dist/*
# generate pdf doc
MD2PDF = pandoc -f markdown -t latex -V papersize:a4 -V geometry:hmargin=2.5cm -V geometry:vmargin=3cm
%.pdf: %.md
$(MD2PDF) -o $@ $<