git-push-deploy-cli 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -121
- package/dist/commands/deploy.d.ts +2 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +23 -1
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts +6 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +23 -202
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/logs.d.ts +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +19 -25
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +3 -35
- package/dist/commands/status.js.map +1 -1
- package/dist/config/types.d.ts +7 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.js +6 -12
- package/dist/index.js.map +1 -1
- package/dist/utils/shell.d.ts +6 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +9 -0
- package/dist/utils/shell.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/install.d.ts +0 -10
- package/dist/commands/install.d.ts.map +0 -1
- package/dist/commands/install.js +0 -67
- package/dist/commands/install.js.map +0 -1
- package/dist/utils/pm2.d.ts +0 -39
- package/dist/utils/pm2.d.ts.map +0 -1
- package/dist/utils/pm2.js +0 -83
- package/dist/utils/pm2.js.map +0 -1
- package/dist/utils/process-manager.d.ts +0 -37
- package/dist/utils/process-manager.d.ts.map +0 -1
- package/dist/utils/process-manager.js +0 -17
- package/dist/utils/process-manager.js.map +0 -1
- package/dist/utils/systemd.d.ts +0 -34
- package/dist/utils/systemd.d.ts.map +0 -1
- package/dist/utils/systemd.js +0 -79
- package/dist/utils/systemd.js.map +0 -1
- package/templates/post-receive.sh +0 -55
package/dist/commands/logs.js
CHANGED
|
@@ -1,42 +1,36 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { spawn } from 'child_process';
|
|
3
3
|
import { getServiceConfig } from '../config/loader.js';
|
|
4
|
-
import { exec } from '../utils/shell.js';
|
|
5
|
-
import { exists } from '../utils/files.js';
|
|
6
4
|
/**
|
|
7
|
-
* Logs command - show
|
|
5
|
+
* Logs command - show PM2 logs from server via SSH
|
|
8
6
|
*/
|
|
9
7
|
export async function logsCommand(serviceName, options = {}) {
|
|
8
|
+
const config = getServiceConfig(serviceName);
|
|
9
|
+
const { host } = config.server;
|
|
10
|
+
const { processName, pm2Home } = config;
|
|
10
11
|
const lines = options.lines || '50';
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// Try to get config to show better error message
|
|
15
|
-
try {
|
|
16
|
-
getServiceConfig(serviceName);
|
|
17
|
-
console.log(chalk.yellow(`Log file not found: ${logFile}`));
|
|
18
|
-
console.log(chalk.gray('The service may not have been deployed yet.'));
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
console.log(chalk.red(`Unknown service: ${serviceName}`));
|
|
22
|
-
}
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
12
|
+
const pm2Env = pm2Home ? `PM2_HOME=${pm2Home}` : '';
|
|
13
|
+
console.log(chalk.blue(`Logs for ${serviceName} from ${host}...`));
|
|
14
|
+
console.log('');
|
|
25
15
|
if (options.follow) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const tail = spawn('tail', ['-f', '-n', lines, logFile], {
|
|
16
|
+
// Use spawn for follow mode with SSH
|
|
17
|
+
const sshArgs = [host, `${pm2Env} pm2 logs ${processName} --lines ${lines}`];
|
|
18
|
+
const ssh = spawn('ssh', sshArgs, {
|
|
30
19
|
stdio: 'inherit'
|
|
31
20
|
});
|
|
32
|
-
|
|
21
|
+
ssh.on('error', (error) => {
|
|
33
22
|
console.error(chalk.red(`Error: ${error.message}`));
|
|
34
23
|
});
|
|
35
24
|
}
|
|
36
25
|
else {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
// Non-follow mode: get last N lines
|
|
27
|
+
const sshArgs = [host, `${pm2Env} pm2 logs ${processName} --lines ${lines} --nostream`];
|
|
28
|
+
const ssh = spawn('ssh', sshArgs, {
|
|
29
|
+
stdio: 'inherit'
|
|
30
|
+
});
|
|
31
|
+
ssh.on('error', (error) => {
|
|
32
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
33
|
+
});
|
|
40
34
|
}
|
|
41
35
|
}
|
|
42
36
|
//# sourceMappingURL=logs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAOvD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,UAAuB,EAAE;IAC9E,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,qCAAqC;QACrC,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,aAAa,WAAW,YAAY,KAAK,EAAE,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE;YAChC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,aAAa,WAAW,YAAY,KAAK,aAAa,CAAC,CAAC;QACxF,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE;YAChC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBnD"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { loadConfig, listServices } from '../config/loader.js';
|
|
3
|
-
import { createProcessManager } from '../utils/process-manager.js';
|
|
4
|
-
import { commandExists } from '../utils/shell.js';
|
|
5
3
|
/**
|
|
6
|
-
* Status command - show all services
|
|
4
|
+
* Status command - show all configured services
|
|
7
5
|
*/
|
|
8
6
|
export async function statusCommand() {
|
|
9
7
|
console.log(chalk.blue('Service Status'));
|
|
@@ -15,10 +13,9 @@ export async function statusCommand() {
|
|
|
15
13
|
console.log(chalk.white('Configured Services:'));
|
|
16
14
|
for (const name of services) {
|
|
17
15
|
const svc = config.services[name];
|
|
18
|
-
const pmType = svc.processManager || 'pm2';
|
|
19
16
|
console.log(chalk.gray(` ${name}`));
|
|
20
|
-
console.log(chalk.gray(`
|
|
21
|
-
console.log(chalk.gray(` Process
|
|
17
|
+
console.log(chalk.gray(` Host: ${svc.server.host}`));
|
|
18
|
+
console.log(chalk.gray(` Process: ${svc.processName}`));
|
|
22
19
|
console.log(chalk.gray(` Packages: ${svc.packages.join(', ')}`));
|
|
23
20
|
console.log(chalk.gray(` Target: ${svc.server.targetDir}`));
|
|
24
21
|
}
|
|
@@ -28,34 +25,5 @@ export async function statusCommand() {
|
|
|
28
25
|
console.log(chalk.yellow('No .git-deploy.json found in current directory tree.'));
|
|
29
26
|
console.log('');
|
|
30
27
|
}
|
|
31
|
-
// Show PM2 status if available
|
|
32
|
-
if (commandExists('pm2')) {
|
|
33
|
-
console.log(chalk.white('PM2 Processes:'));
|
|
34
|
-
try {
|
|
35
|
-
const pm2 = createProcessManager('pm2');
|
|
36
|
-
const status = pm2.list();
|
|
37
|
-
console.log(status);
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
console.log(chalk.gray(' No PM2 processes running or PM2 not accessible.'));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
// Show systemd status if available
|
|
44
|
-
if (commandExists('systemctl')) {
|
|
45
|
-
console.log(chalk.white('Systemd Services (running):'));
|
|
46
|
-
try {
|
|
47
|
-
const systemd = createProcessManager('systemd');
|
|
48
|
-
const status = systemd.list();
|
|
49
|
-
// Filter to show only relevant lines
|
|
50
|
-
const lines = status.split('\n').slice(0, 10);
|
|
51
|
-
console.log(chalk.gray(lines.join('\n')));
|
|
52
|
-
if (status.split('\n').length > 10) {
|
|
53
|
-
console.log(chalk.gray(' ... (use systemctl for full list)'));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
console.log(chalk.gray(' Could not query systemd.'));
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
28
|
}
|
|
61
29
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Process manager type
|
|
3
|
+
*/
|
|
4
|
+
export type ProcessManagerType = 'pm2' | 'systemd';
|
|
2
5
|
/**
|
|
3
6
|
* Service configuration for git-deploy
|
|
4
7
|
*/
|
|
@@ -19,14 +22,12 @@ export interface ServiceConfig {
|
|
|
19
22
|
artifacts?: string[];
|
|
20
23
|
/** Server-side configuration */
|
|
21
24
|
server: {
|
|
22
|
-
/**
|
|
25
|
+
/** SSH host (user@hostname) */
|
|
26
|
+
host: string;
|
|
27
|
+
/** Where to install on server (clone of bare repo) */
|
|
23
28
|
targetDir: string;
|
|
24
29
|
/** Path to bare git repo on server */
|
|
25
30
|
bareRepo: string;
|
|
26
|
-
/** Unix user for file ownership */
|
|
27
|
-
user?: string;
|
|
28
|
-
/** Unix group (default: deploy-<service>) */
|
|
29
|
-
group?: string;
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IAEnB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,kBAAkB,CAAC;IAEpC,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,gCAAgC;IAChC,MAAM,EAAE;QACN,+BAA+B;QAC/B,IAAI,EAAE,MAAM,CAAC;QAEb,sDAAsD;QACtD,SAAS,EAAE,MAAM,CAAC;QAElB,sCAAsC;QACtC,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAK7B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,6 @@ import { stageCommand } from './commands/stage.js';
|
|
|
4
4
|
import { releaseCommand } from './commands/release.js';
|
|
5
5
|
import { deployCommand } from './commands/deploy.js';
|
|
6
6
|
import { initCommand } from './commands/init.js';
|
|
7
|
-
import { installCommand } from './commands/install.js';
|
|
8
7
|
import { statusCommand } from './commands/status.js';
|
|
9
8
|
import { logsCommand } from './commands/logs.js';
|
|
10
9
|
const program = new Command();
|
|
@@ -24,27 +23,22 @@ program
|
|
|
24
23
|
.action(releaseCommand);
|
|
25
24
|
program
|
|
26
25
|
.command('deploy <service>')
|
|
27
|
-
.description('Stage and
|
|
26
|
+
.description('Stage, release, and install on server via SSH')
|
|
28
27
|
.option('-m, --message <message>', 'Commit message')
|
|
28
|
+
.option('--skip-remote', 'Skip remote install (only stage and release)')
|
|
29
29
|
.action(deployCommand);
|
|
30
|
-
// Server
|
|
30
|
+
// Server setup command
|
|
31
31
|
program
|
|
32
32
|
.command('init <service>')
|
|
33
|
-
.description('Initialize bare repo
|
|
34
|
-
.option('--users <users>', 'Comma-separated list of users to add to group')
|
|
33
|
+
.description('Initialize bare repo and clone on server via SSH')
|
|
35
34
|
.action(initCommand);
|
|
36
|
-
program
|
|
37
|
-
.command('install <service>')
|
|
38
|
-
.description('Extract, npm install, pm2 restart (used by post-receive hook)')
|
|
39
|
-
.option('--ref <ref>', 'Git ref to deploy (branch or tag)', 'main')
|
|
40
|
-
.action(installCommand);
|
|
41
35
|
program
|
|
42
36
|
.command('status')
|
|
43
|
-
.description('Show all services
|
|
37
|
+
.description('Show all configured services')
|
|
44
38
|
.action(statusCommand);
|
|
45
39
|
program
|
|
46
40
|
.command('logs <service>')
|
|
47
|
-
.description('Show
|
|
41
|
+
.description('Show PM2 logs from server via SSH')
|
|
48
42
|
.option('-n, --lines <lines>', 'Number of lines to show', '50')
|
|
49
43
|
.option('-f, --follow', 'Follow log output')
|
|
50
44
|
.action(logsCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,0EAA0E,CAAC;KACvF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,uBAAuB;AACvB,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;KACnD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;KACnD,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;KACvE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,uBAAuB;AACvB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,IAAI,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC3C,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/utils/shell.d.ts
CHANGED
|
@@ -21,4 +21,10 @@ export declare function isRoot(): boolean;
|
|
|
21
21
|
* Get current username
|
|
22
22
|
*/
|
|
23
23
|
export declare function getCurrentUser(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Execute a command on a remote host via SSH
|
|
26
|
+
*/
|
|
27
|
+
export declare function sshExec(host: string, command: string, options?: {
|
|
28
|
+
silent?: boolean;
|
|
29
|
+
}): string;
|
|
24
30
|
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAc9F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAc9F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAKjG"}
|
package/dist/utils/shell.js
CHANGED
|
@@ -48,4 +48,13 @@ export function isRoot() {
|
|
|
48
48
|
export function getCurrentUser() {
|
|
49
49
|
return process.env.USER || process.env.USERNAME || 'unknown';
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Execute a command on a remote host via SSH
|
|
53
|
+
*/
|
|
54
|
+
export function sshExec(host, command, options = {}) {
|
|
55
|
+
// Escape single quotes in command for SSH
|
|
56
|
+
const escapedCmd = command.replace(/'/g, "'\\''");
|
|
57
|
+
const sshCommand = `ssh ${host} '${escapedCmd}'`;
|
|
58
|
+
return exec(sshCommand, { silent: options.silent });
|
|
59
|
+
}
|
|
51
60
|
//# sourceMappingURL=shell.js.map
|
package/dist/utils/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,UAA8C,EAAE;IACpF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC,CAAC;QACH,OAAO,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YAChD,OAAQ,KAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,GAAY;IACtD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,QAAQ,CAAC,SAAS,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;AAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,UAA8C,EAAE;IACpF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC,CAAC;QACH,OAAO,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YAChD,OAAQ,KAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,GAAY;IACtD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,QAAQ,CAAC,SAAS,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAe,EAAE,UAAgC,EAAE;IACvF,0CAA0C;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,UAAU,GAAG,CAAC;IACjD,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
interface InstallOptions {
|
|
2
|
-
ref?: string;
|
|
3
|
-
}
|
|
4
|
-
/**
|
|
5
|
-
* Install command - extract, npm install, restart process
|
|
6
|
-
* This is called by the post-receive hook
|
|
7
|
-
*/
|
|
8
|
-
export declare function installCommand(serviceName: string, options?: InstallOptions): Promise<void>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DrG"}
|
package/dist/commands/install.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { readFileSync } from 'fs';
|
|
3
|
-
import { getServiceConfig } from '../config/loader.js';
|
|
4
|
-
import { exec } from '../utils/shell.js';
|
|
5
|
-
import { exists, joinPath } from '../utils/files.js';
|
|
6
|
-
import { createProcessManager } from '../utils/process-manager.js';
|
|
7
|
-
/**
|
|
8
|
-
* Install command - extract, npm install, restart process
|
|
9
|
-
* This is called by the post-receive hook
|
|
10
|
-
*/
|
|
11
|
-
export async function installCommand(serviceName, options = {}) {
|
|
12
|
-
const ref = options.ref || 'main';
|
|
13
|
-
console.log(chalk.blue(`Installing ${serviceName} (ref: ${ref})...`));
|
|
14
|
-
const config = getServiceConfig(serviceName);
|
|
15
|
-
const { server, packages, mainPackage, processName, processManager: pmType = 'pm2', pm2Home } = config;
|
|
16
|
-
// Create process manager instance
|
|
17
|
-
const pm = createProcessManager(pmType);
|
|
18
|
-
// Extract each package using git archive
|
|
19
|
-
for (const pkg of packages) {
|
|
20
|
-
console.log(chalk.gray(` Extracting ${pkg}...`));
|
|
21
|
-
try {
|
|
22
|
-
exec(`git archive ${ref} ${pkg}/ | tar -x -C ${server.targetDir}/`, {
|
|
23
|
-
cwd: server.bareRepo,
|
|
24
|
-
silent: true
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
console.log(chalk.yellow(` Warning: Could not extract ${pkg}`));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// Set ownership
|
|
32
|
-
if (server.user) {
|
|
33
|
-
exec(`chown -R ${server.user}:${server.user} ${server.targetDir}`, { silent: true });
|
|
34
|
-
}
|
|
35
|
-
// Install dependencies
|
|
36
|
-
const mainPkgPath = joinPath(server.targetDir, mainPackage);
|
|
37
|
-
console.log(chalk.gray(` Installing dependencies in ${mainPackage}...`));
|
|
38
|
-
if (server.user) {
|
|
39
|
-
exec(`sudo -u ${server.user} npm install --omit=dev`, { cwd: mainPkgPath });
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
exec('npm install --omit=dev', { cwd: mainPkgPath });
|
|
43
|
-
}
|
|
44
|
-
// Restart process
|
|
45
|
-
console.log(chalk.gray(` Restarting ${pm.name} process ${processName}...`));
|
|
46
|
-
if (server.user) {
|
|
47
|
-
pm.asUser(server.user, `restart ${processName}`, { home: pm2Home });
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
pm.restart(processName, { home: pm2Home });
|
|
51
|
-
}
|
|
52
|
-
// Get version from package.json
|
|
53
|
-
try {
|
|
54
|
-
const pkgJsonPath = joinPath(mainPkgPath, 'package.json');
|
|
55
|
-
if (exists(pkgJsonPath)) {
|
|
56
|
-
const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
57
|
-
console.log(chalk.green(`✓ Installed ${serviceName} v${pkgJson.version}`));
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
console.log(chalk.green(`✓ Installed ${serviceName}`));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
console.log(chalk.green(`✓ Installed ${serviceName}`));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=install.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/pm2.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { ProcessManager, ProcessManagerOptions } from './process-manager.js';
|
|
2
|
-
/**
|
|
3
|
-
* PM2 Process Manager implementation
|
|
4
|
-
*/
|
|
5
|
-
export declare class PM2ProcessManager implements ProcessManager {
|
|
6
|
-
readonly name = "pm2";
|
|
7
|
-
private buildEnv;
|
|
8
|
-
restart(processName: string, options?: ProcessManagerOptions): void;
|
|
9
|
-
list(options?: ProcessManagerOptions): string;
|
|
10
|
-
save(options?: ProcessManagerOptions): void;
|
|
11
|
-
show(processName: string, options?: ProcessManagerOptions): string;
|
|
12
|
-
exists(processName: string, options?: ProcessManagerOptions): boolean;
|
|
13
|
-
asUser(user: string, command: string, options?: ProcessManagerOptions): void;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Restart PM2 process
|
|
17
|
-
*/
|
|
18
|
-
export declare function pm2Restart(processName: string, pm2Home?: string): void;
|
|
19
|
-
/**
|
|
20
|
-
* Get PM2 process list
|
|
21
|
-
*/
|
|
22
|
-
export declare function pm2List(pm2Home?: string): string;
|
|
23
|
-
/**
|
|
24
|
-
* Save PM2 process list
|
|
25
|
-
*/
|
|
26
|
-
export declare function pm2Save(pm2Home?: string): void;
|
|
27
|
-
/**
|
|
28
|
-
* Get PM2 process info
|
|
29
|
-
*/
|
|
30
|
-
export declare function pm2Show(processName: string, pm2Home?: string): string;
|
|
31
|
-
/**
|
|
32
|
-
* Check if PM2 process exists
|
|
33
|
-
*/
|
|
34
|
-
export declare function pm2ProcessExists(processName: string, pm2Home?: string): boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Run PM2 command as specific user (for server-side)
|
|
37
|
-
*/
|
|
38
|
-
export declare function pm2AsUser(user: string, command: string, pm2Home?: string): void;
|
|
39
|
-
//# sourceMappingURL=pm2.d.ts.map
|
package/dist/utils/pm2.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pm2.d.ts","sourceRoot":"","sources":["../../src/utils/pm2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,QAAQ,CAAC,IAAI,SAAS;IAEtB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAKnE,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM;IAK7C,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAK3C,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM;IAKlE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO;IASrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;CAI7E;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAGtE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAG/E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAG/E"}
|
package/dist/utils/pm2.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { exec, execOutput } from './shell.js';
|
|
2
|
-
/**
|
|
3
|
-
* PM2 Process Manager implementation
|
|
4
|
-
*/
|
|
5
|
-
export class PM2ProcessManager {
|
|
6
|
-
name = 'pm2';
|
|
7
|
-
buildEnv(options) {
|
|
8
|
-
return options?.home ? `PM2_HOME=${options.home} ` : '';
|
|
9
|
-
}
|
|
10
|
-
restart(processName, options) {
|
|
11
|
-
const env = this.buildEnv(options);
|
|
12
|
-
exec(`${env}pm2 restart ${processName} --no-color`, { silent: options?.silent });
|
|
13
|
-
}
|
|
14
|
-
list(options) {
|
|
15
|
-
const env = this.buildEnv(options);
|
|
16
|
-
return execOutput(`${env}pm2 list --no-color`);
|
|
17
|
-
}
|
|
18
|
-
save(options) {
|
|
19
|
-
const env = this.buildEnv(options);
|
|
20
|
-
exec(`${env}pm2 save`, { silent: true });
|
|
21
|
-
}
|
|
22
|
-
show(processName, options) {
|
|
23
|
-
const env = this.buildEnv(options);
|
|
24
|
-
return execOutput(`${env}pm2 show ${processName} --no-color`);
|
|
25
|
-
}
|
|
26
|
-
exists(processName, options) {
|
|
27
|
-
try {
|
|
28
|
-
this.show(processName, options);
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
asUser(user, command, options) {
|
|
36
|
-
const env = this.buildEnv(options);
|
|
37
|
-
exec(`sudo -u ${user} ${env}pm2 ${command} --no-color`, { silent: options?.silent });
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Legacy function exports for backward compatibility
|
|
41
|
-
/**
|
|
42
|
-
* Restart PM2 process
|
|
43
|
-
*/
|
|
44
|
-
export function pm2Restart(processName, pm2Home) {
|
|
45
|
-
const pm2 = new PM2ProcessManager();
|
|
46
|
-
pm2.restart(processName, { home: pm2Home });
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Get PM2 process list
|
|
50
|
-
*/
|
|
51
|
-
export function pm2List(pm2Home) {
|
|
52
|
-
const pm2 = new PM2ProcessManager();
|
|
53
|
-
return pm2.list({ home: pm2Home });
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Save PM2 process list
|
|
57
|
-
*/
|
|
58
|
-
export function pm2Save(pm2Home) {
|
|
59
|
-
const pm2 = new PM2ProcessManager();
|
|
60
|
-
pm2.save({ home: pm2Home });
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get PM2 process info
|
|
64
|
-
*/
|
|
65
|
-
export function pm2Show(processName, pm2Home) {
|
|
66
|
-
const pm2 = new PM2ProcessManager();
|
|
67
|
-
return pm2.show(processName, { home: pm2Home });
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Check if PM2 process exists
|
|
71
|
-
*/
|
|
72
|
-
export function pm2ProcessExists(processName, pm2Home) {
|
|
73
|
-
const pm2 = new PM2ProcessManager();
|
|
74
|
-
return pm2.exists(processName, { home: pm2Home });
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Run PM2 command as specific user (for server-side)
|
|
78
|
-
*/
|
|
79
|
-
export function pm2AsUser(user, command, pm2Home) {
|
|
80
|
-
const pm2 = new PM2ProcessManager();
|
|
81
|
-
pm2.asUser(user, command, { home: pm2Home });
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=pm2.js.map
|
package/dist/utils/pm2.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pm2.js","sourceRoot":"","sources":["../../src/utils/pm2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Abstract interface for process managers (PM2, systemd, etc.)
|
|
3
|
-
*/
|
|
4
|
-
export interface ProcessManager {
|
|
5
|
-
/** Name of the process manager */
|
|
6
|
-
readonly name: string;
|
|
7
|
-
/** Restart a process by name */
|
|
8
|
-
restart(processName: string, options?: ProcessManagerOptions): void;
|
|
9
|
-
/** Get status/list of processes */
|
|
10
|
-
list(options?: ProcessManagerOptions): string;
|
|
11
|
-
/** Save current process state (for resurrection after reboot) */
|
|
12
|
-
save(options?: ProcessManagerOptions): void;
|
|
13
|
-
/** Get info about a specific process */
|
|
14
|
-
show(processName: string, options?: ProcessManagerOptions): string;
|
|
15
|
-
/** Check if a process exists */
|
|
16
|
-
exists(processName: string, options?: ProcessManagerOptions): boolean;
|
|
17
|
-
/** Run command as specific user (for server-side) */
|
|
18
|
-
asUser(user: string, command: string, options?: ProcessManagerOptions): void;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Options for process manager commands
|
|
22
|
-
*/
|
|
23
|
-
export interface ProcessManagerOptions {
|
|
24
|
-
/** Home directory for the process manager */
|
|
25
|
-
home?: string;
|
|
26
|
-
/** Run silently (no output) */
|
|
27
|
-
silent?: boolean;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Process manager types
|
|
31
|
-
*/
|
|
32
|
-
export type ProcessManagerType = 'pm2' | 'systemd';
|
|
33
|
-
/**
|
|
34
|
-
* Factory function to create a process manager instance
|
|
35
|
-
*/
|
|
36
|
-
export declare function createProcessManager(type: ProcessManagerType): ProcessManager;
|
|
37
|
-
//# sourceMappingURL=process-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/utils/process-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAEpE,mCAAmC;IACnC,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC;IAE9C,iEAAiE;IACjE,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAE5C,wCAAwC;IACxC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC;IAEnE,gCAAgC;IAChC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAEtE,qDAAqD;IACrD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC9E;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAY7E"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Factory function to create a process manager instance
|
|
3
|
-
*/
|
|
4
|
-
export function createProcessManager(type) {
|
|
5
|
-
switch (type) {
|
|
6
|
-
case 'pm2':
|
|
7
|
-
// Lazy import to avoid loading unused modules
|
|
8
|
-
const { PM2ProcessManager } = require('./pm2.js');
|
|
9
|
-
return new PM2ProcessManager();
|
|
10
|
-
case 'systemd':
|
|
11
|
-
const { SystemdProcessManager } = require('./systemd.js');
|
|
12
|
-
return new SystemdProcessManager();
|
|
13
|
-
default:
|
|
14
|
-
throw new Error(`Unknown process manager type: ${type}`);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=process-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/utils/process-manager.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,8CAA8C;YAC9C,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,KAAK,SAAS;YACZ,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1D,OAAO,IAAI,qBAAqB,EAAE,CAAC;QACrC;YACE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
|
package/dist/utils/systemd.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { ProcessManager, ProcessManagerOptions } from './process-manager.js';
|
|
2
|
-
/**
|
|
3
|
-
* Systemd Process Manager implementation
|
|
4
|
-
*
|
|
5
|
-
* Uses systemctl to manage services. The processName is expected to be
|
|
6
|
-
* a systemd service name (e.g., "myapp.service" or just "myapp").
|
|
7
|
-
*/
|
|
8
|
-
export declare class SystemdProcessManager implements ProcessManager {
|
|
9
|
-
readonly name = "systemd";
|
|
10
|
-
private serviceName;
|
|
11
|
-
restart(processName: string, options?: ProcessManagerOptions): void;
|
|
12
|
-
list(options?: ProcessManagerOptions): string;
|
|
13
|
-
save(options?: ProcessManagerOptions): void;
|
|
14
|
-
show(processName: string, options?: ProcessManagerOptions): string;
|
|
15
|
-
exists(processName: string, options?: ProcessManagerOptions): boolean;
|
|
16
|
-
asUser(user: string, command: string, options?: ProcessManagerOptions): void;
|
|
17
|
-
/**
|
|
18
|
-
* Enable service to start on boot
|
|
19
|
-
*/
|
|
20
|
-
enable(processName: string): void;
|
|
21
|
-
/**
|
|
22
|
-
* Disable service from starting on boot
|
|
23
|
-
*/
|
|
24
|
-
disable(processName: string): void;
|
|
25
|
-
/**
|
|
26
|
-
* Reload systemd daemon (after changing unit files)
|
|
27
|
-
*/
|
|
28
|
-
daemonReload(): void;
|
|
29
|
-
/**
|
|
30
|
-
* Check if service is active
|
|
31
|
-
*/
|
|
32
|
-
isActive(processName: string): boolean;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=systemd.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"systemd.d.ts","sourceRoot":"","sources":["../../src/utils/systemd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlF;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,QAAQ,CAAC,IAAI,aAAa;IAE1B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAKnE,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM;IAK7C,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAM3C,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM;IAKlE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO;IAUrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAM5E;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKjC;;OAEG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CASvC"}
|