-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
179 lines (128 loc) · 4.34 KB
/
Makefile
File metadata and controls
179 lines (128 loc) · 4.34 KB
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#########
# BUILD #
#########
.PHONY: develop-py develop-rs develop
develop-py:
uv pip install -e .[develop]
develop-rs:
make -C rust develop
develop: develop-rs develop-py ## setup project for development
.PHONY: requirements-py requirements-rs requirements
requirements-py: ## install prerequisite python build requirements
python -m pip install --upgrade pip toml
python -m pip install `python -c 'import toml; c = toml.load("pyproject.toml"); print("\n".join(c["build-system"]["requires"]))'`
python -m pip install `python -c 'import toml; c = toml.load("pyproject.toml"); print(" ".join(c["project"]["optional-dependencies"]["develop"]))'`
requirements-rs: ## install prerequisite rust build requirements
make -C rust requirements
requirements: requirements-rs requirements-py ## setup project for development
.PHONY: build-py build-rs build
build-py:
python -m build -w -n
build-rs:
make -C rust build
build: build-rs build-py ## build the project
.PHONY: install
install: ## install python library
uv pip install .
#########
# LINTS #
#########
.PHONY: lint-py lint-rs lint-docs lint lints
lint-py: ## run python linter with ruff
python -m ruff check python_template_rust
python -m ruff format --check python_template_rust
lint-rs: ## run rust linter
make -C rust lint
lint-docs: ## lint docs with mdformat and codespell
python -m mdformat --check README.md docs/wiki/
python -m codespell_lib README.md docs/wiki/
lint: lint-rs lint-py lint-docs ## run project linters
# alias
lints: lint
.PHONY: fix-py fix-rs fix-docs fix format
fix-py: ## fix python formatting with ruff
python -m ruff check --fix python_template_rust
python -m ruff format python_template_rust
fix-rs: ## fix rust formatting
make -C rust fix
fix-docs: ## autoformat docs with mdformat and codespell
python -m mdformat README.md docs/wiki/
python -m codespell_lib --write README.md docs/wiki/
fix: fix-rs fix-py fix-docs ## run project autoformatters
# alias
format: fix
################
# Other Checks #
################
.PHONY: check-dist check-types checks check
check-dist: ## check python sdist and wheel with check-dist
check-dist -v
check-types: ## check python types with ty
ty check --python $$(which python)
checks: check-dist
# alias
check: checks
#########
# TESTS #
#########
.PHONY: test-py tests-py coverage-py
test-py: ## run python tests
python -m pytest -v python_template_rust/tests
# alias
tests-py: test-py
coverage-py: ## run python tests and collect test coverage
python -m pytest -v python_template_rust/tests --cov=python_template_rust --cov-report term-missing --cov-report xml
.PHONY: test-rs tests-rs coverage-rs
test-rs: ## run rust tests
make -C rust test
# alias
tests-rs: test-rs
coverage-rs: ## run rust tests and collect test coverage
make -C rust coverage
.PHONY: test coverage tests
test: test-py test-rs ## run all tests
coverage: coverage-py coverage-rs ## run all tests and collect test coverage
# alias
tests: test
###########
# VERSION #
###########
.PHONY: show-version patch minor major
show-version: ## show current library version
@bump-my-version show current_version
patch: ## bump a patch version
@bump-my-version bump patch
minor: ## bump a minor version
@bump-my-version bump minor
major: ## bump a major version
@bump-my-version bump major
########
# DIST #
########
.PHONY: dist-py-wheel dist-py-sdist dist-rs dist-check dist publish
dist-py-wheel: ## build python wheel
python -m cibuildwheel --output-dir dist
dist-py-sdist: ## build python sdist
python -m build --sdist -o dist
dist-rs: ## build rust dists
make -C rust dist
dist-check: ## run python dist checker with twine
python -m twine check dist/*
dist: clean build dist-rs dist-py-wheel dist-py-sdist dist-check ## build all dists
publish: dist ## publish python assets
#########
# CLEAN #
#########
.PHONY: deep-clean clean
deep-clean: ## clean everything from the repository
git clean -fdx
clean: ## clean the repository
rm -rf .coverage coverage cover htmlcov logs build dist *.egg-info
############################################################################################
.PHONY: help
# Thanks to Francoise at marmelab.com for this
.DEFAULT_GOAL := help
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
print-%:
@echo '$*=$($*)'