import datasquirel from "@moduletrace/datasquirel"; import { execSync, type ExecSyncOptions } from "child_process"; import path from "path"; const BACKUP_DIR = `/root/backups`; const BACKUP_FILE_NAME = "backup.tar.xz"; const BACKUP_DIR_BACKUP = path.join(BACKUP_DIR, `.backup`); const DOCKER_VOLUMES_DIR = "/var/lib/docker/volumes"; const DOCKER_VOLUMES_BACKUP_DIR = path.join( BACKUP_DIR_BACKUP, `docker`, `volumes`, ); const BACKUP_FILE_TAR = path.join(BACKUP_DIR, BACKUP_FILE_NAME); const RSYNC_IGNORE_FILE = `/root/.coderank/server/rsync-ignore.txt`; const DSQL_FOLDER = `/projects/coderank/archives/servers`; const DSQL_FILE_NAME = `${process.env.CODERANK_HOST_DOMAIN}.tar.xz`; const execOpts: ExecSyncOptions = { stdio: ["inherit", "inherit", "ignore"], }; execSync(`rm -rf ${path.join(BACKUP_DIR, BACKUP_FILE_NAME)}`, execOpts); execSync(`mkdir -p ${DOCKER_VOLUMES_BACKUP_DIR}`, execOpts); let syncDockerVolsCmd = `rsync -avz --delete --exclude-from="${RSYNC_IGNORE_FILE}"`; syncDockerVolsCmd += ` ${DOCKER_VOLUMES_DIR}/ ${DOCKER_VOLUMES_BACKUP_DIR}/`; execSync(syncDockerVolsCmd, execOpts); execSync(`tar -czvf ${BACKUP_FILE_TAR} ${BACKUP_DIR_BACKUP}`, execOpts); const file = Bun.file(BACKUP_FILE_TAR); const buffer = await file.arrayBuffer(); const base64 = Buffer.from(buffer).toString("base64"); await datasquirel.api.media.add({ media: [ { fileName: DSQL_FILE_NAME, fileType: "tar.xz", fileBase64: base64, private: true, privateFolder: true, }, ], type: "file", folder: DSQL_FOLDER, update: true, }); datasquirel.utils.debugLog({ log: `Media Uploaded Successfully!`, addTime: true, });