migrate-guard 0.1.1

Detect and auto-renumber colliding sqlx migration version numbers across git branches.
Documentation

migrate-guard

Detect and auto-renumber colliding sqlx migration version numbers across git branches.

sqlx assigns a migration's version at author time, so two branches that both add NNNN_*.sql at the same NNNN merge cleanly, then fail at test time with UNIQUE constraint failed: _sqlx_migrations.version. migrate-guard catches this before merge and renumbers your topic branch above the global max.

A collision is one version number claimed by two different files (e.g. 0002_a.sql and 0002_b.sql). The same migration file present on multiple branches is not a collision.

Install

cargo install migrate-guard

Configure — migrate-guard.toml at the repo root

base_ref = "main"
reference_globs = ["src/**/*.rs"]

[[dir]]
role = "platform"
path = "migrations"

[[dir]]
role = "tenant"
path = "crates/kernel/migrations_tenant"

Each [[dir]] is an independent numbering namespace: the same version number in two different roles is not a collision.

Use

cargo migrate-guard check                 # CI gate: non-zero exit on collision
cargo migrate-guard renumber              # dry run: show the plan
cargo migrate-guard renumber --apply      # renumber this branch's new files + rewrite include_str! refs
cargo migrate-guard max                   # print the max version per role

renumber only ever touches the files THIS branch adds (working-tree files absent from base_ref), numbering them above the max seen across base_ref, every other local branch, and the rest of the working tree. It renames with git mv and rewrites exact-filename references (e.g. include_str!) in reference_globs.

CI

- run: cargo install migrate-guard
- run: cargo migrate-guard check

License

Licensed under either of MIT or Apache-2.0 at your option.