-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
138 lines (102 loc) · 3.92 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
.PHONY: codestyle formatting docstring pre-commit clean clean-venv clean-build clean-pyc clean-linting clean-test clean-log poetry-clean
.DEFAULT_GOAL := help
SHELL := /bin/bash
VENV_NAME := .venv
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
help:
@python3 -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)
# --------------------------------------------------------------------------- #
# Style targets
# --------------------------------------------------------------------------- #
codestyle: ## check codestyle (black, isort, ruff)
isort --settings-path pyproject.toml ./
black --config pyproject.toml ./
ruff check ./
docstring: ## create/ update docstring to restructured text
pyment -w -o numpydoc ./
#pyment -w -o reST ./
#pyment -w -o google ./
pre-commit: ## run pre-commit on all files
pre-commit run -a
#pre-commit run -a --config config/.pre-commit-config.yaml
# --------------------------------------------------------------------------- #
# Cleaning targets
# --------------------------------------------------------------------------- #
clean: clean-venv clean-build clean-pyc clean-linting ## remove all build, test, coverage and Python artifacts
clean-venv: ## remove virtual environment
rm -rf $(VENV_NAME)
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 {} +
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 {} +
find . -name '.ipynb_checkpoints' -exec rm -fr {} +
clean-linting: ## remove linting artifacts
find . -name '.ruff_cache' -exec rm -fr {} +
# --------------------------------------------------------------------------- #
# Poetry targets (use on linux)
# TODO poetry-install-standard is redundant
# --------------------------------------------------------------------------- #
poetry-shell: ## enter poetry enviroment
poetry shell
poetry-init: clean ## init poetry in existing project
poetry init
poetry-install: clean ## install poetry dependencies listed in pyproject.toml
poetry install
poetry-install-standard: ## install standard poetry dependencies
poetry add python-dotenv
poetry add pyaml_env
poetry add pytest --group dev
poetry add black --group dev
poetry add isort --group dev
poetry add ruff --group dev
poetry add pyment --group dev
poetry-build: clean ## build python wheels using poetry
poetry build
ls -l dist
poetry-release: ## publish python wheels using poetry
poetry publish --build
poetry-test: poetry-install ## run tests using poetry
poetry run pytest
poetry-test-all: poetry-install ## run tests on every Python version with tox
poetry run tox
poetry-clean:
poetry env remove --all
rm -f poetry.lock
@echo "Poetry environment and poetry.lock have been removed."
# --------------------------------------------------------------------------- #
# Installation targets using pipx
# --------------------------------------------------------------------------- #
install-global: install-poetry install-twine install-pre-commit install-black install-isort install-ruff install-pyment install-cookiecutter install-pytest## install global tools
install-poetry: ## install poetry
pipx install poetry
install-twine: ## install twine
pipx install twine
install-pre-commit: ## install pre-commit
pipx install pre-commit
install-black: ## install black
pipx install black
install-isort: ## install isort
pipx install isort
install-ruff: ## install ruff
pipx install ruff
install-pyment: ## install pyment
pipx install pyment
install-cookiecutter: ## install cookiecutter
pipx install cookiecutter
install-pytest: ## install pytest
pipx install pytest