Как правильно настроить архитектуру для работы с метаданными Hasura в разных ветках?
В Hasura есть отличная система инкрементной миграции схемы базы данных.
Вы настраиваете его, создаете новую ветку, запускаете консоль из cli, вносите свои изменения и получаете кучу файлов миграции. Добавьте эти файлы в git, объедините их с мастером, когда будете готовы, и выполните «мигрировать, примените …», чтобы применить эти изменения к рабочей БД.
Теперь с метаданными так не работает. Каждый раз, когда вы запускаете hasura cli и делаете что-то стоящее, файл метаданных будет обновляться.
Вот пример проблемы, с которой я столкнулся. Есть две похожие базы (установки хасуры) — PROD и DEV.
Я создаю ветки из мастера - ветку A и ветку B. Обе будут работать с базой данных DEV. Я начинаю работать над веткой А, добавляю несколько таблиц, добавляю разрешения и отношения. В итоге я получаю кучу миграций и файл метаданных, который содержит настройки, которые были в мастере + мои изменения. Когда я закончу с веткой, потенциально я должен выполнить «применить перенос hasura» и «применить метаданные hasura», и все изменения будут перемещены в базу данных prod.
Мой друг начинает работать над веткой B, добавляет несколько таблиц, добавляет некоторые разрешения и отношения. В итоге он получает кучу миграций и файл метаданных, который содержит настройки, которые были в мастере + его изменения + мои изменения. Поэтому, когда он закончит с веткой, «hasura migrate apply» добавит все, что он хочет, но «hasura metadata apply» выдаст ошибку, потому что некоторые из его предложений будут основаны на таблицах, которые никогда не переносились ( таблицы, созданные в ветке А).
Как мне синхронизировать метаданные?