mirror of
https://github.com/whyour/qinglong.git
synced 2025-05-22 22:36:06 +08:00
128 lines
3.5 KiB
TypeScript
128 lines
3.5 KiB
TypeScript
import fs from 'fs/promises';
|
|
import path from 'path';
|
|
import os from 'os';
|
|
import Logger from './logger';
|
|
import { fileExist } from '../config/util';
|
|
import { writeFileWithLock } from '../shared/utils';
|
|
|
|
const rootPath = process.env.QL_DIR as string;
|
|
let dataPath = path.join(rootPath, 'data/');
|
|
|
|
if (process.env.QL_DATA_DIR) {
|
|
dataPath = process.env.QL_DATA_DIR.replace(/\/$/g, '');
|
|
}
|
|
|
|
const preloadPath = path.join(rootPath, 'shell/preload/');
|
|
const configPath = path.join(dataPath, 'config/');
|
|
const scriptPath = path.join(dataPath, 'scripts/');
|
|
const logPath = path.join(dataPath, 'log/');
|
|
const uploadPath = path.join(dataPath, 'upload/');
|
|
const bakPath = path.join(dataPath, 'bak/');
|
|
const samplePath = path.join(rootPath, 'sample/');
|
|
const tmpPath = path.join(logPath, '.tmp/');
|
|
const confFile = path.join(configPath, 'config.sh');
|
|
const sampleConfigFile = path.join(samplePath, 'config.sample.sh');
|
|
const sampleTaskShellFile = path.join(samplePath, 'task.sample.sh');
|
|
const sampleNotifyJsFile = path.join(samplePath, 'notify.js');
|
|
const sampleNotifyPyFile = path.join(samplePath, 'notify.py');
|
|
const scriptNotifyJsFile = path.join(scriptPath, 'sendNotify.js');
|
|
const scriptNotifyPyFile = path.join(scriptPath, 'notify.py');
|
|
const jsNotifyFile = path.join(preloadPath, '__ql_notify__.js');
|
|
const pyNotifyFile = path.join(preloadPath, '__ql_notify__.py');
|
|
const TaskBeforeFile = path.join(configPath, 'task_before.sh');
|
|
const TaskBeforeJsFile = path.join(configPath, 'task_before.js');
|
|
const TaskBeforePyFile = path.join(configPath, 'task_before.py');
|
|
const TaskAfterFile = path.join(configPath, 'task_after.sh');
|
|
const homedir = os.homedir();
|
|
const sshPath = path.resolve(homedir, '.ssh');
|
|
const sshdPath = path.join(dataPath, 'ssh.d');
|
|
const systemLogPath = path.join(dataPath, 'syslog');
|
|
|
|
const directories = [
|
|
configPath,
|
|
scriptPath,
|
|
preloadPath,
|
|
logPath,
|
|
tmpPath,
|
|
uploadPath,
|
|
sshPath,
|
|
bakPath,
|
|
sshdPath,
|
|
systemLogPath,
|
|
];
|
|
|
|
const files = [
|
|
{
|
|
target: confFile,
|
|
source: sampleConfigFile,
|
|
checkExistence: true,
|
|
},
|
|
{
|
|
target: jsNotifyFile,
|
|
source: sampleNotifyJsFile,
|
|
checkExistence: false,
|
|
},
|
|
{
|
|
target: pyNotifyFile,
|
|
source: sampleNotifyPyFile,
|
|
checkExistence: false,
|
|
},
|
|
{
|
|
target: scriptNotifyJsFile,
|
|
source: sampleNotifyJsFile,
|
|
checkExistence: true,
|
|
},
|
|
{
|
|
target: scriptNotifyPyFile,
|
|
source: sampleNotifyPyFile,
|
|
checkExistence: true,
|
|
},
|
|
{
|
|
target: TaskBeforeFile,
|
|
source: sampleTaskShellFile,
|
|
checkExistence: true,
|
|
},
|
|
{
|
|
target: TaskBeforeJsFile,
|
|
content:
|
|
'// The JavaScript code that executes before the JavaScript task execution will execute.',
|
|
checkExistence: true,
|
|
},
|
|
{
|
|
target: TaskBeforePyFile,
|
|
content:
|
|
'# The Python code that executes before the Python task execution will execute.',
|
|
checkExistence: true,
|
|
},
|
|
{
|
|
target: TaskAfterFile,
|
|
source: sampleTaskShellFile,
|
|
checkExistence: true,
|
|
},
|
|
];
|
|
|
|
export default async () => {
|
|
for (const dirPath of directories) {
|
|
if (!(await fileExist(dirPath))) {
|
|
await fs.mkdir(dirPath);
|
|
}
|
|
}
|
|
|
|
for (const item of files) {
|
|
const exists = await fileExist(item.target);
|
|
if (!item.checkExistence || !exists) {
|
|
if (!item.content && !item.source) {
|
|
throw new Error(
|
|
`Neither content nor source specified for ${item.target}`,
|
|
);
|
|
}
|
|
const content =
|
|
item.content ||
|
|
(await fs.readFile(item.source!, { encoding: 'utf-8' }));
|
|
await writeFileWithLock(item.target, content);
|
|
}
|
|
}
|
|
|
|
Logger.info('✌️ Init file down');
|
|
};
|