import { Command } from "commander"; import path from "path"; import fs from "fs"; import grabDBDir from "../utils/grab-db-dir"; import grabDBBackupFileName from "../utils/grab-db-backup-file-name"; import chalk from "chalk"; import trimBackups from "../utils/trim-backups"; import { dumpDatabase } from "../utils/mariadb-dump-restore"; export default function () { return new Command("backup") .description("Backup MariaDB database (SQL dump)") .action(async () => { console.log(`Backing up database ...`); const config = global.CONFIG; const { backup_dir } = grabDBDir({ config }); if (!fs.existsSync(backup_dir)) { fs.mkdirSync(backup_dir, { recursive: true }); } const backup_file_name = grabDBBackupFileName({ config }); const backup_path = path.join(backup_dir, backup_file_name); try { const sql = await dumpDatabase(config); fs.writeFileSync(backup_path, sql, "utf-8"); trimBackups({ config }); console.log( `${chalk.bold(chalk.green(`DB Backup Success!`))} → ${backup_path}`, ); process.exit(0); } catch (error: any) { console.error(chalk.red(`Backup ERROR => ${error.message}`)); process.exit(1); } }); }