Adds an experimental power-cap mode using the undocumented RM ioctl interface (based on panchovix's LACT PR #1205) to set power limits below the VBIOS minimum (down to 30 W). - hal/rm_power.py: RM ioctl power-cap read/write/reset + runtime probe - limits.py: power_cap_mode (nvml/ioctl) with support detection - config.py: persist power_cap_mode per GPU - profiles: record/apply power_cap_mode - server.py: POST /api/limits validates ioctl support (409 on failure) - cli.py: profile save falls back to persisted mode - client.py: power_cap_mode in Limits - frontend: toggle + warning with panchovix attribution (LACT #1205) - tests: test_rm_power.py (unit) + integration coverage - Makefile: add test_rm_power.py to make test Also includes automated linter reformatting (prettier, ruff, shellcheck, isort, markdownlint) that the linter would apply anyway.
30 lines
917 B
Makefile
30 lines
917 B
Makefile
# NVCurve — developer convenience targets.
|
|
#
|
|
# End users don't need make: run ./install.sh (see README "Installation").
|
|
|
|
UV ?= uv
|
|
NPM ?= npm
|
|
|
|
.PHONY: help frontend frontend-dev install dev test clean
|
|
|
|
help: ## Show available targets
|
|
@grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
|
|
|
frontend: ## Build the React frontend into frontend/dist
|
|
cd frontend && $(NPM) ci && $(NPM) run build
|
|
|
|
frontend-dev: ## Run the Vite dev server (hot reload)
|
|
cd frontend && $(NPM) run dev
|
|
|
|
install: ## Install nvcurve as a uv tool (builds frontend if missing/stale)
|
|
$(UV) tool install --force .
|
|
|
|
dev: ## Create/refresh the dev environment (uv sync)
|
|
$(UV) sync
|
|
|
|
test: ## Run the test suite
|
|
$(UV) run python tests/test_security.py
|
|
$(UV) run python tests/test_rm_power.py
|
|
|
|
clean: ## Remove build artifacts
|
|
rm -rf frontend/dist frontend/node_modules
|