]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/initializers/migrator.js
233ee2bddf294e2be4a21c86125a31db13db44cf
3 const eachSeries
= require('async/eachSeries')
4 const fs
= require('fs')
5 const path
= require('path')
7 const constants
= require('./constants')
8 const db
= require('./database')
9 const logger
= require('../helpers/logger')
15 function migrate (callback
) {
16 db
.Application
.loadMigrationVersion(function (err
, actualVersion
) {
17 if (err
) return callback(err
)
19 // If there are a new migration scripts
20 if (actualVersion
< constants
.LAST_MIGRATION_VERSION
) {
21 logger
.info('Begin migrations.')
23 getMigrationScripts(function (err
, migrationScripts
) {
24 if (err
) return callback(err
)
26 eachSeries(migrationScripts
, function (entity
, callbackEach
) {
27 executeMigration(actualVersion
, entity
, callbackEach
)
29 if (err
) return callback(err
)
31 logger
.info('Migrations finished. New migration version schema: %s', constants
.LAST_MIGRATION_VERSION
)
41 // ---------------------------------------------------------------------------
43 module
.exports
= migrator
45 // ---------------------------------------------------------------------------
47 function getMigrationScripts (callback
) {
48 fs
.readdir(path
.join(__dirname
, 'migrations'), function (err
, files
) {
49 if (err
) return callback(err
)
51 const filesToMigrate
= []
53 files
.forEach(function (file
) {
54 // Filename is something like 'version-blabla.js'
55 const version
= file
.split('-')[0]
62 return callback(err
, filesToMigrate
)
66 function executeMigration (actualVersion
, entity
, callback
) {
67 const versionScript
= parseInt(entity
.version
)
69 // Do not execute old migration scripts
70 if (versionScript
<= actualVersion
) return callback(null)
72 // Load the migration module and run it
73 const migrationScriptName
= entity
.script
74 logger
.info('Executing %s migration script.', migrationScriptName
)
76 const migrationScript
= require(path
.join(__dirname
, 'migrations', migrationScriptName
))
78 db
.sequelize
.transaction().asCallback(function (err
, t
) {
79 if (err
) return callback(err
)
83 queryInterface: db
.sequelize
.getQueryInterface(),
84 Sequelize: db
.Sequelize
86 migrationScript
.up(options
, function (err
) {
92 // Update the new migration version
93 db
.Application
.updateMigrationVersion(versionScript
, t
, function (err
) {
99 t
.commit().asCallback(callback
)