Just do it

Jun 01, 2022 11:59





Практически в каждом софтверном проекте, где участвуют более одного участника, или даже один разработчик но с памятью как у меня, рано или поздно встаёт вопрос документирования процессов: как компилировать, как запускать, как тестировать, как настраивать, и т.д. Так рождается файлик HOWTO.md.

Проходит время, кто-то заглядывает в файлик, кто-то нет. Потом кто-нибудь меняет процессы, но забывает обновить файлик с документацией, а потом кто-то другой пытается повторить описанные в файлике процессы, обламывается и говорит: "Хватит разврата! Мы же программисты, а у нас принято что лучшая документация - это код!" Так рождается шелл-скрипт типа do.sh, куда записывают все автоматизированные процессы.

Проходит время, и выясняется что не все умеют хорошо писать шелл-скрипты. Притаскивают ShellCheck, и становится легче. Но рано или поздно кто-то всё равно говорит "Хватит разврата , в смысле - писать шелл-скрипты! Мы же настоящие линуксоиды и можем сделать лучше!"

Настоящие линуксоиды обычно хватаются за make(1) и бросаются писать Makefileы. Потом их функциональности начинает не хватать и кто-то начинает писать вложенные Makefileы, кто-то кидается писать генераторы Makefileов, молодёжь агитирует за CMake, старики вспоминают про всякие хтонические autoconf... Пока кто-нибудь не приходит и не говорит "Хватит разврата , в смысле - адаптировать не приспособленные для этого инструемнты ! Мы же настоящие программисты!"

Питонисты притаскивают Plumbum. Рубисты расчехляют rake (хотя эти-то обычно сразу отсюда и начинают). И обычно на этой стадии воцаряется мир и порядок. Но я пошёл дальше.

И я нашёл замечательный инструмент под названием just. Ставится одной командой curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to ~/bin (если конечно не бояться curl-pipe-bash). С виду он похож на старый добрый make: есть текстовый Justfile, в котором хранится именованный список рецептов. Однако в отличие от make, тут нет никаких подкапотных проверок - все зависимости между рецептами явные. И сами рецепты не обязательно последовательности шелл-команд, они могут быть написаны на любом языке (хоть на TinyC с указанием #!/usr/local/bin/tcc -run). И есть ещё куча мелких особенностей, делающих just особенно удобным: рецепты умеют принимать аргументы, есть автоматическая загрузка переменных окружения из .env, внутри есть несложная поддержка переменных и функций, всё очень прагматично.

Теперь в своих проектиках я могу просто написать just build или just start.

software, coding

Previous post Next post
Up