- PR docker builds use single arch (amd64 only), tag push uses dual
- Add paths-ignore to skip CI on docs-only changes
- Add concurrency groups to cancel stale runs on re-push
- Build Go binary once instead of 3x go run in migrate job
Run migrate up -> down -> up against a temporary PostgreSQL service
container on every PR and push to main, verifying all migrations
apply, rollback, and re-apply correctly.