UNPKG

1.39 kBJavaScriptView Raw
1import { gt } from 'semver';
2import { readdir } from 'fs';
3import { spawnSync } from 'child_process';
4import { logger as appLogger } from 'nightingale-app-console';
5import { user } from './params';
6
7const logger = appLogger.child('migrate');
8
9(function migrate(previousVersion: string, newVersion: string): Promise<any> {
10 return new Promise((resolve: Function, reject: Function) => {
11 readdir(`${__dirname}/../../migrate/`, (err: ?any, files: Array<string>) => {
12 if (err) {
13 return reject(err);
14 }
15
16 files
17 .filter(file => file.slice(-3) === '.sh')
18 .map(file => ({ file, version: /^([^_]+)(_.*).sh$/.exec(file)[1] }))
19 .filter(file => gt(file.version, previousVersion))
20 .sort((a, b) => gt(a.version, b.version))
21 .forEach((file: { version: string, file: string }) => {
22 logger.info('migrate', file);
23 try {
24 spawnSync('sh', [file.file], {
25 cwd: `${__dirname}/../../migrate/`,
26 env: { ...process.env, POOLIOT_USER: user },
27 stdio: 'inherit',
28 });
29 logger.infoSuccess('success', file);
30 } catch (err) {
31 logger.error(err);
32 }
33 });
34 });
35 });
36})(process.argv[2], process.argv[3])
37 .then(() => logger.infoSuccess('migration done'))
38 .catch(err => console.log(err.stack || err.message || err));