A fresh copy every run
Each run tests against an untouched copy of your data.
Create a Postgres branch when the pipeline starts, run migrations and tests against it, and delete it when the job ends. Each run tests against an untouched copy of your data.
Each run tests against an untouched copy of your data.
Each job gets its own branch. Nothing is shared.
The last step removes the branch.
Tests fail for reasons that have nothing to do with the code under test.
The first step creates a branch from your baseline: production, staging, or a masked copy. It copies no data, so it is ready in about three seconds.
Apply pending migrations, seed if you need to, run the suite. Integration tests hit real Postgres with the real data shape.
The last step deletes the branch. Nothing carries over to the next run.
The same commands run anywhere a shell does.
Connect the Xata MCP server or install the CLI, and your coding agent can create branches, apply migrations and read schema without touching production.
If a job is cancelled before its delete step, the leftover branch can scale to zero until the cleanup workflow removes it.
Learn moreIf production holds personal data, branch CI runs from a masked copy. The distributions stay realistic and the values do not.
Learn moreStop sharing a test database. Branch it per run and delete it when the job ends.