vps-deployer 1.0.1 → 1.0.4
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/dist/helpers/create_systemd_service.helper.d.ts +1 -1
- package/dist/helpers/create_systemd_service.helper.d.ts.map +1 -1
- package/dist/helpers/create_systemd_service.helper.js +34 -20
- package/dist/helpers/create_systemd_service.helper.js.map +1 -1
- package/dist/helpers/get_home_dir.helper.d.ts +2 -0
- package/dist/helpers/get_home_dir.helper.d.ts.map +1 -0
- package/dist/helpers/get_home_dir.helper.js +3 -0
- package/dist/helpers/get_home_dir.helper.js.map +1 -0
- package/dist/helpers/remove_systemd_service.helper.d.ts +1 -1
- package/dist/helpers/remove_systemd_service.helper.d.ts.map +1 -1
- package/dist/helpers/remove_systemd_service.helper.js +20 -7
- package/dist/helpers/remove_systemd_service.helper.js.map +1 -1
- package/dist/helpers/start_systemd_service.helper.d.ts +1 -1
- package/dist/helpers/start_systemd_service.helper.d.ts.map +1 -1
- package/dist/helpers/start_systemd_service.helper.js +21 -7
- package/dist/helpers/start_systemd_service.helper.js.map +1 -1
- package/dist/index.js +32 -50
- package/dist/index.js.map +1 -1
- package/dist/utils/cli.d.ts +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +87 -28
- package/dist/utils/cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,6 @@ type ServiceConfig = {
|
|
|
4
4
|
args: string[];
|
|
5
5
|
workingDir: string;
|
|
6
6
|
};
|
|
7
|
-
export declare const createSystemdService: ({ serviceName, execPath, args, workingDir, }: ServiceConfig) => void
|
|
7
|
+
export declare const createSystemdService: ({ serviceName, execPath, args, workingDir, }: ServiceConfig) => Promise<void>;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=create_systemd_service.helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/create_systemd_service.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/create_systemd_service.helper.ts"],"names":[],"mappings":"AAMA,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAaF,eAAO,MAAM,oBAAoB,GAAU,8CAKxC,aAAa,kBAqCf,CAAC"}
|
|
@@ -1,39 +1,53 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
2
|
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { getHomeDir } from "./get_home_dir.helper.js";
|
|
3
5
|
import { writeToLogFile } from "./logging.helper.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const runSystemctl = (args) => {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const child = spawn("systemctl", ["--user", ...args], { stdio: "inherit" });
|
|
9
|
+
child.on("error", (err) => reject(new Error(`systemctl --user ${args.join(" ")} failed: ${err.message}`)));
|
|
10
|
+
child.on("close", (code) => {
|
|
11
|
+
if (code === 0)
|
|
12
|
+
resolve();
|
|
13
|
+
else
|
|
14
|
+
reject(new Error(`systemctl --user ${args.join(" ")} exited with code ${code}`));
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export const createSystemdService = async ({ serviceName, execPath, args, workingDir, }) => {
|
|
19
|
+
const userDir = path.join(getHomeDir(), ".config", "systemd", "user");
|
|
20
|
+
const serviceFilePath = path.join(userDir, `${serviceName}.service`);
|
|
21
|
+
const execCmd = `${execPath} daemon ${args.join(" ")}`;
|
|
22
|
+
const serviceContent = `[Unit]
|
|
9
23
|
Description=VPS Deployer Service (${serviceName})
|
|
10
24
|
After=network.target
|
|
11
|
-
|
|
12
25
|
[Service]
|
|
13
26
|
Type=simple
|
|
14
27
|
ExecStart=${execCmd}
|
|
15
28
|
WorkingDirectory=${workingDir}
|
|
16
29
|
Restart=always
|
|
17
30
|
RestartSec=5
|
|
18
|
-
User=root
|
|
19
|
-
|
|
20
|
-
# logs go to journald
|
|
21
31
|
StandardOutput=journal
|
|
22
32
|
StandardError=journal
|
|
23
|
-
|
|
24
33
|
[Install]
|
|
25
|
-
WantedBy=
|
|
26
|
-
`;
|
|
34
|
+
WantedBy=default.target`;
|
|
27
35
|
try {
|
|
28
|
-
//
|
|
29
|
-
fs.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
// Ensure user systemd dir exists
|
|
37
|
+
if (!fs.existsSync(userDir)) {
|
|
38
|
+
fs.mkdirSync(userDir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
// Write service file (no sudo needed — user's own home dir)
|
|
41
|
+
fs.writeFileSync(serviceFilePath, serviceContent);
|
|
42
|
+
// Reload user systemd
|
|
43
|
+
await runSystemctl(["daemon-reload"]);
|
|
44
|
+
writeToLogFile(`Service file created at ${serviceFilePath}. Run "vps-deployer start" to enable and start it.`, {
|
|
45
|
+
level: "INFO",
|
|
46
|
+
source: "SYS",
|
|
47
|
+
});
|
|
34
48
|
}
|
|
35
49
|
catch (err) {
|
|
36
|
-
writeToLogFile(`Systemd setup failed
|
|
50
|
+
writeToLogFile(`Systemd setup failed: ${err.message}`, { level: "ERROR", source: "SYS" });
|
|
37
51
|
throw err;
|
|
38
52
|
}
|
|
39
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/create_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/create_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AASrD,MAAM,YAAY,GAAG,CAAC,IAAc,EAAiB,EAAE;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3G,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,UAAU,GACI,EAAE,EAAE;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,UAAU,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,GAAG,QAAQ,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAEvD,MAAM,cAAc,GAAG;oCACW,WAAW;;;;YAInC,OAAO;mBACA,UAAU;;;;;;wBAML,CAAC;IAEvB,IAAI,CAAC;QACH,iCAAiC;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,4DAA4D;QAC5D,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QAClD,sBAAsB;QACtB,MAAM,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACtC,cAAc,CAAC,2BAA2B,eAAe,oDAAoD,EAAE;YAC7G,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,cAAc,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1F,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_home_dir.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/get_home_dir.helper.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,cAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_home_dir.helper.js","sourceRoot":"","sources":["../../src/helpers/get_home_dir.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const removeSystemdService: (serviceName: string) => void
|
|
1
|
+
export declare const removeSystemdService: (serviceName: string) => Promise<void>;
|
|
2
2
|
//# sourceMappingURL=remove_systemd_service.helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/remove_systemd_service.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remove_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/remove_systemd_service.helper.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,oBAAoB,GAAU,aAAa,MAAM,kBAc7D,CAAC"}
|
|
@@ -1,19 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
2
|
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { getHomeDir } from "./get_home_dir.helper.js";
|
|
3
5
|
import { writeToLogFile } from "./logging.helper.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
const runSystemctl = (args) => {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const child = spawn("systemctl", ["--user", ...args], { stdio: "inherit" });
|
|
9
|
+
child.on("error", (err) => reject(new Error(`systemctl --user ${args.join(" ")} failed: ${err.message}`)));
|
|
10
|
+
child.on("close", (code) => {
|
|
11
|
+
if (code === 0)
|
|
12
|
+
resolve();
|
|
13
|
+
else
|
|
14
|
+
reject(new Error(`systemctl --user ${args.join(" ")} exited with code ${code}`));
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export const removeSystemdService = async (serviceName) => {
|
|
19
|
+
const serviceFilePath = path.join(getHomeDir(), ".config", "systemd", "user", `${serviceName}.service`);
|
|
6
20
|
try {
|
|
7
|
-
|
|
8
|
-
|
|
21
|
+
await runSystemctl(["stop", serviceName]);
|
|
22
|
+
await runSystemctl(["disable", serviceName]);
|
|
9
23
|
if (fs.existsSync(serviceFilePath)) {
|
|
10
24
|
fs.unlinkSync(serviceFilePath);
|
|
11
25
|
}
|
|
12
|
-
|
|
26
|
+
await runSystemctl(["daemon-reload"]);
|
|
13
27
|
writeToLogFile(`Service ${serviceName} removed`, { level: "INFO", source: "SYS" });
|
|
14
28
|
}
|
|
15
29
|
catch (err) {
|
|
16
|
-
console.log(`Failed to remove service: ${err.message}`);
|
|
17
30
|
writeToLogFile(`Failed to remove service: ${err.message}`, { level: "ERROR", source: "SYS" });
|
|
18
31
|
throw err;
|
|
19
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/remove_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"remove_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/remove_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,MAAM,YAAY,GAAG,CAAC,IAAc,EAAiB,EAAE;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3G,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IAChE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,UAAU,CAAC,CAAC;IACxG,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1C,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACtC,cAAc,CAAC,WAAW,WAAW,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,cAAc,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9F,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const startSystemdService: (serviceName: string) => void
|
|
1
|
+
export declare const startSystemdService: (serviceName: string) => Promise<void>;
|
|
2
2
|
//# sourceMappingURL=start_systemd_service.helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/start_systemd_service.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/start_systemd_service.helper.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,kBAsB5D,CAAC"}
|
|
@@ -1,15 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
2
|
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { getHomeDir } from "./get_home_dir.helper.js";
|
|
3
5
|
import { writeToLogFile } from "./logging.helper.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
const runSystemctl = (args) => {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const child = spawn("systemctl", ["--user", ...args], { stdio: "inherit" });
|
|
9
|
+
child.on("error", (err) => reject(new Error(`systemctl --user ${args.join(" ")} failed: ${err.message}`)));
|
|
10
|
+
child.on("close", (code) => {
|
|
11
|
+
if (code === 0)
|
|
12
|
+
resolve();
|
|
13
|
+
else
|
|
14
|
+
reject(new Error(`systemctl --user ${args.join(" ")} exited with code ${code}`));
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export const startSystemdService = async (serviceName) => {
|
|
19
|
+
const serviceFilePath = path.join(getHomeDir(), ".config", "systemd", "user", `${serviceName}.service`);
|
|
6
20
|
if (!fs.existsSync(serviceFilePath)) {
|
|
7
|
-
throw new Error(`Service file not found at ${serviceFilePath}. Run "vps-deployer -w <dir> -p <port> -s <key>" first to generate it.`);
|
|
21
|
+
throw new Error(`Service file not found at ${serviceFilePath}. Run "vps-deployer config -w <dir> -p <port> -s <key>" first to generate it.`);
|
|
8
22
|
}
|
|
9
23
|
try {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
24
|
+
await runSystemctl(["daemon-reload"]);
|
|
25
|
+
await runSystemctl(["enable", serviceName]);
|
|
26
|
+
await runSystemctl(["start", serviceName]);
|
|
13
27
|
writeToLogFile(`Service ${serviceName} enabled and started`, {
|
|
14
28
|
level: "INFO",
|
|
15
29
|
source: "SYS",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/start_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"start_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/start_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,KAAK,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,MAAM,YAAY,GAAG,CAAC,IAAc,EAAiB,EAAE;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3G,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,UAAU,CAAC,CAAC;IACxG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,6BAA6B,eAAe,+EAA+E,CAC5H,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACtC,MAAM,YAAY,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5C,MAAM,YAAY,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QAC3C,cAAc,CAAC,WAAW,WAAW,sBAAsB,EAAE;YAC3D,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,cAAc,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,EAAE;YACxD,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,8 @@ import { setPort, setSessKey, setWorkDirPath } from "./helpers/arg.helper.js";
|
|
|
4
4
|
import { createProxyAndLogConfigs } from "./helpers/config_files.helper.js";
|
|
5
5
|
import { convertDateToIST } from "./helpers/date.helper.js";
|
|
6
6
|
import { closeLogger, writeToLogFile } from "./helpers/logging.helper.js";
|
|
7
|
-
import {
|
|
7
|
+
import { setupCLI } from "./utils/cli.js";
|
|
8
8
|
import app, { initSessionAndRoutes } from "./app.js";
|
|
9
|
-
import { createSystemdService } from "./helpers/create_systemd_service.helper.js";
|
|
10
9
|
let server = null;
|
|
11
10
|
let isShuttingDown = false;
|
|
12
11
|
async function shutdown(signal) {
|
|
@@ -61,54 +60,36 @@ async function shutdown(signal) {
|
|
|
61
60
|
setTimeout(() => {
|
|
62
61
|
server?.closeAllConnections();
|
|
63
62
|
process.exit(1);
|
|
64
|
-
},
|
|
63
|
+
}, 2 * 60 * 1000);
|
|
65
64
|
}
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
createSystemdService({
|
|
95
|
-
serviceName: "vps-deployer",
|
|
96
|
-
execPath: process.argv[1] ?? "",
|
|
97
|
-
args: process.argv.slice(2),
|
|
98
|
-
workingDir: path,
|
|
99
|
-
});
|
|
100
|
-
writeToLogFile(`Systemd service file created. Run "vps-deployer start" to start the service.`, {
|
|
101
|
-
source: "SYSTEM",
|
|
102
|
-
});
|
|
103
|
-
closeDB();
|
|
104
|
-
closeLogger();
|
|
105
|
-
console.log(`Systemd service file created. Run "vps-deployer start" to start the service.`);
|
|
106
|
-
process.exit(0);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
console.log(error.message);
|
|
111
|
-
process.exit(1);
|
|
65
|
+
function startServer(port) {
|
|
66
|
+
initSessionAndRoutes(app);
|
|
67
|
+
server = app.listen(port, "0.0.0.0", () => {
|
|
68
|
+
writeToLogFile(`Server started`, {
|
|
69
|
+
source: "SERVER",
|
|
70
|
+
meta: { port },
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
server.on("connection", (socket) => {
|
|
74
|
+
socket.setTimeout(5000);
|
|
75
|
+
socket.on("timeout", () => socket.destroy());
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function initFromEnv() {
|
|
79
|
+
const mode = process.env.VPS_DEPLOYER_MODE;
|
|
80
|
+
const workDir = process.env.VPS_WORK_DIR;
|
|
81
|
+
const portStr = process.env.VPS_PORT;
|
|
82
|
+
const sessKey = process.env.VPS_SESS_KEY;
|
|
83
|
+
if (!mode || !workDir || !portStr || !sessKey)
|
|
84
|
+
return;
|
|
85
|
+
const port = Number.parseInt(portStr, 10);
|
|
86
|
+
setWorkDirPath(workDir);
|
|
87
|
+
setPort(port);
|
|
88
|
+
setSessKey(sessKey);
|
|
89
|
+
initalizeDB();
|
|
90
|
+
createProxyAndLogConfigs();
|
|
91
|
+
if (mode === "dev" || mode === "daemon") {
|
|
92
|
+
startServer(port);
|
|
112
93
|
}
|
|
113
94
|
}
|
|
114
95
|
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
@@ -129,5 +110,6 @@ process.on("unhandledRejection", (reason) => {
|
|
|
129
110
|
});
|
|
130
111
|
shutdown("unhandledRejection");
|
|
131
112
|
});
|
|
132
|
-
|
|
113
|
+
setupCLI();
|
|
114
|
+
initFromEnv();
|
|
133
115
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,GAAG,EAAE,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,IAAI,MAAM,GAAyC,IAAI,CAAC;AACxD,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,KAAK,UAAU,QAAQ,CAAC,MAAc;IACpC,IAAI,cAAc;QAAE,OAAO;IAC3B,cAAc,GAAG,IAAI,CAAC;IAEtB,cAAc,CAAC,oBAAoB,EAAE;QACnC,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;KACrD,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QAClC,MAAM,WAAW,EAAE,CAAC,CAAC,sBAAsB;QAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,cAAc,CAAC,oCAAoC,EAAE;YACnD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;QACV,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACzB,IAAI,GAAG,EAAE,CAAC;YACR,cAAc,CAAC,sBAAsB,EAAE;gBACrC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;aAC7B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,CAAC;YACH,cAAc,CAAC,4BAA4B,EAAE;gBAC3C,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YAEH,OAAO,EAAE,CAAC;YAEV,cAAc,CAAC,8BAA8B,EAAE;gBAC7C,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,cAAc,CAAC,uBAAuB,EAAE;gBACtC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;aAC3B,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,wCAAwC;IACxC,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,mBAAmB,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,GAAC,EAAE,GAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;QACxC,cAAc,CAAC,gBAAgB,EAAE;YAC/B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QACjC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACzC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;QAAE,OAAO;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IACd,UAAU,CAAC,OAAO,CAAC,CAAC;IACpB,WAAW,EAAE,CAAC;IACd,wBAAwB,EAAE,CAAC;IAC3B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAGD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,cAAc,CAAC,oBAAoB,EAAE;QACnC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,cAAc,CAAC,qBAAqB,EAAE;QACpC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,EAAE,MAAM,EAAE;KACjB,CAAC,CAAC;IACH,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,QAAQ,EAAE,CAAC;AACX,WAAW,EAAE,CAAC"}
|
package/dist/utils/cli.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const setupCLI: () => void;
|
|
2
2
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/utils/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,QAAQ,YA+FpB,CAAC"}
|
package/dist/utils/cli.js
CHANGED
|
@@ -2,6 +2,11 @@ import { Command, Option } from "commander";
|
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import { removeSystemdService } from "../helpers/remove_systemd_service.helper.js";
|
|
4
4
|
import { startSystemdService } from "../helpers/start_systemd_service.helper.js";
|
|
5
|
+
import { closeLogger } from "../helpers/logging.helper.js";
|
|
6
|
+
import { setPort, setSessKey, setWorkDirPath } from "../helpers/arg.helper.js";
|
|
7
|
+
import { closeDB, initalizeDB } from "../db/db.js";
|
|
8
|
+
import { createProxyAndLogConfigs } from "../helpers/config_files.helper.js";
|
|
9
|
+
import { createSystemdService } from "../helpers/create_systemd_service.helper.js";
|
|
5
10
|
const checkDirExists = (dirPath) => {
|
|
6
11
|
return fs.existsSync(dirPath);
|
|
7
12
|
};
|
|
@@ -14,28 +19,56 @@ const checkArgsValidation = (path, port, sessionKey) => {
|
|
|
14
19
|
if (Number.isNaN(port) || port >= 50000 || port <= 1024)
|
|
15
20
|
throw new Error(`${port} is not a valid port curr limitation is 1024-50000.`);
|
|
16
21
|
};
|
|
17
|
-
|
|
22
|
+
const parseCommonOptions = (opts) => {
|
|
23
|
+
const workingDir = opts.workingDir.toString();
|
|
24
|
+
const port = Number.parseInt(opts.port, 10);
|
|
25
|
+
const sessionKey = opts.sessionKey.toString();
|
|
26
|
+
checkArgsValidation(workingDir, port, sessionKey);
|
|
27
|
+
return { workingDir, port, sessionKey };
|
|
28
|
+
};
|
|
29
|
+
export const setupCLI = () => {
|
|
18
30
|
const program = new Command();
|
|
31
|
+
program.description("a utility that helps u auto deploy things").version("1.2.0");
|
|
32
|
+
// ---- config subcommand ----
|
|
19
33
|
program
|
|
20
|
-
.
|
|
21
|
-
.
|
|
34
|
+
.command("config")
|
|
35
|
+
.description("generate systemd service file, database, and configs")
|
|
22
36
|
.requiredOption("-w, --working-dir <dir>", "sets the working directory where all the projects will be fetched")
|
|
23
37
|
.requiredOption("-p, --port <port>", "sets the port of the server")
|
|
24
38
|
.requiredOption("-s, --session-key <sessKey>", "sets the session key of the server")
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
|
|
39
|
+
.action(async (opts) => {
|
|
40
|
+
try {
|
|
41
|
+
const { workingDir, port, sessionKey } = parseCommonOptions(opts);
|
|
42
|
+
setWorkDirPath(workingDir);
|
|
43
|
+
setPort(port);
|
|
44
|
+
setSessKey(sessionKey);
|
|
45
|
+
initalizeDB();
|
|
46
|
+
createProxyAndLogConfigs();
|
|
47
|
+
await createSystemdService({
|
|
48
|
+
serviceName: "vps-deployer",
|
|
49
|
+
execPath: process.argv[1] ?? "",
|
|
50
|
+
args: process.argv.slice(3), // skip "config"
|
|
51
|
+
workingDir,
|
|
52
|
+
});
|
|
53
|
+
console.log("Please run: loginctl enable-linger $USER to persists the server");
|
|
54
|
+
console.log(`Systemd service file created. Run "vps-deployer start" to start the service.`);
|
|
55
|
+
closeDB();
|
|
56
|
+
await closeLogger();
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
console.log(err.message);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// ---- start subcommand ----
|
|
28
65
|
program
|
|
29
66
|
.command("start")
|
|
30
67
|
.description("enable and start the vps-deployer systemd service (runs as daemon)")
|
|
31
|
-
.action(() => {
|
|
32
|
-
if (process.getuid && process.getuid() !== 0) {
|
|
33
|
-
console.error("This command must be run as root. Use sudo.");
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
68
|
+
.action(async () => {
|
|
36
69
|
try {
|
|
37
|
-
startSystemdService("vps-deployer");
|
|
38
|
-
console.log("vps-deployer service started. Check logs: journalctl -u vps-deployer -f");
|
|
70
|
+
await startSystemdService("vps-deployer");
|
|
71
|
+
console.log("vps-deployer service started. Check logs: journalctl --user -u vps-deployer -f");
|
|
39
72
|
process.exit(0);
|
|
40
73
|
}
|
|
41
74
|
catch (err) {
|
|
@@ -43,26 +76,52 @@ export const getArgs = () => {
|
|
|
43
76
|
process.exit(1);
|
|
44
77
|
}
|
|
45
78
|
});
|
|
79
|
+
// ---- uninstall subcommand ----
|
|
46
80
|
program
|
|
47
81
|
.command("uninstall")
|
|
48
|
-
.description("stop, disable, and remove the vps-deployer systemd service [
|
|
49
|
-
.action(() => {
|
|
50
|
-
|
|
51
|
-
|
|
82
|
+
.description("stop, disable, and remove the vps-deployer systemd service [Doesn't delete the working folder]")
|
|
83
|
+
.action(async () => {
|
|
84
|
+
try {
|
|
85
|
+
await removeSystemdService("vps-deployer");
|
|
86
|
+
console.log("vps-deployer service removed please remove the folder manually.");
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
console.error(`Failed to remove service: ${err.message}`);
|
|
52
91
|
process.exit(1);
|
|
53
92
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
93
|
+
});
|
|
94
|
+
// ---- dev subcommand ----
|
|
95
|
+
program
|
|
96
|
+
.command("dev")
|
|
97
|
+
.description("run in development mode (foreground, no systemd)")
|
|
98
|
+
.requiredOption("-w, --working-dir <dir>", "sets the working directory where all the projects will be fetched")
|
|
99
|
+
.requiredOption("-p, --port <port>", "sets the port of the server")
|
|
100
|
+
.requiredOption("-s, --session-key <sessKey>", "sets the session key of the server")
|
|
101
|
+
.action(async (opts) => {
|
|
102
|
+
const { workingDir, port, sessionKey } = parseCommonOptions(opts);
|
|
103
|
+
// Signal to index.ts to run in dev mode
|
|
104
|
+
process.env.VPS_DEPLOYER_MODE = "dev";
|
|
105
|
+
process.env.VPS_WORK_DIR = workingDir;
|
|
106
|
+
process.env.VPS_PORT = port.toString();
|
|
107
|
+
process.env.VPS_SESS_KEY = sessionKey;
|
|
108
|
+
});
|
|
109
|
+
// ---- daemon subcommand (hidden, used by systemd ExecStart) ----
|
|
110
|
+
program
|
|
111
|
+
.command("daemon")
|
|
112
|
+
.description("")
|
|
113
|
+
.requiredOption("-w, --working-dir <dir>", "")
|
|
114
|
+
.requiredOption("-p, --port <port>", "")
|
|
115
|
+
.requiredOption("-s, --session-key <sessKey>", "")
|
|
116
|
+
.addOption(new Option("--daemon", "").hideHelp())
|
|
117
|
+
.action(async (opts) => {
|
|
118
|
+
const { workingDir, port, sessionKey } = parseCommonOptions(opts);
|
|
119
|
+
// Signal to index.ts to run in daemon mode
|
|
120
|
+
process.env.VPS_DEPLOYER_MODE = "daemon";
|
|
121
|
+
process.env.VPS_WORK_DIR = workingDir;
|
|
122
|
+
process.env.VPS_PORT = port.toString();
|
|
123
|
+
process.env.VPS_SESS_KEY = sessionKey;
|
|
57
124
|
});
|
|
58
125
|
program.parse();
|
|
59
|
-
const requiredOptions = program.opts();
|
|
60
|
-
const workingDir = requiredOptions["workingDir"].toString();
|
|
61
|
-
const port = Number.parseInt(requiredOptions["port"], 10);
|
|
62
|
-
const sessionKey = requiredOptions['sessionKey'].toString();
|
|
63
|
-
const isDev = requiredOptions.dev ?? false;
|
|
64
|
-
const isDaemon = requiredOptions.daemon ?? false;
|
|
65
|
-
checkArgsValidation(workingDir, port, sessionKey);
|
|
66
|
-
return [workingDir, port, sessionKey, isDev, isDaemon];
|
|
67
126
|
};
|
|
68
127
|
//# sourceMappingURL=cli.js.map
|
package/dist/utils/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vps-deployer",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "A lightweight, self-hosted continuous deployment (CD) system with a built-in web UI — manages projects on your VPS, accepts GitHub webhooks for automatic deployments, and sends real-time email notifications on deployment events",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|