diff --git a/AGENTS.md b/AGENTS.md index 2aea7a1..6403874 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -44,8 +44,7 @@ Port auto-resolution: if `port=0` (default), uses 443 for TLS, 80 without. Ports ```bash # Setup: requires uv -uv sync --all-extras --dev -make hooks # Install pre-commit hooks (once after cloning) +make install # Install dev deps and pre-commit hooks # Daily workflow make test # pytest diff --git a/Makefile b/Makefile index cf06419..82f1388 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,11 @@ SCRIPTS := scripts # Core # ------------------------------------------------------------------------------ -.PHONY: test coverage build +.PHONY: install test coverage build + +install: ## Install dev environment and pre-commit hooks + $(UV) sync --all-extras --dev + $(UV) run pre-commit install -f test: ## Run unit tests $(UV) run pytest $(TESTS) -v diff --git a/README.md b/README.md index cc2505a..2aee30f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![PyPI version](https://badge.fury.io/py/ipsdk.svg)](https://badge.fury.io/py/ipsdk) [![Python Versions](https://img.shields.io/pypi/pyversions/ipsdk.svg)](https://pypi.org/project/ipsdk/) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) -[![Tests](https://github.com/itential/ipsdk/workflows/Run%20CI%20pipeline/badge.svg)](https://github.com/itential/ipsdk/actions) +[![Tests](https://github.com/itential/ipsdk/workflows/CI/badge.svg)](https://github.com/itential/ipsdk/actions) [![Coverage](https://img.shields.io/badge/coverage-100%25-green)](https://github.com/itential/ipsdk) > Python SDK for making API calls to Itential Platform and Itential Automation Gateway 4.x. @@ -153,8 +153,8 @@ ipsdk.logging.add_sensitive_data_pattern("ssn", r"\d{3}-\d{2}-\d{4}") ## Development ```bash -# Install dependencies -uv sync +# Install dependencies and pre-commit hooks +make install # Run checks (lint, format, security, tests, license headers) make ci @@ -168,7 +168,7 @@ make security # bandit scan make license # check GPL headers # Test across Python 3.10–3.15 -uv run tox -p auto +make tox ``` ## License diff --git a/docs/development.md b/docs/development.md index d80dfa0..3f41b1e 100644 --- a/docs/development.md +++ b/docs/development.md @@ -5,8 +5,8 @@ This project uses `uv` as the Python package manager and build tool. Here are th ## Setup ```bash -# Install dependencies and create virtual environment -$ uv sync +# Install dependencies and pre-commit hooks +$ make install ``` ## Testing @@ -29,33 +29,24 @@ $ make coverage ### Multi-Version Testing with Tox -The SDK supports Python 3.10, 3.11, 3.12, and 3.13. Use tox to test across all versions: +The SDK supports Python 3.10, 3.11, 3.12, 3.13, 3.14, and 3.15 (beta). Use tox to test across all versions: ```bash # Run tests across all Python versions -$ uv run tox $ make tox # Run tests in parallel (faster) $ uv run tox -p auto # Run tests on specific Python version -$ uv run tox -e py310 # Python 3.10 -$ make tox-py310 - -$ uv run tox -e py311 # Python 3.11 -$ make tox-py311 - -$ uv run tox -e py312 # Python 3.12 -$ make tox-py312 - -$ uv run tox -e py313 # Python 3.13 -$ make tox-py313 - -# Run quick tests (no lint/security) -$ uv run tox -e quick - -# Run coverage report on Python 3.13 +$ make tox-py310 # Python 3.10 +$ make tox-py311 # Python 3.11 +$ make tox-py312 # Python 3.12 +$ make tox-py313 # Python 3.13 +$ make tox-py314 # Python 3.14 +$ uv run tox -e py315 # Python 3.15 (beta, no make target) + +# Run coverage report $ uv run tox -e coverage ``` @@ -103,7 +94,7 @@ The project uses **dynamic versioning** from git tags: ## Development Workflow -1. **Setup**: Run `uv sync` to install dependencies and create a virtual environment +1. **Setup**: Run `make install` to install dependencies and pre-commit hooks 2. **Development**: Make your changes to the codebase 3. **Format**: Run `make format` to auto-format code 4. **Testing**: Run tests with `make test` or `uv run pytest tests` @@ -122,9 +113,9 @@ The project uses the following development tools: - **ruff**: Fast Python linter and formatter (30+ rule sets) - **mypy**: Static type checker - **bandit**: Security vulnerability scanner -- **tox**: Multi-version Python testing (3.10, 3.11, 3.12, 3.13) +- **pre-commit**: Git hook framework for running checks before each commit +- **tox**: Multi-version Python testing (3.10–3.15) - **tox-uv**: Tox integration with uv for fast environments -- **q**: Debugging utility All tools are configured in `pyproject.toml` and can be run through `uv` or the provided Makefile targets. @@ -135,7 +126,7 @@ The project uses comprehensive Ruff configuration with 30+ rule sets: - flake8-bugbear (B), isort (I), pylint (PL) - Security checks (S), annotations (ANN), async (ASYNC) - Line length: 88 characters (Black-compatible) -- Target: Python 3.8+ compatibility +- Target: Python 3.10+ compatibility - Per-file ignores configured for different modules ### Coverage Requirements @@ -152,6 +143,8 @@ The SDK officially supports Python >=3.10 and is tested on: - Python 3.11 - Python 3.12 - Python 3.13 +- Python 3.14 +- Python 3.15 (beta) Testing across versions is automated in CI/CD using GitHub Actions matrix testing.