forked from litestar-org/advanced-alchemy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
177 lines (143 loc) · 6.64 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
168
169
170
171
172
173
174
175
176
177
SHELL := /bin/bash
# =============================================================================
# Variables
# =============================================================================
.DEFAULT_GOAL:=help
.ONESHELL:
USING_PDM = $(shell grep "tool.pdm" pyproject.toml && echo "yes")
ENV_PREFIX = $(shell python3 -c "if __import__('pathlib').Path('.venv/bin/pip').exists(): print('.venv/bin/')")
VENV_EXISTS = $(shell python3 -c "if __import__('pathlib').Path('.venv/bin/activate').exists(): print('yes')")
PDM_OPTS ?=
PDM ?= pdm $(PDM_OPTS)
.EXPORT_ALL_VARIABLES:
.PHONY: help
help: ## Display this help text for Makefile
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
.PHONY: upgrade
upgrade: ## Upgrade all dependencies to the latest stable versions
@echo "=> Updating all dependencies"
@if [ "$(USING_PDM)" ]; then $(PDM) update; fi
@echo "=> Dependencies Updated"
@$(ENV_PREFIX)pre-commit autoupdate
@echo "=> Updated Pre-commit"
# =============================================================================
# Developer Utils
# =============================================================================
.PHONY: install-pdm
install-pdm: ## Install latest version of PDM
@curl -sSLO https://pdm.fming.dev/install-pdm.py && \
curl -sSL https://pdm.fming.dev/install-pdm.py.sha256 | shasum -a 256 -c - && \
python3 install-pdm.py
install: ## Install the project and
@if ! $(PDM) --version > /dev/null; then echo '=> Installing PDM'; $(MAKE) install-pdm; fi
@if [ "$(VENV_EXISTS)" ]; then echo "=> Removing existing virtual environment"; fi
@if [ "$(VENV_EXISTS)" ]; then $(MAKE) destroy; fi
@if [ "$(VENV_EXISTS)" ]; then $(MAKE) clean; fi
@if [ "$(USING_PDM)" ]; then $(PDM) config venv.in_project true && python3 -m venv --copies .venv && . $(ENV_PREFIX)/activate && $(ENV_PREFIX)/pip install --quiet -U wheel setuptools cython mypy build pip; fi
@if [ "$(USING_PDM)" ]; then $(PDM) install -G:all; fi
@echo "=> Install complete! Note: If you want to re-install re-run 'make install'"
clean: ## Cleanup temporary build artifacts
@echo "=> Cleaning working directory"
@rm -rf .pytest_cache .ruff_cache .hypothesis build/ -rf dist/ .eggs/
@find . -name '*.egg-info' -exec rm -rf {} +
@find . -name '*.egg' -exec rm -f {} +
@find . -name '*.pyc' -exec rm -f {} +
@find . -name '*.pyo' -exec rm -f {} +
@find . -name '*~' -exec rm -f {} +
@find . -name '__pycache__' -exec rm -rf {} +
@find . -name '.ipynb_checkpoints' -exec rm -rf {} +
@rm -rf .coverage coverage.xml coverage.json htmlcov/ .pytest_cache tests/.pytest_cache tests/**/.pytest_cache .mypy_cache
@$(MAKE) docs-clean
destroy: ## Destroy the virtual environment
@rm -rf .venv
.PHONY: refresh-lockfiles
refresh-lockfiles: ## Sync lockfiles with requirements files.
pdm update --update-reuse --group :all
.PHONY: lock
lock: ## Rebuild lockfiles from scratch, updating all dependencies
pdm update --update-eager --group :all
# =============================================================================
# Tests, Linting, Coverage
# =============================================================================
.PHONY: lint
lint: ## Runs pre-commit hooks; includes ruff linting, codespell, black
@echo "=> Running pre-commit process"
@$(ENV_PREFIX)pre-commit run --all-files
@echo "=> Pre-commit complete"
.PHONY: coverage
coverage: ## Run the tests and generate coverage report
@echo "=> Running tests with coverage"
@make test
@echo "=> Generating coverage report"
@$(ENV_PREFIX)coverage html
@$(ENV_PREFIX)coverage xml
@echo "=> Coverage report generated"
.PHONY: test
test: ## Run the tests
@echo "=> Running test cases"
@$(ENV_PREFIX)pytest tests -m 'not asyncmy and not oracledb and not spanner and not mssql and not cockroachdb_async and not cockroachdb_sync' -n auto
@echo "=> Tests complete"
.PHONY: test-all
test-all: ## Run the tests
@echo "=> Running all test cases"
@$(ENV_PREFIX)pytest tests -m '' -n auto
@echo "=> Tests complete"
.PHONY: test-asyncpg
test-asyncpg:
$(ENV_PREFIX)pytest tests -m='integration and asyncpg'
.PHONY: test-psycopg-async
test-psycopg-async:
$(ENV_PREFIX)pytest tests -m='integration and psycopg_async'
.PHONY: test-psycopg-sync
test-psycopg-sync:
$(ENV_PREFIX)pytest tests -m='integration and psycopg_sync'
.PHONY: test-asyncmy
test-asyncmy:
$(ENV_PREFIX)pytest tests -m='integration and asyncmy'
.PHONY: test-oracledb-sync
test-oracledb-sync:
$(ENV_PREFIX)pytest tests -m='integration and oracledb_sync'
.PHONY: test-oracledb-async
test-oracledb-async:
$(ENV_PREFIX)pytest tests -m='integration and oracledb_async'
.PHONY: test-duckdb
test-duckdb:
$(ENV_PREFIX)pytest tests -m='integration and duckdb'
.PHONY: test-spanner
test-spanner:
$(ENV_PREFIX)pytest tests -m='integration and spanner'
.PHONY: test-mssql-sync
test-mssql-sync:
$(ENV_PREFIX)pytest tests -m='integration and mssql_sync'
.PHONY: test-mssql-async
test-mssql-async:
$(ENV_PREFIX)pytest tests -m='integration and mssql_async'
.PHONY: test-cockroachdb-sync
test-cockroachdb-sync:
$(ENV_PREFIX)pytest tests -m='integration and cockroachdb_sync'
.PHONY: test-cockroachdb-async
test-cockroachdb-async:
$(ENV_PREFIX)pytest tests -m='integration and cockroachdb_async'
.PHONY: test-all-databases
test-all-databases:
$(ENV_PREFIX)pytest tests -m='integration'
.PHONY: check-all
check-all: lint test coverage ## Run all linting, tests, and coverage checks
# =============================================================================
# Docs
# =============================================================================
.PHONY: docs-install
docs-install: ## Install docs dependencies
@echo "=> Installing documentation dependencies"
@$(PDM) install --group docs
@echo "=> Installed documentation dependencies"
docs-clean: ## Dump the existing built docs
@echo "=> Cleaning documentation build assets"
@rm -rf docs/_build
@echo "=> Removed existing documentation build assets"
docs-serve: docs-clean ## Serve the docs locally
@echo "=> Serving documentation"
$(ENV_PREFIX)sphinx-autobuild docs docs/_build/ -j auto --watch advanced_alchemy --watch docs --watch tests --watch CONTRIBUTING.rst --port 8002
docs: docs-clean ## Dump the existing built docs and rebuild them
@echo "=> Building documentation"
@$(ENV_PREFIX)sphinx-build -M html docs docs/_build/ -E -a -j auto --keep-going