Каким должен быть task runner для сборки проектов
Соображения по поводу того, каким хотелось бы видеть инструмент для запуска многошагового CI/CD процесса проектов
- Процесс сборки разделён на атомарные логические единицы - шаги сборки
- Чтобы описать весь процесс прописываем какие шаги сборки нам нужны в нём, корневой шаг сборки
- Шаги сборки могут иметь другие вложенные шаги сборки, получается дерево шагов сборки
- Шаги сборки могут зависеть от результатов работы предыдущих шагов сборки, исходящие результаты одних шагов передаются в параметры других шагов
- Инструмент сам разрешает порядок выполнения шагов по их зависимости друг от друга
- Шаги сборки могут выполняться как последовательно так и параллельно, это решает инструмент
- Интерфейс шага сборки имеет строгое декларативное описание:
- Структура и типы входящих параметров
- Структура и типы исходящих результатов
- Инструмент выполняет валидацию параметров и результатов шагов сборки, не пропуская некорректные данные
- Исходящие данные одного шага сборки можно передать во входящие параметры другого шага
- Исходящие данные шага сборки можно получить в JSON или другом формате
- Описание сборки выполняется на языке программирования, что позволяет
- Генерировать шаги сборки с разными параметрами (матрица, комбинации параметров)
- Читать файлы
- Задавать сложные условия и выражения для вычисления параметров
- В разных шагах сборки можно использовать объекты описанные где-то в одном месте, не надо ничего копипастить
- Из библиотек доступно множество функций для удобной реализации логики сборки
- Есть удобный встроенный шаблонизатор для генерации файлов скриптов и конфигов
- Перед запуском сборки можно посмотреть сгенерированную конфигурацию
- Возможность описать шаги и процесс сборки по-умолчанию и применять его во многих проектах
- Предусмотрено версионирование шагов и процесса сборки, в проектах можно переходить на новую версию процесса сборки по мере необходимости и возможности
- В проекте можно переопределить логику выполнения любого шага сборки, при этом можно вызвать логику шага по-умолчанию
- В описании шага сборки можно указать docker контейнер, в котором его необходимо запустить (для CI/DI окружения)
- При запуске сборки настройкой можно отключить использование docker контейнеров и все шаги запускать как есть на машине (для локальной разработки)