# Pre-commit Hooks Setup This project uses pre-commit hooks to ensure code quality before commits. ## Tools - **black**: Code formatter (line length: 120) - **ruff**: Fast Python linter - **pre-commit-hooks**: Basic file checks (trailing whitespace, YAML validation, etc.) ## Installation ### Option 1: Manual Installation (Recommended for this repo) Since this repo has a custom `core.hooksPath`, install pre-commit manually: ```bash cd dashboard/backend source venv/bin/activate pip install -r requirements-dev.txt # Run manually before committing pre-commit run --all-files ``` ### Option 2: Standard Installation If you want to use pre-commit's automatic hooks: ```bash cd /path/to/nas-tools git config --unset-all core.hooksPath cd dashboard/backend source venv/bin/activate pre-commit install ``` ## Usage ### Run on all files ```bash cd dashboard/backend source venv/bin/activate pre-commit run --all-files ``` ### Run on staged files only ```bash pre-commit run ``` ### Run specific hook ```bash pre-commit run black --all-files pre-commit run ruff --all-files ``` ### Skip hooks (not recommended) ```bash git commit --no-verify ``` ## Configuration - `.pre-commit-config.yaml`: Hook configuration - `pyproject.toml`: Black and Ruff settings ## What the hooks check 1. **black**: Formats Python code to consistent style 2. **ruff**: Checks for common Python errors and style issues 3. **trailing-whitespace**: Removes trailing whitespace 4. **end-of-file-fixer**: Ensures files end with newline 5. **check-yaml**: Validates YAML syntax 6. **check-json**: Validates JSON syntax 7. **check-merge-conflict**: Detects merge conflict markers 8. **check-added-large-files**: Prevents committing large files (>1MB) ## CI Integration The test workflow runs these checks automatically: - Tests must pass - Coverage must be ≥50% Pre-commit hooks help catch issues locally before pushing to CI.