-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
140 lines (112 loc) · 3.91 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
# Adapted from https://github.com/Textualize/frogmouth/blob/main/Makefile
##############################################################################
# Common make values.
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
package := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
run := poetry run
python := $(run) python
lint := $(run) pylint
mypy := $(run) mypy
black := $(run) black
isort := $(run) isort
bandit := $(run) bandit
monkey := $(run) monkeytype
pytest := $(run) pytest
pyre := $(run) pyre
DOCDIR := docs
DOCSRC := $(DOCDIR)/source
BUILDDIR := $(DOCDIR)/build/html
SPHINXOPTS :=
##############################################################################
# Methods of running the application.
.PHONY: run
run: # Run the application
$(run) $(package)
.PHONY: debug
debug: # Run the application in debug mode
TEXTUAL=devtools make run
##############################################################################
# Setup/update packages the system requires.
.PHONY: setup
setup: # Set up the development environment
poetry install
$(run) pre-commit install
.PHONY: update
update: # Update the development environment
poetry update
##############################################################################
# Package building and distribution.
.PHONY: build
build: # Build the package for distribution
poetry build
.PHONY: clean
clean: # Clean up the package builds
rm -rf dist
##############################################################################
# Package publishing.
.PHONY: publish
publish: # Publish the package to PyPI
poetry publish --build
.PHONY: publish-test
publish-test: # Publish the package to TestPyPI
poetry publish --build -r testpypi
##############################################################################
# Reformatting tools.
.PHONY: black
black: # Run black over the code
$(black) $(package)
.PHONY: isort
isort: # Run isort over the code
$(isort) $(package)
.PHONY: reformat
reformat: isort black # Run all the formatting tools over the code
##############################################################################
# Documentation.
doc: # Build the documentation
sphinx-quickstart "$(DOCDIR)"
apidoc: # Build the API documentation
sphinx-apidoc -o "$(DOCSRC)" .
html: # Build the HTML documentation
sphinx-build "$(DOCSRC)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
livehtml: # Run a live-updating HTML server for the documentation
sphinx-autobuild "$(DOCSRC)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
##############################################################################
# Checking/testing/linting/etc.
.PHONY: lint
lint: # Run Pylint over the library
$(lint) $(package)
.PHONY: typecheck
typecheck: # Perform static type checks with mypy
$(mypy) --scripts-are-modules $(package)
.PHONY: stricttypecheck
stricttypecheck: # Perform strict static type checks with mypy
$(mypy) --scripts-are-modules --strict $(package)
.PHONY: bandit
bandit: # Run bandit over the code
$(bandit) -r $(package)
.PHONY: monkey
monkey: # Run monkeytype over the code
$(monkey) apply $(package)
.PHONY: test
test: # Run the unit tests
$(pytest) tests
.PHONY: checkall
checkall: lint stricttypecheck bandit # Check all the things
##############################################################################
# Utility.
.PHONY: repl
repl: # Start a Python REPL
$(python)
.PHONY: shell
shell: # Create a shell within the virtual environment
poetry shell
.PHONY: help
help: # Display this help
@grep -Eh "^[a-z]+:.+# " $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.+# "}; {printf "%-20s %s\n", $$1, $$2}'
##############################################################################
# Housekeeping tasks.
.PHONY: housekeeping
housekeeping: # Perform some git housekeeping
git fsck
git gc --aggressive
git remote update --prune