diff options
author | David Mehren | 2021-02-27 21:33:05 +0100 |
---|---|---|
committer | David Mehren | 2021-02-27 21:33:05 +0100 |
commit | 0db862f3c9318f3e214d6b09604760a9844dcfd5 (patch) | |
tree | 4db476be820a6cd94136f238c693221c4d6db1d5 /lib/models | |
parent | 6186e0f48f3414e9de4ab5f864c2d153aa995c51 (diff) |
Run database migrations automatically on startup
This commit removes the need for separate migrations with the sequelize-cli
by running them with umzug on application startup.
This is a port of #384
Co-authored-by: Sheogorath <sheogorath@shivering-isles.com>
Signed-off-by: David Mehren <git@herrmehren.de>
Diffstat (limited to 'lib/models')
-rw-r--r-- | lib/models/index.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/models/index.js b/lib/models/index.js index e752a993..4558b25e 100644 --- a/lib/models/index.js +++ b/lib/models/index.js @@ -4,6 +4,7 @@ const fs = require('fs') const path = require('path') const Sequelize = require('sequelize') const { cloneDeep } = require('lodash') +const Umzug = require('umzug') // core const config = require('../config') @@ -57,6 +58,36 @@ Object.keys(db).forEach(function (modelName) { } }) +const umzug = new Umzug({ + migrations: { + path: path.resolve(__dirname, '..', 'migrations'), + params: [ + sequelize.getQueryInterface(), + Sequelize.DataTypes + ] + }, + // Required wrapper function required to prevent winstion issue + // https://github.com/winstonjs/winston/issues/1577 + logging: message => { + logger.info(message) + }, + storage: 'sequelize', + storageOptions: { + sequelize: sequelize + } +}) + +db.runMigrations = async function runMigrations () { + // checks migrations and run them if they are not already applied + // exit in case of unsuccessful migrations + await umzug.up().catch(error => { + logger.error(error) + logger.error('Database migration failed. Exiting…') + process.exit(1) + }) + logger.info('All migrations performed successfully') +} + db.sequelize = sequelize db.Sequelize = Sequelize |