Bake – запускаем таски на bash

в 19:43, , рубрики: bash, runner, shell, task, task-runner, Программирование, Разработка под Linux

Думаю многим известна ситуация, когда собственный изобретенный велосипед нигде потом не используется. Поэтому я долго не решался опубликовать эту разработку, пока не обратил внимание, что таскаю его из проекта в проект. И так, одним из неотъемлемых элементов современной разработки являются так называемые таск раннеры – это Grunt/Gulp для nodejs, Rake для Ruby, Make для C/C++ и т.п. А для главного инструмента разработчика – консоли – ничего подобного нет. Точнее есть, но, как это обычно бывает, не совсем то. В результате изысканий, на свет появился инструмент Bake – таскраннер написанный на bash с поддержкой модульной структуры.

Основные особенности:

  • Таски в виде функции.
  • Поддержка аргументов
  • Модули.

Назначение

Bake хорошо подходит для автоматизации рутинных действий, например запуск/перезапуск необходимых сервисов, очистка кеша, создание структуры директорий, выполнение команд по ssh/sftp (например для загрузки конфигурационных данных с установкой корректных прав доступа).

Инструмент крайне прост в использовании все что нужно — добавить функции-таски в bake.sh и можно вызывать их из командной строки:

bake [OPTIONS] <TASK> [TASK_ARGS]

Bake-файл

Таски хранятся в файле bake.sh. Bake будет искать этот файл в текущей директории, если его нет, то в вышестоящей, вплоть до корня системы. Директория, в которой находится bake.sh является корнем проекта и присваивается переменной $PWD. Соответственно все таски выполняются относительно корня, а не текущей директории, которая хранится в переменной $CWD.

Таски

Задания являются функциями, название которых начинающаяся с task:. Пример:

task:greet() {
    echo "Hello World"
}

Вызываем из консоли:

bake greet # -> Hello World

Внимание! Дефисы в имени таска заменяются на подчеркивания таск task:hello_world может быть вызван командами bake hello-world и bake hello_world.

Аргументы

Аргументы следующие за названием таска передаются в функцию:

task:greet() {
    echo "Hello $1"
}

bake greet World # -> Hello World

Модули

Bake позволяет разделять код на модули и подключать их по мере необходимости. Модули хранятся в директории bake_modules в виде скриптов, например ssh.sh. Подключаются модули с помощью команды bake:module <name>. Пример:

bake:module ssh # include "bake_modules/ssh.sh"
bake:module mysql # include "bake_modules/mysql.sh"

Так же как и Node.js, Bake ищет модули по восходящему пути в директориях bake_modules вплоть до корня системы. Например, если текущий путь проекта /home/user/projects/my-app, то модуль будет последовательно искаться в директориях:

/home/user/projects/my-app/bake_modules
/home/user/projects/bake_modules
/home/user/bake_modules
/home/bake_modules
/bake_modules

Установка

  • Deb-пакет для ubuntu:
    wget https://github.com/rumkin/bake/releases/download/v0.12.5/bake_0.12-5.deb
    sudo dpkg -i bake_012-5.deb
  • Установить из исходного кода на github:
        git clone https://github.com/rumkin/bake
        sudo cp bake/bake.sh /usr/bin/bake

Ссылки

Автор: rumkin

Источник

Поделиться

* - обязательные к заполнению поля