Есть два разных вопроса
- Какие входы изменились
sqlrs diffсравнивает пути и хэши содержимого входных файлов prepare.- Как работает старая ревизия
planилиprepare --refчитает входы из выбранного коммита или тега.
Сравните SQL между веткой и HEAD
sqlrs diff --from-ref origin/main --to-ref HEAD plan:psql -- -f db/prepare.sqlКоманда отдельно собирает все связанные файлы в каждой ревизии, включая psql\i/\ir, и выводит добавленные, изменённые и удалённые входы. Для Liquibase она обходит связи между changelog-файлами:
sqlrs diff --from-ref v1.2.0 --to-ref HEAD prepare:lb -- update --changelog-file db/changelog.xmldiff не запускает движок или SQL и не сравнивает фактические схемы баз. Он не сравнивает план заданий, данные запроса prepare, alias-файлы, составные prepare/run-команды или run:*. Используйте его для контроля файловых входов, а влияние миграций подтверждайте созданием экземпляра и тестами.
Поднимите состояние из тега или коммита
sqlrs plan --ref v1.2.0 test-db
sqlrs prepare --ref v1.2.0 test-dbПо умолчанию sqlrs создаёт временный detached worktree — отдельный checkout выбранной ревизии — и удаляет его после команды. Так сохраняется обычное поведение файлов, включая символические ссылки. Если рецепт не зависит от них, файлы можно читать напрямую из объектов Git без checkout:
sqlrs prepare --ref v1.2.0 --ref-mode blob test-dbСохраните доказательство использованных входов
Флаг --provenance-path записывает JSON-файл с командой, выбранной Git-ревизией, хэшами входов, решением кэша и результатом plan или prepare. Основной вывод команды при этом не меняется:
sqlrs plan --ref v1.2.0 --provenance-path artifacts/v1.2.0-plan.json test-dbАртефакт не содержит DSN или токенов. Его можно сохранить вместе с результатами CI, чтобы позже установить, какой именно набор файлов использовался при проверке.
Проверка для pull request
- запустите diff от общей базовой точки или целевой ветки до
HEAD; - проверьте неожиданные добавления, удаления и включённые файлы;
- выполните
plan --refдля старой и новой ревизии; - создайте экземпляр новой ревизии и запустите интеграционные тесты;
- если нужно проверить обновление уже существующей базы, выполните его отдельным сценарием — diff такое обновление не моделирует.
Ограничения работы с Git-ревизиями
- указанная ветка, метка или commit должны существовать в локальном Git-репозитории;
- основной файл должен существовать на обеих сторонах diff;
prepare --refдолжен дождаться завершения задания; вариант с--no-watchне поддерживается;--refработает только с одной стадией: составной prepare/run не поддерживается;--ref-keep-worktreeоставляет временный checkout для ручной диагностики; после проверки его придётся удалить самостоятельно.