# Global configuration default_install_hook_types: # Default hook types to install - pre-commit # Pre-commit checks - commit-msg # Commit message checks default_stages: # Default run stages - pre-commit # Run on local commits - manual # Run manually in CI only exclude: 'examples/.*' # Path patterns to exclude from checks repos: # ----------------------- # Basic file format checks # ----------------------- - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.6.0 # Use fixed version for stability hooks: - id: end-of-file-fixer # Ensure files end with newline - id: trailing-whitespace # Remove trailing whitespace - id: check-yaml # Check YAML syntax - id: check-toml # Check TOML syntax - id: check-added-large-files # Prevent accidental addition of large files args: ["--maxkb=10240"] # Maximum allowed file size (10MB) # ----------------------- # Python Linting (Ruff) # Characteristics: Fast, suitable for CI, replaces flake8/isort/etc. # ----------------------- - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.14.14 # Ruff version hooks: - id: ruff-check # Main linting checks types_or: [ python, pyi ] # Check .py and .pyi files args: [ --fix ] # Auto-fix fixable issues # Checks include: # - Unused imports/variables # - Syntax errors # - Code style issues # - Potential bugs # ----------------------- # Python import sorting (compatible with black) # ----------------------- - repo: https://github.com/pycqa/isort rev: 5.13.2 # Version lock hooks: - id: isort args: ["--profile=black"] # Use black-compatible configuration # Auto-fix import sorting: # 1. Standard library imports # 2. Third-party library imports # 3. Local application/library specific imports # Separated by blank lines between groups # ----------------------- # Python code formatting (Black) # ----------------------- - repo: https://github.com/psf/black rev: 26.1.0 # Black version hooks: - id: black language_version: python3 # Specify Python version # Black characteristics: # - Strict code formatting # - Unconfigurable (very few exceptions) # - Fast execution # - Produces uniform code style - repo: https://github.com/jackdewinter/pymarkdown rev: v0.9.29 hooks: - id: pymarkdown args: [fix] - repo: https://github.com/rhysd/actionlint rev: v1.7.7 hooks: - id: actionlint - repo: local hooks: - id: signoff-commit name: Sign-off Commit entry: bash args: - -c - | if ! grep -q "^Signed-off-by: $(git config user.name) <$(git config user.email)>" "$(git rev-parse --git-path COMMIT_EDITMSG)"; then printf "\nSigned-off-by: $(git config user.name) <$(git config user.email)>\n" >> "$(git rev-parse --git-path COMMIT_EDITMSG)" fi language: system verbose: true stages: [commit-msg] - id: check-filenames name: Check for spaces in all filenames entry: bash args: - -c - 'git ls-files | grep " " && echo "Filenames should not contain spaces!" && exit 1 || exit 0' language: system always_run: true pass_filenames: false - id: suggestion name: Suggestion entry: bash -c 'echo "To bypass pre-commit hooks, add --no-verify to git commit."' language: system verbose: true pass_filenames: false