Przeglądaj źródła

Merge pull request #18186 from overleaf/em-migration-dependencies

Add a migration helper checking dependent migrations

GitOrigin-RevId: 96aa6238b20115206554faaa4c2aefc537bbe7e8
Eric Mc Sween 2 lat temu
rodzic
commit
65f20a4d56

+ 19 - 0
services/web/migrations/lib/helpers.js

@@ -1,3 +1,5 @@
+// @ts-check
+
 const {
   db,
   getCollectionNames,
@@ -42,8 +44,25 @@ async function dropCollection(collectionName) {
   await collection.drop()
 }
 
+/**
+ * Asserts that a dependent migration has run. Throws an error otherwise.
+ *
+ * @param {string} migrationName
+ */
+async function assertDependency(migrationName) {
+  await waitForDb()
+  const migrations = await getCollectionInternal('migrations')
+  const migration = await migrations.findOne({ name: migrationName })
+  if (migration == null) {
+    throw new Error(
+      `Bad migration order: ${migrationName} should run before this migration`
+    )
+  }
+}
+
 module.exports = {
   addIndexesToCollection,
   dropIndexesFromCollection,
   dropCollection,
+  assertDependency,
 }

+ 5 - 0
services/web/migrations/lib/template.js

@@ -6,6 +6,11 @@ exports.tags = ['server-ce', 'server-pro', 'saas']
 
 exports.migrate = async client => {
   const { db } = client
+  // Are there migrations that need to run before this migration?
+  // Use the following helper to enforce the dependency:
+  //
+  // await Helpers.assertDependency('20200101000000_another_migration')
+
   // await Helpers.addIndexesToCollection(db.wombats, [{ name: 1 }])
 }