mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-10 07:48:37 +01:00
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
|
|
import { Client, ScpClient } from 'node-scp';
|
|
import { NodeSSH } from 'node-ssh'
|
|
import fs from 'fs-extra';
|
|
import { REMOTE_HOST_PRODUCTION, REMOTE_HOST_TESTMODE, IDENTITY_FILE } from '../.config'
|
|
|
|
|
|
export const MODES_ARRAY = ['production', 'testmode', 'testlive'] as const;
|
|
|
|
export type MODE = typeof MODES_ARRAY[number];
|
|
|
|
export class DeployHelper {
|
|
|
|
private static scpClient: ScpClient;
|
|
private static sshClient: NodeSSH;
|
|
|
|
static getMode(): MODE {
|
|
const argvMode = process.argv[2];
|
|
if (!argvMode) {
|
|
console.error('use', MODES_ARRAY.map(e => `--${e}`).join(' or '));
|
|
process.exit(0);
|
|
}
|
|
const mode = argvMode.replace('--', '');
|
|
if (!MODES_ARRAY.includes(mode as any)) {
|
|
console.error('use', MODES_ARRAY.map(e => `--${e}`).join(' or '));
|
|
process.exit(0);
|
|
}
|
|
return mode as MODE;
|
|
}
|
|
|
|
static getArgAt(index: number) {
|
|
return process.argv[3 + index];
|
|
}
|
|
|
|
static async connect() {
|
|
this.scpClient = await Client({
|
|
host: this.getMode() === 'production' ? REMOTE_HOST_PRODUCTION : REMOTE_HOST_TESTMODE,
|
|
username: 'root',
|
|
privateKey: fs.readFileSync(IDENTITY_FILE)
|
|
})
|
|
this.sshClient = new NodeSSH();
|
|
await this.sshClient.connect({
|
|
host: this.getMode() === 'production' ? REMOTE_HOST_PRODUCTION : REMOTE_HOST_TESTMODE,
|
|
username: 'root',
|
|
privateKeyPath: IDENTITY_FILE
|
|
});
|
|
}
|
|
|
|
static async execute(command: string) {
|
|
const res = await this.sshClient.execCommand(command);
|
|
console.log(res);
|
|
}
|
|
|
|
static instances() {
|
|
return { scp: this.scpClient, ssh: this.sshClient }
|
|
}
|
|
|
|
}
|
|
|