#   Refer for explanation to following link:
#   https://lefthook.dev/configuration/
#
# Предкоммитные проверки — дешёвая часть гейта на **затронутых файлах**. Полный
# набор здесь не гоняется намеренно: он идёт минуты, а pre-commit обязан быть
# быстрым. Что ловит pre-commit и что остаётся только гейту — CLAUDE.md,
# раздел «Гейт»; перечень правил и их дома — docs/conventions/go-linters.md.

templates:
  av-hooks-dir: "/home/av/projects/private/git-hooks"

pre-commit:
  jobs:
    # Форматирование правится на месте и добавляется в коммит: спорить тут не о
    # чем, а гейт на неотформатированном файле краснеет.
    - name: "gofmt"
      glob: "*.go"
      run: "gofmt -w {staged_files}"
      stage_fixed: true

    # Линтеры гоняются по пакетам затронутых файлов, а не по всему дереву:
    # golangci-lint принимает файлы только из одного каталога, поэтому на вход
    # идут каталоги.
    - name: "golangci-lint"
      glob: "*.go"
      run: |
        dirs=$(printf '%s\n' {staged_files} | xargs -r -n1 dirname | sort -u)
        golangci-lint run $dirs

    - name: "shellcheck"
      glob: "*.sh"
      run: "shellcheck {staged_files}"

    # Подавления те же, что у шага гейта, и по тем же причинам — Taskfile.yml,
    # задача `dockerfile`.
    - name: "hadolint"
      glob: "Dockerfile"
      run: "hadolint --ignore DL3007 --ignore DL3018 {staged_files}"

    - name: "gitleaks"
      run: "gitleaks git --staged"
