схема описана, и репозиториями-клиентами. Моя хотелка — генерить typescript-декларации из схемы.
Вижу два варианта
— настроить сетап, который смотрит на сервер со схемой и по событию генерит декларации. Предвижу проблемы с доступностью и актуальностью этого сервера (надо накатить туда «тот самый» коммит, надо авторизовываться, иногда впн-туннель поднимать)
— настроить ci вокруг репозитория со схемой, чтобы схема деплоилась в стандартный реджистри в виде артефакта с версионированием, нотификациями об изменениях и прочими свистелками. Предвижу проблемы с гемором настройки
Как у вас? Какие есть подводные камни?
Я использую монорепо сетап: - Все клиенты и бэкэнд находятся в одном репозитории - Соответственно все имеют доступ к одному и тому же файлу-схеме Очень рекомендую монорепо, если есть возможность перейти на него, обязательно попробуй. Также: - Файл-схема компилируется в typescript и на фронте и на бэке - Любой брэйк схемы таким образом отлавливается
С монорепой-то понятно)
Вот! Теперь тебе нужно объединить все репы в одну )
Сначала мне нужно придумать, как объяснить, почему пяток сервисов на го, пара монолитов на пхп и три приложения на жс должны лежать в одной репе. И чтобы в дурку не отправили
Если нужно автогенерить по изменению схемы, то проще из ci бэка кинуть коммит с измененной схемой в нужный репо, там обработать. А это на самом деле второй вариант с ci на минималках. Мы юзаем первый вариант, т.к. скорее всего схема будет всегда доступна
У нас либо монорепы. Либо скрипт помагайка который запускается перед стартом клиентского приложения в дев режиме. Схема стягивается уже с запущенного сервера (стейджинга, дева, либо ревью). Делается это с помощью graphql-codegen он много откуда умеет тянуть схемы. Вот мой пример https://gist.github.com/nodkz/841ce4453fbaebf467caadd7914fe45d
а как помогайка узнаёт, с какого именно стейджинга тянуть?
Это я не капал. Мы юзаем стейджинг на ветку мастер у нее всегда фиксированный урл. Возможно хост можно как-то законфигурировать через env переменные. Ну или через bash скрипт подменять (например через `envsubst < /template_deploy.yml > /deploy.yml`). В любом случае это тема для самостоятельного ковыряния.
+ также кодегеним со стейджа всегда, только мануально, а не каждый раз
Обсуждают сегодня