Skip to content

Commit 1f30684

Browse files
committed
Enhance Makefile for Windows compatibility and improve environment setup for Python versions 3.10 to 3.13
1 parent 2631d9b commit 1f30684

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

Makefile

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
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
1724
install-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
2438
sync: .uv ## Update local packages and uv.lock
@@ -36,8 +50,12 @@ lint: ## Lint the code
3650

3751
.PHONY: typecheck-pyright
3852
typecheck-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
4361
typecheck-mypy:
@@ -57,10 +75,17 @@ test: ## Run tests and collect coverage data
5775

5876
.PHONY: test-all-python
5977
test-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
97120
else
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
127150
help: ## 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

Comments
 (0)