Псевдо-модульная сборка bash-скриптов
make
Проект разделён на три части:
- Заглавные модули
- Обычные модули
- Основной скрипт
В итоговую сборку модули попадают в соответствии с тем, как они перечислены выше. Все модули по умолчанию имеют расширение .bm (bash module).
Очередь попадания каждого модуля из каждой группы в сборку определяется в алфавитном порядке. К примеру, a.bm попадёт в борку раньше, чем b.bm.
Эти модули попадают в сборку первыми. Как правило, в них содержатся функции, которые используются в других функциях.
По умолчанию имена таких файлов начинаются c символа _. Данный префикс можно изменить с помощью переменной HEAD_PREFIX в файле .vars.
Подробнее о переменных ниже.
Так как порядок подключения модулей определяется в алфавитном порядке, мы можем создать заглавный модуль, который будет подключаться раньше всех других заглавных модулей, создав файл с именем:
_.bm
Это может быть полезно, чтобы добавить строку, определяющую оболочку скрипта, вида:
#!/bin/bash
Имена файлов обычных модулей не имеют префиксов.
Изменить расширение файлов модулей можно с помощью переменной MOD_EXT в файле .vars.
Данный скрипт должен содержать минимум бизнес-логики, насколько это возможно. Весь остальной код должен быть вынесен в модули.
Стоит отметить, что ничто не мешает оформлять в виде модулей любой код, не являющийся изолированной функцией, если это действительно необходимо и\или имеет смысл.
Все переменные, с помощью которых можно настроить сборку под свои нужды, находится в файле .vars. Ниже их полный список:
SHELL- определяет оболочку для запуска команд, указанных вMakefile. Менять её значение есть смысл только если вы полностью понимаете, зачем.MOD_DIR- относительный путь к директории, в которой расположены файлы модулейMOD_EXT- расширение файлов модулейMODULES- функция для поиска файлов обычных модулей. То есть при необходимости здесь можно настроить свою собственную магию.DIST_DIR- относительный путь к директории, куда будет падать итоговый скриптMAIN_SCRIPT- имя основного скриптаEND_SCRIPT- имя файла, который получится в итогеHEAD_PREFIX- префикс для файлов заглавных модулейHEAD_FILES- функция для поиска заглавных модулей. АналогичноMODULESSTATE_OK- текст, который выводится, когда операция проходит успешно. То есть[ OK ]по умолчанию.STATE_FAIL- текст, который выводится при неуспешной операцииERR_FILE- имя костыльного файла, который создаётся для красивого вывода ошибок. Изменять нет смысла, так как он удаляется сразу после вывода ошибки.END_OF_TARGET- текст, который выводится по завершению сборки одной из целей (заглавных модулей, обычных модулей или основного скрипта).
Тестирование реализовано с помощью утилиты bats. Все файлы тестов лежат также в modules и имеют расширение .bats. В случае, если один из тестов не проходит, сборщик выводит ошибку и завершает работу.
Синтасксис у bats очень простой, вся документация описана здесь.