chore(lint): настроить golangci-lint v2, gofumpt и форматирование в make

- .golangci.yml: набор линтеров под требования §14 (gosec, gocritic, sloglint,
  noctx, revive, depguard для запрета циклических зависимостей internal/*)
- gofumpt вынесен из formatters golangci-lint v2.13 (сообщал о расхождениях,
  которые сам же не устранял) и применяется отдельным инструментом
- make fmt/go-lint: проверка gofumpt + golangci-lint fmt --diff
- scripts/gitleaks-scan.sh: поддержка gitleaks 8.19+ (dir) и старых версий (detect)
- исправлены замечания линтеров: обработка ошибок Close, контекст в логах,
  NewRequestWithContext в тестах, комментарий к blank-import драйвера SQLite
This commit is contained in:
2026-09-19 18:25:20 +03:00
parent 4bd1770cb5
commit 2bf7101f2d
7 changed files with 64 additions and 37 deletions
+8 -4
View File
@@ -15,6 +15,7 @@ export GOCACHE := $(CACHE_DIR)/go-build
export GOMODCACHE:= $(CACHE_DIR)/go-mod
export GOPATH := $(CACHE_DIR)/gopath
export GOTOOLCHAIN := local
export GOLANGCI_LINT_CACHE := $(CACHE_DIR)/golangci-lint
export CGO_ENABLED ?= 1
GOFLAGS_LOCAL := -trimpath
@@ -102,9 +103,11 @@ lint: tools go-lint web-lint ## Полный линт (Go + web)
.PHONY: go-lint
go-lint: tools ## Линт Go: формат, vet, golangci-lint
@echo "==> gofmt check"
@unformatted=$$(gofumpt -l . | grep -v '^\.cache/' || true); \
if [ -n "$$unformatted" ]; then echo "$$unformatted"; echo "run: make fmt"; exit 1; fi
@echo "==> формат (gofumpt + golangci-lint fmt)"
@out=$$(gofumpt -l ./cmd ./internal ./scripts 2>/dev/null || true); \
if [ -n "$$out" ]; then printf '%s\n' "$$out"; echo "run: make fmt"; exit 1; fi
@out=$$(golangci-lint fmt --diff $(GO_PACKAGES)); \
if [ -n "$$out" ]; then printf '%s\n' "$$out"; echo "run: make fmt"; exit 1; fi
@echo "==> go vet"
@go vet $(GO_PACKAGES)
@echo "==> golangci-lint"
@@ -112,7 +115,8 @@ go-lint: tools ## Линт Go: формат, vet, golangci-lint
.PHONY: fmt
fmt: tools ## Форматировать Go-код
gofumpt -w .
gofumpt -w ./cmd ./internal
golangci-lint fmt $(GO_PACKAGES)
.PHONY: generate
generate: tools ## Проверить сгенерированные артефакты (OpenAPI, sqlc — по мере появления)