-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
145 lines (100 loc) · 3.46 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
145
.DEFAULT_GOAL := help
define BROWSER_PYSCRIPT
import os, webbrowser, sys
from urllib.request import pathname2url
webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1])))
endef
export BROWSER_PYSCRIPT
define PRINT_HELP_PYSCRIPT
import re, sys
for line in sys.stdin:
match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line)
if match:
target, help = match.groups()
print("%-20s %s" % (target, help))
endef
export PRINT_HELP_PYSCRIPT
BROWSER := python -c "$$BROWSER_PYSCRIPT"
.PHONY: help
help:
@python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)
.PHONY: init
init: venv-init install jupyter-init ## initialise development environment
.PHONY: venv-init
venv-init: clean-venv ## create a virtual environment
python3.7 -m pip install --upgrade pip virtualenv
python3.7 -m virtualenv -p python3.7 .venv
.PHONY: install
install: clean ## install the package in editable mode and install all pre-commit hooks
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -e ".[dev,matplotlib,vapory,vpython,mayavi]"
.venv/bin/pip install -U pre-commit
.venv/bin/pre-commit install --install-hooks --overwrite
.PHONY: jupyter-init
jupyter-init: ## initialise jupyter environment and install extensions
.venv/bin/python -m ipykernel install --user --name="mdsea"
.venv/bin/jupyter lab build
.venv/bin/jupyter labextension install @jupyter-widgets/jupyterlab-manager \
jupyterlab-plotly \
plotlywidget
.venv/bin/jupyter lab build
.PHONY: lint
lint: ## run all pre-commit hooks against all files
.venv/bin/pre-commit run --all-files
.PHONY: test
test: ## run tests quickly with the default Python
.venv/bin/pytest --cov=mdsea --cov=tests --cov-report=xml tests
.PHONY: test-all
test-all: ## run tests on every Python version with tox
.venv/bin/tox
.PHONY: docs
docs: ## generate Sphinx HTML documentation, including API docs
#rm -f docs/mdsea.rst
#rm -f docs/modules.rst
#sphinx-apidoc -o docs/ mdsea
$(MAKE) --directory=docs clean
$(MAKE) --directory=docs html
$(BROWSER) docs/build/html/index.html
.PHONY: servedocs
servedocs: docs ## compile the docs watching for changes
watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D .
.PHONY: dist
dist: clean ## builds source and wheel package
.venv/bin/python setup.py sdist
.venv/bin/python setup.py bdist_wheel
ls -l dist
.PHONY: release
release: dist ## package and upload a release
twine upload dist/*
# ==============================================================
# --- Clean
# ==============================================================
.PHONY: clean
clean: clean-build clean-pyc clean-test clean-lint ## remove all artifacts (excl. venv!)
.PHONY: clean-all
clean-all: clean clean-venv ## remove all artifacts
.PHONY: clean-build
clean-build: ## remove build artifacts
rm -fr build/
rm -fr dist/
rm -fr .eggs/
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -f {} +
.PHONY: clean-pyc
clean-pyc: ## remove Python file artifacts
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +
.PHONY: clean-test
clean-test: ## remove test and coverage artifacts
rm -fr .tox/
rm -f coverage.xml
rm -f .coverage
rm -fr .pytest_cache
.PHONY: clean-lint
clean-lint: ## remove linting artifacts
rm -fr .mypy_cache/
.PHONY: clean-venv
clean-venv: ## remove venv artifacts
rm -fr .venv