git-push-deploy-cli 0.1.0 → 0.2.0
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 +105 -126
- package/dist/commands/deploy.d.ts +9 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +29 -2
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts +7 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +90 -166
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +14 -3
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +156 -49
- package/dist/commands/install.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 +21 -25
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/release.d.ts +2 -0
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +7 -5
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/stage.d.ts +5 -0
- package/dist/commands/stage.d.ts.map +1 -1
- package/dist/commands/stage.js +58 -22
- package/dist/commands/stage.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 +8 -36
- package/dist/commands/status.js.map +1 -1
- package/dist/config/loader.d.ts +14 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +18 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +52 -13
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +24 -1
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +17 -16
- package/dist/index.js.map +1 -1
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +10 -0
- package/dist/utils/shell.js.map +1 -1
- package/package.json +2 -2
- 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/index.js
CHANGED
|
@@ -4,47 +4,48 @@ 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';
|
|
9
|
+
import { installCommand } from './commands/install.js';
|
|
10
10
|
const program = new Command();
|
|
11
11
|
program
|
|
12
12
|
.name('gpd')
|
|
13
|
-
.description('Git Push Deploy - CLI for git-based deployments with PM2
|
|
14
|
-
.version('0.
|
|
15
|
-
// Development commands
|
|
13
|
+
.description('Git Push Deploy - CLI for git-based deployments with PM2 support')
|
|
14
|
+
.version('0.2.0');
|
|
15
|
+
// Development commands (run on dev machine)
|
|
16
16
|
program
|
|
17
17
|
.command('stage <service>')
|
|
18
|
-
.description('Copy build artifacts to deploy repository')
|
|
18
|
+
.description('Copy build artifacts to deploy repository (creates repo if needed)')
|
|
19
19
|
.action(stageCommand);
|
|
20
20
|
program
|
|
21
21
|
.command('release <service>')
|
|
22
|
-
.description('Commit and push deploy repository')
|
|
22
|
+
.description('Commit and push deploy repository to server')
|
|
23
23
|
.option('-m, --message <message>', 'Commit message')
|
|
24
24
|
.action(releaseCommand);
|
|
25
25
|
program
|
|
26
26
|
.command('deploy <service>')
|
|
27
|
-
.description('Stage and
|
|
27
|
+
.description('Stage and push to server (hook handles install)')
|
|
28
28
|
.option('-m, --message <message>', 'Commit message')
|
|
29
|
-
.
|
|
30
|
-
|
|
29
|
+
.option('--skip-push', 'Only stage, do not push')
|
|
30
|
+
.action((service, options) => deployCommand(service, { message: options.message, skipPush: options.skipPush }));
|
|
31
|
+
// Server setup command
|
|
31
32
|
program
|
|
32
33
|
.command('init <service>')
|
|
33
|
-
.description('Initialize bare repo,
|
|
34
|
-
.option('--users <users>', 'Comma-separated list of users to add to group')
|
|
34
|
+
.description('Initialize bare repo, target dir, and post-receive hook on server')
|
|
35
35
|
.action(initCommand);
|
|
36
|
+
// Server-side command (run by post-receive hook)
|
|
36
37
|
program
|
|
37
38
|
.command('install <service>')
|
|
38
|
-
.description('
|
|
39
|
-
.option('--
|
|
40
|
-
.action(installCommand);
|
|
39
|
+
.description('Install service on server (called by post-receive hook)')
|
|
40
|
+
.option('-c, --config <path>', 'Path to .git-deploy.json')
|
|
41
|
+
.action((service, options) => installCommand(service, { configPath: options.config }));
|
|
41
42
|
program
|
|
42
43
|
.command('status')
|
|
43
|
-
.description('Show all services
|
|
44
|
+
.description('Show all configured services')
|
|
44
45
|
.action(statusCommand);
|
|
45
46
|
program
|
|
46
47
|
.command('logs <service>')
|
|
47
|
-
.description('Show
|
|
48
|
+
.description('Show PM2 logs from server via SSH')
|
|
48
49
|
.option('-n, --lines <lines>', 'Number of lines to show', '50')
|
|
49
50
|
.option('-f, --follow', 'Follow log output')
|
|
50
51
|
.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;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,4CAA4C;AAC5C,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,oEAAoE,CAAC;KACjF,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;KACnD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;KACnD,MAAM,CAAC,aAAa,EAAE,yBAAyB,CAAC;KAChD,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAElH,uBAAuB;AACvB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,iDAAiD;AACjD,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;KACzD,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAEzF,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,11 @@ 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
|
+
sshOptions?: string;
|
|
30
|
+
}): string;
|
|
24
31
|
//# 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,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAMtH"}
|
package/dist/utils/shell.js
CHANGED
|
@@ -48,4 +48,14 @@ 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
|
+
// For Windows, use double quotes and escape internal quotes
|
|
56
|
+
const escapedCmd = command.replace(/"/g, '\\"');
|
|
57
|
+
const sshOpts = options.sshOptions ? `${options.sshOptions} ` : '';
|
|
58
|
+
const sshCommand = `ssh ${sshOpts}${host} "${escapedCmd}"`;
|
|
59
|
+
return exec(sshCommand, { silent: options.silent });
|
|
60
|
+
}
|
|
51
61
|
//# 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,UAAqD,EAAE;IAC5G,4DAA4D;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,UAAU,GAAG,OAAO,OAAO,GAAG,IAAI,KAAK,UAAU,GAAG,CAAC;IAC3D,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "git-push-deploy-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Git Push Deploy - CLI for git-based deployments. Push to bare repos,
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Git Push Deploy - CLI for git-based deployments. Push to bare repos, server hook handles npm install and PM2 restart.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"git",
|
|
7
7
|
"push",
|
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"}
|
package/dist/utils/systemd.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { exec, execOutput } from './shell.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 class SystemdProcessManager {
|
|
9
|
-
name = 'systemd';
|
|
10
|
-
serviceName(name) {
|
|
11
|
-
return name.endsWith('.service') ? name : `${name}.service`;
|
|
12
|
-
}
|
|
13
|
-
restart(processName, options) {
|
|
14
|
-
const service = this.serviceName(processName);
|
|
15
|
-
exec(`sudo systemctl restart ${service}`, { silent: options?.silent });
|
|
16
|
-
}
|
|
17
|
-
list(options) {
|
|
18
|
-
// List all running services
|
|
19
|
-
return execOutput('systemctl list-units --type=service --state=running --no-pager');
|
|
20
|
-
}
|
|
21
|
-
save(options) {
|
|
22
|
-
// systemd auto-saves, but we can enable the service for boot
|
|
23
|
-
// This is a no-op for systemd as it manages state automatically
|
|
24
|
-
console.log('Note: systemd manages service state automatically.');
|
|
25
|
-
}
|
|
26
|
-
show(processName, options) {
|
|
27
|
-
const service = this.serviceName(processName);
|
|
28
|
-
return execOutput(`systemctl status ${service} --no-pager`);
|
|
29
|
-
}
|
|
30
|
-
exists(processName, options) {
|
|
31
|
-
const service = this.serviceName(processName);
|
|
32
|
-
try {
|
|
33
|
-
execOutput(`systemctl cat ${service} 2>/dev/null`);
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
asUser(user, command, options) {
|
|
41
|
-
// For systemd, we use systemctl directly (no user switching needed)
|
|
42
|
-
// The 'command' here should be a systemctl action like 'restart myapp'
|
|
43
|
-
exec(`sudo systemctl ${command}`, { silent: options?.silent });
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Enable service to start on boot
|
|
47
|
-
*/
|
|
48
|
-
enable(processName) {
|
|
49
|
-
const service = this.serviceName(processName);
|
|
50
|
-
exec(`sudo systemctl enable ${service}`, { silent: true });
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Disable service from starting on boot
|
|
54
|
-
*/
|
|
55
|
-
disable(processName) {
|
|
56
|
-
const service = this.serviceName(processName);
|
|
57
|
-
exec(`sudo systemctl disable ${service}`, { silent: true });
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Reload systemd daemon (after changing unit files)
|
|
61
|
-
*/
|
|
62
|
-
daemonReload() {
|
|
63
|
-
exec('sudo systemctl daemon-reload', { silent: true });
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Check if service is active
|
|
67
|
-
*/
|
|
68
|
-
isActive(processName) {
|
|
69
|
-
const service = this.serviceName(processName);
|
|
70
|
-
try {
|
|
71
|
-
const result = execOutput(`systemctl is-active ${service}`);
|
|
72
|
-
return result.trim() === 'active';
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=systemd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"systemd.js","sourceRoot":"","sources":["../../src/utils/systemd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,SAAS,CAAC;IAElB,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,OAA+B;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,0BAA0B,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,OAA+B;QAClC,4BAA4B;QAC5B,OAAO,UAAU,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,CAAC,OAA+B;QAClC,6DAA6D;QAC7D,gEAAgE;QAChE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,WAAmB,EAAE,OAA+B;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,oBAAoB,OAAO,aAAa,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,WAAmB,EAAE,OAA+B;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,UAAU,CAAC,iBAAiB,OAAO,cAAc,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,OAAe,EAAE,OAA+B;QACnE,oEAAoE;QACpE,uEAAuE;QACvE,IAAI,CAAC,kBAAkB,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAmB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,yBAAyB,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,WAAmB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,0BAA0B,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,WAAmB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Post-receive hook template
|
|
3
|
-
# Copy this to your bare repo: hooks/post-receive
|
|
4
|
-
# Or use: git-deploy init <service>
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
# Configuration - adjust these values
|
|
9
|
-
SERVICE="my-service"
|
|
10
|
-
TARGET_DIR="/opt/myapp/my-service"
|
|
11
|
-
LOG_FILE="/var/log/deploy-my-service.log"
|
|
12
|
-
PM2_NAME="my-service"
|
|
13
|
-
PM2_HOME="/opt/myapp/.pm2"
|
|
14
|
-
PACKAGES=("my-service")
|
|
15
|
-
MAIN_PKG="my-service"
|
|
16
|
-
USER="myapp"
|
|
17
|
-
|
|
18
|
-
log() {
|
|
19
|
-
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | sudo tee -a "$LOG_FILE"
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
log "=== Deployment started ==="
|
|
23
|
-
|
|
24
|
-
while read oldrev newrev refname; do
|
|
25
|
-
BRANCH=$(echo "$refname" | sed 's|refs/heads/||')
|
|
26
|
-
log "Received push to branch: $BRANCH"
|
|
27
|
-
|
|
28
|
-
if [ "$BRANCH" != "main" ] && [ "$BRANCH" != "master" ]; then
|
|
29
|
-
log "Ignoring non-main branch"
|
|
30
|
-
continue
|
|
31
|
-
fi
|
|
32
|
-
|
|
33
|
-
# Extract packages using git archive
|
|
34
|
-
for pkg in "${PACKAGES[@]}"; do
|
|
35
|
-
log "Extracting $pkg..."
|
|
36
|
-
git archive "$BRANCH" "$pkg/" 2>/dev/null | sudo tar -x -C "$TARGET_DIR/" || true
|
|
37
|
-
done
|
|
38
|
-
|
|
39
|
-
# Set ownership
|
|
40
|
-
sudo chown -R $USER:$USER "$TARGET_DIR"
|
|
41
|
-
|
|
42
|
-
# Install dependencies
|
|
43
|
-
log "Installing dependencies..."
|
|
44
|
-
cd "$TARGET_DIR/$MAIN_PKG"
|
|
45
|
-
sudo -u $USER npm install --omit=dev 2>&1 | sudo tee -a "$LOG_FILE"
|
|
46
|
-
|
|
47
|
-
# Restart PM2
|
|
48
|
-
log "Restarting $PM2_NAME..."
|
|
49
|
-
sudo -u $USER PM2_HOME=$PM2_HOME pm2 restart "$PM2_NAME" --no-color 2>&1 | sudo tee -a "$LOG_FILE"
|
|
50
|
-
|
|
51
|
-
log "Current status:"
|
|
52
|
-
sudo -u $USER PM2_HOME=$PM2_HOME pm2 list --no-color 2>&1 | sudo tee -a "$LOG_FILE"
|
|
53
|
-
done
|
|
54
|
-
|
|
55
|
-
log "=== Deployment completed ==="
|