import { spawn } from 'child_process';
import fs from 'fs';
import fsPromise from 'fs/promises';
import path from 'node:path';
import process from 'node:process';
const CWD = process.cwd();
const BLOGS_GIT_REPO = 'https://gitcode.com/opengauss/blog.git';
const PULL_TARGET_PATH = path.join(CWD, '_temp/blogs');
function copyBlogFiles() {
console.log('-------------------- copy files --------------------');
return Promise.all([
fsPromise.cp(path.join(PULL_TARGET_PATH, 'app/zh/blogs'), path.join(CWD, 'app/zh/blogs'), { recursive: true }),
fsPromise.cp(path.join(PULL_TARGET_PATH, 'app/en/blogs'), path.join(CWD, 'app/en/blogs'), { recursive: true }),
]);
}
async function pullFromGit() {
return new Promise((resolve, reject) => {
console.log('-------------- pull blog data from git --------------');
const cp = spawn('git', ['clone', '-b', 'v2', BLOGS_GIT_REPO, '--depth=1', PULL_TARGET_PATH], { cwd: CWD });
const timeout = setTimeout(() => {
cp.kill();
reject('timeout');
}, 30 * 60 * 1000);
cp.stderr.on('data', (data) => {
console.log(data.toString());
});
cp.on('close', (code) => {
clearTimeout(timeout);
if (code !== 0) return reject(code);
resolve();
});
cp.on('error', (err) => {
clearTimeout(timeout);
reject(err.message);
});
});
}
export default async function main() {
console.log('sync blogs')
try {
await pullFromGit();
await copyBlogFiles();
} catch (error) {
console.error('拉取blogs失败:', error)
process.exit(1);
}
if (fs.existsSync(PULL_TARGET_PATH)) {
fs.rmSync(PULL_TARGET_PATH, { recursive: true, force: true });
}
}