Files
PicHost/server/cli/backup-export.mjs

48 lines
1.3 KiB
JavaScript

/**
* Export a full PicHost site backup (.phost.tar.gz).
*
* Usage:
* node server/cli/backup-export.mjs
*
* Docker:
* docker exec pichost backup-export
*/
import { readFileSync } from 'node:fs'
import { join } from 'node:path'
import { loadServerModule } from './backup-cli-loader.mjs'
const { ensureBackupSchema } = loadServerModule('utils/backup/schema.ts')
const { createBackupJob, getBackupJob } = loadServerModule('utils/backup/jobs.ts')
const { runFullExportJob } = loadServerModule('utils/backup/full-export.ts')
function readAppVersion() {
try {
const pkg = JSON.parse(readFileSync(join(process.cwd(), 'package.json'), 'utf8'))
return String(pkg.version ?? '0.0.0')
} catch {
return '0.0.0'
}
}
async function main() {
ensureBackupSchema()
const job = createBackupJob({
type: 'full_export',
message: 'CLI 导出'
})
await runFullExportJob(job.id, readAppVersion())
const done = getBackupJob(job.id)
if (!done || done.status !== 'done') {
console.error(`[PicHost] Export failed: ${done?.error ?? done?.message ?? 'unknown error'}`)
process.exit(1)
}
console.log(`[PicHost] Export complete: ${done.outputPath}`)
}
main().catch((error) => {
console.error(`[PicHost] Export error: ${error instanceof Error ? error.message : String(error)}`)
process.exit(1)
})