diff --git a/packages/db-manager/package.json b/packages/db-manager/package.json index 12f0848ed4fafeeb5a529072a6062141bd11cdeb..c5f86250f9a7025adb2573bd0b88a8d5994b129d 100644 --- a/packages/db-manager/package.json +++ b/packages/db-manager/package.json @@ -36,7 +36,7 @@ "lodash": "^4.17.11", "objection": "^1.3.0", "pg": "^7.4.1", - "tmp": "^0.0.33", + "tmp-promise": "^1.0.5", "umzug": "^2.1.0" }, "peerDependencies": { diff --git a/packages/db-manager/src/commands/migrate.js b/packages/db-manager/src/commands/migrate.js index 4beb2fa0e031ca69c78f9ce894456178a82e41fd..25ca960db9c5b231ecf86629cb5f1a95c7ddc7a1 100644 --- a/packages/db-manager/src/commands/migrate.js +++ b/packages/db-manager/src/commands/migrate.js @@ -1,9 +1,9 @@ const getUmzug = require('../helpers/umzug') const getMigrationPaths = require('../helpers/migrationPaths') -const migrate = async () => { - const umzug = await getUmzug(getMigrationPaths()) - await umzug.up() +const migrate = async options => { + const { umzug, cleanup } = await getUmzug(getMigrationPaths()) + await umzug.up(options).finally(() => cleanup()) } module.exports = migrate diff --git a/packages/db-manager/src/helpers/umzug.js b/packages/db-manager/src/helpers/umzug.js index 26763b4640e2e9ea125de318cefc0aeb134518ed..ef1148691386ab384f2c7a84eea7023f6c1df5ab 100644 --- a/packages/db-manager/src/helpers/umzug.js +++ b/packages/db-manager/src/helpers/umzug.js @@ -2,13 +2,10 @@ const logger = require('@pubsweet/logger') const db = require('../db') const Umzug = require('umzug') const fs = require('fs-extra') -const path = require('path') -const tmp = require('tmp') -const { promisify } = require('util') +const { extname } = require('path') +const tmp = require('tmp-promise') const storage = require('./umzugStorage') -const makeTempDir = promisify(tmp.dir) - // load SQL files as migrations const sqlResolver = filePath => ({ up: async db => { @@ -19,8 +16,8 @@ const sqlResolver = filePath => ({ const getUmzug = async migrationsPaths => { // collect up all migrations to be run - const tempDir = await makeTempDir({ - prefix: 'migrations-', + const { path, cleanup } = await tmp.dir({ + prefix: '_migrations-', unsafeCleanup: true, dir: process.cwd(), }) @@ -29,26 +26,27 @@ const getUmzug = async migrationsPaths => { await Promise.all( migrationsPaths.map(async migrationPath => { if (await fs.exists(migrationPath)) { - await fs.copy(migrationPath, tempDir) + await fs.copy(migrationPath, path) } }), ) - - return new Umzug({ + const umzug = new Umzug({ storage, logging: logger.debug.bind(logger), migrations: { - path: tempDir, + path, params: [db], pattern: /\d+-[\w-]+\.(js|sql)/, customResolver: filePath => { - if (path.extname(filePath) === '.sql') { + if (extname(filePath) === '.sql') { return sqlResolver(filePath) } return require(filePath) }, }, }) + + return { cleanup, umzug } } module.exports = getUmzug diff --git a/packages/server/test/helpers/db_cleaner.js b/packages/server/test/helpers/db_cleaner.js index 455d631f2e7c5ecd89b8d59ca0a70a8fa160c946..1b1ab77ef8781edc4242a797489ee1796a8b280f 100644 --- a/packages/server/test/helpers/db_cleaner.js +++ b/packages/server/test/helpers/db_cleaner.js @@ -1,11 +1,11 @@ const { db, migrate } = require('@pubsweet/db-manager') const logger = require('@pubsweet/logger') -const dbCleaner = async () => { +const dbCleaner = async options => { await db.raw('DROP SCHEMA public CASCADE;') await db.raw('CREATE SCHEMA public;') await db.raw('GRANT ALL ON SCHEMA public TO public;') - await migrate() + await migrate(options) logger.info('Dropped all tables and ran all migrations') }