myt/myt-clean.js

66 lines
1.8 KiB
JavaScript
Raw Normal View History

2022-12-21 13:17:50 +00:00
const Myt = require('./myt');
const Command = require('./lib/command');
2022-05-08 20:44:40 +00:00
const fs = require('fs-extra');
const path = require('path');
2022-05-08 20:44:40 +00:00
/**
* Cleans old applied versions.
*/
class Clean extends Command {
static usage = {
description: 'Cleans old applied versions'
};
static opts = {
default: {
remote: 'production'
}
};
2022-05-08 20:44:40 +00:00
static reporter = {
versionsDeleted: function(nVersions) {
console.log(`Old versions deleted: ${nVersions}`);
},
noVersionsDeleted: 'No versions to delete.'
};
2022-12-21 13:17:50 +00:00
async run(myt, opts) {
await myt.dbConnect();
const version = await myt.fetchDbVersion() || {};
2022-05-08 20:44:40 +00:00
const number = version.number;
const oldVersions = [];
const versionDirs = await fs.readdir(opts.versionsDir);
2022-05-08 20:44:40 +00:00
for (const versionDir of versionDirs) {
2022-12-21 13:17:50 +00:00
const dirVersion = myt.parseVersionDir(versionDir);
2022-05-08 20:44:40 +00:00
if (!dirVersion) continue;
if (parseInt(dirVersion.number) < parseInt(number))
oldVersions.push(versionDir);
}
if (opts.maxOldVersions
&& oldVersions.length > opts.maxOldVersions) {
oldVersions.splice(-opts.maxOldVersions);
const archiveDir = path.join(opts.versionsDir, '.archive');
if (!await fs.pathExists(archiveDir))
await fs.mkdir(archiveDir);
2022-05-08 20:44:40 +00:00
for (const oldVersion of oldVersions)
await fs.move(
path.join(opts.versionsDir, oldVersion),
path.join(archiveDir, oldVersion)
);
2022-05-08 20:44:40 +00:00
this.emit('versionsDeleted', oldVersions.length);
2022-05-08 20:44:40 +00:00
} else
this.emit('noVersionsDeleted');
2022-05-08 20:44:40 +00:00
}
}
module.exports = Clean;
if (require.main === module)
new Myt().cli(Clean);