Задать вопрос
stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer

Какой наиболее привычный путь для удаленного хранения настроек линтинга в Go?

Есть несколько проектов в GitLab на Go, во всех необходимо использовать линтеры. Чтобы не хранить их настройки отдельно в каждом проекте в `.golangci.yml`, хочется импортировать их из некоего общего для всех проекта, предназначенного именно для хранения данных настроек.

Вопрос: есть ли пример подобных проектов (в смысле некий шаблон проекта в GitLab'е или где угодно еще) с привычной структурой для таких вещей для сообщества Go, версионированием и всем прочим?
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Go-разработчик с нуля
    8 месяцев
    Далее
  • Skillfactory
    Профессия Backend-разработчик на Go
    12 месяцев
    Далее
  • Нетология
    Go-разработчик с нуля
    9 месяцев
    Далее
Решения вопроса 1
В 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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы