如何在CI中检测Prisma Schema已变更但未生成迁移文件?
如何在CI中检测Prisma Schema变更未生成对应迁移文件的情况
要在CI流程中自动识别「Schema已修改但未生成对应迁移文件」的问题,你可以利用Prisma官方提供的prisma migrate diff命令来校验Schema与已生成迁移文件的一致性,具体实现如下:
核心逻辑
修改schema.prisma但未生成迁移文件时,当前Schema的结构会与所有已应用迁移后的数据库结构存在差异。通过在CI中创建临时数据库、应用现有迁移、对比差异三个步骤,就能自动捕获这种不一致,阻止不合规的PR合并。
具体CI执行步骤
初始化CI环境
确保CI环境安装了Node.js和包管理器,安装项目依赖(锁定版本保证一致性):yarn install --frozen-lockfile # 若使用npm则执行:npm ci创建临时数据库并应用现有迁移
使用SQLite内存数据库(无需额外服务,轻量高效),将所有已生成的迁移文件应用到临时库:npx prisma migrate deploy --database-url "file:./temp.db?mode=memory"校验Schema与迁移的一致性
执行prisma migrate diff对比当前Schema和临时数据库的结构,启用--exit-code参数让命令在存在差异时返回非0退出码(CI会将此标记为失败):npx prisma migrate diff \ --from-url "file:./temp.db?mode=memory" \ --to-schema-datamodel prisma/schema.prisma \ --exit-code清理临时资源(可选)
若使用文件型SQLite而非内存型,执行完成后可删除临时文件:rm -f ./temp.db
备选方案:校验迁移锁文件的哈希值
Prisma迁移目录下的migration_lock.toml文件中记录了已迁移Schema的schema_hash值。你可以通过脚本计算当前schema.prisma的哈希值并与该字段对比,若不一致则判定为未生成迁移。不过这种方法依赖Prisma内部哈希逻辑,不如migrate diff可靠,仅作为备选方案。
内容的提问来源于stack exchange,提问作者Bright Lee
相关产品推荐
相关产品推荐

