Comments 30
Привели бы хоть пример, посложнее, чем хелловорлд. Я знаю, для чего мне make нужен, но не могу представить, зачем может понадобится bake.
Спасибо за отклик. Bake нужен для автоматизации рутинных действий. В частности я использую в корневой папке проектов для быстрого скачивания проектов с гитхаба:
bake hub drakkar
Скачает с гитхаба мой репозиторий rumkin/drakkar.
А команда bake init npt
скачает шаблон репозитория rumkin/npt и переинициализирует git.
Так же при разработке я использую эталонную базу данных, к которой откатываюсь каждый раз, когда рабочая копия засоряется и делаю это одной командой. Так же конфигурация для продакшена сервера, как известно не должна храниться в репозитории, и в случае изменений, мне нужно быть уверенным, что все файлы конфигурации будут залиты без ошибок и для них будут установлены корректные права доступа.
Ничего не понимаю ©
Таски имеют зависимости? Проверяется, построены ли они и не надо ли их перестроить? Если нет — то зачем это всё и при чём тут make/rake/… (которые вовсе не являются "таск раннерами", это системы сборки, первоочередная задача которых — проверка зависимостей)?
Если да — то почему нельзя просто пользоваться make? (Потенциально — меньше порождений процессов, но вряд ли вы упёрлись в производительность, раз можете себе позволить bash)
bash вполне поддерживает alias, и свой include (. / source), чтобы можно было сделать любые ваши таски в виде функций или алиасов.
Есть давно сложившийся, ну не стандарт, но обычай создавать $HOME/bin и кидать туда свои скрипты, остается только добавить их в PATH.
Чем принципиально bake важен/отличается?
alias и source добавляют код в глобальную область видимости, т.е. для каждого проекта не получится получить свою изолированную среду.
Обычно $HOME/bin по-умолчанию в $PATH добавляется, а все скрипты будут выполняться из текущей директории, а не из директории проекта. При этом Bake позволяет писать уникальный набор скриптов для конкретного проекта, а так же переиспользовать код в случае необходимости: например Bake поможет проверить все ли необходимые компоненты установлены в системе. При этом вы можете поместить bake.sh в репозиторий, а скрипты из $PATH/bin – нет.
Каким образом Bake проверяет все ли компоненты установлены? Это же просто набор bash скриптов, которые неважно откуда я запущу?
Другими словами, в статье написано как сделать helloworld на bake, но совершенно не описан что такое bake, и как он это делает. Хотя бы принцип. Все что вы написали мне — это элементарно реализуется на bash и не понятно, чем именно bake удобнее своего велосипеда.
не понятно, чем именно bake удобнее своего велосипеда.«bake» — это почти, как «bike». Но только «bake».
Почему я не могу писать уникальный набор скриптов для конкретного проекта и деплоить его в $HOME/bin?
Проектов много, а $HOME/bin — один, так что надо стараться, что бы набор были уникальным для каждого проекта, а не простые build.sh, deploy.sh и т. п., да и зачем выносить в глобальные области то, что специфично для проекта?
Тут скорее уместный вопрос — чем лучше bake обычного набора скриптов в корне проекта или его каталога bin. Очевидно не нужно находиться в корне
Проектов много, а $HOME/bin — один, так что надо стараться, что бы набор были уникальным для каждого проекта, а не простые build.sh, deploy.sh и т. п., да и зачем выносить в глобальные области то, что специфично для проекта?
Именно. Спасибо.
bake удобен тем что код вызывается из любой директивы проекта. При этом он вносит определенную упорядоченность. Как я уже писал выше, я использую bake как для запуска скриптов внутри проекта, так и для управления проектами. Т.е. если в директории есть bake.sh вы сразу понимаете, что указанные внутри команды необходимы для управления именно из этой директории, а ./bin
не дает такого понимания, если находится за пределами проекта.
Нет, bake – это именно таск раннер. Собственно rake так же используется как таск раннер, о чем написано в Википедии. По-моему, каждый из инструментов выполняет набор задач свойственных для языка, для которого он был разработан, т.е. для c/c++ – это сборка, для nodejs компиляция less/jsx/babel и деплой. Bake нужен для того чтобы автоматизировать рутину с помощью скриптов написанных на bash, например загрузку файлов по sftp или при создании бекапов данных во время разработки и т.п.
Вхождение на серверы ftp/ssh по alias тоже?
Я даже и не знаю…
Интересный инструмент.
А есть возможность модифицировать окружение? Например, у меня в корне Python-проекта есть файлик env.sh
со всякими приватными переменными (пароли, ключи и проч.), и каждый раз при начале работы над проектом я вынужден писать что-то типа
source env.sh
source .env/bin/activate
Было бы круто, если бы я вместо этого мог просто сказать что-то вроде bake startdev
.
@rumkin Есть у нас примерно такой же проект Tasker: https://github.com/thecotne/tasker
Может заинтересует и даже сможем объединить функционал :)
Например, задача — переключить окружение разработчика с php 7.0 на php 7.1. Это можно делать по старинке — написать bash скрипт, положите его в $PATH, и вызывать конкретно его. Или написать таску в bake.
Если задача одна — все хорошо. Если их несколько — появляются проблемы, например:
— как запомнить название всех баш скриптов
— как дистрибьютить и версионировать много баш скриптов
— как заморозить или откатить текущий набор баш скриптов
Все эти задачи успешно решает bake.
Еще примеры использования:
— пересборка проекта (grunt, composer, phinx)
— переключение окружений
— перезапуск чего-угодно (nginx, fpm, tomcat)
— кастомная автоматизация того, что вы используете
В общем, спасибо за отличный инструмент!
[deleted]
Bake – запускаем таски на bash