From 1b1e36e2df8dc3bfe23ddd5883b22f1dc32f16f8 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 22 May 2025 20:30:29 +0300 Subject: [PATCH] fix(db-*): `migrate:reset` executes in a wrong order (#12445) fixes https://github.com/payloadcms/payload/issues/12442 --- packages/drizzle/src/migrateReset.ts | 2 ++ .../src/database/migrations/migrateReset.ts | 2 ++ test/database/int.spec.ts | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/packages/drizzle/src/migrateReset.ts b/packages/drizzle/src/migrateReset.ts index 99d977a71..4b9cc02a1 100644 --- a/packages/drizzle/src/migrateReset.ts +++ b/packages/drizzle/src/migrateReset.ts @@ -28,6 +28,8 @@ export async function migrateReset(this: DrizzleAdapter): Promise { const req = await createLocalReq({}, payload) + existingMigrations.reverse() + // Rollback all migrations in order for (const migration of existingMigrations) { const migrationFile = migrationFiles.find((m) => m.name === migration.name) diff --git a/packages/payload/src/database/migrations/migrateReset.ts b/packages/payload/src/database/migrations/migrateReset.ts index da39a157e..aedc9c8ae 100644 --- a/packages/payload/src/database/migrations/migrateReset.ts +++ b/packages/payload/src/database/migrations/migrateReset.ts @@ -21,6 +21,8 @@ export async function migrateReset(this: BaseDatabaseAdapter): Promise { const req = await createLocalReq({}, payload) + migrationFiles.reverse() + // Rollback all migrations in order for (const migration of migrationFiles) { // Create or update migration in database diff --git a/test/database/int.spec.ts b/test/database/int.spec.ts index 1ff38715d..c59cec241 100644 --- a/test/database/int.spec.ts +++ b/test/database/int.spec.ts @@ -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', () => { it('mongoose - should execute migrateVersionsV1_V2', async () => { // eslint-disable-next-line jest/no-conditional-in-test