/
Makefile
109 lines (84 loc) · 2.17 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
# convenient makefile
SHELL = /bin/bash
.ONESHELL:
MODULE = FlaskSimpleAuth
F.md = $(wildcard *.md)
F.pdf = $(F.md:%.md=%.pdf)
# PYTHON = /snap/bin/pypy3
# PYTHON = python3
PYTHON = python
PIP = venv/bin/pip
.PHONY: check check.mypy check.flake8 check.black check.pytest check.demo check.coverage check.docs
check.mypy: venv
source venv/bin/activate
mypy --implicit-optional --check-untyped-defs $(MODULE).py
check.pyright: venv
source venv/bin/activate
pyright $(MODULE).py
check.black: venv
source venv/bin/activate
black --check $(MODULE).py
IGNORE = E227,E402,E501,E721,F401,F811
check.flake8: venv
source venv/bin/activate
flake8 --ignore=E127,W504,$(IGNORE) $(MODULE).py
check.ruff: venv
source venv/bin/activate
ruff check --ignore=$(IGNORE) $(MODULE).py
check.pytest: venv
source venv/bin/activate
$(MAKE) -C test check
check.coverage: venv
source venv/bin/activate
$(MAKE) -C test coverage
# MD013: line length
check.docs:
source venv/bin/activate
pymarkdown -d MD013 scan *.md */*.md
sphinx-lint docs/
# just run the demo
check.demo: venv
source venv/bin/activate
$(MAKE) -C demo check.pgall
STYLE = flake8
check: venv
source venv/bin/activate
type $(PYTHON)
$(MAKE) check.mypy
$(MAKE) check.pyright
$(MAKE) check.docs
$(MAKE) check.$(STYLE)
$(MAKE) check.pytest && \
$(MAKE) check.demo && \
$(MAKE) check.coverage
.PHONY: clean clean.venv
clean:
$(RM) -r __pycache__ */__pycache__ dist build .mypy_cache .pytest_cache
$(RM) $(F.pdf)
$(MAKE) -C test clean
$(MAKE) -C demo clean
$(MAKE) -C docs clean
clean.venv: clean
$(RM) -r venv *.egg-info
$(MAKE) -C demo clean.venv
# for local testing
venv:
$(PYTHON) -m venv venv
$(PIP) install -U pip
$(PIP) install -e .[dev,doc,tests,demo,password,jwt,cors,httpauth]
.PHONY: venv.dev
venv.dev: venv
$(MODULE).egg-info: venv
$(PIP) install -e .
# generate source and built distribution
dist: venv
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 $@ $<