Бинарные зависимости в проектах: единый подход для команды
Как стандартизировать установку инструментов (golangci-lint, goose, goreleaser и др.) в multi-ОС команде с помощью Makefile и локальных бинарников.
Бинарные зависимости в проектах: единый подход для команды
Когда над проектом работает несколько человек - особенно с разными ОС (Linux, macOS, иногда даже Windows), - быстро возникает разнобой в инструментах:
один использует golangci-lint v2.5.0, другой - v2.7.2, третий вовсе забыл его обновить.
В итоге:
- локально всё ок, а на CI - ошибки
goose migrateработает у одних, падает у других- коллеги тратят время на «а у меня не запускается»
Цель: сделать установку и версионирование бинарных (pre-compiled) зависимостей предсказуемой и воспроизводимой - без глобальных go install, brew или apt.
Почему именно бинарники?
- Не требуют компиляции
- Изолированы от глобального окружения
- Контролируемая версия
- Работает вне GOPATH
Предлагаемая структура
| |
Makefile: точка входа и управление версиями
| |
install.mk: установка бинарных файлов
| |
OSиARCHопределяются динамически, но можно переопределить:make OS=linux ARCH=arm64 install-deps- Для Windows (если нужно) - добавьте обработку
MINGW*/CYGWIN*вuname -s
Как использовать
| |
Заключение
Управление бинарными зависимостями через Makefile - это просто, надёжно и масштабируемо.
Вы получаете:
- единый стандарт для всей команды
- воспроизводимость «на любой машине»
- независимость от глобального окружения
А главное - меньше «а у меня работает».
Авторский пост защищен лицензией CC BY 4.0.