freepdfeditor/.pre-commit-config.yaml

37 lines
1.7 KiB
YAML

# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2025 ai-ad4 and the FreePDFEditor contributors
# Pre-commit hooks for FreePDFEditor contributors (§13.2). Install with
# `pre-commit install` after cloning. CI runs the same hooks so a missed local
# run is caught, not lost.
# Pre-commit itself is optional; the hooks it runs (clang-format, gitleaks,
# reuse) are the contract. If a contributor doesn't use pre-commit, CI still
# enforces all of these.
repos:
- repo: local
hooks:
- id: clang-format
name: clang-format
entry: bash -c 'command -v clang-format >/dev/null && find src spike test -name "*.cpp" -o -name "*.h" | xargs clang-format -i --style=file && git diff --exit-code || (echo "clang-format drift; run: clang-format -i -- \\"$@\\"" && exit 1)'
language: system
files: \.(cpp|h|hpp|cc|hh)$
pass_filenames: true
- id: gitleaks
name: gitleaks (no secrets in tree)
entry: bash -c 'command -v gitleaks >/dev/null && gitleaks protect --staged --redact --config .gitleaks.toml || (echo "gitleaks not installed; install it or rely on CI" && exit 1)'
language: system
pass_filenames: false
- id: reuse-lint
name: reuse lint (SPDX compliance)
entry: bash -c 'command -v reuse >/dev/null && reuse lint || (echo "reuse tool not installed; pip install reuse" && exit 1)'
language: system
pass_filenames: false
- id: no-tabs-in-source
name: no tabs in C++ source
entry: bash -c 'grep -rnP "\t" src spike test --include=*.cpp --include=*.h --include=*.hpp && (echo "tabs found; use spaces" && exit 1) || exit 0'
language: system
files: \.(cpp|h|hpp|cc|hh)$
pass_filenames: false