-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
167 lines (120 loc) · 3.73 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#########
# BUILD #
#########
.PHONY: develop-py develop-rust develop
develop-py:
python -m pip install -e .[develop]
develop-rust:
make -C rust develop
develop: develop-rust develop-py ## setup project for development
.PHONY: build-py build-rust build dev
build-py:
maturin build
build-rust:
make -C rust build
dev: build ## lightweight in-place build for iterative dev
$(_CP_COMMAND)
build: build-rust build-py ## build the project
.PHONY: install
install: ## install python library
python -m pip install .
UNAME := $(shell uname)
ifeq ($(UNAME), Darwin)
_CP_COMMAND := cp target/debug/libpython_template_rust.dylib python_template_rust/python_template_rust.abi3.so
else
_CP_COMMAND := cp target/debug/libpython_template_rust.so python_template_rust/python_template_rust.abi3.so
endif
#########
# LINTS #
#########
.PHONY: lint-py lint-rust 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-rust: ## run rust linter
make -C rust lint
lint: lint-rust lint-py ## run project linters
# alias
lints: lint
.PHONY: fix-py fix-rust 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-rust: ## fix rust formatting
make -C rust fix
fix: fix-rust fix-py ## run project autoformatters
# alias
format: fix
################
# Other Checks #
################
.PHONY: check-manifest checks check
check-manifest: ## check python sdist manifest with check-manifest
check-manifest -v
checks: check-manifest
# 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-rust tests-rust coverage-rust
test-rust: ## run rust tests
make -C rust test
# alias
tests-rust: test-rust
coverage-rust: ## run rust tests and collect test coverage
make -C rust coverage
.PHONY: test coverage tests
test: test-py test-rust ## run all tests
coverage: coverage-py coverage-rust ## 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-rust 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-rust: # build rust dists
make -C rust dist
dist-check: ## run python dist checker with twine
python -m twine check dist/*
dist: clean build dist-rust 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 '$*=$($*)'