Files
wild-cloud/tools/makefiles/python.mk

65 lines
1.5 KiB
Makefile

mkfile_dir = $(patsubst %/,%,$(dir $(realpath $(lastword $(MAKEFILE_LIST)))))
include $(mkfile_dir)/shell.mk
.DEFAULT_GOAL ?= install
ifdef UV_PROJECT_DIR
uv_project_args = --directory $(UV_PROJECT_DIR)
venv_dir = $(UV_PROJECT_DIR)/.venv
else
venv_dir = .venv
endif
UV_SYNC_INSTALL_ARGS ?= --all-extras --frozen
UV_RUN_ARGS ?= --all-extras --frozen
PYTEST_ARGS ?= --color=yes
## Rules
.PHONY: install
install:
uv sync $(uv_project_args) $(UV_SYNC_INSTALL_ARGS)
.PHONY: lock-upgrade
lock-upgrade:
uv lock --upgrade $(uv_project_args)
.PHONY: lock
lock:
uv sync $(uv_project_args) $(UV_SYNC_LOCK_ARGS)
.PHONY: clean
clean:
$(rm_dir) $(venv_dir) $(ignore_failure)
.PHONY: check
check:
@echo "Running code quality checks..."
@echo ""
@echo "→ Formatting code..."
@uvx ruff format --no-cache .
@echo ""
@echo "→ Linting code..."
@uvx ruff check --no-cache --fix .
@echo ""
@echo "→ Type checking code..."
@uv run $(uv_project_args) $(UV_RUN_ARGS) pyright $(PYRIGHT_ARGS) || (echo ""; echo "❌ Type check failed!"; exit 1)
@echo ""
@echo "✅ All checks passed!"
ifneq ($(findstring pytest,$(if $(shell $(call command_exists,uv) $(stderr_redirect_null)),$(shell uv tree --depth 1 $(stderr_redirect_null)),)),)
PYTEST_EXISTS=true
endif
ifneq ($(findstring pyright,$(if $(shell $(call command_exists,uv) $(stderr_redirect_null)),$(shell uv tree --depth 1 $(stderr_redirect_null)),)),)
PYRIGHT_EXISTS=true
endif
ifeq ($(PYTEST_EXISTS),true)
.PHONY: test pytest
test: pytest
pytest:
uv run $(uv_project_args) $(UV_RUN_ARGS) pytest $(PYTEST_ARGS)
endif