@platforma-sdk/bootstrap 5.2.51 → 5.2.52
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/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/block.cjs +106 -146
- package/dist/block.cjs.map +1 -1
- package/dist/block.js +100 -125
- package/dist/block.js.map +1 -1
- package/dist/cmd-opts.cjs +87 -177
- package/dist/cmd-opts.cjs.map +1 -1
- package/dist/cmd-opts.js +87 -172
- package/dist/cmd-opts.js.map +1 -1
- package/dist/commands/create-block.cjs +19 -20
- package/dist/commands/create-block.cjs.map +1 -1
- package/dist/commands/create-block.d.ts +12 -7
- package/dist/commands/create-block.js +17 -17
- package/dist/commands/create-block.js.map +1 -1
- package/dist/commands/reset.cjs +18 -21
- package/dist/commands/reset.cjs.map +1 -1
- package/dist/commands/reset.d.ts +12 -7
- package/dist/commands/reset.js +16 -18
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/start/docker/s3.cjs +64 -67
- package/dist/commands/start/docker/s3.cjs.map +1 -1
- package/dist/commands/start/docker/s3.d.ts +32 -27
- package/dist/commands/start/docker/s3.js +61 -64
- package/dist/commands/start/docker/s3.js.map +1 -1
- package/dist/commands/start/docker.cjs +64 -67
- package/dist/commands/start/docker.cjs.map +1 -1
- package/dist/commands/start/docker.d.ts +32 -27
- package/dist/commands/start/docker.js +61 -64
- package/dist/commands/start/docker.js.map +1 -1
- package/dist/commands/start/local/s3.cjs +101 -135
- package/dist/commands/start/local/s3.cjs.map +1 -1
- package/dist/commands/start/local/s3.d.ts +36 -31
- package/dist/commands/start/local/s3.js +97 -113
- package/dist/commands/start/local/s3.js.map +1 -1
- package/dist/commands/start/local.cjs +95 -122
- package/dist/commands/start/local.cjs.map +1 -1
- package/dist/commands/start/local.d.ts +34 -29
- package/dist/commands/start/local.js +91 -100
- package/dist/commands/start/local.js.map +1 -1
- package/dist/commands/start.cjs +18 -21
- package/dist/commands/start.cjs.map +1 -1
- package/dist/commands/start.d.ts +12 -7
- package/dist/commands/start.js +16 -18
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.cjs +22 -27
- package/dist/commands/stop.cjs.map +1 -1
- package/dist/commands/stop.d.ts +12 -7
- package/dist/commands/stop.js +20 -24
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/svc/create/arg-parser.cjs +102 -172
- package/dist/commands/svc/create/arg-parser.cjs.map +1 -1
- package/dist/commands/svc/create/arg-parser.js +102 -171
- package/dist/commands/svc/create/arg-parser.js.map +1 -1
- package/dist/commands/svc/create/docker/s3.cjs +78 -96
- package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
- package/dist/commands/svc/create/docker/s3.d.ts +35 -30
- package/dist/commands/svc/create/docker/s3.js +75 -93
- package/dist/commands/svc/create/docker/s3.js.map +1 -1
- package/dist/commands/svc/create/docker.cjs +82 -103
- package/dist/commands/svc/create/docker.cjs.map +1 -1
- package/dist/commands/svc/create/docker.d.ts +35 -30
- package/dist/commands/svc/create/docker.js +79 -100
- package/dist/commands/svc/create/docker.js.map +1 -1
- package/dist/commands/svc/create/local/s3.cjs +107 -139
- package/dist/commands/svc/create/local/s3.cjs.map +1 -1
- package/dist/commands/svc/create/local/s3.d.ts +39 -34
- package/dist/commands/svc/create/local/s3.js +103 -117
- package/dist/commands/svc/create/local/s3.js.map +1 -1
- package/dist/commands/svc/create/local.cjs +101 -138
- package/dist/commands/svc/create/local.cjs.map +1 -1
- package/dist/commands/svc/create/local.d.ts +37 -32
- package/dist/commands/svc/create/local.js +97 -116
- package/dist/commands/svc/create/local.js.map +1 -1
- package/dist/commands/svc/delete.cjs +36 -38
- package/dist/commands/svc/delete.cjs.map +1 -1
- package/dist/commands/svc/delete.d.ts +16 -11
- package/dist/commands/svc/delete.js +34 -35
- package/dist/commands/svc/delete.js.map +1 -1
- package/dist/commands/svc/down.cjs +27 -30
- package/dist/commands/svc/down.cjs.map +1 -1
- package/dist/commands/svc/down.d.ts +15 -10
- package/dist/commands/svc/down.js +25 -27
- package/dist/commands/svc/down.js.map +1 -1
- package/dist/commands/svc/list.cjs +25 -29
- package/dist/commands/svc/list.cjs.map +1 -1
- package/dist/commands/svc/list.d.ts +9 -5
- package/dist/commands/svc/list.js +23 -26
- package/dist/commands/svc/list.js.map +1 -1
- package/dist/commands/svc/up.cjs +33 -49
- package/dist/commands/svc/up.cjs.map +1 -1
- package/dist/commands/svc/up.d.ts +15 -10
- package/dist/commands/svc/up.js +31 -46
- package/dist/commands/svc/up.js.map +1 -1
- package/dist/core.cjs +712 -881
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +709 -877
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +36 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +37 -33
- package/dist/index.js +35 -34
- package/dist/index.js.map +1 -1
- package/dist/package.cjs +15 -36
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +14 -14
- package/dist/package.js.map +1 -1
- package/dist/platforma.cjs +119 -148
- package/dist/platforma.cjs.map +1 -1
- package/dist/platforma.js +114 -122
- package/dist/platforma.js.map +1 -1
- package/dist/run.cjs +55 -58
- package/dist/run.cjs.map +1 -1
- package/dist/run.js +56 -56
- package/dist/run.js.map +1 -1
- package/dist/state.cjs +114 -141
- package/dist/state.cjs.map +1 -1
- package/dist/state.js +110 -139
- package/dist/state.js.map +1 -1
- package/dist/templates/compose.cjs +38 -65
- package/dist/templates/compose.cjs.map +1 -1
- package/dist/templates/compose.js +35 -63
- package/dist/templates/compose.js.map +1 -1
- package/dist/templates/pl-config.cjs +163 -165
- package/dist/templates/pl-config.cjs.map +1 -1
- package/dist/templates/pl-config.js +161 -163
- package/dist/templates/pl-config.js.map +1 -1
- package/dist/templates/types.cjs +24 -23
- package/dist/templates/types.cjs.map +1 -1
- package/dist/templates/types.js +24 -22
- package/dist/templates/types.js.map +1 -1
- package/dist/util.cjs +57 -74
- package/dist/util.cjs.map +1 -1
- package/dist/util.js +51 -72
- package/dist/util.js.map +1 -1
- package/package.json +7 -7
- package/dist/block.d.ts +0 -25
- package/dist/block.d.ts.map +0 -1
- package/dist/cmd-opts.d.ts +0 -89
- package/dist/cmd-opts.d.ts.map +0 -1
- package/dist/commands/create-block.d.ts.map +0 -1
- package/dist/commands/reset.d.ts.map +0 -1
- package/dist/commands/start/docker/s3.d.ts.map +0 -1
- package/dist/commands/start/docker.d.ts.map +0 -1
- package/dist/commands/start/local/s3.d.ts.map +0 -1
- package/dist/commands/start/local.d.ts.map +0 -1
- package/dist/commands/start.d.ts.map +0 -1
- package/dist/commands/stop.d.ts.map +0 -1
- package/dist/commands/svc/create/arg-parser.d.ts +0 -43
- package/dist/commands/svc/create/arg-parser.d.ts.map +0 -1
- package/dist/commands/svc/create/docker/s3.d.ts.map +0 -1
- package/dist/commands/svc/create/docker.d.ts.map +0 -1
- package/dist/commands/svc/create/local/s3.d.ts.map +0 -1
- package/dist/commands/svc/create/local.d.ts.map +0 -1
- package/dist/commands/svc/delete.d.ts.map +0 -1
- package/dist/commands/svc/down.d.ts.map +0 -1
- package/dist/commands/svc/list.d.ts.map +0 -1
- package/dist/commands/svc/up.d.ts.map +0 -1
- package/dist/core.d.ts +0 -105
- package/dist/core.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/package.d.ts +0 -7
- package/dist/package.d.ts.map +0 -1
- package/dist/platforma.d.ts +0 -24
- package/dist/platforma.d.ts.map +0 -1
- package/dist/run.d.ts +0 -13
- package/dist/run.d.ts.map +0 -1
- package/dist/state.d.ts +0 -63
- package/dist/state.d.ts.map +0 -1
- package/dist/templates/compose.d.ts +0 -14
- package/dist/templates/compose.d.ts.map +0 -1
- package/dist/templates/pl-config.d.ts +0 -6
- package/dist/templates/pl-config.d.ts.map +0 -1
- package/dist/templates/types.d.ts +0 -138
- package/dist/templates/types.d.ts.map +0 -1
- package/dist/util.d.ts +0 -18
- package/dist/util.d.ts.map +0 -1
package/dist/platforma.js
CHANGED
|
@@ -1,141 +1,133 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import path from
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
1
|
+
import state_default from "./state.js";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { getDefaultPlVersion } from "@milaboratories/pl-deployments";
|
|
6
|
+
import https from "https";
|
|
7
|
+
import * as tar from "tar";
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
//#region src/platforma.ts
|
|
10
|
+
const OSes = [
|
|
11
|
+
"linux",
|
|
12
|
+
"macos",
|
|
13
|
+
"windows"
|
|
14
|
+
];
|
|
10
15
|
function archiveOS(osName) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return "windows";
|
|
19
|
-
default:
|
|
20
|
-
throw new Error(`operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +
|
|
21
|
-
JSON.stringify(OSes));
|
|
22
|
-
}
|
|
16
|
+
const platform = osName ?? os.platform();
|
|
17
|
+
switch (platform) {
|
|
18
|
+
case "darwin": return "macos";
|
|
19
|
+
case "linux": return "linux";
|
|
20
|
+
case "win32": return "windows";
|
|
21
|
+
default: throw new Error(`operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` + JSON.stringify(OSes));
|
|
22
|
+
}
|
|
23
23
|
}
|
|
24
24
|
const Arches = ["amd64", "arm64"];
|
|
25
25
|
function archiveArch(archName) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
default:
|
|
33
|
-
throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +
|
|
34
|
-
JSON.stringify(Arches));
|
|
35
|
-
}
|
|
26
|
+
const arch = archName ?? os.arch();
|
|
27
|
+
switch (arch) {
|
|
28
|
+
case "arm64": return "arm64";
|
|
29
|
+
case "x64": return "amd64";
|
|
30
|
+
default: throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` + JSON.stringify(Arches));
|
|
31
|
+
}
|
|
36
32
|
}
|
|
37
33
|
function downloadArchive(logger, options) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
});
|
|
88
|
-
});
|
|
34
|
+
const version = options?.version ?? getDefaultPlVersion();
|
|
35
|
+
const showProgress = options?.showProgress ?? process.stdout.isTTY;
|
|
36
|
+
const archiveName = `pl-${version}-${archiveArch()}.tgz`;
|
|
37
|
+
const downloadURL = options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;
|
|
38
|
+
const archiveFilePath = options?.saveTo ?? state_default.binaries(archiveName);
|
|
39
|
+
if (fs.existsSync(archiveFilePath)) {
|
|
40
|
+
logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);
|
|
41
|
+
return Promise.resolve(archiveFilePath);
|
|
42
|
+
}
|
|
43
|
+
fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });
|
|
44
|
+
logger.info(`Downloading Platforma Backend archive:\n URL: ${downloadURL}\n Save to: ${archiveFilePath}`);
|
|
45
|
+
const request = https.get(downloadURL);
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
request.on("response", (response) => {
|
|
48
|
+
if (!response.statusCode) {
|
|
49
|
+
const err = /* @__PURE__ */ new Error("failed to download archive: no HTTP status code in response from server");
|
|
50
|
+
request.destroy();
|
|
51
|
+
reject(err);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (response.statusCode !== 200) {
|
|
55
|
+
const err = /* @__PURE__ */ new Error(`failed to download archive: ${response.statusCode} ${response.statusMessage}`);
|
|
56
|
+
request.destroy();
|
|
57
|
+
reject(err);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
|
|
61
|
+
let downloadedBytes = 0;
|
|
62
|
+
const archive = fs.createWriteStream(archiveFilePath);
|
|
63
|
+
response.pipe(archive);
|
|
64
|
+
response.on("data", (chunk) => {
|
|
65
|
+
downloadedBytes += chunk.length;
|
|
66
|
+
const progress = downloadedBytes / totalBytes * 100;
|
|
67
|
+
if (showProgress) process.stdout.write(` downloading: ${progress.toFixed(2)}%\r`);
|
|
68
|
+
});
|
|
69
|
+
response.on("error", (err) => {
|
|
70
|
+
fs.unlinkSync(archiveFilePath);
|
|
71
|
+
logger.error(`Failed to download Platforma Binary: ${err.message}`);
|
|
72
|
+
request.destroy();
|
|
73
|
+
reject(err);
|
|
74
|
+
});
|
|
75
|
+
archive.on("finish", () => {
|
|
76
|
+
archive.close();
|
|
77
|
+
logger.info(` ... download done.`);
|
|
78
|
+
request.destroy();
|
|
79
|
+
resolve(archiveFilePath);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
89
83
|
}
|
|
90
84
|
function extractArchive(logger, options) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
85
|
+
logger.debug("extracting archive...");
|
|
86
|
+
const version = options?.version ?? getDefaultPlVersion();
|
|
87
|
+
logger.debug(` version: '${version}'`);
|
|
88
|
+
const archiveName = `${binaryDirName({ version })}.tgz`;
|
|
89
|
+
const archivePath = options?.archivePath ?? state_default.binaries(archiveName);
|
|
90
|
+
logger.debug(` archive path: '${archivePath}'`);
|
|
91
|
+
const targetDir = options?.extractTo ?? trimExtension(archivePath);
|
|
92
|
+
logger.debug(` target dir: '${targetDir}'`);
|
|
93
|
+
if (fs.existsSync(targetDir)) {
|
|
94
|
+
logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);
|
|
95
|
+
return targetDir;
|
|
96
|
+
}
|
|
97
|
+
if (!fs.existsSync(archivePath)) {
|
|
98
|
+
const msg = `Platforma Backend binary archive not found at '${archivePath}'`;
|
|
99
|
+
logger.error(msg);
|
|
100
|
+
throw new Error(msg);
|
|
101
|
+
}
|
|
102
|
+
if (!fs.existsSync(targetDir)) {
|
|
103
|
+
logger.debug(` creating target dir '${targetDir}'`);
|
|
104
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
105
|
+
}
|
|
106
|
+
logger.info(`Unpacking Platforma Backend archive:\n Archive: ${archivePath}\n Target dir: ${targetDir}`);
|
|
107
|
+
tar.x({
|
|
108
|
+
file: archivePath,
|
|
109
|
+
cwd: targetDir,
|
|
110
|
+
gzip: true,
|
|
111
|
+
sync: true
|
|
112
|
+
});
|
|
113
|
+
logger.info(` ... unpack done.`);
|
|
114
|
+
return targetDir;
|
|
121
115
|
}
|
|
122
116
|
function getBinary(logger, options) {
|
|
123
|
-
|
|
117
|
+
return downloadArchive(logger, options).then((archivePath) => extractArchive(logger, { archivePath }));
|
|
124
118
|
}
|
|
125
119
|
function binaryDirName(options) {
|
|
126
|
-
|
|
127
|
-
return `pl-${version}-${archiveArch()}`;
|
|
120
|
+
return `pl-${options?.version ?? getDefaultPlVersion()}-${archiveArch()}`;
|
|
128
121
|
}
|
|
129
122
|
function binaryPath(version, ...p) {
|
|
130
|
-
|
|
123
|
+
return state_default.binaries(binaryDirName({ version }), ...p);
|
|
131
124
|
}
|
|
132
125
|
function trimExtension(filename) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
return filename.slice(0, lastDotIndex);
|
|
126
|
+
const lastDotIndex = filename.lastIndexOf(".");
|
|
127
|
+
if (lastDotIndex === -1) return filename;
|
|
128
|
+
return filename.slice(0, lastDotIndex);
|
|
138
129
|
}
|
|
139
130
|
|
|
140
|
-
|
|
141
|
-
|
|
131
|
+
//#endregion
|
|
132
|
+
export { binaryPath, getBinary };
|
|
133
|
+
//# sourceMappingURL=platforma.js.map
|
package/dist/platforma.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platforma.js","sources":["../src/platforma.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport https from \"https\";\nimport path from \"node:path\";\n\nimport * as tar from \"tar\";\nimport type winston from \"winston\";\nimport state from \"./state\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\n\nexport const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case \"darwin\":\n return \"macos\";\n case \"linux\":\n return \"linux\";\n case \"win32\":\n return \"windows\";\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +\n JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = [\"amd64\", \"arm64\"] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case \"arm64\":\n return \"arm64\";\n case \"x64\":\n return \"amd64\";\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +\n JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL =\n options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(\n `Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`,\n );\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on(\"response\", (response) => {\n if (!response.statusCode) {\n const err = new Error(\n \"failed to download archive: no HTTP status code in response from server\",\n );\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(\n `failed to download archive: ${response.statusCode} ${response.statusMessage}`,\n );\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers[\"content-length\"] || \"0\", 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on(\"data\", (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on(\"error\", (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on(\"finish\", () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug(\"extracting archive...\");\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`,\n );\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) =>\n extractArchive(logger, { archivePath }),\n );\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf(\".\");\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"names":["os","fs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platforma.js","names":["state"],"sources":["../src/platforma.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport https from \"https\";\nimport path from \"node:path\";\n\nimport * as tar from \"tar\";\nimport type winston from \"winston\";\nimport state from \"./state\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\n\nexport const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case \"darwin\":\n return \"macos\";\n case \"linux\":\n return \"linux\";\n case \"win32\":\n return \"windows\";\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +\n JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = [\"amd64\", \"arm64\"] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case \"arm64\":\n return \"arm64\";\n case \"x64\":\n return \"amd64\";\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +\n JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL =\n options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(\n `Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`,\n );\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on(\"response\", (response) => {\n if (!response.statusCode) {\n const err = new Error(\n \"failed to download archive: no HTTP status code in response from server\",\n );\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(\n `failed to download archive: ${response.statusCode} ${response.statusMessage}`,\n );\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers[\"content-length\"] || \"0\", 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on(\"data\", (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on(\"error\", (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on(\"finish\", () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug(\"extracting archive...\");\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`,\n );\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) =>\n extractArchive(logger, { archivePath }),\n );\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf(\".\");\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"mappings":"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"}
|
package/dist/run.cjs
CHANGED
|
@@ -1,68 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var node_child_process = require('node:child_process');
|
|
1
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
4
2
|
require('./state.cjs');
|
|
3
|
+
let node_child_process = require("node:child_process");
|
|
5
4
|
|
|
5
|
+
//#region src/run.ts
|
|
6
6
|
function runCommands(logger, cmds, options) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
executed: buffers,
|
|
33
|
-
spawned: children,
|
|
34
|
-
};
|
|
7
|
+
const buffers = [];
|
|
8
|
+
const children = [];
|
|
9
|
+
for (const cmd of cmds) {
|
|
10
|
+
const opts = {
|
|
11
|
+
cwd: cmd.workdir,
|
|
12
|
+
env: {
|
|
13
|
+
...cmd.envs,
|
|
14
|
+
...options?.env
|
|
15
|
+
},
|
|
16
|
+
...cmd.runOpts,
|
|
17
|
+
...options
|
|
18
|
+
};
|
|
19
|
+
if (cmd.async) {
|
|
20
|
+
const child = run(logger, cmd.cmd, cmd.args, opts);
|
|
21
|
+
children.push(child);
|
|
22
|
+
} else {
|
|
23
|
+
const result = runSync(logger, cmd.cmd, cmd.args, opts);
|
|
24
|
+
buffers.push(result);
|
|
25
|
+
if (result.error || result.status !== 0) break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
executed: buffers,
|
|
30
|
+
spawned: children
|
|
31
|
+
};
|
|
35
32
|
}
|
|
36
33
|
function run(logger, cmd, args, options) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
});
|
|
57
|
-
return child;
|
|
34
|
+
logger.debug(`Running:\n cmd: ${JSON.stringify([cmd, ...args])}\n wd: ${options.cwd?.toString()}`);
|
|
35
|
+
options.env = {
|
|
36
|
+
...process.env,
|
|
37
|
+
...options.env
|
|
38
|
+
};
|
|
39
|
+
logger.debug(" spawning child process");
|
|
40
|
+
const child = (0, node_child_process.spawn)(cmd, args, options);
|
|
41
|
+
let exitAfterChild = false;
|
|
42
|
+
const sigintHandler = () => {
|
|
43
|
+
child.kill("SIGINT");
|
|
44
|
+
exitAfterChild = true;
|
|
45
|
+
};
|
|
46
|
+
logger.debug(" setting up signal handler");
|
|
47
|
+
process.on("SIGINT", sigintHandler);
|
|
48
|
+
child.on("close", (code) => {
|
|
49
|
+
process.removeListener("SIGINT", sigintHandler);
|
|
50
|
+
if (exitAfterChild) process.exit(code);
|
|
51
|
+
});
|
|
52
|
+
return child;
|
|
58
53
|
}
|
|
59
54
|
function runSync(logger, cmd, args, options) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
55
|
+
logger.debug(`Running:\n cmd: ${JSON.stringify([cmd, ...args])}\n opts: ${JSON.stringify(options)}`);
|
|
56
|
+
options.env = {
|
|
57
|
+
...process.env,
|
|
58
|
+
...options.env
|
|
59
|
+
};
|
|
60
|
+
return (0, node_child_process.spawnSync)(cmd, args, options);
|
|
63
61
|
}
|
|
64
62
|
|
|
65
|
-
|
|
63
|
+
//#endregion
|
|
66
64
|
exports.runCommands = runCommands;
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=run.cjs.map
|
|
65
|
+
//# sourceMappingURL=run.cjs.map
|
package/dist/run.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.cjs","sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"
|
|
1
|
+
{"version":3,"file":"run.cjs","names":[],"sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"mappings":";;;;;AAWA,SAAgB,YACd,QACA,MACA,SACW;CACX,MAAM,UAAsC,EAAE;CAC9C,MAAM,WAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,OAAO;GACX,KAAK,IAAI;GACT,KAAK;IACH,GAAG,IAAI;IACP,GAAG,SAAS;IACb;GACD,GAAG,IAAI;GACP,GAAG;GACJ;AAED,MAAI,IAAI,OAAO;GACb,MAAM,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AAClD,YAAS,KAAK,MAAM;SACf;GACL,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AACvD,WAAQ,KAAK,OAAO;AACpB,OAAI,OAAO,SAAS,OAAO,WAAW,EACpC;;;AAKN,QAAO;EACL,UAAU;EACV,SAAS;EACV;;AAaH,SAAgB,IACd,QACA,KACA,MACA,SACc;AACd,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,UAAU,GACrF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,MAAM,2BAA2B;CACxC,MAAM,sCAAc,KAAK,MAAM,QAAQ;CACvC,IAAI,iBAA0B;CAK9B,MAAM,sBAAsB;AAC1B,QAAM,KAAK,SAAS;AACpB,mBAAiB;;AAGnB,QAAO,MAAM,8BAA8B;AAC3C,SAAQ,GAAG,UAAU,cAAc;AAEnC,OAAM,GAAG,UAAU,SAAS;AAC1B,UAAQ,eAAe,UAAU,cAAc;AAC/C,MAAI,eACF,SAAQ,KAAK,KAAK;GAEpB;AAEF,QAAO;;AAGT,SAAgB,QACd,QACA,KACA,MACA,SAC0B;AAC1B,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,KAAK,UAAU,QAAQ,GACvF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,0CAAiB,KAAK,MAAM,QAAQ"}
|
package/dist/run.js
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import "./state.js";
|
|
2
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
3
3
|
|
|
4
|
+
//#region src/run.ts
|
|
4
5
|
function runCommands(logger, cmds, options) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
executed: buffers,
|
|
31
|
-
spawned: children,
|
|
32
|
-
};
|
|
6
|
+
const buffers = [];
|
|
7
|
+
const children = [];
|
|
8
|
+
for (const cmd of cmds) {
|
|
9
|
+
const opts = {
|
|
10
|
+
cwd: cmd.workdir,
|
|
11
|
+
env: {
|
|
12
|
+
...cmd.envs,
|
|
13
|
+
...options?.env
|
|
14
|
+
},
|
|
15
|
+
...cmd.runOpts,
|
|
16
|
+
...options
|
|
17
|
+
};
|
|
18
|
+
if (cmd.async) {
|
|
19
|
+
const child = run(logger, cmd.cmd, cmd.args, opts);
|
|
20
|
+
children.push(child);
|
|
21
|
+
} else {
|
|
22
|
+
const result = runSync(logger, cmd.cmd, cmd.args, opts);
|
|
23
|
+
buffers.push(result);
|
|
24
|
+
if (result.error || result.status !== 0) break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
executed: buffers,
|
|
29
|
+
spawned: children
|
|
30
|
+
};
|
|
33
31
|
}
|
|
34
32
|
function run(logger, cmd, args, options) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
});
|
|
55
|
-
return child;
|
|
33
|
+
logger.debug(`Running:\n cmd: ${JSON.stringify([cmd, ...args])}\n wd: ${options.cwd?.toString()}`);
|
|
34
|
+
options.env = {
|
|
35
|
+
...process.env,
|
|
36
|
+
...options.env
|
|
37
|
+
};
|
|
38
|
+
logger.debug(" spawning child process");
|
|
39
|
+
const child = spawn(cmd, args, options);
|
|
40
|
+
let exitAfterChild = false;
|
|
41
|
+
const sigintHandler = () => {
|
|
42
|
+
child.kill("SIGINT");
|
|
43
|
+
exitAfterChild = true;
|
|
44
|
+
};
|
|
45
|
+
logger.debug(" setting up signal handler");
|
|
46
|
+
process.on("SIGINT", sigintHandler);
|
|
47
|
+
child.on("close", (code) => {
|
|
48
|
+
process.removeListener("SIGINT", sigintHandler);
|
|
49
|
+
if (exitAfterChild) process.exit(code);
|
|
50
|
+
});
|
|
51
|
+
return child;
|
|
56
52
|
}
|
|
57
53
|
function runSync(logger, cmd, args, options) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
logger.debug(`Running:\n cmd: ${JSON.stringify([cmd, ...args])}\n opts: ${JSON.stringify(options)}`);
|
|
55
|
+
options.env = {
|
|
56
|
+
...process.env,
|
|
57
|
+
...options.env
|
|
58
|
+
};
|
|
59
|
+
return spawnSync(cmd, args, options);
|
|
61
60
|
}
|
|
62
61
|
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
//#endregion
|
|
63
|
+
export { runCommands };
|
|
64
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"
|
|
1
|
+
{"version":3,"file":"run.js","names":[],"sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"mappings":";;;;AAWA,SAAgB,YACd,QACA,MACA,SACW;CACX,MAAM,UAAsC,EAAE;CAC9C,MAAM,WAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,OAAO;GACX,KAAK,IAAI;GACT,KAAK;IACH,GAAG,IAAI;IACP,GAAG,SAAS;IACb;GACD,GAAG,IAAI;GACP,GAAG;GACJ;AAED,MAAI,IAAI,OAAO;GACb,MAAM,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AAClD,YAAS,KAAK,MAAM;SACf;GACL,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AACvD,WAAQ,KAAK,OAAO;AACpB,OAAI,OAAO,SAAS,OAAO,WAAW,EACpC;;;AAKN,QAAO;EACL,UAAU;EACV,SAAS;EACV;;AAaH,SAAgB,IACd,QACA,KACA,MACA,SACc;AACd,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,UAAU,GACrF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,MAAM,2BAA2B;CACxC,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ;CACvC,IAAI,iBAA0B;CAK9B,MAAM,sBAAsB;AAC1B,QAAM,KAAK,SAAS;AACpB,mBAAiB;;AAGnB,QAAO,MAAM,8BAA8B;AAC3C,SAAQ,GAAG,UAAU,cAAc;AAEnC,OAAM,GAAG,UAAU,SAAS;AAC1B,UAAQ,eAAe,UAAU,cAAc;AAC/C,MAAI,eACF,SAAQ,KAAK,KAAK;GAEpB;AAEF,QAAO;;AAGT,SAAgB,QACd,QACA,KACA,MACA,SAC0B;AAC1B,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,KAAK,UAAU,QAAQ,GACvF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,UAAU,KAAK,MAAM,QAAQ"}
|