-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
147 lines (118 loc) · 5.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
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/3.11/lib').exists(): print('.venv/3.11/lib/')")
VENV_EXISTS = $(shell python3 -c "if __import__('pathlib').Path('.venv/bin/activate').exists(): print('yes')")
REPO_INFO ?= $(shell git config --get remote.origin.url)
COMMIT_SHA ?= git-$(shell git rev-parse --short HEAD)
PDM_OPTS ?=
PDM ?= pdm $(PDM_OPTS)
PDM_RUN_BIN = $(PDM) run
SPHINXBUILD = sphinx-build
SPHINXAUTOBUILD = sphinx-autobuild
.EXPORT_ALL_VARIABLES:
.PHONY: help upgrade install-pre-commit install
.PHONY: fmt-fix test coverage check-all lint fmt-check
.PHONY: docs-install docs-clean docs-serve docs-build
.PHONY: clean run-dev-frontend run-dev-server production develop destroy
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)
upgrade: ## Upgrade all dependencies to the latest stable versions
@if [ "$(USING_PDM)" ]; then $(PDM) update; fi
@echo "Dependencies Updated"
.PHONY: refresh-lockfiles
refresh-lockfiles: ## Sync lockfiles with requirements files.
$(PDM) update --update-reuse -G:all
.PHONY: lock
lock: ## Rebuild lockfiles from scratch, updating all dependencies
$(PDM) update --update-eager -G:all
# =============================================================================
# Developer Utils
# =============================================================================
install-pdm: ## Install latest version of PDM
@echo "Installing PDM..."
@curl -sSL https://pdm.fming.dev/dev/install-pdm.py | python3 -
install-pre-commit: ## Install pre-commit and install hooks
@echo "Installing pre-commit"
@$(PDM) add pre-commit
@pre-commit install --install-hooks --all
@pre-commit install --hook-type commit-msg
@echo "pre-commit installed"
install: ## Install all dependencies
@echo "Installing..."
@command -v $(PDM) > /dev/null || (echo "PDM not found. Installing..." && $(MAKE) install-pdm)
$(MAKE) install-pre-commit
# =============================================================================
# Tests, Linting, Coverage
# =============================================================================
lint: ## Runs pre-commit hooks; includes ruff linting, codespell, black
$(PDM_RUN_BIN) pre-commit run --all-files
fmt-check: ## Runs black in check mode (no changes)
$(PDM_RUN_BIN) black --check --fast .
fmt-fix: ## Runs black, makes changes where necessary
$(PDM_RUN_BIN) black --line-length 120 .
test: ## Run the tests
$(PDM_RUN_BIN) pytest tests
coverage: ## Run the tests and generate coverage report
$(PDM_RUN_BIN) pytest tests --cov=app
$(PDM_RUN_BIN) coverage html
$(PDM_RUN_BIN) coverage xml
check-all: lint test fmt-check coverage ## Run all linting, tests, and coverage checks
# =============================================================================
# Docs
# =============================================================================
docs-install: ## Install docs dependencies
$(PDM) install --group docs
docs-clean: ## Dump the existing built docs
rm -rf docs/_build
docs-serve: docs-clean ## Serve the docs locally
$(PDM_RUN_BIN) $(SPHINXAUTOBUILD) docs docs/_build/ -j auto --watch app --watch docs --watch tests --watch CONTRIBUTING.rst --port 8002
docs: docs-clean ## Dump the existing built docs and rebuild them
$(PDM_RUN_BIN) $(SPHINXBUILD) -M html docs docs/_build/ -E -a -j auto --keep-going
# =============================================================================
# Main
# =============================================================================
clean: ## Autogenerated File Cleanup
rm -rf .scannerwork/
rm -rf .pytest_cache
rm -rf .ruff_cache
rm -rf .hypothesis
rm -rf build/
rm -rf dist/
rm -rf .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
rm -rf coverage.xml
rm -rf coverage.json
rm -rf htmlcov/
rm -rf .pytest_cache
rm -rf tests/.pytest_cache
rm -rf tests/**/.pytest_cache
rm -rf .mypy_cache
find tools/downloads -type f -delete
$(MAKE) docs-clean
destroy: ## Destroy the virtual environment
rm -rf .venv
develop: install ## Install the project in dev mode.
@if ! $(PDM) --version > /dev/null; then echo 'PDM is required, installing...'; $(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 && source .venv/bin/activate && .venv/bin/pip install -U wheel setuptools cython pip; fi
if [ "$(USING_PDM)" ]; then $(PDM) install -G:all; fi
if [ "$(VENV_EXISTS)" && ! -f .env ]; then cp .env.example .env; fi
@echo "=> Install complete! Note: If you want to re-install re-run 'make develop'"
serve: ## Run the app in dev mode
$(PDM_RUN_BIN) app run-all --http-workers 1 --reload
run-dev-frontend: ## Run the app frontend in dev mode
$(PDM_RUN_BIN) tailwindcss -i app/domain/web/resources/input.css -o app/domain/web/resources/style.css --watch