fix(db-*): migrate:reset executes in a wrong order (#12445)

fixes https://github.com/payloadcms/payload/issues/12442
This commit is contained in:
Sasha
2025-05-22 20:30:29 +03:00
committed by GitHub
parent 6b6948f92c
commit 1b1e36e2df
3 changed files with 25 additions and 0 deletions

View File

@@ -28,6 +28,8 @@ export async function migrateReset(this: DrizzleAdapter): Promise<void> {
const req = await createLocalReq({}, payload) const req = await createLocalReq({}, payload)
existingMigrations.reverse()
// Rollback all migrations in order // Rollback all migrations in order
for (const migration of existingMigrations) { for (const migration of existingMigrations) {
const migrationFile = migrationFiles.find((m) => m.name === migration.name) const migrationFile = migrationFiles.find((m) => m.name === migration.name)

View File

@@ -21,6 +21,8 @@ export async function migrateReset(this: BaseDatabaseAdapter): Promise<void> {
const req = await createLocalReq({}, payload) const req = await createLocalReq({}, payload)
migrationFiles.reverse()
// Rollback all migrations in order // Rollback all migrations in order
for (const migration of migrationFiles) { for (const migration of migrationFiles) {
// Create or update migration in database // Create or update migration in database

View File

@@ -577,6 +577,27 @@ describe('database', () => {
}) })
}) })
it('should run migrate:reset', async () => {
// known drizzle issue: https://github.com/payloadcms/payload/issues/4597
// eslint-disable-next-line jest/no-conditional-in-test
if (!isMongoose(payload)) {
return
}
let error
try {
await payload.db.migrateReset()
} catch (e) {
error = e
}
const migrations = await payload.find({
collection: 'payload-migrations',
})
expect(error).toBeUndefined()
expect(migrations.docs).toHaveLength(0)
})
describe('predefined migrations', () => { describe('predefined migrations', () => {
it('mongoose - should execute migrateVersionsV1_V2', async () => { it('mongoose - should execute migrateVersionsV1_V2', async () => {
// eslint-disable-next-line jest/no-conditional-in-test // eslint-disable-next-line jest/no-conditional-in-test