Получи случайную криптовалюту за регистрацию!

Решили немного рассказать о нашем опенсорсе. Начнем с lets (h | Evo Dev Club

Решили немного рассказать о нашем опенсорсе. Начнем с lets (https://github.com/lets-cli/lets)

Предыстория

До перехода на docker мы пользовались своим (opensource, rust) решением для контейнеризации и оркестрации - vagga/lithos. В vagga процесс построения образа проверял чексумы файлов с зависимостями, сам умел скачать готовый образ из репозитория, а если его нет, то сбилдить. Для больших монолитов, где зависимости меняются часто и пересборка регулярная и долгая - это важно. Кроме того vagga давала удобный способ строить CLI для запуска разных команд внутри ваших образов. Словом, docker-compose и рядом не стоял, не говоря о Makefile и bash.

Когда мы захотели перейти на docker, стал вопрос, как сохранить все эти удобства, к которым мы уже привыкли. Так появился lets.

Что такое lets?

lets это таск-раннер. Создал файл lets.yaml, добавил пару команд, готово.

Главные особенности:
- вычисление чексум файлов
- переменные окружения
- указание зависимостей одних команд от других
- простой и понятный способ описать и парсить аргументы (docopts)

В prom.ua мы используем lets
- для запуска приложения
- для запуска тестов (локально и в gitlab ci)
- для запуска Selenium тестов

Одно из интересных применений, это подсчет чексумы файлов от которого зависит нужно ли пересобирать докер контейнер (Dockerfile, requirements.txt, package.json). При изменении одного из файлов мы считаем чексуму и используем ее как tag для докер образа. Таким образом, при запуске проекта, если файлы поменялись, то мы посчитаем чексуму, и если образ докера с таким тегом есть в registry, то мы его просто спулим, ведь образы постоянно билдятся на CI. Что это дает?
В большинстве случаев разработчик пулит себе уже готовый образ за несколько секунд, а не билдит его локально около 20-30 минут.
По соглашению, чтобы запустить только что склонированый репозиторий достаточно запустить выполнить lets run. Для нового разработчика в проекте это супер-удобно.

Для проекта основное преимущество в использовании lets это то что lets является абстракцией над тем как проект запускается.
Сегодня это docker + docker-compose. Завтра что-то другое (podman, etc). Можно заменить все что угодно под капотом, для людей ничего не изменится, команды те же.

Автор и основной контрибутор - наш лучший специалист Макс Киндрицкий Можете спросить его о чем-нибудь в комментариях

#evo