Гейт видит скрипты и 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:
@@ -35,6 +35,8 @@ tasks:
|
||||
fi
|
||||
- go test ./...
|
||||
- golangci-lint run
|
||||
- task: shell
|
||||
- task: dockerfile
|
||||
- task: go-version
|
||||
- task: docs
|
||||
- task: tasks
|
||||
@@ -42,6 +44,38 @@ tasks:
|
||||
# Последним: единственный шаг, которому нужна сеть, и самый долгий.
|
||||
- task: vulns
|
||||
|
||||
shell:
|
||||
desc: 'shellcheck на скрипты оболочки'
|
||||
cmds:
|
||||
# Скриптов два и оба свои: шаг сверки версий и `docker/entrypoint.sh`.
|
||||
# Второй в образ копируется, но не исполняется — `ENTRYPOINT` в
|
||||
# `Dockerfile` закомментирован, — и проверяется он именно поэтому: код,
|
||||
# который никто не гоняет, портится незаметно. Ни один из двух не виден ни
|
||||
# `go vet`, ни `golangci-lint`.
|
||||
- |
|
||||
if ! command -v shellcheck >/dev/null 2>&1; then
|
||||
echo "shellcheck не найден в PATH"
|
||||
echo "поставь: apt install shellcheck (или https://github.com/koalaman/shellcheck)"
|
||||
exit 3
|
||||
fi
|
||||
shellcheck scripts/check-go-version.sh docker/entrypoint.sh
|
||||
|
||||
dockerfile:
|
||||
desc: 'hadolint на Dockerfile'
|
||||
cmds:
|
||||
# DL3007 (`alpine:latest` у рантайм-слоя) подавлен: это открытая задача
|
||||
# `pin-runtime-image-base`, и до её решения шаг краснел бы на известном.
|
||||
# DL3018 (закрепить версии пакетов `apk`) подавлен по существу: alpine не
|
||||
# держит старые версии в репозитории, и закрепление ломает сборку через
|
||||
# недели — то есть лечение хуже болезни.
|
||||
- |
|
||||
if ! command -v hadolint >/dev/null 2>&1; then
|
||||
echo "hadolint не найден в PATH"
|
||||
echo "поставь: https://github.com/hadolint/hadolint/releases"
|
||||
exit 3
|
||||
fi
|
||||
hadolint --ignore DL3007 --ignore DL3018 Dockerfile
|
||||
|
||||
go-version:
|
||||
desc: 'Одна версия Go в go.mod, Dockerfile, CLAUDE.md и README.md'
|
||||
cmds:
|
||||
|
||||
Reference in New Issue
Block a user