При разработке использовался Node.js v12.14.1.
Перед запуском приложение необходимо настроить, задав переменные окружения в файле .env
. Шаблон
этого файла хранится в .env-example.
Порядок команд запуска:
- Установить зависимости
npm i
(в корне проекта). - Запустить сервер
npm run start:server
. - Добавить build агента
npm run start:agent:dev
. - Запустить клиент
npm run start:client:dev
. - (опционально) Запустить e2e тесты
test:e2e
.
Проект представляет клиент-серверное приложение для запуска сборок приложений из произвольных репозиториев. Серверная часть выполнена с использованием Express, а клиент основан на React.
Сервер отдает статические файлы из папки public
, а также имеет REST API для клиентской части.
. Сервер запускается командой
npm run start:server
и ожидает запросы на localhost:3000
. На localhost:3000/api-docs
можно
ознакомиться с его API.
Для задания был подготовлен вспомогательный репозиторий
hw-3-public-repo-example. В нем можно
выполнить команду псевдо-сборки npm run --silent build
которая выдаст лог сборки, либо завершится
ошибкой. Тестовые настройки после запуска сервера можно задать с помощью curl
:
curl --location --request POST 'localhost:3000/api/settings' \
--header 'Content-Type: application/json' \
--data-raw '{
"mainBranch": "main",
"buildCommand": "npm run --silent build",
"repoName": "dvdvdmt/hw-3-public-repo-example",
"period": 1
}'
Либо после запуска клиента на странице настроек.
Кроме отдачи статики и данных из БД, сервер занимается обработкой очереди сборок. Он распределяет
задания на сборку между агентами, которые в конце присылают ему результат.
Это приложение, которое занимается выполнением сборок. Вначале запуска агент регистрирует себя в
реестре CI сервера и получает номер порта. Далее он ожидает команду сборки, выполняет ее и сообщает
результат CI серверу. Запуск агента производится командой npm run start:agent:dev
.
⚠️ Клиент находится в процессе написания и не удовлетворяет всем требованиям из задачи. Работающая часть покрыта e2e тестами.
Для запуска клиента выполните npm run start:client:dev
. Интересной особенностью решения является
генерация API-client на основе OpenAPI схемы сервера. Запустить генерацию клиента можно командой
npm run api:generate
.
Для модульных тестов был выбран Jest, из-за его широкого набора
возможностей при почти отсутствующей конфигурации. Модульные тесты запускаются командой
npm run test:unit
.
Для end-to-end тестов был выбран Cypress из-за подробной документации,
простоты написания и высокой стабильности его тестов. End-to-end тесты запускаются командой
npm run test:e2e
.