11.DEFAULT_GOAL := all
22
3+ # Detect OS
4+ ifeq ($(OS ) ,Windows_NT)
5+ DETECTED_OS := Windows
6+ else
7+ DETECTED_OS := $(shell uname -s)
8+ endif
9+
310.PHONY : .uv
411.uv : # # Check that uv is installed
512 @uv --version || echo ' Please install uv: https://docs.astral.sh/uv/getting-started/installation/'
@@ -15,10 +22,17 @@ install: .uv .pre-commit ## Install the package, dependencies, and pre-commit fo
1522
1623.PHONY : install-all-python
1724install-all-python : # # Install and synchronize an interpreter for every python version
25+ ifeq ($(DETECTED_OS ) ,Windows)
26+ @set UV_PROJECT_ENVIRONMENT=.venv310 & uv sync --python 3.10 --frozen --all-extras --all-packages --group lint --group docs
27+ @set UV_PROJECT_ENVIRONMENT=.venv311 & uv sync --python 3.11 --frozen --all-extras --all-packages --group lint --group docs
28+ @set UV_PROJECT_ENVIRONMENT=.venv312 & uv sync --python 3.12 --frozen --all-extras --all-packages --group lint --group docs
29+ @set UV_PROJECT_ENVIRONMENT=.venv313 & uv sync --python 3.13 --frozen --all-extras --all-packages --group lint --group docs
30+ else
1831 UV_PROJECT_ENVIRONMENT=.venv310 uv sync --python 3.10 --frozen --all-extras --all-packages --group lint --group docs
1932 UV_PROJECT_ENVIRONMENT=.venv311 uv sync --python 3.11 --frozen --all-extras --all-packages --group lint --group docs
2033 UV_PROJECT_ENVIRONMENT=.venv312 uv sync --python 3.12 --frozen --all-extras --all-packages --group lint --group docs
2134 UV_PROJECT_ENVIRONMENT=.venv313 uv sync --python 3.13 --frozen --all-extras --all-packages --group lint --group docs
35+ endif
2236
2337.PHONY : sync
2438sync : .uv # # Update local packages and uv.lock
@@ -36,8 +50,12 @@ lint: ## Lint the code
3650
3751.PHONY : typecheck-pyright
3852typecheck-pyright :
53+ ifeq ($(DETECTED_OS ) ,Windows)
54+ @set PYRIGHT_PYTHON_IGNORE_WARNINGS=1 & uv run pyright
55+ else
3956 @# PYRIGHT_PYTHON_IGNORE_WARNINGS avoids the overhead of making a request to github on every invocation
4057 PYRIGHT_PYTHON_IGNORE_WARNINGS=1 uv run pyright
58+ endif
4159
4260.PHONY : typecheck-mypy
4361typecheck-mypy :
@@ -57,10 +75,17 @@ test: ## Run tests and collect coverage data
5775
5876.PHONY : test-all-python
5977test-all-python : # # Run tests on Python 3.10 to 3.13
78+ ifeq ($(DETECTED_OS ) ,Windows)
79+ @set UV_PROJECT_ENVIRONMENT=.venv310 & uv run --python 3.10 --all-extras --all-packages coverage run -p -m pytest
80+ @set UV_PROJECT_ENVIRONMENT=.venv311 & uv run --python 3.11 --all-extras --all-packages coverage run -p -m pytest
81+ @set UV_PROJECT_ENVIRONMENT=.venv312 & uv run --python 3.12 --all-extras --all-packages coverage run -p -m pytest
82+ @set UV_PROJECT_ENVIRONMENT=.venv313 & uv run --python 3.13 --all-extras --all-packages coverage run -p -m pytest
83+ else
6084 UV_PROJECT_ENVIRONMENT=.venv310 uv run --python 3.10 --all-extras --all-packages coverage run -p -m pytest
6185 UV_PROJECT_ENVIRONMENT=.venv311 uv run --python 3.11 --all-extras --all-packages coverage run -p -m pytest
6286 UV_PROJECT_ENVIRONMENT=.venv312 uv run --python 3.12 --all-extras --all-packages coverage run -p -m pytest
6387 UV_PROJECT_ENVIRONMENT=.venv313 uv run --python 3.13 --all-extras --all-packages coverage run -p -m pytest
88+ endif
6489 @uv run coverage combine
6590 @uv run coverage report
6691
@@ -89,13 +114,11 @@ docs-serve: ## Build and serve the documentation
89114
90115.PHONY : .docs-insiders-install
91116.docs-insiders-install : # # Install insiders packages for docs if necessary
92- ifeq ($(shell uv pip show mkdocs-material | grep -q insiders && echo 'installed') , installed)
93- @echo 'insiders packages already installed'
94- else ifeq ($(PPPR_TOKEN),)
95- @echo "Error: PPPR_TOKEN is not set, can't install insiders packages"
117+ ifeq ($(PPPR_TOKEN ) ,)
118+ @echo Error: PPPR_TOKEN is not set, cannot install insiders packages
96119 @exit 1
97120else
98- @echo ' installing insiders packages...'
121+ @echo installing insiders packages...
99122 @uv pip install --reinstall --no-deps \
100123 --extra-index-url https://pydantic:${PPPR_TOKEN}@pppr.pydantic.dev/simple/ \
101124 mkdocs-material mkdocstrings-python
@@ -125,6 +148,11 @@ all: format lint typecheck testcov ## Run code formatting, linting, static type
125148
126149.PHONY : help
127150help : # # Show this help (usage: make help)
151+ ifeq ($(DETECTED_OS ) ,Windows)
152+ @echo Usage: make [recipe]
153+ @echo Recipes:
154+ @uv run python -c "import re; [print(f' {m[0]:<20} {m[1]}') for m in re.findall(r'^([a-zA-Z0-9_-]+):.*?# # (.*)$$', open('$(MAKEFILE_LIST)').read(), re.MULTILINE)]"
155+ else
128156 @echo "Usage: make [recipe]"
129157 @echo "Recipes:"
130158 @awk '/^[a-zA-Z0-9_-]+:.*?# #/ { \
@@ -135,3 +163,4 @@ help: ## Show this help (usage: make help)
135163 printf " \033[36m%-20s\033[0m %s\n", recipe, substr($$0, RSTART + 3, RLENGTH); \
136164 } \
137165 }' $(MAKEFILE_LIST)
166+ endif
0 commit comments