---
# agentskills.io specification v1.0
name: "qa-lefthook-all"
version: "1.0.0"
description: "Run all lefthook pre-commit-phase hooks for comprehensive code quality validation"
author: "Charon Project"
license: "MIT"
tags:
  - "qa"
  - "quality"
  - "pre-commit"
  - "linting"
  - "validation"
compatibility:
  os:
    - "linux"
    - "darwin"
  shells:
    - "bash"
requirements:
  - name: "python3"
    version: ">=3.8"
    optional: false
  - name: "lefthook"
    version: ">=0.14"
    optional: false
environment_variables:
    - name: "SKIP"
    description: "Comma-separated list of hook IDs to skip"
    default: ""
    required: false
parameters:
  - name: "files"
    type: "string"
    description: "Specific files to check (default: all staged files)"
    default: "--all-files"
    required: false
outputs:
  - name: "validation_report"
    type: "stdout"
    description: "Results of all pre-commit hook executions"
  - name: "exit_code"
    type: "number"
    description: "0 if all hooks pass, non-zero if any fail"
metadata:
  category: "qa"
  subcategory: "quality"
  execution_time: "medium"
  risk_level: "low"
  ci_cd_safe: true
  requires_network: false
  idempotent: true
---

# QA Pre-commit All

## Overview

Executes all configured lefthook pre-commit-phase hooks to validate code quality, formatting, security, and best practices across the entire codebase. This skill runs checks for Python, Go, JavaScript/TypeScript, Markdown, YAML, and more.

This skill is designed for CI/CD pipelines and local quality validation before committing code.

## Prerequisites

- Python 3.8 or higher installed and in PATH
- Python virtual environment activated (`.venv`)
- Pre-commit installed in virtual environment: `pip install pre-commit`
- Pre-commit hooks installed: `pre-commit install`
- All language-specific tools installed (Go, Node.js, etc.)

## Usage

### Basic Usage

Run all pre-commit-phase hooks on all files:

```bash
cd /path/to/charon
lefthook run pre-commit
```

### Staged Files Only

Run lefthook on staged files only (faster):

```bash
lefthook run pre-commit --staged
```

### Specific Hook

Run only a specific hook by ID:

```bash
lefthook run pre-commit --hooks=trailing-whitespace
```

### Skip Specific Hooks

Skip certain hooks during execution:

```bash
SKIP=prettier,eslint .github/skills/scripts/skill-runner.sh qa-precommit-all
```

## Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| files     | string | No     | --all-files | File selection mode (--all-files or staged) |

## Environment Variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| SKIP | No | "" | Comma-separated hook IDs to skip |
| PRE_COMMIT_HOME | No | ~/.cache/pre-commit | Pre-commit cache directory |

## Outputs

- **Success Exit Code**: 0 (all hooks passed)
- **Error Exit Codes**: Non-zero (one or more hooks failed)
- **Output**: Detailed results from each hook

## Pre-commit Hooks Included

The following hooks are configured in `.pre-commit-config.yaml`:

### General Hooks
- **trailing-whitespace**: Remove trailing whitespace
- **end-of-file-fixer**: Ensure files end with newline
- **check-yaml**: Validate YAML syntax
- **check-json**: Validate JSON syntax
- **check-merge-conflict**: Detect merge conflict markers
- **check-added-large-files**: Prevent committing large files

### Python Hooks
- **black**: Code formatting
- **isort**: Import sorting
- **flake8**: Linting
- **mypy**: Type checking

### Go Hooks
- **gofmt**: Code formatting
- **go-vet**: Static analysis
- **golangci-lint**: Comprehensive linting

### JavaScript/TypeScript Hooks
- **prettier**: Code formatting
- **eslint**: Linting and code quality

### Markdown Hooks
- **markdownlint**: Markdown linting and formatting

### Security Hooks
- **detect-private-key**: Prevent committing private keys
- **detect-aws-credentials**: Prevent committing AWS credentials

## Examples

### Example 1: Full Quality Check

```bash
# Run all hooks on all files
source .venv/bin/activate
.github/skills/scripts/skill-runner.sh qa-precommit-all
```

Output:
```
Trim Trailing Whitespace.....................................Passed
Fix End of Files.............................................Passed
Check Yaml...................................................Passed
Check JSON...................................................Passed
Check for merge conflicts....................................Passed
Check for added large files..................................Passed
black........................................................Passed
isort........................................................Passed
prettier.....................................................Passed
eslint.......................................................Passed
markdownlint.................................................Passed
```

### Example 2: Quick Staged Files Check

```bash
# Run only on staged files (faster for pre-commit)
.github/skills/scripts/skill-runner.sh qa-precommit-all staged
```

### Example 3: Skip Slow Hooks

```bash
# Skip time-consuming hooks for quick validation
SKIP=golangci-lint,mypy .github/skills/scripts/skill-runner.sh qa-precommit-all
```

### Example 4: CI/CD Pipeline Integration

```yaml
# GitHub Actions example
- name: Set up Python
  uses: actions/setup-python@v4
  with:
    python-version: '3.11'

- name: Install pre-commit
  run: pip install pre-commit

- name: Run QA Pre-commit Checks
  run: .github/skills/scripts/skill-runner.sh qa-precommit-all
```

### Example 5: Auto-fix Mode

```bash
# Some hooks can auto-fix issues
# Run twice: first to fix, second to validate
.github/skills/scripts/skill-runner.sh qa-precommit-all || \
.github/skills/scripts/skill-runner.sh qa-precommit-all
```

## Error Handling

### Common Issues

**Virtual environment not activated**:
```bash
Error: pre-commit not found
Solution: source .venv/bin/activate
```

**Pre-commit not installed**:
```bash
Error: pre-commit command not available
Solution: pip install pre-commit
```

**Hooks not installed**:
```bash
Error: Run 'pre-commit install'
Solution: pre-commit install
```

**Hook execution failed**:
```bash
Hook X failed
Solution: Review error output and fix reported issues
```

**Language tool missing**:
```bash
Error: golangci-lint not found
Solution: Install required language tools
```

## Exit Codes

- **0**: All hooks passed
- **1**: One or more hooks failed
- **Other**: Hook execution error

## Hook Fixing Strategies

### Auto-fixable Issues
These hooks automatically fix issues:
- `trailing-whitespace`
- `end-of-file-fixer`
- `black`
- `isort`
- `prettier`
- `gofmt`

**Workflow**: Run pre-commit, review changes, commit fixed files

### Manual Fixes Required
These hooks only report issues:
- `check-yaml`
- `check-json`
- `flake8`
- `eslint`
- `markdownlint`
- `go-vet`
- `golangci-lint`

**Workflow**: Review errors, manually fix code, re-run pre-commit

## Related Skills

- [test-backend-coverage](./test-backend-coverage.SKILL.md) - Backend test coverage
- [test-frontend-coverage](./test-frontend-coverage.SKILL.md) - Frontend test coverage
- [security-scan-trivy](./security-scan-trivy.SKILL.md) - Security scanning

## Notes

- Pre-commit hooks cache their environments for faster execution
- First run may be slow while environments are set up
- Subsequent runs are much faster (seconds vs minutes)
- Hooks run in parallel where possible
- Failed hooks stop execution (fail-fast behavior)
- Use `SKIP` to bypass specific hooks temporarily
- Recommended to run before every commit
- Can be integrated into Git pre-commit hook for automatic checks
- Cache location: `~/.cache/pre-commit` (configurable)

## Performance Tips

- **Initial Setup**: First run takes longer (installing hook environments)
- **Incremental**: Run on staged files only for faster feedback
- **Parallel**: Pre-commit runs compatible hooks in parallel
- **Cache**: Hook environments are cached and reused
- **Skip**: Use `SKIP` to bypass slow hooks during development

## Integration with Git

To automatically run on every commit:

```bash
# Install Git pre-commit hook
pre-commit install

# Now pre-commit runs automatically on git commit
git commit -m "Your commit message"
```

To bypass pre-commit hook temporarily:

```bash
git commit --no-verify -m "Emergency commit"
```

## Configuration

Pre-commit configuration is in `.pre-commit-config.yaml`. To update hooks:

```bash
# Update to latest versions
pre-commit autoupdate

# Clean cache and re-install
pre-commit clean
pre-commit install --install-hooks
```

---

**Last Updated**: 2025-12-20
**Maintained by**: Charon Project
**Source**: `pre-commit run --all-files`
