--- # Pre-commit hooks for Homelab repository # Ensures code quality and prevents broken deployments repos: # Basic file checks - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - id: trailing-whitespace exclude: '\.md$' - id: end-of-file-fixer exclude: '\.md$' - id: check-yaml args: ['--allow-multiple-documents'] # log_rotation.yml contains a shell heredoc at column 0 inside a YAML # block scalar - PyYAML incorrectly parses the embedded logrotate config # content as YAML rather than treating it as opaque string data. exclude: '^(archive/|\.git/|ansible/automation/playbooks/log_rotation\.yml)' - id: check-added-large-files args: ['--maxkb=10240'] # 10MB limit - id: check-merge-conflict - id: check-case-conflict # YAML linting - repo: https://github.com/adrienverge/yamllint rev: v1.35.1 hooks: - id: yamllint args: [-c=.yamllint] # Docker Compose validation - repo: local hooks: - id: docker-compose-check name: Docker Compose Syntax Check entry: scripts/validate-compose.sh language: script files: '\.ya?ml$' exclude: '^(archive/|ansible/|\.git/|docker/monitoring/prometheus/|prometheus/)' pass_filenames: true # Secret detection - blocks commits containing passwords, tokens, API keys - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 hooks: - id: detect-secrets args: ['--baseline', '.secrets.baseline'] exclude: '^(archive/|\.git/|\.secrets\.baseline$)' # Ansible playbook validation # Disabled: playbooks use {{.Names}} Docker Go template syntax in shell tasks # which ansible-lint's Jinja2 parser chokes on (false positives, not real errors). # To lint manually: ansible-lint --skip-list=yaml[line-length] ansible/ # - repo: https://github.com/ansible/ansible-lint # rev: v25.1.3 # hooks: # - id: ansible-lint # files: '^ansible/.*\.(yml|yaml)$' # exclude: '^(archive/|\.git/)' # args: # - --exclude=ansible/archive/ # - --skip-list=yaml[line-length] # additional_dependencies: ["ansible-core>=2.16,<2.17"] # Global settings default_stages: [pre-commit] fail_fast: false minimum_pre_commit_version: '3.0.0'