Гейт видит скрипты и Dockerfile, а pre-commit — затронутые файлы
- шаги shell (shellcheck) и dockerfile (hadolint) заведены; два правила hadolint подавлены поимённо с причиной — DL3007 до задачи pin-runtime-image-base и DL3018 по существу - lefthook гоняет на затронутых файлах gofmt, golangci-lint по их каталогам, shellcheck, hadolint и gitleaks — около секунды; полный набор в pre-commit не переносится намеренно - заведён мутационный тест скрипта сверки версий: 20 сценариев спеки toolchain плюс требование сообщения называть все четыре места, независимость исхода от установленного go и запрет звать go, docker и сеть
This commit is contained in:
+31
-1
@@ -1,11 +1,41 @@
|
||||
# Refer for explanation to following link:
|
||||
# https://lefthook.dev/configuration/
|
||||
#
|
||||
# Предкоммитные проверки — дешёвая часть гейта на **затронутых файлах**. Полный
|
||||
# набор здесь не гоняется намеренно: он идёт минуты, а pre-commit обязан быть
|
||||
# быстрым. Что ловит pre-commit и что остаётся только гейту — CLAUDE.md,
|
||||
# раздел «Гейт»; перечень правил и их дома — docs/autotests.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"
|
||||
|
||||
Reference in New Issue
Block a user