Проект Сicada развивает систему автоматизации сборок, похожую на GitHub Actions

Доступна открытая система автоматизации сборочных процессов Сicada, позволяющая на своём сервере развернуть инфраструктуру, похожую на GitHub Actions, Azure DevOps и Gitlab CI, не зависящую от облачных сервисов. Код проекта написан на языке Python и распространяется под лицензией AGPLv3.

Система способна автоматически запускать сценарии сборки и тестирования кодовых баз при срабатывании определённых событий, таких как поступление push-запроса в Git, создание релизов, открытие/закрытие issue и открытие/закрытие pull-запросов. Отличительной чертой Сicada является предоставление для определение логики работы предметно ориентированного функционального языка программирования, поддерживающего переменные, выражения, циклы, условные блоки и встроенные функции.


   on git.push

   fn test(compiler):
     env.CC = compiler

     echo Testing (compiler)
     shell make clean all
 
   let compilers = ["gcc", "clang"]

   for compiler in compilers:
     test(compiler)

Предлагаемые язык позволяет легко создавать обработчики, которые проблематично описать в файлах конфигурации на базе формата YAML, и даёт возможность обойтись без подключения внешних скриптов на Shell или Python. При этом реализованный подход также решает проблему с несовместимостью YAML-форматов конфигурации, используемых в разных платформах автоматизации сборок. В Сicada предлагаются независимые от платформ универсальные типы событий, которые позволяют привязать один и тот же сценарий автоматизации к разным платформам, например, обработчик push-запросов может быть прикреплён к событиям, поступающим из GitHub и Gitlab.

Особое внимание также уделяется безопасному хранению токенов и паролей, применяемых для доступа к API, репозиториям и окружениям для установки результирующих сборок. Подобная конфиденциальная информация хранится в зашифрованном виде (AES-GCM c 256-разрядным ключом) при помощи инструментария HashiCorp Vault. Для каждого репозитория и точки установки создаётся отдельный ключ шифрования, ключи автоматически обновляются каждые 30 дней, хранилище ключей запускается на отдельном сервере.

Секретные данные по умолчанию не передаются через переменные окружения, а в репозиторий открывается только доступ на чтение. Имеется встроенная защита от подстановки команд в выражения, обеспечивающая автоматическое экранирование опасных конструкций, например, выражение ‘let name = «; rm -rf /»; echo Hello, (name)’ не приведёт к выполнению команды «rm». Из оптимизаций отмечается встроенная система кэширования результатов компиляции и загрузки ресурсов.

Источник: http://www.opennet.ru/opennews/art.shtml?num=60068