core: backup: add withAddons option

This commit is contained in:
undefined committed 2024-10-06 18:03:55 +08:00
1 parent ad96cee008
commit 6de0bbe846
1 file changed
+52 -34
+52 -34
View File
@@ -39,40 +39,58 @@ export function register(cli: CAC) {
child.spawn('mongo', [url], { stdio: 'inherit' }); child.spawn('mongo', [url], { stdio: 'inherit' });
} }
}); });
cli.command('backup').option('--dbOnly', 'Only dump database', { default: false }).action(() => { cli.command('backup')
const url = getUrl(); .option('--dbOnly', 'Only dump database', { default: false })
exec('mongodump', [url, `--out=${dir}/dump`], { stdio: 'inherit' }); .option('--withAddons', 'Include addons', { default: false })
const target = `${process.cwd()}/backup-${new Date().toISOString().replace(':', '-').split(':')[0]}.zip`; .action(() => {
exec('zip', ['-r', target, 'dump'], { cwd: dir, stdio: 'inherit' }); const url = getUrl();
if (!argv.options.dbOnly) { exec('mongodump', [url, `--out=${dir}/dump`], { stdio: 'inherit' });
exec('zip', ['-r', target, 'file'], { cwd: '/data', stdio: 'inherit' }); const target = `${process.cwd()}/backup-${new Date().toISOString().replace(':', '-').split(':')[0]}.zip`;
} const addToZip = (cwd: string, item: string) => exec('zip', ['-r', target, item], { cwd, stdio: 'inherit' });
exec('rm', ['-rf', dir]); addToZip(dir, 'dump');
const stat = fs.statSync(target); if (!argv.options.dbOnly) addToZip('/data', 'file');
logger.success(`Database backup saved at ${target} , size: ${size(stat.size)}`); if (argv.options.withAddons) {
}); if (fs.existsSync(path.join(hydroPath, 'addons'))) addToZip(hydroPath, 'addons');
cli.command('restore <filename>').option('-y', 'Assume yes', { default: false }).action(async (filename) => { if (fs.existsSync(path.join(hydroPath, 'addon.json'))) addToZip(hydroPath, 'addon.json');
const url = getUrl(); }
if (!fs.existsSync(filename)) { fs.removeSync(dir);
logger.error('Cannot find file'); const stat = fs.statSync(target);
return; logger.success(`Database backup saved at ${target} , size: ${size(stat.size)}`);
} });
if (!argv.options.y) { cli.command('restore <filename>')
const rl = readline.createInterface(process.stdin, process.stdout); .option('-y', 'Assume yes', { default: false })
const answer = await rl.question(`Overwrite current database with backup file ${filename}? [y/N]`); .option('--withAddons', 'Include addons', { default: false })
rl.close(); .action(async (filename) => {
if (answer.toLowerCase() !== 'y') { const url = getUrl();
logger.warn('Abort.'); if (!fs.existsSync(filename)) {
logger.error('Cannot find file');
return; return;
} }
} if (!argv.options.y) {
exec('unzip', [filename, '-d', dir], { stdio: 'inherit' }); const rl = readline.createInterface(process.stdin, process.stdout);
exec('mongorestore', [`--uri=${url}`, `--dir=${dir}/dump/hydro`, '--drop'], { stdio: 'inherit' }); const answer = await rl.question(`Overwrite current database with backup file ${filename}? [y/N]`);
if (fs.existsSync(`${dir}/file`)) { rl.close();
exec('rm', ['-rf', '/data/file/hydro'], { stdio: 'inherit' }); if (answer.toLowerCase() !== 'y') {
exec('bash', ['-c', `mv ${dir}/file/* /data/file`], { stdio: 'inherit' }); logger.warn('Abort.');
} return;
fs.removeSync(dir); }
logger.success('Successfully restored.'); }
}); exec('unzip', [filename, '-d', dir], { stdio: 'inherit' });
exec('mongorestore', [`--uri=${url}`, `--dir=${dir}/dump/hydro`, '--drop'], { stdio: 'inherit' });
if (fs.existsSync(`${dir}/file`)) {
exec('rm', ['-rf', '/data/file/hydro'], { stdio: 'inherit' });
exec('bash', ['-c', `mv ${dir}/file/* /data/file`], { stdio: 'inherit' });
}
if (argv.options.withAddons) {
if (fs.existsSync(`${dir}/addons.json`)) {
fs.copyFileSync(`${dir}/addons.json`, path.join(hydroPath, 'addons.json'));
}
if (fs.existsSync(`${dir}/addons`)) {
fs.removeSync(path.join(hydroPath, 'addons'));
fs.copySync(`${dir}/addons`, path.join(hydroPath, 'addons'));
}
}
fs.removeSync(dir);
logger.success('Successfully restored.');
});
} }