@milaboratories/pl-deployments 2.15.7 → 2.15.8
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 +18 -5
- package/dist/common/os_and_arch.cjs +19 -19
- package/dist/common/os_and_arch.cjs.map +1 -1
- package/dist/common/os_and_arch.js +19 -19
- package/dist/common/os_and_arch.js.map +1 -1
- package/dist/common/pl_binary.cjs +9 -9
- package/dist/common/pl_binary.cjs.map +1 -1
- package/dist/common/pl_binary.d.ts +6 -6
- package/dist/common/pl_binary.d.ts.map +1 -1
- package/dist/common/pl_binary.js +9 -9
- package/dist/common/pl_binary.js.map +1 -1
- package/dist/common/pl_binary_download.cjs +16 -16
- package/dist/common/pl_binary_download.cjs.map +1 -1
- package/dist/common/pl_binary_download.d.ts +6 -6
- package/dist/common/pl_binary_download.d.ts.map +1 -1
- package/dist/common/pl_binary_download.js +16 -16
- package/dist/common/pl_binary_download.js.map +1 -1
- package/dist/common/pl_version.cjs +1 -1
- package/dist/common/pl_version.cjs.map +1 -1
- package/dist/common/pl_version.js +1 -1
- package/dist/common/pl_version.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/local/options.d.ts +4 -4
- package/dist/local/pid.cjs +1 -1
- package/dist/local/pid.cjs.map +1 -1
- package/dist/local/pid.js +1 -1
- package/dist/local/pid.js.map +1 -1
- package/dist/local/pl.cjs +26 -26
- package/dist/local/pl.cjs.map +1 -1
- package/dist/local/pl.d.ts +8 -8
- package/dist/local/pl.d.ts.map +1 -1
- package/dist/local/pl.js +26 -26
- package/dist/local/pl.js.map +1 -1
- package/dist/local/process.cjs +16 -16
- package/dist/local/process.cjs.map +1 -1
- package/dist/local/process.d.ts +2 -2
- package/dist/local/process.js +16 -16
- package/dist/local/process.js.map +1 -1
- package/dist/local/trace.cjs.map +1 -1
- package/dist/local/trace.d.ts +1 -1
- package/dist/local/trace.js.map +1 -1
- package/dist/package.json.cjs +2 -1
- package/dist/package.json.cjs.map +1 -1
- package/dist/package.json.js +2 -1
- package/dist/package.json.js.map +1 -1
- package/dist/ssh/__tests__/common-utils.d.ts +2 -2
- package/dist/ssh/__tests__/common-utils.d.ts.map +1 -1
- package/dist/ssh/connection_info.cjs +13 -7
- package/dist/ssh/connection_info.cjs.map +1 -1
- package/dist/ssh/connection_info.d.ts +1 -1
- package/dist/ssh/connection_info.d.ts.map +1 -1
- package/dist/ssh/connection_info.js +13 -7
- package/dist/ssh/connection_info.js.map +1 -1
- package/dist/ssh/pl.cjs +79 -76
- package/dist/ssh/pl.cjs.map +1 -1
- package/dist/ssh/pl.d.ts +18 -18
- package/dist/ssh/pl.d.ts.map +1 -1
- package/dist/ssh/pl.js +79 -76
- package/dist/ssh/pl.js.map +1 -1
- package/dist/ssh/pl_paths.cjs +13 -13
- package/dist/ssh/pl_paths.cjs.map +1 -1
- package/dist/ssh/pl_paths.d.ts.map +1 -1
- package/dist/ssh/pl_paths.js +13 -13
- package/dist/ssh/pl_paths.js.map +1 -1
- package/dist/ssh/ssh.cjs +43 -40
- package/dist/ssh/ssh.cjs.map +1 -1
- package/dist/ssh/ssh.d.ts +9 -9
- package/dist/ssh/ssh.d.ts.map +1 -1
- package/dist/ssh/ssh.js +43 -40
- package/dist/ssh/ssh.js.map +1 -1
- package/dist/ssh/ssh_errors.cjs +7 -5
- package/dist/ssh/ssh_errors.cjs.map +1 -1
- package/dist/ssh/ssh_errors.d.ts.map +1 -1
- package/dist/ssh/ssh_errors.js +7 -5
- package/dist/ssh/ssh_errors.js.map +1 -1
- package/dist/ssh/supervisord.cjs +15 -13
- package/dist/ssh/supervisord.cjs.map +1 -1
- package/dist/ssh/supervisord.d.ts +2 -2
- package/dist/ssh/supervisord.d.ts.map +1 -1
- package/dist/ssh/supervisord.js +15 -13
- package/dist/ssh/supervisord.js.map +1 -1
- package/package.json +37 -36
- package/src/common/os_and_arch.ts +19 -19
- package/src/common/pl_binary.ts +30 -27
- package/src/common/pl_binary_download.ts +80 -59
- package/src/common/pl_version.ts +2 -2
- package/src/index.ts +5 -5
- package/src/local/config.test.yaml +19 -19
- package/src/local/options.ts +4 -4
- package/src/local/pid.ts +4 -4
- package/src/local/pl.test.ts +245 -253
- package/src/local/pl.ts +45 -50
- package/src/local/process.ts +21 -21
- package/src/local/trace.ts +1 -1
- package/src/ssh/__tests__/common-utils.ts +21 -19
- package/src/ssh/__tests__/pl-docker.test.ts +68 -59
- package/src/ssh/__tests__/ssh-docker.test.ts +152 -90
- package/src/ssh/__tests__/ssh-upload.test.ts +42 -31
- package/src/ssh/connection_info.ts +33 -27
- package/src/ssh/pl.test.ts +15 -13
- package/src/ssh/pl.ts +228 -143
- package/src/ssh/pl_paths.ts +22 -18
- package/src/ssh/ssh.ts +151 -74
- package/src/ssh/ssh_errors.test.ts +39 -39
- package/src/ssh/ssh_errors.ts +8 -6
- package/src/ssh/supervisord.ts +28 -28
package/README.md
CHANGED
|
@@ -3,39 +3,52 @@
|
|
|
3
3
|
## Test tips
|
|
4
4
|
|
|
5
5
|
### Regenerate `ssh` keys
|
|
6
|
+
|
|
6
7
|
`ssh2` lib has a way to generate private and public ssh keys.
|
|
7
8
|
|
|
8
9
|
`cd` into pl-deployments and then run it in `node` repl:
|
|
9
10
|
|
|
10
11
|
```js
|
|
11
|
-
let keys = require("ssh2").utils.generateKeyPairSync(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
let keys = require("ssh2").utils.generateKeyPairSync("ecdsa", {
|
|
13
|
+
bits: 256,
|
|
14
|
+
comment: "node.js rules!",
|
|
15
|
+
passphrase: "password",
|
|
16
|
+
cipher: "aes256-cbc",
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
require("fs").writeFileSync("test-assets/public-key.pem", keys.public);
|
|
20
|
+
require("fs").writeFileSync("test-assets/private-key.pem", keys.private);
|
|
15
21
|
```
|
|
16
22
|
|
|
17
23
|
### Clean docker containers
|
|
24
|
+
|
|
18
25
|
If something went wrong with testcontainers, use `pnpm run cleanup-docker` from pl-deployments root.
|
|
19
26
|
|
|
20
27
|
### Dev container
|
|
28
|
+
|
|
21
29
|
The command starts a docker container for dev:
|
|
30
|
+
|
|
22
31
|
```sh
|
|
23
32
|
pnpm run dev-docker
|
|
24
33
|
# in another terminal you can start bash
|
|
25
34
|
pnpm run exec-dev-docker
|
|
26
35
|
```
|
|
36
|
+
|
|
27
37
|
Credentials:
|
|
28
38
|
127.0.0.1:4343
|
|
29
39
|
pl-doctor
|
|
30
40
|
password
|
|
31
41
|
|
|
32
42
|
### supervisor commands
|
|
43
|
+
|
|
33
44
|
Go to SSH server, then to `~/.platforma_ssh` and check the status of binary:
|
|
45
|
+
|
|
34
46
|
```sh
|
|
35
47
|
./binaries/supervisord-0.7.3-amd64/supervisord_0.7.3_Linux_64-bit/supervisord -c supervisor.conf ctl status
|
|
36
48
|
```
|
|
37
49
|
|
|
38
50
|
To shutdown platforma:
|
|
51
|
+
|
|
39
52
|
```sh
|
|
40
53
|
./binaries/supervisord-0.7.3-amd64/supervisord_0.7.3_Linux_64-bit/supervisord -c supervisor.conf ctl shutdown
|
|
41
|
-
```
|
|
54
|
+
```
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const OSes = [
|
|
3
|
+
const OSes = ["linux", "macos", "windows"];
|
|
4
4
|
/** @param osName - should be the thing returned from either {@link os.platform())} or `uname -s` */
|
|
5
5
|
function newOs(osName) {
|
|
6
6
|
switch (osName.toLowerCase()) {
|
|
7
|
-
case
|
|
8
|
-
return
|
|
9
|
-
case
|
|
10
|
-
return
|
|
11
|
-
case
|
|
12
|
-
return
|
|
7
|
+
case "darwin":
|
|
8
|
+
return "macos";
|
|
9
|
+
case "linux":
|
|
10
|
+
return "linux";
|
|
11
|
+
case "win32":
|
|
12
|
+
return "windows";
|
|
13
13
|
default:
|
|
14
|
-
throw new Error(`operating system '${osName}' is not currently supported by Platforma ecosystem. The list of OSes supported: `
|
|
15
|
-
|
|
14
|
+
throw new Error(`operating system '${osName}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +
|
|
15
|
+
JSON.stringify(OSes));
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
const Arches = [
|
|
18
|
+
const Arches = ["amd64", "arm64"];
|
|
19
19
|
/** @param arch - should be the thing returned from either {@link os.arch())} or `uname -m` */
|
|
20
20
|
function newArch(arch) {
|
|
21
21
|
switch (arch) {
|
|
22
|
-
case
|
|
23
|
-
case
|
|
24
|
-
case
|
|
25
|
-
return
|
|
26
|
-
case
|
|
27
|
-
case
|
|
28
|
-
return
|
|
22
|
+
case "aarch64":
|
|
23
|
+
case "aarch64_be":
|
|
24
|
+
case "arm64":
|
|
25
|
+
return "arm64";
|
|
26
|
+
case "x86_64":
|
|
27
|
+
case "x64":
|
|
28
|
+
return "amd64";
|
|
29
29
|
default:
|
|
30
|
-
throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: `
|
|
31
|
-
|
|
30
|
+
throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +
|
|
31
|
+
JSON.stringify(Arches));
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"os_and_arch.cjs","sources":["../../src/common/os_and_arch.ts"],"sourcesContent":["export const OSes = [
|
|
1
|
+
{"version":3,"file":"os_and_arch.cjs","sources":["../../src/common/os_and_arch.ts"],"sourcesContent":["export const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\n/** @param osName - should be the thing returned from either {@link os.platform())} or `uname -s` */\nexport function newOs(osName: string): OSType {\n switch (osName.toLowerCase()) {\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 '${osName}' 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\n/** @param arch - should be the thing returned from either {@link os.arch())} or `uname -m` */\nexport function newArch(arch: string): ArchType {\n switch (arch) {\n case \"aarch64\":\n case \"aarch64_be\":\n case \"arm64\":\n return \"arm64\";\n\n case \"x86_64\":\n case \"x64\":\n return \"amd64\";\n\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"],"names":[],"mappings":";;AAAO,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS;AAGhD;AACM,SAAU,KAAK,CAAC,MAAc,EAAA;AAClC,IAAA,QAAQ,MAAM,CAAC,WAAW,EAAE;AAC1B,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,SAAS;AAClB,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,kBAAA,EAAqB,MAAM,CAAA,iFAAA,CAAmF;AAC5G,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACvB;;AAEP;MAEa,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO;AAGvC;AACM,SAAU,OAAO,CAAC,IAAY,EAAA;IAClC,QAAQ,IAAI;AACV,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,YAAY;AACjB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,OAAO;AAEhB,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,OAAO;AAEhB,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,wBAAA,EAA2B,IAAI,CAAA,0FAAA,CAA4F;AACzH,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACzB;;AAEP;;;;;;;"}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
const OSes = [
|
|
1
|
+
const OSes = ["linux", "macos", "windows"];
|
|
2
2
|
/** @param osName - should be the thing returned from either {@link os.platform())} or `uname -s` */
|
|
3
3
|
function newOs(osName) {
|
|
4
4
|
switch (osName.toLowerCase()) {
|
|
5
|
-
case
|
|
6
|
-
return
|
|
7
|
-
case
|
|
8
|
-
return
|
|
9
|
-
case
|
|
10
|
-
return
|
|
5
|
+
case "darwin":
|
|
6
|
+
return "macos";
|
|
7
|
+
case "linux":
|
|
8
|
+
return "linux";
|
|
9
|
+
case "win32":
|
|
10
|
+
return "windows";
|
|
11
11
|
default:
|
|
12
|
-
throw new Error(`operating system '${osName}' is not currently supported by Platforma ecosystem. The list of OSes supported: `
|
|
13
|
-
|
|
12
|
+
throw new Error(`operating system '${osName}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +
|
|
13
|
+
JSON.stringify(OSes));
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
const Arches = [
|
|
16
|
+
const Arches = ["amd64", "arm64"];
|
|
17
17
|
/** @param arch - should be the thing returned from either {@link os.arch())} or `uname -m` */
|
|
18
18
|
function newArch(arch) {
|
|
19
19
|
switch (arch) {
|
|
20
|
-
case
|
|
21
|
-
case
|
|
22
|
-
case
|
|
23
|
-
return
|
|
24
|
-
case
|
|
25
|
-
case
|
|
26
|
-
return
|
|
20
|
+
case "aarch64":
|
|
21
|
+
case "aarch64_be":
|
|
22
|
+
case "arm64":
|
|
23
|
+
return "arm64";
|
|
24
|
+
case "x86_64":
|
|
25
|
+
case "x64":
|
|
26
|
+
return "amd64";
|
|
27
27
|
default:
|
|
28
|
-
throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: `
|
|
29
|
-
|
|
28
|
+
throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +
|
|
29
|
+
JSON.stringify(Arches));
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"os_and_arch.js","sources":["../../src/common/os_and_arch.ts"],"sourcesContent":["export const OSes = [
|
|
1
|
+
{"version":3,"file":"os_and_arch.js","sources":["../../src/common/os_and_arch.ts"],"sourcesContent":["export const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\n/** @param osName - should be the thing returned from either {@link os.platform())} or `uname -s` */\nexport function newOs(osName: string): OSType {\n switch (osName.toLowerCase()) {\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 '${osName}' 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\n/** @param arch - should be the thing returned from either {@link os.arch())} or `uname -m` */\nexport function newArch(arch: string): ArchType {\n switch (arch) {\n case \"aarch64\":\n case \"aarch64_be\":\n case \"arm64\":\n return \"arm64\";\n\n case \"x86_64\":\n case \"x64\":\n return \"amd64\";\n\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"],"names":[],"mappings":"AAAO,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS;AAGhD;AACM,SAAU,KAAK,CAAC,MAAc,EAAA;AAClC,IAAA,QAAQ,MAAM,CAAC,WAAW,EAAE;AAC1B,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,SAAS;AAClB,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,kBAAA,EAAqB,MAAM,CAAA,iFAAA,CAAmF;AAC5G,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACvB;;AAEP;MAEa,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO;AAGvC;AACM,SAAU,OAAO,CAAC,IAAY,EAAA;IAClC,QAAQ,IAAI;AACV,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,YAAY;AACjB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,OAAO;AAEhB,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,OAAO;AAEhB,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,wBAAA,EAA2B,IAAI,CAAA,0FAAA,CAA4F;AACzH,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACzB;;AAEP;;;;"}
|
|
@@ -8,32 +8,32 @@ var upath = require('upath');
|
|
|
8
8
|
var os_and_arch = require('./os_and_arch.cjs');
|
|
9
9
|
|
|
10
10
|
function newDefaultPlBinarySource() {
|
|
11
|
-
return { type:
|
|
11
|
+
return { type: "Download", version: pl_version.getDefaultPlVersion() };
|
|
12
12
|
}
|
|
13
|
-
async function resolveLocalPlBinaryPath({ logger, downloadDir, src, dispatcher }) {
|
|
13
|
+
async function resolveLocalPlBinaryPath({ logger, downloadDir, src, dispatcher, }) {
|
|
14
14
|
switch (src.type) {
|
|
15
|
-
case
|
|
15
|
+
case "Download":
|
|
16
16
|
// eslint-disable-next-line no-case-declarations
|
|
17
17
|
const ops = await pl_binary_download.downloadBinary({
|
|
18
18
|
logger,
|
|
19
19
|
baseDir: downloadDir,
|
|
20
|
-
softwareName:
|
|
20
|
+
softwareName: "pl",
|
|
21
21
|
archiveName: `pl-${src.version}`,
|
|
22
22
|
arch: os.arch(),
|
|
23
23
|
platform: os.platform(),
|
|
24
24
|
dispatcher,
|
|
25
25
|
});
|
|
26
|
-
return upath.join(ops.baseName,
|
|
27
|
-
case
|
|
26
|
+
return upath.join(ops.baseName, "binaries", osToBinaryName[os_and_arch.newOs(os.platform())]);
|
|
27
|
+
case "Local":
|
|
28
28
|
return src.path;
|
|
29
29
|
default:
|
|
30
30
|
tsHelpers.assertNever(src);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
const osToBinaryName = {
|
|
34
|
-
linux:
|
|
35
|
-
macos:
|
|
36
|
-
windows:
|
|
34
|
+
linux: "platforma",
|
|
35
|
+
macos: "platforma",
|
|
36
|
+
windows: "platforma.exe",
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
exports.newDefaultPlBinarySource = newDefaultPlBinarySource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl_binary.cjs","sources":["../../src/common/pl_binary.ts"],"sourcesContent":["import type { MiLogger } from
|
|
1
|
+
{"version":3,"file":"pl_binary.cjs","sources":["../../src/common/pl_binary.ts"],"sourcesContent":["import type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport { downloadBinary } from \"./pl_binary_download\";\nimport { getDefaultPlVersion } from \"./pl_version\";\nimport os from \"node:os\";\nimport upath from \"upath\";\nimport type { OSType } from \"./os_and_arch\";\nimport { newOs } from \"./os_and_arch\";\nimport type { Dispatcher } from \"undici\";\n\n/** Shows how the binary should be got. */\nexport type PlBinarySource = PlBinarySourceDownload | PlBinarySourceLocal;\n\nexport type PlBinarySourceDownload = {\n readonly type: \"Download\";\n readonly version: string;\n};\n\nexport type PlBinarySourceLocal = {\n readonly type: \"Local\";\n readonly path: string;\n};\n\nexport function newDefaultPlBinarySource(): PlBinarySourceDownload {\n return { type: \"Download\", version: getDefaultPlVersion() };\n}\n\nexport async function resolveLocalPlBinaryPath({\n logger,\n downloadDir,\n src,\n dispatcher,\n}: {\n logger: MiLogger;\n downloadDir: string;\n src: PlBinarySource;\n dispatcher?: Dispatcher;\n}): Promise<string> {\n switch (src.type) {\n case \"Download\":\n // eslint-disable-next-line no-case-declarations\n const ops = await downloadBinary({\n logger,\n baseDir: downloadDir,\n softwareName: \"pl\",\n archiveName: `pl-${src.version}`,\n arch: os.arch(),\n platform: os.platform(),\n dispatcher,\n });\n return upath.join(ops.baseName, \"binaries\", osToBinaryName[newOs(os.platform())]);\n\n case \"Local\":\n return src.path;\n\n default:\n assertNever(src);\n }\n}\n\nexport const osToBinaryName: Record<OSType, string> = {\n linux: \"platforma\",\n macos: \"platforma\",\n windows: \"platforma.exe\",\n};\n"],"names":["getDefaultPlVersion","downloadBinary","newOs","assertNever"],"mappings":";;;;;;;;;SAuBgB,wBAAwB,GAAA;IACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAEA,8BAAmB,EAAE,EAAE;AAC7D;AAEO,eAAe,wBAAwB,CAAC,EAC7C,MAAM,EACN,WAAW,EACX,GAAG,EACH,UAAU,GAMX,EAAA;AACC,IAAA,QAAQ,GAAG,CAAC,IAAI;AACd,QAAA,KAAK,UAAU;;AAEb,YAAA,MAAM,GAAG,GAAG,MAAMC,iCAAc,CAAC;gBAC/B,MAAM;AACN,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE,CAAA,GAAA,EAAM,GAAG,CAAC,OAAO,CAAA,CAAE;AAChC,gBAAA,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;AACf,gBAAA,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;gBACvB,UAAU;AACX,aAAA,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAACC,iBAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAEnF,QAAA,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,IAAI;AAEjB,QAAA;YACEC,qBAAW,CAAC,GAAG,CAAC;;AAEtB;AAEO,MAAM,cAAc,GAA2B;AACpD,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,OAAO,EAAE,eAAe;;;;;;;"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import type { MiLogger } from
|
|
2
|
-
import type { OSType } from
|
|
3
|
-
import type { Dispatcher } from
|
|
1
|
+
import type { MiLogger } from "@milaboratories/ts-helpers";
|
|
2
|
+
import type { OSType } from "./os_and_arch";
|
|
3
|
+
import type { Dispatcher } from "undici";
|
|
4
4
|
/** Shows how the binary should be got. */
|
|
5
5
|
export type PlBinarySource = PlBinarySourceDownload | PlBinarySourceLocal;
|
|
6
6
|
export type PlBinarySourceDownload = {
|
|
7
|
-
readonly type:
|
|
7
|
+
readonly type: "Download";
|
|
8
8
|
readonly version: string;
|
|
9
9
|
};
|
|
10
10
|
export type PlBinarySourceLocal = {
|
|
11
|
-
readonly type:
|
|
11
|
+
readonly type: "Local";
|
|
12
12
|
readonly path: string;
|
|
13
13
|
};
|
|
14
14
|
export declare function newDefaultPlBinarySource(): PlBinarySourceDownload;
|
|
15
|
-
export declare function resolveLocalPlBinaryPath({ logger, downloadDir, src, dispatcher }: {
|
|
15
|
+
export declare function resolveLocalPlBinaryPath({ logger, downloadDir, src, dispatcher, }: {
|
|
16
16
|
logger: MiLogger;
|
|
17
17
|
downloadDir: string;
|
|
18
18
|
src: PlBinarySource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl_binary.d.ts","sourceRoot":"","sources":["../../src/common/pl_binary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAM3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,mBAAmB,CAAC;AAE1E,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,wBAAwB,IAAI,sBAAsB,CAEjE;AAED,wBAAsB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"pl_binary.d.ts","sourceRoot":"","sources":["../../src/common/pl_binary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAM3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,mBAAmB,CAAC;AAE1E,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,wBAAwB,IAAI,sBAAsB,CAEjE;AAED,wBAAsB,wBAAwB,CAAC,EAC7C,MAAM,EACN,WAAW,EACX,GAAG,EACH,UAAU,GACX,EAAE;IACD,MAAM,EAAE,QAAQ,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,cAAc,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBlB;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIjD,CAAC"}
|
package/dist/common/pl_binary.js
CHANGED
|
@@ -6,32 +6,32 @@ import upath from 'upath';
|
|
|
6
6
|
import { newOs } from './os_and_arch.js';
|
|
7
7
|
|
|
8
8
|
function newDefaultPlBinarySource() {
|
|
9
|
-
return { type:
|
|
9
|
+
return { type: "Download", version: getDefaultPlVersion() };
|
|
10
10
|
}
|
|
11
|
-
async function resolveLocalPlBinaryPath({ logger, downloadDir, src, dispatcher }) {
|
|
11
|
+
async function resolveLocalPlBinaryPath({ logger, downloadDir, src, dispatcher, }) {
|
|
12
12
|
switch (src.type) {
|
|
13
|
-
case
|
|
13
|
+
case "Download":
|
|
14
14
|
// eslint-disable-next-line no-case-declarations
|
|
15
15
|
const ops = await downloadBinary({
|
|
16
16
|
logger,
|
|
17
17
|
baseDir: downloadDir,
|
|
18
|
-
softwareName:
|
|
18
|
+
softwareName: "pl",
|
|
19
19
|
archiveName: `pl-${src.version}`,
|
|
20
20
|
arch: os__default.arch(),
|
|
21
21
|
platform: os__default.platform(),
|
|
22
22
|
dispatcher,
|
|
23
23
|
});
|
|
24
|
-
return upath.join(ops.baseName,
|
|
25
|
-
case
|
|
24
|
+
return upath.join(ops.baseName, "binaries", osToBinaryName[newOs(os__default.platform())]);
|
|
25
|
+
case "Local":
|
|
26
26
|
return src.path;
|
|
27
27
|
default:
|
|
28
28
|
assertNever(src);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
const osToBinaryName = {
|
|
32
|
-
linux:
|
|
33
|
-
macos:
|
|
34
|
-
windows:
|
|
32
|
+
linux: "platforma",
|
|
33
|
+
macos: "platforma",
|
|
34
|
+
windows: "platforma.exe",
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
export { newDefaultPlBinarySource, osToBinaryName, resolveLocalPlBinaryPath };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl_binary.js","sources":["../../src/common/pl_binary.ts"],"sourcesContent":["import type { MiLogger } from
|
|
1
|
+
{"version":3,"file":"pl_binary.js","sources":["../../src/common/pl_binary.ts"],"sourcesContent":["import type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport { downloadBinary } from \"./pl_binary_download\";\nimport { getDefaultPlVersion } from \"./pl_version\";\nimport os from \"node:os\";\nimport upath from \"upath\";\nimport type { OSType } from \"./os_and_arch\";\nimport { newOs } from \"./os_and_arch\";\nimport type { Dispatcher } from \"undici\";\n\n/** Shows how the binary should be got. */\nexport type PlBinarySource = PlBinarySourceDownload | PlBinarySourceLocal;\n\nexport type PlBinarySourceDownload = {\n readonly type: \"Download\";\n readonly version: string;\n};\n\nexport type PlBinarySourceLocal = {\n readonly type: \"Local\";\n readonly path: string;\n};\n\nexport function newDefaultPlBinarySource(): PlBinarySourceDownload {\n return { type: \"Download\", version: getDefaultPlVersion() };\n}\n\nexport async function resolveLocalPlBinaryPath({\n logger,\n downloadDir,\n src,\n dispatcher,\n}: {\n logger: MiLogger;\n downloadDir: string;\n src: PlBinarySource;\n dispatcher?: Dispatcher;\n}): Promise<string> {\n switch (src.type) {\n case \"Download\":\n // eslint-disable-next-line no-case-declarations\n const ops = await downloadBinary({\n logger,\n baseDir: downloadDir,\n softwareName: \"pl\",\n archiveName: `pl-${src.version}`,\n arch: os.arch(),\n platform: os.platform(),\n dispatcher,\n });\n return upath.join(ops.baseName, \"binaries\", osToBinaryName[newOs(os.platform())]);\n\n case \"Local\":\n return src.path;\n\n default:\n assertNever(src);\n }\n}\n\nexport const osToBinaryName: Record<OSType, string> = {\n linux: \"platforma\",\n macos: \"platforma\",\n windows: \"platforma.exe\",\n};\n"],"names":["os"],"mappings":";;;;;;;SAuBgB,wBAAwB,GAAA;IACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE;AAC7D;AAEO,eAAe,wBAAwB,CAAC,EAC7C,MAAM,EACN,WAAW,EACX,GAAG,EACH,UAAU,GAMX,EAAA;AACC,IAAA,QAAQ,GAAG,CAAC,IAAI;AACd,QAAA,KAAK,UAAU;;AAEb,YAAA,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;gBAC/B,MAAM;AACN,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE,CAAA,GAAA,EAAM,GAAG,CAAC,OAAO,CAAA,CAAE;AAChC,gBAAA,IAAI,EAAEA,WAAE,CAAC,IAAI,EAAE;AACf,gBAAA,QAAQ,EAAEA,WAAE,CAAC,QAAQ,EAAE;gBACvB,UAAU;AACX,aAAA,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,CAACA,WAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAEnF,QAAA,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,IAAI;AAEjB,QAAA;YACE,WAAW,CAAC,GAAG,CAAC;;AAEtB;AAEO,MAAM,cAAc,GAA2B;AACpD,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,OAAO,EAAE,eAAe;;;;;"}
|
|
@@ -30,31 +30,31 @@ function _interopNamespaceDefault(e) {
|
|
|
30
30
|
|
|
31
31
|
var tar__namespace = /*#__PURE__*/_interopNamespaceDefault(tar);
|
|
32
32
|
|
|
33
|
-
const cdn =
|
|
33
|
+
const cdn = "https://cdn.platforma.bio/software";
|
|
34
34
|
// We'll download things from Global Access if downloading from CDN has failed
|
|
35
35
|
// (it might be that it's blocked from the company's network.)
|
|
36
|
-
const gaCdn =
|
|
37
|
-
async function downloadBinaryNoExtract({ logger, baseDir, softwareName, tgzName, arch, platform, dispatcher }) {
|
|
36
|
+
const gaCdn = "https://cdn-ga.pl-open.science/software";
|
|
37
|
+
async function downloadBinaryNoExtract({ logger, baseDir, softwareName, tgzName, arch, platform, dispatcher, }) {
|
|
38
38
|
const opts = getPathsForDownload(softwareName, tgzName, baseDir, os_and_arch.newArch(arch), os_and_arch.newOs(platform));
|
|
39
39
|
const { archiveUrl, alternativeArchiveGAUrl, archivePath } = opts;
|
|
40
40
|
try {
|
|
41
41
|
await downloadArchive({ logger, archiveUrl, archivePath, dispatcher });
|
|
42
42
|
opts.wasDownloadedFrom = archiveUrl;
|
|
43
43
|
}
|
|
44
|
-
catch
|
|
44
|
+
catch {
|
|
45
45
|
await downloadArchive({ logger, archiveUrl: alternativeArchiveGAUrl, archivePath, dispatcher });
|
|
46
46
|
opts.wasDownloadedFrom = alternativeArchiveGAUrl;
|
|
47
47
|
}
|
|
48
48
|
return opts;
|
|
49
49
|
}
|
|
50
|
-
async function downloadBinary({ logger, baseDir, softwareName, archiveName, arch, platform, dispatcher }) {
|
|
50
|
+
async function downloadBinary({ logger, baseDir, softwareName, archiveName, arch, platform, dispatcher, }) {
|
|
51
51
|
const opts = getPathsForDownload(softwareName, archiveName, baseDir, os_and_arch.newArch(arch), os_and_arch.newOs(platform));
|
|
52
52
|
const { archiveUrl, alternativeArchiveGAUrl, archivePath, archiveType, targetFolder } = opts;
|
|
53
53
|
try {
|
|
54
54
|
await downloadArchive({ logger, archiveUrl, archivePath, dispatcher });
|
|
55
55
|
opts.wasDownloadedFrom = archiveUrl;
|
|
56
56
|
}
|
|
57
|
-
catch
|
|
57
|
+
catch {
|
|
58
58
|
await downloadArchive({ logger, archiveUrl: alternativeArchiveGAUrl, archivePath, dispatcher });
|
|
59
59
|
opts.wasDownloadedFrom = alternativeArchiveGAUrl;
|
|
60
60
|
}
|
|
@@ -79,7 +79,7 @@ function getPathsForDownload(softwareName, archiveName, baseDir, arch, os) {
|
|
|
79
79
|
baseName,
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
|
-
async function downloadArchive({ logger, archiveUrl, archivePath, dispatcher }) {
|
|
82
|
+
async function downloadArchive({ logger, archiveUrl, archivePath, dispatcher, }) {
|
|
83
83
|
const state = {};
|
|
84
84
|
state.archivePath = archivePath;
|
|
85
85
|
try {
|
|
@@ -101,7 +101,7 @@ async function downloadArchive({ logger, archiveUrl, archivePath, dispatcher })
|
|
|
101
101
|
throw new Error(state.errorMsg);
|
|
102
102
|
}
|
|
103
103
|
// to prevent incomplete downloads we first write in a temp file
|
|
104
|
-
state.tmpPath = archivePath +
|
|
104
|
+
state.tmpPath = archivePath + ".tmp";
|
|
105
105
|
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
106
106
|
await node_stream.Readable.toWeb(body).pipeTo(node_stream.Writable.toWeb(fs.createWriteStream(state.tmpPath)));
|
|
107
107
|
state.wroteTmp = true;
|
|
@@ -119,9 +119,9 @@ async function downloadArchive({ logger, archiveUrl, archivePath, dispatcher })
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
/** Used to prevent mid-way interrupted unarchived folders to be used */
|
|
122
|
-
const MarkerFileName =
|
|
122
|
+
const MarkerFileName = ".ok";
|
|
123
123
|
async function extractArchive(logger, archivePath, archiveType, dstFolder) {
|
|
124
|
-
logger.info(
|
|
124
|
+
logger.info("extracting archive...");
|
|
125
125
|
logger.info(` archive path: '${archivePath}'`);
|
|
126
126
|
logger.info(` target dir: '${dstFolder}'`);
|
|
127
127
|
if (!(await tsHelpers.fileExists(archivePath))) {
|
|
@@ -142,27 +142,27 @@ async function extractArchive(logger, archivePath, archiveType, dstFolder) {
|
|
|
142
142
|
await fsp.mkdir(dstFolder, { recursive: true });
|
|
143
143
|
logger.info(`Unpacking Platforma Backend archive:\n Archive: ${archivePath}\n Target dir: ${dstFolder}`);
|
|
144
144
|
switch (archiveType) {
|
|
145
|
-
case
|
|
145
|
+
case "tgz":
|
|
146
146
|
await tar__namespace.x({
|
|
147
147
|
file: archivePath,
|
|
148
148
|
cwd: dstFolder,
|
|
149
149
|
gzip: true,
|
|
150
150
|
});
|
|
151
151
|
break;
|
|
152
|
-
case
|
|
152
|
+
case "zip":
|
|
153
153
|
await decompress(archivePath, dstFolder);
|
|
154
154
|
break;
|
|
155
155
|
default:
|
|
156
156
|
tsHelpers.assertNever(archiveType);
|
|
157
157
|
}
|
|
158
158
|
// writing marker file, to be able in the future detect that we completely unarchived the tar file
|
|
159
|
-
await fsp.writeFile(markerFilePath,
|
|
159
|
+
await fsp.writeFile(markerFilePath, "ok");
|
|
160
160
|
logger.info(` ... unpack done.`);
|
|
161
161
|
}
|
|
162
162
|
const osToArchiveType = {
|
|
163
|
-
linux:
|
|
164
|
-
macos:
|
|
165
|
-
windows:
|
|
163
|
+
linux: "tgz",
|
|
164
|
+
macos: "tgz",
|
|
165
|
+
windows: "zip",
|
|
166
166
|
};
|
|
167
167
|
|
|
168
168
|
exports.downloadArchive = downloadArchive;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl_binary_download.cjs","sources":["../../src/common/pl_binary_download.ts"],"sourcesContent":["import fs from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport upath from 'upath';\nimport type { Dispatcher } from 'undici';\nimport { request } from 'undici';\nimport { Writable, Readable } from 'node:stream';\nimport { text } from 'node:stream/consumers';\nimport * as tar from 'tar';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport { assertNever, fileExists } from '@milaboratories/ts-helpers';\nimport decompress from 'decompress';\nimport type { ArchType, OSType } from './os_and_arch';\nimport { newOs, newArch } from './os_and_arch';\n\nconst cdn = 'https://cdn.platforma.bio/software';\n// We'll download things from Global Access if downloading from CDN has failed\n// (it might be that it's blocked from the company's network.)\nconst gaCdn = 'https://cdn-ga.pl-open.science/software';\n\nexport type DownloadBinaryResult = {\n archiveUrl: string;\n alternativeArchiveGAUrl: string;\n wasDownloadedFrom?: string;\n archivePath: string;\n archiveType: ArchiveType;\n targetFolder: string;\n baseName: string;\n};\n\nexport async function downloadBinaryNoExtract(\n { logger, baseDir, softwareName, tgzName, arch, platform, dispatcher }: {\n logger: MiLogger;\n baseDir: string;\n softwareName: string;\n tgzName: string;\n arch: string;\n platform: string;\n dispatcher?: Dispatcher;\n },\n): Promise<DownloadBinaryResult> {\n const opts = getPathsForDownload(softwareName, tgzName, baseDir, newArch(arch), newOs(platform));\n const { archiveUrl, alternativeArchiveGAUrl, archivePath } = opts;\n\n try {\n await downloadArchive({ logger, archiveUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = archiveUrl;\n } catch (_e) {\n await downloadArchive({ logger, archiveUrl: alternativeArchiveGAUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = alternativeArchiveGAUrl;\n }\n\n return opts;\n}\n\nexport async function downloadBinary(\n { logger, baseDir, softwareName, archiveName, arch, platform, dispatcher }: {\n logger: MiLogger;\n baseDir: string;\n softwareName: string;\n archiveName: string;\n arch: string;\n platform: string;\n dispatcher?: Dispatcher;\n },\n): Promise<DownloadBinaryResult> {\n const opts = getPathsForDownload(softwareName, archiveName, baseDir, newArch(arch), newOs(platform));\n const { archiveUrl, alternativeArchiveGAUrl, archivePath, archiveType, targetFolder } = opts;\n\n try {\n await downloadArchive({ logger, archiveUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = archiveUrl;\n } catch (_e) {\n await downloadArchive({ logger, archiveUrl: alternativeArchiveGAUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = alternativeArchiveGAUrl;\n }\n\n await extractArchive(logger, archivePath, archiveType, targetFolder);\n\n return opts;\n}\n\nfunction getPathsForDownload(\n softwareName: string,\n archiveName: string,\n baseDir: string,\n arch: ArchType,\n os: OSType,\n): DownloadBinaryResult {\n const baseName = `${archiveName}-${arch}`;\n const archiveType = osToArchiveType[os];\n\n const archiveFileName = `${baseName}.${archiveType}`;\n const archiveUrl = `${cdn}/${softwareName}/${os}/${archiveFileName}`;\n const alternativeArchiveGAUrl = `${gaCdn}/${softwareName}/${os}/${archiveFileName}`;\n const archivePath = upath.join(baseDir, archiveFileName);\n // folder where binary distribution of pl will be unpacked\n const targetFolder = upath.join(baseDir, baseName);\n\n return {\n archiveUrl,\n alternativeArchiveGAUrl,\n archivePath,\n archiveType,\n targetFolder,\n baseName,\n };\n}\n\nexport type DownloadInfo = {\n archivePath?: string;\n fileExisted?: boolean;\n dirnameCreated?: boolean;\n statusCode?: number;\n errorMsg?: string;\n tmpPath?: string;\n wroteTmp?: boolean;\n tmpExisted?: boolean;\n renamed?: boolean;\n newExisted?: boolean;\n};\n\nexport async function downloadArchive(\n { logger, archiveUrl, archivePath, dispatcher }: {\n logger: MiLogger;\n archiveUrl: string;\n archivePath: string;\n dispatcher?: Dispatcher;\n },\n): Promise<DownloadInfo> {\n const state: DownloadInfo = {};\n state.archivePath = archivePath;\n\n try {\n state.fileExisted = await fileExists(archivePath);\n if (state.fileExisted) {\n logger.info(`Platforma Backend archive download skipped: '${archivePath}' already exists`);\n return state;\n }\n\n await fsp.mkdir(upath.dirname(archivePath), { recursive: true });\n state.dirnameCreated = true;\n\n logger.info(`Downloading archive:\\n URL: ${archiveUrl}\\n Save to: ${archivePath}`);\n\n const { body, statusCode } = await request(archiveUrl, { dispatcher });\n state.statusCode = statusCode;\n if (statusCode != 200) {\n // completely draining the stream to prevent leaving open connections\n const textBody = await text(body);\n state.errorMsg = `failed to download archive: ${statusCode}, response: ${textBody.slice(0, 1000)}`;\n logger.error(state.errorMsg);\n throw new Error(state.errorMsg);\n }\n\n // to prevent incomplete downloads we first write in a temp file\n state.tmpPath = archivePath + '.tmp';\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n await Readable.toWeb(body).pipeTo(Writable.toWeb(fs.createWriteStream(state.tmpPath)));\n state.wroteTmp = true;\n state.tmpExisted = await fileExists(state.tmpPath);\n\n // and then atomically rename it\n await fsp.rename(state.tmpPath, archivePath);\n state.renamed = true;\n state.newExisted = await fileExists(archivePath);\n\n return state;\n } catch (e: unknown) {\n const msg = `downloadArchive: ${JSON.stringify(e)}, state: ${JSON.stringify(state)}`;\n logger.error(msg);\n throw new Error(msg);\n }\n}\n\n/** Used to prevent mid-way interrupted unarchived folders to be used */\nconst MarkerFileName = '.ok';\n\nexport async function extractArchive(\n logger: MiLogger,\n archivePath: string,\n archiveType: ArchiveType,\n dstFolder: string,\n) {\n logger.info('extracting archive...');\n logger.info(` archive path: '${archivePath}'`);\n logger.info(` target dir: '${dstFolder}'`);\n\n if (!(await fileExists(archivePath))) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n const markerFilePath = upath.join(dstFolder, MarkerFileName);\n\n if (await fileExists(markerFilePath)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${dstFolder}' exists`);\n return;\n }\n\n if (await fileExists(dstFolder)) {\n logger.info(`Removing previous incompletely unpacked folder: '${dstFolder}'`);\n await fsp.rm(dstFolder, { recursive: true });\n }\n\n logger.info(` creating target dir '${dstFolder}'`);\n await fsp.mkdir(dstFolder, { recursive: true });\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${dstFolder}`,\n );\n\n switch (archiveType) {\n case 'tgz':\n await tar.x({\n file: archivePath,\n cwd: dstFolder,\n gzip: true,\n });\n break;\n\n case 'zip':\n await decompress(archivePath, dstFolder);\n break;\n\n default:\n assertNever(archiveType);\n }\n\n // writing marker file, to be able in the future detect that we completely unarchived the tar file\n await fsp.writeFile(markerFilePath, 'ok');\n\n logger.info(` ... unpack done.`);\n}\n\nexport type ArchiveType = 'tgz' | 'zip';\n\nconst osToArchiveType: Record<OSType, ArchiveType> = {\n linux: 'tgz',\n macos: 'tgz',\n windows: 'zip',\n};\n"],"names":["newArch","newOs","fileExists","request","text","Readable","Writable","tar","assertNever"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pl_binary_download.cjs","sources":["../../src/common/pl_binary_download.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport fsp from \"node:fs/promises\";\nimport upath from \"upath\";\nimport type { Dispatcher } from \"undici\";\nimport { request } from \"undici\";\nimport { Writable, Readable } from \"node:stream\";\nimport { text } from \"node:stream/consumers\";\nimport * as tar from \"tar\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport { assertNever, fileExists } from \"@milaboratories/ts-helpers\";\nimport decompress from \"decompress\";\nimport type { ArchType, OSType } from \"./os_and_arch\";\nimport { newOs, newArch } from \"./os_and_arch\";\n\nconst cdn = \"https://cdn.platforma.bio/software\";\n// We'll download things from Global Access if downloading from CDN has failed\n// (it might be that it's blocked from the company's network.)\nconst gaCdn = \"https://cdn-ga.pl-open.science/software\";\n\nexport type DownloadBinaryResult = {\n archiveUrl: string;\n alternativeArchiveGAUrl: string;\n wasDownloadedFrom?: string;\n archivePath: string;\n archiveType: ArchiveType;\n targetFolder: string;\n baseName: string;\n};\n\nexport async function downloadBinaryNoExtract({\n logger,\n baseDir,\n softwareName,\n tgzName,\n arch,\n platform,\n dispatcher,\n}: {\n logger: MiLogger;\n baseDir: string;\n softwareName: string;\n tgzName: string;\n arch: string;\n platform: string;\n dispatcher?: Dispatcher;\n}): Promise<DownloadBinaryResult> {\n const opts = getPathsForDownload(softwareName, tgzName, baseDir, newArch(arch), newOs(platform));\n const { archiveUrl, alternativeArchiveGAUrl, archivePath } = opts;\n\n try {\n await downloadArchive({ logger, archiveUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = archiveUrl;\n } catch {\n await downloadArchive({ logger, archiveUrl: alternativeArchiveGAUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = alternativeArchiveGAUrl;\n }\n\n return opts;\n}\n\nexport async function downloadBinary({\n logger,\n baseDir,\n softwareName,\n archiveName,\n arch,\n platform,\n dispatcher,\n}: {\n logger: MiLogger;\n baseDir: string;\n softwareName: string;\n archiveName: string;\n arch: string;\n platform: string;\n dispatcher?: Dispatcher;\n}): Promise<DownloadBinaryResult> {\n const opts = getPathsForDownload(\n softwareName,\n archiveName,\n baseDir,\n newArch(arch),\n newOs(platform),\n );\n const { archiveUrl, alternativeArchiveGAUrl, archivePath, archiveType, targetFolder } = opts;\n\n try {\n await downloadArchive({ logger, archiveUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = archiveUrl;\n } catch {\n await downloadArchive({ logger, archiveUrl: alternativeArchiveGAUrl, archivePath, dispatcher });\n opts.wasDownloadedFrom = alternativeArchiveGAUrl;\n }\n\n await extractArchive(logger, archivePath, archiveType, targetFolder);\n\n return opts;\n}\n\nfunction getPathsForDownload(\n softwareName: string,\n archiveName: string,\n baseDir: string,\n arch: ArchType,\n os: OSType,\n): DownloadBinaryResult {\n const baseName = `${archiveName}-${arch}`;\n const archiveType = osToArchiveType[os];\n\n const archiveFileName = `${baseName}.${archiveType}`;\n const archiveUrl = `${cdn}/${softwareName}/${os}/${archiveFileName}`;\n const alternativeArchiveGAUrl = `${gaCdn}/${softwareName}/${os}/${archiveFileName}`;\n const archivePath = upath.join(baseDir, archiveFileName);\n // folder where binary distribution of pl will be unpacked\n const targetFolder = upath.join(baseDir, baseName);\n\n return {\n archiveUrl,\n alternativeArchiveGAUrl,\n archivePath,\n archiveType,\n targetFolder,\n baseName,\n };\n}\n\nexport type DownloadInfo = {\n archivePath?: string;\n fileExisted?: boolean;\n dirnameCreated?: boolean;\n statusCode?: number;\n errorMsg?: string;\n tmpPath?: string;\n wroteTmp?: boolean;\n tmpExisted?: boolean;\n renamed?: boolean;\n newExisted?: boolean;\n};\n\nexport async function downloadArchive({\n logger,\n archiveUrl,\n archivePath,\n dispatcher,\n}: {\n logger: MiLogger;\n archiveUrl: string;\n archivePath: string;\n dispatcher?: Dispatcher;\n}): Promise<DownloadInfo> {\n const state: DownloadInfo = {};\n state.archivePath = archivePath;\n\n try {\n state.fileExisted = await fileExists(archivePath);\n if (state.fileExisted) {\n logger.info(`Platforma Backend archive download skipped: '${archivePath}' already exists`);\n return state;\n }\n\n await fsp.mkdir(upath.dirname(archivePath), { recursive: true });\n state.dirnameCreated = true;\n\n logger.info(`Downloading archive:\\n URL: ${archiveUrl}\\n Save to: ${archivePath}`);\n\n const { body, statusCode } = await request(archiveUrl, { dispatcher });\n state.statusCode = statusCode;\n if (statusCode != 200) {\n // completely draining the stream to prevent leaving open connections\n const textBody = await text(body);\n state.errorMsg = `failed to download archive: ${statusCode}, response: ${textBody.slice(0, 1000)}`;\n logger.error(state.errorMsg);\n throw new Error(state.errorMsg);\n }\n\n // to prevent incomplete downloads we first write in a temp file\n state.tmpPath = archivePath + \".tmp\";\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n await Readable.toWeb(body).pipeTo(Writable.toWeb(fs.createWriteStream(state.tmpPath)));\n state.wroteTmp = true;\n state.tmpExisted = await fileExists(state.tmpPath);\n\n // and then atomically rename it\n await fsp.rename(state.tmpPath, archivePath);\n state.renamed = true;\n state.newExisted = await fileExists(archivePath);\n\n return state;\n } catch (e: unknown) {\n const msg = `downloadArchive: ${JSON.stringify(e)}, state: ${JSON.stringify(state)}`;\n logger.error(msg);\n throw new Error(msg);\n }\n}\n\n/** Used to prevent mid-way interrupted unarchived folders to be used */\nconst MarkerFileName = \".ok\";\n\nexport async function extractArchive(\n logger: MiLogger,\n archivePath: string,\n archiveType: ArchiveType,\n dstFolder: string,\n) {\n logger.info(\"extracting archive...\");\n logger.info(` archive path: '${archivePath}'`);\n logger.info(` target dir: '${dstFolder}'`);\n\n if (!(await fileExists(archivePath))) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n const markerFilePath = upath.join(dstFolder, MarkerFileName);\n\n if (await fileExists(markerFilePath)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${dstFolder}' exists`);\n return;\n }\n\n if (await fileExists(dstFolder)) {\n logger.info(`Removing previous incompletely unpacked folder: '${dstFolder}'`);\n await fsp.rm(dstFolder, { recursive: true });\n }\n\n logger.info(` creating target dir '${dstFolder}'`);\n await fsp.mkdir(dstFolder, { recursive: true });\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${dstFolder}`,\n );\n\n switch (archiveType) {\n case \"tgz\":\n await tar.x({\n file: archivePath,\n cwd: dstFolder,\n gzip: true,\n });\n break;\n\n case \"zip\":\n await decompress(archivePath, dstFolder);\n break;\n\n default:\n assertNever(archiveType);\n }\n\n // writing marker file, to be able in the future detect that we completely unarchived the tar file\n await fsp.writeFile(markerFilePath, \"ok\");\n\n logger.info(` ... unpack done.`);\n}\n\nexport type ArchiveType = \"tgz\" | \"zip\";\n\nconst osToArchiveType: Record<OSType, ArchiveType> = {\n linux: \"tgz\",\n macos: \"tgz\",\n windows: \"zip\",\n};\n"],"names":["newArch","newOs","fileExists","request","text","Readable","Writable","tar","assertNever"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Dispatcher } from
|
|
2
|
-
import type { MiLogger } from
|
|
1
|
+
import type { Dispatcher } from "undici";
|
|
2
|
+
import type { MiLogger } from "@milaboratories/ts-helpers";
|
|
3
3
|
export type DownloadBinaryResult = {
|
|
4
4
|
archiveUrl: string;
|
|
5
5
|
alternativeArchiveGAUrl: string;
|
|
@@ -9,7 +9,7 @@ export type DownloadBinaryResult = {
|
|
|
9
9
|
targetFolder: string;
|
|
10
10
|
baseName: string;
|
|
11
11
|
};
|
|
12
|
-
export declare function downloadBinaryNoExtract({ logger, baseDir, softwareName, tgzName, arch, platform, dispatcher }: {
|
|
12
|
+
export declare function downloadBinaryNoExtract({ logger, baseDir, softwareName, tgzName, arch, platform, dispatcher, }: {
|
|
13
13
|
logger: MiLogger;
|
|
14
14
|
baseDir: string;
|
|
15
15
|
softwareName: string;
|
|
@@ -18,7 +18,7 @@ export declare function downloadBinaryNoExtract({ logger, baseDir, softwareName,
|
|
|
18
18
|
platform: string;
|
|
19
19
|
dispatcher?: Dispatcher;
|
|
20
20
|
}): Promise<DownloadBinaryResult>;
|
|
21
|
-
export declare function downloadBinary({ logger, baseDir, softwareName, archiveName, arch, platform, dispatcher }: {
|
|
21
|
+
export declare function downloadBinary({ logger, baseDir, softwareName, archiveName, arch, platform, dispatcher, }: {
|
|
22
22
|
logger: MiLogger;
|
|
23
23
|
baseDir: string;
|
|
24
24
|
softwareName: string;
|
|
@@ -39,12 +39,12 @@ export type DownloadInfo = {
|
|
|
39
39
|
renamed?: boolean;
|
|
40
40
|
newExisted?: boolean;
|
|
41
41
|
};
|
|
42
|
-
export declare function downloadArchive({ logger, archiveUrl, archivePath, dispatcher }: {
|
|
42
|
+
export declare function downloadArchive({ logger, archiveUrl, archivePath, dispatcher, }: {
|
|
43
43
|
logger: MiLogger;
|
|
44
44
|
archiveUrl: string;
|
|
45
45
|
archivePath: string;
|
|
46
46
|
dispatcher?: Dispatcher;
|
|
47
47
|
}): Promise<DownloadInfo>;
|
|
48
48
|
export declare function extractArchive(logger: MiLogger, archivePath: string, archiveType: ArchiveType, dstFolder: string): Promise<void>;
|
|
49
|
-
export type ArchiveType =
|
|
49
|
+
export type ArchiveType = "tgz" | "zip";
|
|
50
50
|
//# sourceMappingURL=pl_binary_download.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl_binary_download.d.ts","sourceRoot":"","sources":["../../src/common/pl_binary_download.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAKzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAW3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"pl_binary_download.d.ts","sourceRoot":"","sources":["../../src/common/pl_binary_download.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAKzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAW3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,EAC5C,MAAM,EACN,OAAO,EACP,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,UAAU,GACX,EAAE;IACD,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAahC;AAED,wBAAsB,cAAc,CAAC,EACnC,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,UAAU,GACX,EAAE;IACD,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqBhC;AA6BD,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,UAAU,EACV,WAAW,EACX,UAAU,GACX,EAAE;IACD,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,OAAO,CAAC,YAAY,CAAC,CA4CxB;AAKD,wBAAsB,cAAc,CAClC,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,iBAoDlB;AAED,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC"}
|