From ec3bb1c7275324f7706577d910e052f9b6738b71 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 20 Oct 2017 15:34:27 -0400 Subject: [PATCH] allowing plugins to define upgrade scripts --- src/upgrade.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/upgrade.js b/src/upgrade.js index 97f5287bc6..43c012d8c0 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -4,6 +4,7 @@ var async = require('async'); var path = require('path'); var semver = require('semver'); var readline = require('readline'); +var winston = require('winston'); var db = require('./database'); var file = require('../src/file'); @@ -35,6 +36,37 @@ Upgrade.getAll = function (callback) { return semver.compare(versionA, versionB); })); }, + async.apply(Upgrade.appendPluginScripts), + ], callback); +}; + +Upgrade.appendPluginScripts = function (files, callback) { + async.waterfall([ + // Find all active plugins + async.apply(db.getSortedSetRange.bind(db), 'plugins:active', 0, -1), + + // Read plugin.json and check for upgrade scripts + function (plugins, next) { + async.each(plugins, function (plugin, next) { + var configPath = path.join(__dirname, '../node_modules', plugin, 'plugin.json'); + try { + var pluginConfig = require(configPath); + if (pluginConfig.hasOwnProperty('upgrades') && Array.isArray(pluginConfig.upgrades)) { + pluginConfig.upgrades.forEach(function (script) { + files.push(path.join(path.dirname(configPath), script)); + }); + } + + next(); + } catch (e) { + winston.warn('[upgrade/appendPluginScripts] Unable to read plugin.json for plugin `' + plugin + '`. Skipping.'); + process.nextTick(next); + } + }, function (err) { + // Return list of upgrade scripts for continued processing + next(err, files); + }); + }, ], callback); };