В Go очень распространен подход с кодогенерацией. Он прост, не добавляет ненужную сложность, работает идеально.
План действий:
1. Создадим отдельный репозиторий с Go-модулем, который содержит:
- Базовый конфиг golangci-lint
- Маленькую консольную утилиту-генератор, которая пишет этот конфиг в .golangci.yml нашего проекта
2. Запустим этот модуль в каждом проекте через go run /cmd/genlint@version
3. Закрепим версию через теги: git tag v1.0.0
Таким образом нам в директории проекта понадобится только лишь запустить команду, которая нам сгенерирует конфиг-файл для линтера:
go run gitlab.com/your-company/go-lint-standards/cmd/genlint@v1.0.0 -out .golangci.yml
Таким образом мы даже можем в разных проектах поддерживать разные версии линтера, если нам это понадобится.
И ничего нам не помешает эту команду использовать прямо в Gitlab CI. Например, вот так:
stages:
- lint
lint:
stage: lint
image: golangci/golangci-lint:v1.59.1
script:
- go run gitlab.com/your-org/go-lint-standards/cmd/genlint@v1.0.0 -out .golangci.yml
- golangci-lint run -v --timeout 5m
rules:
- if: $CI_MERGE_REQUEST_IID
А для локальной разработки для простоты можно эту команду прописать в Makefile