Практически в каждом софтверном проекте, где участвуют более одного участника, или даже один разработчик но с
памятью как у меня, рано или поздно встаёт вопрос документирования процессов: как компилировать, как запускать, как тестировать, как настраивать, и т.д. Так рождается файлик 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.