Files
spaceagent/pingan/deploy.js
T
2025-07-29 20:31:44 +08:00

108 lines
3.4 KiB
JavaScript

const { execSync } = require('child_process');
const path = require('path');
const fs = require('fs');
const os = require('os');
const isWindows = os.platform() === 'win32';
// 配置目标Git仓库信息
const config = {
repoUrl: 'http://git2.haodian.cn/xiaoyu/hcb-pingan.git', // 目标仓库地址
branch: 'master', // 目标分支
distPath: path.resolve(__dirname, './dist'), // 构建产物目录
// commitMessage: `Auto-deploy at ${new Date().toISOString()}`
commitMessage: `Auto-deploy at ${new Date().toLocaleString('sv-SE')}`, // 提交信息
gitPath: isWindows ? 'E:\\' : '/Users/0fun/work/', //仓库本地保存路径
dirName: 'hcb-pingan' //仓库文件夹名
};
/**
* 同步递归复制目录及其内容(覆盖目标)
* @param {string} source - 源目录路径
* @param {string} target - 目标目录路径
*/
function copyDirectorySync(source, target) {
// 检查源路径是否存在
if (!fs.existsSync(source)) {
throw new Error(`源路径不存在: ${source}`);
}
// 确保目标目录存在
if (!fs.existsSync(target)) {
fs.mkdirSync(target, { recursive: true });
}
// 读取源目录内容
const entries = fs.readdirSync(source, { withFileTypes: true });
// 处理每个文件/目录
for (const entry of entries) {
const sourcePath = path.join(source, entry.name);
const targetPath = path.join(target, entry.name);
if (entry.isDirectory()) {
// 递归复制子目录
copyDirectorySync(sourcePath, targetPath);
} else {
// 复制文件(覆盖现有文件)
fs.copyFileSync(sourcePath, targetPath);
}
}
}
// try {
// const sourceDir = './dist';
// const targetDir = 'E:\\pinan_dist';
//
// copyDirectorySync(sourceDir, targetDir);
// console.log('复制完成!');
// } catch (err) {
// console.error('复制过程中出错:', err);
// }
// process.exit(0);
try {
// 检查dist目录是否存在
if (!fs.existsSync(config.distPath)) {
throw new Error('dist目录不存在,请先执行构建命令');
}
const gitRealPath = path.join(config.gitPath, config.dirName);
console.log('仓库本地路径:', gitRealPath);
if (!fs.existsSync(config.gitPath)) {
console.log('创建git仓库目录');
fs.mkdirSync(config.gitPath, { recursive: true });
}
if (!fs.existsSync(path.join(gitRealPath, '.git'))) {
console.log('初始化git仓库');
process.chdir(config.gitPath);
execSync(
`git clone --single-branch -b master ${config.repoUrl} ${config.dirName}`
);
}
if (!fs.existsSync(path.join(gitRealPath, '.git'))) {
throw new Error('仓库初始化失败,请检查仓库路径是否正确');
}
process.chdir(gitRealPath);
console.log('更新仓库');
execSync(`git pull --rebase origin ${config.branch}`);
//同步递归复制
copyDirectorySync(config.distPath, gitRealPath);
console.log(`${config.distPath} 复制到 ${gitRealPath}`);
// process.chdir(config.distPath);
// 添加所有文件
execSync('git add .');
// 提交更改
try {
execSync(`git commit -m "${config.commitMessage}"`);
} catch (e) {
console.log(e);
console.log('没有需要提交的更改');
process.exit(0);
}
// 推送到目标仓库
execSync(`git push origin ${config.branch}`);
console.log('推送仓库成功!');
process.exit(0);
} catch (error) {
console.error('推送仓库失败:', error.message);
process.exit(1);
}