@dbx-tools/cli 0.6.186 → 0.6.188
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 +15 -6
- package/index.ts +3 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +3 -2
- package/lib/src/_rust-release-binaries.d.ts +49 -0
- package/lib/src/_rust-release-binaries.js +66 -0
- package/lib/src/cli.js +18 -2
- package/lib/src/rust-binary.d.ts +34 -0
- package/lib/src/rust-binary.js +103 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -6
- package/src/_rust-release-binaries.ts +66 -0
- package/src/cli.ts +25 -1
- package/src/rust-binary.ts +154 -0
package/README.md
CHANGED
|
@@ -5,12 +5,14 @@ gated public tunnel.
|
|
|
5
5
|
|
|
6
6
|
Available commands:
|
|
7
7
|
|
|
8
|
-
| Command
|
|
9
|
-
|
|
|
10
|
-
| `dbx dev`
|
|
11
|
-
| `dbx appkit env`
|
|
12
|
-
| `dbx auth`
|
|
13
|
-
| `dbx tunnel`
|
|
8
|
+
| Command | What it does |
|
|
9
|
+
| -------------------- | ------------------------------------------------------------------------ |
|
|
10
|
+
| `dbx dev` | Bootstrap or repair a dbx-tools workspace, then forward to projen. |
|
|
11
|
+
| `dbx appkit env` | Print the environment an AppKit app resolves, as eval-able shell output. |
|
|
12
|
+
| `dbx auth` | Generate U2M or M2M OAuth tokens with secure credential storage. |
|
|
13
|
+
| `dbx tunnel` | Front any command with a public portr tunnel and an email-OTP gate. |
|
|
14
|
+
| `dbx model-proxy` | Run the multi-protocol Databricks Model Serving proxy. |
|
|
15
|
+
| `dbx lakebase-proxy` | Run the loopback PostgreSQL proxy for Databricks Lakebase. |
|
|
14
16
|
|
|
15
17
|
Key features:
|
|
16
18
|
|
|
@@ -32,6 +34,13 @@ SMTP, or X.509 code. Run
|
|
|
32
34
|
`dbx <group> --help` for a group's own flags; each forwards `--help` to the child
|
|
33
35
|
program rather than answering it at the root.
|
|
34
36
|
|
|
37
|
+
Rust commands are generated from the workspace's release metadata. The first
|
|
38
|
+
invocation downloads the exact GitHub release asset matching `PACKAGE_VERSION`
|
|
39
|
+
and the operating system, then installs it as
|
|
40
|
+
`~/.dbx-tools/bin/<binary>_<major>_<minor>_<patch>`. Later invocations reuse
|
|
41
|
+
that versioned executable. Root help never downloads a binary, and all command
|
|
42
|
+
arguments are forwarded directly to the Rust CLI.
|
|
43
|
+
|
|
35
44
|
## Bootstrap A Workspace
|
|
36
45
|
|
|
37
46
|
```sh
|
package/index.ts
CHANGED
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
|
|
6
|
-
export const PACKAGE_VERSION = "0.6.
|
|
6
|
+
export const PACKAGE_VERSION = "0.6.188";
|
|
7
7
|
export * as bootstrap from "./src/bootstrap.ts";
|
|
8
8
|
export * as bun from "./src/bun.ts";
|
|
9
9
|
export * as cli from "./src/cli.ts";
|
|
10
10
|
export * as root from "./src/root.ts";
|
|
11
|
+
export * as rustBinary from "./src/rust-binary.ts";
|
|
11
12
|
export { resolveBunArgv } from "./src/bun.ts";
|
|
12
13
|
export { workspaceRoot } from "./src/root.ts";
|
|
14
|
+
export type { RustReleaseBinaryAsset, RustReleaseBinaryCommand, RustReleaseBinaryOptions } from "./src/rust-binary.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.6.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.6.188";
|
|
3
3
|
export * as bootstrap from "./src/bootstrap.ts";
|
|
4
4
|
export * as bun from "./src/bun.ts";
|
|
5
5
|
export * as cli from "./src/cli.ts";
|
|
6
6
|
export * as root from "./src/root.ts";
|
|
7
|
+
export * as rustBinary from "./src/rust-binary.ts";
|
|
7
8
|
export { resolveBunArgv } from "./src/bun.ts";
|
|
8
9
|
export { workspaceRoot } from "./src/root.ts";
|
|
10
|
+
export type { RustReleaseBinaryAsset, RustReleaseBinaryCommand, RustReleaseBinaryOptions } from "./src/rust-binary.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
|
|
5
|
-
export const PACKAGE_VERSION = "0.6.
|
|
5
|
+
export const PACKAGE_VERSION = "0.6.188";
|
|
6
6
|
export * as bootstrap from "./src/bootstrap.js";
|
|
7
7
|
export * as bun from "./src/bun.js";
|
|
8
8
|
export * as cli from "./src/cli.js";
|
|
9
9
|
export * as root from "./src/root.js";
|
|
10
|
+
export * as rustBinary from "./src/rust-binary.js";
|
|
10
11
|
export { resolveBunArgv } from "./src/bun.js";
|
|
11
12
|
export { workspaceRoot } from "./src/root.js";
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NsaVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC42LjE4OFwiO1xuZXhwb3J0ICogYXMgYm9vdHN0cmFwIGZyb20gXCIuL3NyYy9ib290c3RyYXAudHNcIjtcbmV4cG9ydCAqIGFzIGJ1biBmcm9tIFwiLi9zcmMvYnVuLnRzXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgcm9vdCBmcm9tIFwiLi9zcmMvcm9vdC50c1wiO1xuZXhwb3J0ICogYXMgcnVzdEJpbmFyeSBmcm9tIFwiLi9zcmMvcnVzdC1iaW5hcnkudHNcIjtcbmV4cG9ydCB7IHJlc29sdmVCdW5Bcmd2IH0gZnJvbSBcIi4vc3JjL2J1bi50c1wiO1xuZXhwb3J0IHsgd29ya3NwYWNlUm9vdCB9IGZyb20gXCIuL3NyYy9yb290LnRzXCI7XG5leHBvcnQgdHlwZSB7IFJ1c3RSZWxlYXNlQmluYXJ5QXNzZXQsIFJ1c3RSZWxlYXNlQmluYXJ5Q29tbWFuZCwgUnVzdFJlbGVhc2VCaW5hcnlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3J1c3QtYmluYXJ5LnRzXCI7XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare const RUST_RELEASE_BINARY_COMMANDS: readonly [{
|
|
2
|
+
readonly command: "lakebase-proxy";
|
|
3
|
+
readonly description: "Loopback PostgreSQL proxy for Databricks Lakebase";
|
|
4
|
+
readonly binaryName: "dbx-lakebase-proxy";
|
|
5
|
+
readonly repository: "https://github.com/reggie-db/dbx-tools";
|
|
6
|
+
readonly assets: readonly [{
|
|
7
|
+
readonly os: "linux";
|
|
8
|
+
readonly cpu: "x64";
|
|
9
|
+
readonly name: "dbx-lakebase-proxy-linux-x64-gnu.tar.gz";
|
|
10
|
+
}, {
|
|
11
|
+
readonly os: "linux";
|
|
12
|
+
readonly cpu: "arm64";
|
|
13
|
+
readonly name: "dbx-lakebase-proxy-linux-arm64-gnu.tar.gz";
|
|
14
|
+
}, {
|
|
15
|
+
readonly os: "darwin";
|
|
16
|
+
readonly cpu: "x64";
|
|
17
|
+
readonly name: "dbx-lakebase-proxy-darwin-x64.tar.gz";
|
|
18
|
+
}, {
|
|
19
|
+
readonly os: "darwin";
|
|
20
|
+
readonly cpu: "arm64";
|
|
21
|
+
readonly name: "dbx-lakebase-proxy-darwin-arm64.tar.gz";
|
|
22
|
+
}];
|
|
23
|
+
}, {
|
|
24
|
+
readonly command: "model-proxy";
|
|
25
|
+
readonly description: "Multi-protocol Databricks model proxy";
|
|
26
|
+
readonly binaryName: "dbx-model-proxy";
|
|
27
|
+
readonly repository: "https://github.com/reggie-db/dbx-tools";
|
|
28
|
+
readonly assets: readonly [{
|
|
29
|
+
readonly os: "linux";
|
|
30
|
+
readonly cpu: "x64";
|
|
31
|
+
readonly name: "dbx-model-proxy-linux-x64-gnu.tar.gz";
|
|
32
|
+
}, {
|
|
33
|
+
readonly os: "linux";
|
|
34
|
+
readonly cpu: "arm64";
|
|
35
|
+
readonly name: "dbx-model-proxy-linux-arm64-gnu.tar.gz";
|
|
36
|
+
}, {
|
|
37
|
+
readonly os: "darwin";
|
|
38
|
+
readonly cpu: "x64";
|
|
39
|
+
readonly name: "dbx-model-proxy-darwin-x64.tar.gz";
|
|
40
|
+
}, {
|
|
41
|
+
readonly os: "darwin";
|
|
42
|
+
readonly cpu: "arm64";
|
|
43
|
+
readonly name: "dbx-model-proxy-darwin-arm64.tar.gz";
|
|
44
|
+
}, {
|
|
45
|
+
readonly os: "win32";
|
|
46
|
+
readonly cpu: "x64";
|
|
47
|
+
readonly name: "dbx-model-proxy-win32-x64-msvc.zip";
|
|
48
|
+
}];
|
|
49
|
+
}];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// GENERATED by projen - DO NOT EDIT.
|
|
2
|
+
// Rust release package options are the source of truth.
|
|
3
|
+
export const RUST_RELEASE_BINARY_COMMANDS = [
|
|
4
|
+
{
|
|
5
|
+
"command": "lakebase-proxy",
|
|
6
|
+
"description": "Loopback PostgreSQL proxy for Databricks Lakebase",
|
|
7
|
+
"binaryName": "dbx-lakebase-proxy",
|
|
8
|
+
"repository": "https://github.com/reggie-db/dbx-tools",
|
|
9
|
+
"assets": [
|
|
10
|
+
{
|
|
11
|
+
"os": "linux",
|
|
12
|
+
"cpu": "x64",
|
|
13
|
+
"name": "dbx-lakebase-proxy-linux-x64-gnu.tar.gz"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"os": "linux",
|
|
17
|
+
"cpu": "arm64",
|
|
18
|
+
"name": "dbx-lakebase-proxy-linux-arm64-gnu.tar.gz"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"os": "darwin",
|
|
22
|
+
"cpu": "x64",
|
|
23
|
+
"name": "dbx-lakebase-proxy-darwin-x64.tar.gz"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"os": "darwin",
|
|
27
|
+
"cpu": "arm64",
|
|
28
|
+
"name": "dbx-lakebase-proxy-darwin-arm64.tar.gz"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"command": "model-proxy",
|
|
34
|
+
"description": "Multi-protocol Databricks model proxy",
|
|
35
|
+
"binaryName": "dbx-model-proxy",
|
|
36
|
+
"repository": "https://github.com/reggie-db/dbx-tools",
|
|
37
|
+
"assets": [
|
|
38
|
+
{
|
|
39
|
+
"os": "linux",
|
|
40
|
+
"cpu": "x64",
|
|
41
|
+
"name": "dbx-model-proxy-linux-x64-gnu.tar.gz"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"os": "linux",
|
|
45
|
+
"cpu": "arm64",
|
|
46
|
+
"name": "dbx-model-proxy-linux-arm64-gnu.tar.gz"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"os": "darwin",
|
|
50
|
+
"cpu": "x64",
|
|
51
|
+
"name": "dbx-model-proxy-darwin-x64.tar.gz"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"os": "darwin",
|
|
55
|
+
"cpu": "arm64",
|
|
56
|
+
"name": "dbx-model-proxy-darwin-arm64.tar.gz"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"os": "win32",
|
|
60
|
+
"cpu": "x64",
|
|
61
|
+
"name": "dbx-model-proxy-win32-x64-msvc.zip"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
];
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3J1c3QtcmVsZWFzZS1iaW5hcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fcnVzdC1yZWxlYXNlLWJpbmFyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyx3REFBd0Q7QUFFeEQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUc7SUFDMUM7UUFDRSxTQUFTLEVBQUUsZ0JBQWdCO1FBQzNCLGFBQWEsRUFBRSxtREFBbUQ7UUFDbEUsWUFBWSxFQUFFLG9CQUFvQjtRQUNsQyxZQUFZLEVBQUUsd0NBQXdDO1FBQ3RELFFBQVEsRUFBRTtZQUNSO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxLQUFLO2dCQUNaLE1BQU0sRUFBRSx5Q0FBeUM7YUFDbEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUsMkNBQTJDO2FBQ3BEO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osTUFBTSxFQUFFLHNDQUFzQzthQUMvQztZQUNEO2dCQUNFLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLE1BQU0sRUFBRSx3Q0FBd0M7YUFDakQ7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxTQUFTLEVBQUUsYUFBYTtRQUN4QixhQUFhLEVBQUUsdUNBQXVDO1FBQ3RELFlBQVksRUFBRSxpQkFBaUI7UUFDL0IsWUFBWSxFQUFFLHdDQUF3QztRQUN0RCxRQUFRLEVBQUU7WUFDUjtnQkFDRSxJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsS0FBSztnQkFDWixNQUFNLEVBQUUsc0NBQXNDO2FBQy9DO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLHdDQUF3QzthQUNqRDtZQUNEO2dCQUNFLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxLQUFLO2dCQUNaLE1BQU0sRUFBRSxtQ0FBbUM7YUFDNUM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUscUNBQXFDO2FBQzlDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osTUFBTSxFQUFFLG9DQUFvQzthQUM3QztTQUNGO0tBQ0Y7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiAtIERPIE5PVCBFRElULlxuLy8gUnVzdCByZWxlYXNlIHBhY2thZ2Ugb3B0aW9ucyBhcmUgdGhlIHNvdXJjZSBvZiB0cnV0aC5cblxuZXhwb3J0IGNvbnN0IFJVU1RfUkVMRUFTRV9CSU5BUllfQ09NTUFORFMgPSBbXG4gIHtcbiAgICBcImNvbW1hbmRcIjogXCJsYWtlYmFzZS1wcm94eVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIjogXCJMb29wYmFjayBQb3N0Z3JlU1FMIHByb3h5IGZvciBEYXRhYnJpY2tzIExha2ViYXNlXCIsXG4gICAgXCJiaW5hcnlOYW1lXCI6IFwiZGJ4LWxha2ViYXNlLXByb3h5XCIsXG4gICAgXCJyZXBvc2l0b3J5XCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JlZ2dpZS1kYi9kYngtdG9vbHNcIixcbiAgICBcImFzc2V0c1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwib3NcIjogXCJsaW51eFwiLFxuICAgICAgICBcImNwdVwiOiBcIng2NFwiLFxuICAgICAgICBcIm5hbWVcIjogXCJkYngtbGFrZWJhc2UtcHJveHktbGludXgteDY0LWdudS50YXIuZ3pcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJvc1wiOiBcImxpbnV4XCIsXG4gICAgICAgIFwiY3B1XCI6IFwiYXJtNjRcIixcbiAgICAgICAgXCJuYW1lXCI6IFwiZGJ4LWxha2ViYXNlLXByb3h5LWxpbnV4LWFybTY0LWdudS50YXIuZ3pcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJvc1wiOiBcImRhcndpblwiLFxuICAgICAgICBcImNwdVwiOiBcIng2NFwiLFxuICAgICAgICBcIm5hbWVcIjogXCJkYngtbGFrZWJhc2UtcHJveHktZGFyd2luLXg2NC50YXIuZ3pcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJvc1wiOiBcImRhcndpblwiLFxuICAgICAgICBcImNwdVwiOiBcImFybTY0XCIsXG4gICAgICAgIFwibmFtZVwiOiBcImRieC1sYWtlYmFzZS1wcm94eS1kYXJ3aW4tYXJtNjQudGFyLmd6XCJcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICBcImNvbW1hbmRcIjogXCJtb2RlbC1wcm94eVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIjogXCJNdWx0aS1wcm90b2NvbCBEYXRhYnJpY2tzIG1vZGVsIHByb3h5XCIsXG4gICAgXCJiaW5hcnlOYW1lXCI6IFwiZGJ4LW1vZGVsLXByb3h5XCIsXG4gICAgXCJyZXBvc2l0b3J5XCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JlZ2dpZS1kYi9kYngtdG9vbHNcIixcbiAgICBcImFzc2V0c1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwib3NcIjogXCJsaW51eFwiLFxuICAgICAgICBcImNwdVwiOiBcIng2NFwiLFxuICAgICAgICBcIm5hbWVcIjogXCJkYngtbW9kZWwtcHJveHktbGludXgteDY0LWdudS50YXIuZ3pcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJvc1wiOiBcImxpbnV4XCIsXG4gICAgICAgIFwiY3B1XCI6IFwiYXJtNjRcIixcbiAgICAgICAgXCJuYW1lXCI6IFwiZGJ4LW1vZGVsLXByb3h5LWxpbnV4LWFybTY0LWdudS50YXIuZ3pcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJvc1wiOiBcImRhcndpblwiLFxuICAgICAgICBcImNwdVwiOiBcIng2NFwiLFxuICAgICAgICBcIm5hbWVcIjogXCJkYngtbW9kZWwtcHJveHktZGFyd2luLXg2NC50YXIuZ3pcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJvc1wiOiBcImRhcndpblwiLFxuICAgICAgICBcImNwdVwiOiBcImFybTY0XCIsXG4gICAgICAgIFwibmFtZVwiOiBcImRieC1tb2RlbC1wcm94eS1kYXJ3aW4tYXJtNjQudGFyLmd6XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwib3NcIjogXCJ3aW4zMlwiLFxuICAgICAgICBcImNwdVwiOiBcIng2NFwiLFxuICAgICAgICBcIm5hbWVcIjogXCJkYngtbW9kZWwtcHJveHktd2luMzIteDY0LW1zdmMuemlwXCJcbiAgICAgIH1cbiAgICBdXG4gIH1cbl0gYXMgY29uc3Q7Il19
|
package/lib/src/cli.js
CHANGED
|
@@ -16,6 +16,7 @@ import { Command } from "commander";
|
|
|
16
16
|
import { bootstrapWorkspace, ensureEngineCurrent, runInitialSynth, seedToolchain, } from "./bootstrap.js";
|
|
17
17
|
import { ensureWorkspaceReady, runBun, runProjen } from "./bun.js";
|
|
18
18
|
import { findWorkspaceRoot, needsBootstrap, needsToolchain } from "./root.js";
|
|
19
|
+
import { runRustReleaseBinary, rustReleaseBinaryCommands, } from "./rust-binary.js";
|
|
19
20
|
/** Commands the bin exposes, and the names help is rendered under. */
|
|
20
21
|
const PROGRAM_NAMES = ["dbx", "dbx-tools"];
|
|
21
22
|
/**
|
|
@@ -67,11 +68,23 @@ function addForwardedCommand(program, name, description, load) {
|
|
|
67
68
|
await buildProgram(`${program.name()} ${name}`).parseAsync(args, { from: "user" });
|
|
68
69
|
});
|
|
69
70
|
}
|
|
71
|
+
function addRustReleaseCommand(program, command) {
|
|
72
|
+
program
|
|
73
|
+
.command(command.command)
|
|
74
|
+
.description(command.description)
|
|
75
|
+
.argument("[args...]", `arguments forwarded to ${command.binaryName}`)
|
|
76
|
+
.allowUnknownOption()
|
|
77
|
+
.allowExcessArguments()
|
|
78
|
+
.helpOption(false)
|
|
79
|
+
.action(async (args) => {
|
|
80
|
+
process.exitCode = await runRustReleaseBinary(command, args);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
70
83
|
/** Build the `dbx` commander program (no side effects until parsed). */
|
|
71
84
|
export function buildProgram(name = PROGRAM_NAMES[0]) {
|
|
72
85
|
const program = new Command()
|
|
73
86
|
.name(name)
|
|
74
|
-
.description("Databricks developer tools: workspace lifecycle, AppKit env, auth, and
|
|
87
|
+
.description("Databricks developer tools: workspace lifecycle, AppKit env, auth, tunnels, and native proxies")
|
|
75
88
|
.showHelpAfterError()
|
|
76
89
|
.helpOption("-h, --help", `Show ${name} help`);
|
|
77
90
|
program
|
|
@@ -87,6 +100,9 @@ export function buildProgram(name = PROGRAM_NAMES[0]) {
|
|
|
87
100
|
addForwardedCommand(program, "appkit", "AppKit helpers (env: print the environment an AppKit app resolves)", async () => (await import("@dbx-tools/cli-appkit-env/cli")).buildProgram);
|
|
88
101
|
addForwardedCommand(program, "auth", "Authenticate to Databricks and manage OAuth tokens", async () => (await import("@dbx-tools/cli-auth/cli")).buildProgram);
|
|
89
102
|
addForwardedCommand(program, "tunnel", "Run a public portr tunnel with an email-OTP gate", async () => (await import("@dbx-tools/cli-tunnel/cli")).buildProgram);
|
|
103
|
+
for (const command of rustReleaseBinaryCommands()) {
|
|
104
|
+
addRustReleaseCommand(program, command);
|
|
105
|
+
}
|
|
90
106
|
return program;
|
|
91
107
|
}
|
|
92
108
|
/**
|
|
@@ -101,4 +117,4 @@ function programName(argv) {
|
|
|
101
117
|
export async function runCli(argv) {
|
|
102
118
|
await buildProgram(programName(argv)).parseAsync(argv);
|
|
103
119
|
}
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlFLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFvQixFQUFFLFFBQWlCO0lBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPO0lBQ1QsQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFD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cEUsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYztJQUN6QyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWFuZGVyIGVudHJ5IGZvciBgZGJ4YCBhbmQgaXRzIGBkYngtdG9vbHNgIGFsaWFzLlxuICpcbiAqIGBkZXZgIGJvb3RzdHJhcHMgb3IgcmVwYWlycyBhIHdvcmtzcGFjZSBhbmQgZm9yd2FyZHMgdG8gcHJvamVuLlxuICogYGFwcGtpdGAgcHJvdmlkZXMgQXBwS2l0IGVudmlyb25tZW50IGhlbHBlcnMuXG4gKiBgYXV0aGAgbWFuYWdlcyBEYXRhYnJpY2tzIE9BdXRoIGFuZCBhY2Nlc3MgdG9rZW5zLlxuICogYHR1bm5lbGAgcnVucyBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBwYXNzd29yZGxlc3MgYWNjZXNzIGdhdGluZy5cbiAqXG4gKiBGZWF0dXJlIGNvbW1hbmRzIGxvYWQgdGhlaXIgc2libGluZyBwYWNrYWdlcyBvbmx5IHdoZW4gc2VsZWN0ZWQgYW5kIGZvcndhcmRcbiAqIHRoZWlyIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QsIGluY2x1ZGluZyBgLS1oZWxwYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7XG4gIGJvb3RzdHJhcFdvcmtzcGFjZSxcbiAgZW5zdXJlRW5naW5lQ3VycmVudCxcbiAgcnVuSW5pdGlhbFN5bnRoLFxuICBzZWVkVG9vbGNoYWluLFxufSBmcm9tIFwiLi9ib290c3RyYXAudHNcIjtcbmltcG9ydCB7IGVuc3VyZVdvcmtzcGFjZVJlYWR5LCBydW5CdW4sIHJ1blByb2plbiB9IGZyb20gXCIuL2J1bi50c1wiO1xuaW1wb3J0IHsgZmluZFdvcmtzcGFjZVJvb3QsIG5lZWRzQm9vdHN0cmFwLCBuZWVkc1Rvb2xjaGFpbiB9IGZyb20gXCIuL3Jvb3QudHNcIjtcblxuLyoqIENvbW1hbmRzIHRoZSBiaW4gZXhwb3NlcywgYW5kIHRoZSBuYW1lcyBoZWxwIGlzIHJlbmRlcmVkIHVuZGVyLiAqL1xuY29uc3QgUFJPR1JBTV9OQU1FUyA9IFtcImRieFwiLCBcImRieC10b29sc1wiXSBhcyBjb25zdDtcblxuLyoqXG4gKiBQcmVwYXJlIHRoZSB3b3Jrc3BhY2UgYXQgYHJvb3RgLCB0aGVuIHJ1biBwcm9qZW4gKHZpYSBidW4pIHdpdGggYHByb2plbkFyZ3NgLlxuICpcbiAqIFRocmVlIGNhc2VzLCBpbiBvcmRlcjpcbiAqICAgLSBubyBgLnByb2plbnJjLnRzYCBhdCBhbGwgLT4gZnVsbCBib290c3RyYXAgKHNjYWZmb2xkICsgaW5zdGFsbCArIHN5bnRoKSxcbiAqICAgICB3aGljaCBhbHJlYWR5IHJ1bnMgdGhlIGluaXRpYWwgc3ludGg7IG5vdGhpbmcgbW9yZSB0byBmb3J3YXJkLlxuICogICAtIGEgYC5wcm9qZW5yYy50c2AgYnV0IHRoZSBlbmdpbmUvdG9vbGNoYWluIGlzbid0IGluc3RhbGxlZCAoZS5nLiBhIGZyZXNobHlcbiAqICAgICBjb3BpZWQgcHJvamVjdCB3aG9zZSBnZW5lcmF0ZWQgZmlsZXMgKyBtYW5pZmVzdHMgYXJlIGdpdGlnbm9yZWQpIC0+IHNlZWRcbiAqICAgICB0aGUgdG9vbGNoYWluLCB0aGVuIHJ1biB0aGUgSU5JVElBTCBzeW50aCBkaXJlY3RseSAodGhlIHByb2plbiB0YXNrcyB0aGVcbiAqICAgICBhcmdzIHdvdWxkIG5hbWUsIGxpa2UgYHN5bmNgLCBkb24ndCBleGlzdCB1bnRpbCBgLnByb2plbnJjLnRzYCBoYXMgcnVuXG4gKiAgICAgb25jZSksIGFuZCBpbnN0YWxsLiBEb24ndCBmb3J3YXJkIGBwcm9qZW5BcmdzYCAtIHRoZSBzeW50aCBpcyB0aGUgd29yay5cbiAqICAgLSBvdGhlcndpc2UgKGVzdGFibGlzaGVkIHdvcmtzcGFjZSkgLT4gZW5zdXJlIGRlcHMsIGJyaW5nIHRoZSBlbmdpbmUgdXAgdG9cbiAqICAgICB0aGlzIENMSSdzIHZlcnNpb24sIHRoZW4gZm9yd2FyZCB0byBwcm9qZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3M6IHN0cmluZ1tdLCBzdGFydERpcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gYXdhaXQgZmluZFdvcmtzcGFjZVJvb3Qoc3RhcnREaXIpO1xuICBpZiAobmVlZHNCb290c3RyYXAocm9vdCkpIHtcbiAgICBib290c3RyYXBXb3Jrc3BhY2Uocm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChuZWVkc1Rvb2xjaGFpbihyb290KSkge1xuICAgIHNlZWRUb29sY2hhaW4ocm9vdCk7XG4gICAgcnVuSW5pdGlhbFN5bnRoKHJvb3QpO1xuICAgIHJ1bkJ1bihbXCJpbnN0YWxsXCJdLCByb290KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZW5zdXJlV29ya3NwYWNlUmVhZHkocm9vdCk7XG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQocm9vdCk7XG4gIHJ1blByb2plbihwcm9qZW5BcmdzLCByb290KTtcbn1cblxuLyoqXG4gKiBNb3VudCBgbmFtZWAgYXMgYSBjb21tYW5kIHRoYXQgY2FwdHVyZXMgZXZlcnkgZm9sbG93aW5nIHRva2VuIHZlcmJhdGltIGFuZFxuICogaGFuZHMgaXQgdG8gdGhlIHByb2dyYW0gYGxvYWQoKWAgcmVzb2x2ZXMuIGBoZWxwT3B0aW9uKGZhbHNlKWAgaXMgd2hhdCBsZXRzXG4gKiBgLS1oZWxwYCB0aHJvdWdoIHRvIHRoZSBjaGlsZCBpbnN0ZWFkIG9mIGJlaW5nIGFuc3dlcmVkIGhlcmUsIGFuZCB0aGUgY2hpbGRcbiAqIHByb2dyYW0gb3ducyBpdHMgb3duIGZsYWdzLCBzbyB0aGlzIHdyYXBwZXIgbmV2ZXIgaGFzIHRvIHJlc3RhdGUgdGhlbS5cbiAqL1xuZnVuY3Rpb24gYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgcHJvZ3JhbTogQ29tbWFuZCxcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBsb2FkOiAoKSA9PiBQcm9taXNlPChuYW1lOiBzdHJpbmcpID0+IENvbW1hbmQ+LFxuKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYXJndW1lbnQoXCJbYXJncy4uLl1cIiwgYGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gJHtuYW1lfWApXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChhcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRQcm9ncmFtID0gYXdhaXQgbG9hZCgpO1xuICAgICAgYXdhaXQgYnVpbGRQcm9ncmFtKGAke3Byb2dyYW0ubmFtZSgpfSAke25hbWV9YCkucGFyc2VBc3luYyhhcmdzLCB7IGZyb206IFwidXNlclwiIH0pO1xuICAgIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIGBkYnhgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZTogc3RyaW5nID0gUFJPR1JBTV9OQU1FU1swXSk6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKFwiRGF0YWJyaWNrcyBkZXZlbG9wZXIgdG9vbHM6IHdvcmtzcGFjZSBsaWZlY3ljbGUsIEFwcEtpdCBlbnYsIGF1dGgsIGFuZCB0dW5uZWxcIilcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKClcbiAgICAuaGVscE9wdGlvbihcIi1oLCAtLWhlbHBcIiwgYFNob3cgJHtuYW1lfSBoZWxwYCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiZGV2XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiQm9vdHN0cmFwIG9yIHJlcGFpciBhIGRieC10b29scyB3b3Jrc3BhY2UsIHRoZW4gZm9yd2FyZCB0byBwcm9qZW5cIilcbiAgICAuYXJndW1lbnQoXCJbcHJvamVuQXJncy4uLl1cIiwgXCJwcm9qZW4gdGFzayBhbmQgYXJndW1lbnRzIChlLmcuIHN5bmMgLS13YXRjaClcIilcbiAgICAuYWxsb3dVbmtub3duT3B0aW9uKClcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoKVxuICAgIC5oZWxwT3B0aW9uKGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKHByb2plbkFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBhd2FpdCBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3MpO1xuICAgIH0pO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImFwcGtpdFwiLFxuICAgIFwiQXBwS2l0IGhlbHBlcnMgKGVudjogcHJpbnQgdGhlIGVudmlyb25tZW50IGFuIEFwcEtpdCBhcHAgcmVzb2x2ZXMpXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWFwcGtpdC1lbnYvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiYXV0aFwiLFxuICAgIFwiQXV0aGVudGljYXRlIHRvIERhdGFicmlja3MgYW5kIG1hbmFnZSBPQXV0aCB0b2tlbnNcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktYXV0aC9jbGlcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJ0dW5uZWxcIixcbiAgICBcIlJ1biBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBhbiBlbWFpbC1PVFAgZ2F0ZVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCJAZGJ4LXRvb2xzL2NsaS10dW5uZWwvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIseUJBQXlCLEdBRTFCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsc0VBQXNFO0FBQ3RFLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXBEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLFVBQW9CLEVBQUUsUUFBaUI7SUFDL0UsTUFBTSxJQUFJLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FB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a0QsRUFDbEQsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQ3JFLENBQUM7SUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztRQUNsRCxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pGLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBlbnRyeSBmb3IgYGRieGAgYW5kIGl0cyBgZGJ4LXRvb2xzYCBhbGlhcy5cbiAqXG4gKiBgZGV2YCBib290c3RyYXBzIG9yIHJlcGFpcnMgYSB3b3Jrc3BhY2UgYW5kIGZvcndhcmRzIHRvIHByb2plbi5cbiAqIGBhcHBraXRgIHByb3ZpZGVzIEFwcEtpdCBlbnZpcm9ubWVudCBoZWxwZXJzLlxuICogYGF1dGhgIG1hbmFnZXMgRGF0YWJyaWNrcyBPQXV0aCBhbmQgYWNjZXNzIHRva2Vucy5cbiAqIGB0dW5uZWxgIHJ1bnMgYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggcGFzc3dvcmRsZXNzIGFjY2VzcyBnYXRpbmcuXG4gKlxuICogRmVhdHVyZSBjb21tYW5kcyBsb2FkIHRoZWlyIHNpYmxpbmcgcGFja2FnZXMgb25seSB3aGVuIHNlbGVjdGVkIGFuZCBmb3J3YXJkXG4gKiB0aGVpciBjb21wbGV0ZSBhcmd1bWVudCBsaXN0LCBpbmNsdWRpbmcgYC0taGVscGAuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQge1xuICBib290c3RyYXBXb3Jrc3BhY2UsXG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQsXG4gIHJ1bkluaXRpYWxTeW50aCxcbiAgc2VlZFRvb2xjaGFpbixcbn0gZnJvbSBcIi4vYm9vdHN0cmFwLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVXb3Jrc3BhY2VSZWFkeSwgcnVuQnVuLCBydW5Qcm9qZW4gfSBmcm9tIFwiLi9idW4udHNcIjtcbmltcG9ydCB7IGZpbmRXb3Jrc3BhY2VSb290LCBuZWVkc0Jvb3RzdHJhcCwgbmVlZHNUb29sY2hhaW4gfSBmcm9tIFwiLi9yb290LnRzXCI7XG5pbXBvcnQge1xuICBydW5SdXN0UmVsZWFzZUJpbmFyeSxcbiAgcnVzdFJlbGVhc2VCaW5hcnlDb21tYW5kcyxcbiAgdHlwZSBSdXN0UmVsZWFzZUJpbmFyeUNvbW1hbmQsXG59IGZyb20gXCIuL3J1c3QtYmluYXJ5LnRzXCI7XG5cbi8qKiBDb21tYW5kcyB0aGUgYmluIGV4cG9zZXMsIGFuZCB0aGUgbmFtZXMgaGVscCBpcyByZW5kZXJlZCB1bmRlci4gKi9cbmNvbnN0IFBST0dSQU1fTkFNRVMgPSBbXCJkYnhcIiwgXCJkYngtdG9vbHNcIl0gYXMgY29uc3Q7XG5cbi8qKlxuICogUHJlcGFyZSB0aGUgd29ya3NwYWNlIGF0IGByb290YCwgdGhlbiBydW4gcHJvamVuICh2aWEgYnVuKSB3aXRoIGBwcm9qZW5BcmdzYC5cbiAqXG4gKiBUaHJlZSBjYXNlcywgaW4gb3JkZXI6XG4gKiAgIC0gbm8gYC5wcm9qZW5yYy50c2AgYXQgYWxsIC0+IGZ1bGwgYm9vdHN0cmFwIChzY2FmZm9sZCArIGluc3RhbGwgKyBzeW50aCksXG4gKiAgICAgd2hpY2ggYWxyZWFkeSBydW5zIHRoZSBpbml0aWFsIHN5bnRoOyBub3RoaW5nIG1vcmUgdG8gZm9yd2FyZC5cbiAqICAgLSBhIGAucHJvamVucmMudHNgIGJ1dCB0aGUgZW5naW5lL3Rvb2xjaGFpbiBpc24ndCBpbnN0YWxsZWQgKGUuZy4gYSBmcmVzaGx5XG4gKiAgICAgY29waWVkIHByb2plY3Qgd2hvc2UgZ2VuZXJhdGVkIGZpbGVzICsgbWFuaWZlc3RzIGFyZSBnaXRpZ25vcmVkKSAtPiBzZWVkXG4gKiAgICAgdGhlIHRvb2xjaGFpbiwgdGhlbiBydW4gdGhlIElOSVRJQUwgc3ludGggZGlyZWN0bHkgKHRoZSBwcm9qZW4gdGFza3MgdGhlXG4gKiAgICAgYXJncyB3b3VsZCBuYW1lLCBsaWtlIGBzeW5jYCwgZG9uJ3QgZXhpc3QgdW50aWwgYC5wcm9qZW5yYy50c2AgaGFzIHJ1blxuICogICAgIG9uY2UpLCBhbmQgaW5zdGFsbC4gRG9uJ3QgZm9yd2FyZCBgcHJvamVuQXJnc2AgLSB0aGUgc3ludGggaXMgdGhlIHdvcmsuXG4gKiAgIC0gb3RoZXJ3aXNlIChlc3RhYmxpc2hlZCB3b3Jrc3BhY2UpIC0+IGVuc3VyZSBkZXBzLCBicmluZyB0aGUgZW5naW5lIHVwIHRvXG4gKiAgICAgdGhpcyBDTEkncyB2ZXJzaW9uLCB0aGVuIGZvcndhcmQgdG8gcHJvamVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUFuZFJ1blByb2plbihwcm9qZW5BcmdzOiBzdHJpbmdbXSwgc3RhcnREaXI/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KHN0YXJ0RGlyKTtcbiAgaWYgKG5lZWRzQm9vdHN0cmFwKHJvb3QpKSB7XG4gICAgYm9vdHN0cmFwV29ya3NwYWNlKHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobmVlZHNUb29sY2hhaW4ocm9vdCkpIHtcbiAgICBzZWVkVG9vbGNoYWluKHJvb3QpO1xuICAgIHJ1bkluaXRpYWxTeW50aChyb290KTtcbiAgICBydW5CdW4oW1wiaW5zdGFsbFwiXSwgcm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVuc3VyZVdvcmtzcGFjZVJlYWR5KHJvb3QpO1xuICBlbnN1cmVFbmdpbmVDdXJyZW50KHJvb3QpO1xuICBydW5Qcm9qZW4ocHJvamVuQXJncywgcm9vdCk7XG59XG5cbi8qKlxuICogTW91bnQgYG5hbWVgIGFzIGEgY29tbWFuZCB0aGF0IGNhcHR1cmVzIGV2ZXJ5IGZvbGxvd2luZyB0b2tlbiB2ZXJiYXRpbSBhbmRcbiAqIGhhbmRzIGl0IHRvIHRoZSBwcm9ncmFtIGBsb2FkKClgIHJlc29sdmVzLiBgaGVscE9wdGlvbihmYWxzZSlgIGlzIHdoYXQgbGV0c1xuICogYC0taGVscGAgdGhyb3VnaCB0byB0aGUgY2hpbGQgaW5zdGVhZCBvZiBiZWluZyBhbnN3ZXJlZCBoZXJlLCBhbmQgdGhlIGNoaWxkXG4gKiBwcm9ncmFtIG93bnMgaXRzIG93biBmbGFncywgc28gdGhpcyB3cmFwcGVyIG5ldmVyIGhhcyB0byByZXN0YXRlIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gIHByb2dyYW06IENvbW1hbmQsXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgbG9hZDogKCkgPT4gUHJvbWlzZTwobmFtZTogc3RyaW5nKSA9PiBDb21tYW5kPixcbik6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pXG4gICAgLmFyZ3VtZW50KFwiW2FyZ3MuLi5dXCIsIGBhcmd1bWVudHMgZm9yd2FyZGVkIHRvICR7bmFtZX1gKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmhlbHBPcHRpb24oZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAoYXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkUHJvZ3JhbSA9IGF3YWl0IGxvYWQoKTtcbiAgICAgIGF3YWl0IGJ1aWxkUHJvZ3JhbShgJHtwcm9ncmFtLm5hbWUoKX0gJHtuYW1lfWApLnBhcnNlQXN5bmMoYXJncywgeyBmcm9tOiBcInVzZXJcIiB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkUnVzdFJlbGVhc2VDb21tYW5kKHByb2dyYW06IENvbW1hbmQsIGNvbW1hbmQ6IFJ1c3RSZWxlYXNlQmluYXJ5Q29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoY29tbWFuZC5jb21tYW5kKVxuICAgIC5kZXNjcmlwdGlvbihjb21tYW5kLmRlc2NyaXB0aW9uKVxuICAgIC5hcmd1bWVudChcIlthcmdzLi4uXVwiLCBgYXJndW1lbnRzIGZvcndhcmRlZCB0byAke2NvbW1hbmQuYmluYXJ5TmFtZX1gKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmhlbHBPcHRpb24oZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAoYXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhd2FpdCBydW5SdXN0UmVsZWFzZUJpbmFyeShjb21tYW5kLCBhcmdzKTtcbiAgICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgZGJ4YCBjb21tYW5kZXIgcHJvZ3JhbSAobm8gc2lkZSBlZmZlY3RzIHVudGlsIHBhcnNlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQcm9ncmFtKG5hbWU6IHN0cmluZyA9IFBST0dSQU1fTkFNRVNbMF0pOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcbiAgICAubmFtZShuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiRGF0YWJyaWNrcyBkZXZlbG9wZXIgdG9vbHM6IHdvcmtzcGFjZSBsaWZlY3ljbGUsIEFwcEtpdCBlbnYsIGF1dGgsIHR1bm5lbHMsIGFuZCBuYXRpdmUgcHJveGllc1wiLFxuICAgIClcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKClcbiAgICAuaGVscE9wdGlvbihcIi1oLCAtLWhlbHBcIiwgYFNob3cgJHtuYW1lfSBoZWxwYCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiZGV2XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiQm9vdHN0cmFwIG9yIHJlcGFpciBhIGRieC10b29scyB3b3Jrc3BhY2UsIHRoZW4gZm9yd2FyZCB0byBwcm9qZW5cIilcbiAgICAuYXJndW1lbnQoXCJbcHJvamVuQXJncy4uLl1cIiwgXCJwcm9qZW4gdGFzayBhbmQgYXJndW1lbnRzIChlLmcuIHN5bmMgLS13YXRjaClcIilcbiAgICAuYWxsb3dVbmtub3duT3B0aW9uKClcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoKVxuICAgIC5oZWxwT3B0aW9uKGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKHByb2plbkFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBhd2FpdCBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3MpO1xuICAgIH0pO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImFwcGtpdFwiLFxuICAgIFwiQXBwS2l0IGhlbHBlcnMgKGVudjogcHJpbnQgdGhlIGVudmlyb25tZW50IGFuIEFwcEtpdCBhcHAgcmVzb2x2ZXMpXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWFwcGtpdC1lbnYvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiYXV0aFwiLFxuICAgIFwiQXV0aGVudGljYXRlIHRvIERhdGFicmlja3MgYW5kIG1hbmFnZSBPQXV0aCB0b2tlbnNcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktYXV0aC9jbGlcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJ0dW5uZWxcIixcbiAgICBcIlJ1biBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBhbiBlbWFpbC1PVFAgZ2F0ZVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCJAZGJ4LXRvb2xzL2NsaS10dW5uZWwvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kIG9mIHJ1c3RSZWxlYXNlQmluYXJ5Q29tbWFuZHMoKSkge1xuICAgIGFkZFJ1c3RSZWxlYXNlQ29tbWFuZChwcm9ncmFtLCBjb21tYW5kKTtcbiAgfVxuXG4gIHJldHVybiBwcm9ncmFtO1xufVxuXG4vKipcbiAqIFByb2dyYW0gbmFtZSBmb3IgaGVscCBvdXRwdXQ6IHdoaWNoZXZlciBiaW4gdGhlIHVzZXIgYWN0dWFsbHkgdHlwZWQsIHNvXG4gKiBgZGJ4LXRvb2xzIC0taGVscGAgZG9lc24ndCBkb2N1bWVudCBpdHNlbGYgYXMgYGRieGAuIEZhbGxzIGJhY2sgdG8gYGRieGAuXG4gKi9cbmZ1bmN0aW9uIHByb2dyYW1OYW1lKGFyZ3Y6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgaW52b2tlZCA9IGFyZ3ZbMV0gPyBiYXNlbmFtZShhcmd2WzFdKS5yZXBsYWNlKC9cXC4oPzpbY21dP1tqdF1zKSQvLCBcIlwiKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIFBST0dSQU1fTkFNRVMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgPT09IGludm9rZWQpID8/IFBST0dSQU1fTkFNRVNbMF07XG59XG5cbi8qKiBQYXJzZSBgYXJndmAgKGEgYHByb2Nlc3MuYXJndmApIGFuZCBydW4gdGhlIG1hdGNoaW5nIGNvbW1hbmQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ2xpKGFyZ3Y6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGJ1aWxkUHJvZ3JhbShwcm9ncmFtTmFtZShhcmd2KSkucGFyc2VBc3luYyhhcmd2KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { bin } from "@dbx-tools/core";
|
|
2
|
+
/** One release archive available to the current Node runtime. */
|
|
3
|
+
export interface RustReleaseBinaryAsset {
|
|
4
|
+
readonly os: string;
|
|
5
|
+
readonly cpu: string;
|
|
6
|
+
readonly name: string;
|
|
7
|
+
}
|
|
8
|
+
/** Generated registration for one `dbx` Rust command. */
|
|
9
|
+
export interface RustReleaseBinaryCommand {
|
|
10
|
+
readonly command: string;
|
|
11
|
+
readonly description: string;
|
|
12
|
+
readonly binaryName: string;
|
|
13
|
+
readonly repository: string;
|
|
14
|
+
readonly assets: readonly RustReleaseBinaryAsset[];
|
|
15
|
+
}
|
|
16
|
+
/** Overrides used by tests and callers that install under a custom home. */
|
|
17
|
+
export interface RustReleaseBinaryOptions {
|
|
18
|
+
readonly homeDir?: string;
|
|
19
|
+
readonly platform?: NodeJS.Platform;
|
|
20
|
+
readonly arch?: string;
|
|
21
|
+
readonly version?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Return every Rust command registered by the synthesized workspace. */
|
|
24
|
+
export declare function rustReleaseBinaryCommands(): readonly RustReleaseBinaryCommand[];
|
|
25
|
+
/** Resolve one registered Rust command by its `dbx` subcommand. */
|
|
26
|
+
export declare function rustReleaseBinaryCommand(command: string): RustReleaseBinaryCommand;
|
|
27
|
+
/** Select the archive for an OS and CPU pair. */
|
|
28
|
+
export declare function rustReleaseBinaryAsset(command: RustReleaseBinaryCommand, platform: NodeJS.Platform, arch: string): RustReleaseBinaryAsset;
|
|
29
|
+
/** Build the GitHub release URL for a generated archive entry. */
|
|
30
|
+
export declare function rustReleaseBinaryUrl(command: RustReleaseBinaryCommand, asset: RustReleaseBinaryAsset, version: string): string;
|
|
31
|
+
/** Install the release binary matching this CLI version and host platform. */
|
|
32
|
+
export declare function ensureRustReleaseBinary(command: RustReleaseBinaryCommand, options?: RustReleaseBinaryOptions): Promise<bin.BinContext>;
|
|
33
|
+
/** Install and run a Rust command with inherited terminal I/O. */
|
|
34
|
+
export declare function runRustReleaseBinary(command: RustReleaseBinaryCommand, args: readonly string[], options?: RustReleaseBinaryOptions): Promise<number>;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy installation and transparent execution of Rust release binaries.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from "node:child_process";
|
|
7
|
+
import { constants as osConstants, homedir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { bin } from "@dbx-tools/core";
|
|
10
|
+
import { RUST_RELEASE_BINARY_COMMANDS } from "./_rust-release-binaries.js";
|
|
11
|
+
/** Return every Rust command registered by the synthesized workspace. */
|
|
12
|
+
export function rustReleaseBinaryCommands() {
|
|
13
|
+
return RUST_RELEASE_BINARY_COMMANDS;
|
|
14
|
+
}
|
|
15
|
+
/** Resolve one registered Rust command by its `dbx` subcommand. */
|
|
16
|
+
export function rustReleaseBinaryCommand(command) {
|
|
17
|
+
const resolved = RUST_RELEASE_BINARY_COMMANDS.find((candidate) => candidate.command === command);
|
|
18
|
+
if (!resolved)
|
|
19
|
+
throw new Error(`Unknown Rust release command: ${command}`);
|
|
20
|
+
return resolved;
|
|
21
|
+
}
|
|
22
|
+
function repositoryName(repository) {
|
|
23
|
+
const parsed = new URL(repository.replace(/^git\+/, ""));
|
|
24
|
+
const name = parsed.pathname.replace(/^\/+|\/+$/g, "").replace(/\.git$/, "");
|
|
25
|
+
if (parsed.hostname !== "github.com" || name.split("/").length !== 2) {
|
|
26
|
+
throw new Error(`Rust release repository must be a GitHub owner/repository: ${repository}`);
|
|
27
|
+
}
|
|
28
|
+
return name;
|
|
29
|
+
}
|
|
30
|
+
async function packageVersion() {
|
|
31
|
+
return (await import("../index.js")).PACKAGE_VERSION;
|
|
32
|
+
}
|
|
33
|
+
function versionedBinaryName(binaryName, version, platform) {
|
|
34
|
+
const suffix = version.replace(/[^0-9A-Za-z]+/g, "_");
|
|
35
|
+
const extension = platform === "win32" ? ".exe" : "";
|
|
36
|
+
return `${binaryName}_${suffix}${extension}`;
|
|
37
|
+
}
|
|
38
|
+
/** Select the archive for an OS and CPU pair. */
|
|
39
|
+
export function rustReleaseBinaryAsset(command, platform, arch) {
|
|
40
|
+
const asset = command.assets.find((candidate) => candidate.os === platform && candidate.cpu === arch);
|
|
41
|
+
if (!asset) {
|
|
42
|
+
throw new Error(`${command.command} has no release binary for ${platform}/${arch}`);
|
|
43
|
+
}
|
|
44
|
+
return asset;
|
|
45
|
+
}
|
|
46
|
+
/** Build the GitHub release URL for a generated archive entry. */
|
|
47
|
+
export function rustReleaseBinaryUrl(command, asset, version) {
|
|
48
|
+
return `https://github.com/${repositoryName(command.repository)}/releases/download/v${version}/${asset.name}`;
|
|
49
|
+
}
|
|
50
|
+
/** Install the release binary matching this CLI version and host platform. */
|
|
51
|
+
export async function ensureRustReleaseBinary(command, options = {}) {
|
|
52
|
+
const platform = options.platform ?? process.platform;
|
|
53
|
+
const arch = options.arch ?? process.arch;
|
|
54
|
+
const version = options.version ?? (await packageVersion());
|
|
55
|
+
const asset = rustReleaseBinaryAsset(command, platform, arch);
|
|
56
|
+
const root = join(options.homeDir ?? homedir(), ".dbx-tools");
|
|
57
|
+
const binDir = join(root, "bin");
|
|
58
|
+
const destination = {
|
|
59
|
+
root,
|
|
60
|
+
binDir,
|
|
61
|
+
path: join(binDir, versionedBinaryName(command.binaryName, version, platform)),
|
|
62
|
+
};
|
|
63
|
+
return bin.ensure(command.binaryName, () => rustReleaseBinaryUrl(command, asset, version), {
|
|
64
|
+
autoUnpackage: true,
|
|
65
|
+
destination,
|
|
66
|
+
minVersion: version,
|
|
67
|
+
versionParser: (output) => {
|
|
68
|
+
const installed = bin.parseVersion(output);
|
|
69
|
+
return installed === version ? installed : undefined;
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function signalExitCode(signal) {
|
|
74
|
+
return 128 + (osConstants.signals[signal] ?? 0);
|
|
75
|
+
}
|
|
76
|
+
/** Install and run a Rust command with inherited terminal I/O. */
|
|
77
|
+
export async function runRustReleaseBinary(command, args, options = {}) {
|
|
78
|
+
const installed = await ensureRustReleaseBinary(command, options);
|
|
79
|
+
const child = spawn(installed.path, args, { stdio: "inherit" });
|
|
80
|
+
const signals = ["SIGINT", "SIGTERM", "SIGHUP"];
|
|
81
|
+
const handlers = new Map();
|
|
82
|
+
for (const signal of signals) {
|
|
83
|
+
const handler = () => {
|
|
84
|
+
if (!child.killed)
|
|
85
|
+
child.kill(signal);
|
|
86
|
+
};
|
|
87
|
+
handlers.set(signal, handler);
|
|
88
|
+
process.on(signal, handler);
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
return await new Promise((resolve, reject) => {
|
|
92
|
+
child.once("error", reject);
|
|
93
|
+
child.once("close", (code, signal) => {
|
|
94
|
+
resolve(signal ? signalExitCode(signal) : (code ?? 1));
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
for (const [signal, handler] of handlers)
|
|
100
|
+
process.off(signal, handler);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1iaW5hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVzdC1iaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUEwQjNFLHlFQUF5RTtBQUN6RSxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sNEJBQTRCLENBQUM7QUFDdEMsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBZTtJQUN0RCxNQUFNLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDakcsSUFBSSxDQUFDLFFBQVE7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxVQUFrQjtJQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FB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QVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztZQUFTLENBQUM7UUFDVCxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksUUFBUTtZQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYXp5IGluc3RhbGxhdGlvbiBhbmQgdHJhbnNwYXJlbnQgZXhlY3V0aW9uIG9mIFJ1c3QgcmVsZWFzZSBiaW5hcmllcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY29uc3RhbnRzIGFzIG9zQ29uc3RhbnRzLCBob21lZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGJpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IFJVU1RfUkVMRUFTRV9CSU5BUllfQ09NTUFORFMgfSBmcm9tIFwiLi9fcnVzdC1yZWxlYXNlLWJpbmFyaWVzLnRzXCI7XG5cbi8qKiBPbmUgcmVsZWFzZSBhcmNoaXZlIGF2YWlsYWJsZSB0byB0aGUgY3VycmVudCBOb2RlIHJ1bnRpbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1c3RSZWxlYXNlQmluYXJ5QXNzZXQge1xuICByZWFkb25seSBvczogc3RyaW5nO1xuICByZWFkb25seSBjcHU6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogR2VuZXJhdGVkIHJlZ2lzdHJhdGlvbiBmb3Igb25lIGBkYnhgIFJ1c3QgY29tbWFuZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVzdFJlbGVhc2VCaW5hcnlDb21tYW5kIHtcbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBiaW5hcnlOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlcG9zaXRvcnk6IHN0cmluZztcbiAgcmVhZG9ubHkgYXNzZXRzOiByZWFkb25seSBSdXN0UmVsZWFzZUJpbmFyeUFzc2V0W107XG59XG5cbi8qKiBPdmVycmlkZXMgdXNlZCBieSB0ZXN0cyBhbmQgY2FsbGVycyB0aGF0IGluc3RhbGwgdW5kZXIgYSBjdXN0b20gaG9tZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVzdFJlbGVhc2VCaW5hcnlPcHRpb25zIHtcbiAgcmVhZG9ubHkgaG9tZURpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcGxhdGZvcm0/OiBOb2RlSlMuUGxhdGZvcm07XG4gIHJlYWRvbmx5IGFyY2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKiBSZXR1cm4gZXZlcnkgUnVzdCBjb21tYW5kIHJlZ2lzdGVyZWQgYnkgdGhlIHN5bnRoZXNpemVkIHdvcmtzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydXN0UmVsZWFzZUJpbmFyeUNvbW1hbmRzKCk6IHJlYWRvbmx5IFJ1c3RSZWxlYXNlQmluYXJ5Q29tbWFuZFtdIHtcbiAgcmV0dXJuIFJVU1RfUkVMRUFTRV9CSU5BUllfQ09NTUFORFM7XG59XG5cbi8qKiBSZXNvbHZlIG9uZSByZWdpc3RlcmVkIFJ1c3QgY29tbWFuZCBieSBpdHMgYGRieGAgc3ViY29tbWFuZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydXN0UmVsZWFzZUJpbmFyeUNvbW1hbmQoY29tbWFuZDogc3RyaW5nKTogUnVzdFJlbGVhc2VCaW5hcnlDb21tYW5kIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBSVVNUX1JFTEVBU0VfQklOQVJZX0NPTU1BTkRTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmNvbW1hbmQgPT09IGNvbW1hbmQpO1xuICBpZiAoIXJlc29sdmVkKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUnVzdCByZWxlYXNlIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKTtcbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5mdW5jdGlvbiByZXBvc2l0b3J5TmFtZShyZXBvc2l0b3J5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHJlcG9zaXRvcnkucmVwbGFjZSgvXmdpdFxcKy8sIFwiXCIpKTtcbiAgY29uc3QgbmFtZSA9IHBhcnNlZC5wYXRobmFtZS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKS5yZXBsYWNlKC9cXC5naXQkLywgXCJcIik7XG4gIGlmIChwYXJzZWQuaG9zdG5hbWUgIT09IFwiZ2l0aHViLmNvbVwiIHx8IG5hbWUuc3BsaXQoXCIvXCIpLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUnVzdCByZWxlYXNlIHJlcG9zaXRvcnkgbXVzdCBiZSBhIEdpdEh1YiBvd25lci9yZXBvc2l0b3J5OiAke3JlcG9zaXRvcnl9YCk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhY2thZ2VWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgaW1wb3J0KFwiLi4vaW5kZXgudHNcIikpLlBBQ0tBR0VfVkVSU0lPTjtcbn1cblxuZnVuY3Rpb24gdmVyc2lvbmVkQmluYXJ5TmFtZShcbiAgYmluYXJ5TmFtZTogc3RyaW5nLFxuICB2ZXJzaW9uOiBzdHJpbmcsXG4gIHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0sXG4pOiBzdHJpbmcge1xuICBjb25zdCBzdWZmaXggPSB2ZXJzaW9uLnJlcGxhY2UoL1teMC05QS1aYS16XSsvZywgXCJfXCIpO1xuICBjb25zdCBleHRlbnNpb24gPSBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gXCIuZXhlXCIgOiBcIlwiO1xuICByZXR1cm4gYCR7YmluYXJ5TmFtZX1fJHtzdWZmaXh9JHtleHRlbnNpb259YDtcbn1cblxuLyoqIFNlbGVjdCB0aGUgYXJjaGl2ZSBmb3IgYW4gT1MgYW5kIENQVSBwYWlyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1c3RSZWxlYXNlQmluYXJ5QXNzZXQoXG4gIGNvbW1hbmQ6IFJ1c3RSZWxlYXNlQmluYXJ5Q29tbWFuZCxcbiAgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSxcbiAgYXJjaDogc3RyaW5nLFxuKTogUnVzdFJlbGVhc2VCaW5hcnlBc3NldCB7XG4gIGNvbnN0IGFzc2V0ID0gY29tbWFuZC5hc3NldHMuZmluZChcbiAgICAoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUub3MgPT09IHBsYXRmb3JtICYmIGNhbmRpZGF0ZS5jcHUgPT09IGFyY2gsXG4gICk7XG4gIGlmICghYXNzZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y29tbWFuZC5jb21tYW5kfSBoYXMgbm8gcmVsZWFzZSBiaW5hcnkgZm9yICR7cGxhdGZvcm19LyR7YXJjaH1gKTtcbiAgfVxuICByZXR1cm4gYXNzZXQ7XG59XG5cbi8qKiBCdWlsZCB0aGUgR2l0SHViIHJlbGVhc2UgVVJMIGZvciBhIGdlbmVyYXRlZCBhcmNoaXZlIGVudHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1c3RSZWxlYXNlQmluYXJ5VXJsKFxuICBjb21tYW5kOiBSdXN0UmVsZWFzZUJpbmFyeUNvbW1hbmQsXG4gIGFzc2V0OiBSdXN0UmVsZWFzZUJpbmFyeUFzc2V0LFxuICB2ZXJzaW9uOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG9zaXRvcnlOYW1lKGNvbW1hbmQucmVwb3NpdG9yeSl9L3JlbGVhc2VzL2Rvd25sb2FkL3Yke3ZlcnNpb259LyR7YXNzZXQubmFtZX1gO1xufVxuXG4vKiogSW5zdGFsbCB0aGUgcmVsZWFzZSBiaW5hcnkgbWF0Y2hpbmcgdGhpcyBDTEkgdmVyc2lvbiBhbmQgaG9zdCBwbGF0Zm9ybS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVSdXN0UmVsZWFzZUJpbmFyeShcbiAgY29tbWFuZDogUnVzdFJlbGVhc2VCaW5hcnlDb21tYW5kLFxuICBvcHRpb25zOiBSdXN0UmVsZWFzZUJpbmFyeU9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8YmluLkJpbkNvbnRleHQ+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBvcHRpb25zLnBsYXRmb3JtID8/IHByb2Nlc3MucGxhdGZvcm07XG4gIGNvbnN0IGFyY2ggPSBvcHRpb25zLmFyY2ggPz8gcHJvY2Vzcy5hcmNoO1xuICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uID8/IChhd2FpdCBwYWNrYWdlVmVyc2lvbigpKTtcbiAgY29uc3QgYXNzZXQgPSBydXN0UmVsZWFzZUJpbmFyeUFzc2V0KGNvbW1hbmQsIHBsYXRmb3JtLCBhcmNoKTtcbiAgY29uc3Qgcm9vdCA9IGpvaW4ob3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKSwgXCIuZGJ4LXRvb2xzXCIpO1xuICBjb25zdCBiaW5EaXIgPSBqb2luKHJvb3QsIFwiYmluXCIpO1xuICBjb25zdCBkZXN0aW5hdGlvbjogYmluLkJpbkNvbnRleHQgPSB7XG4gICAgcm9vdCxcbiAgICBiaW5EaXIsXG4gICAgcGF0aDogam9pbihiaW5EaXIsIHZlcnNpb25lZEJpbmFyeU5hbWUoY29tbWFuZC5iaW5hcnlOYW1lLCB2ZXJzaW9uLCBwbGF0Zm9ybSkpLFxuICB9O1xuICByZXR1cm4gYmluLmVuc3VyZShjb21tYW5kLmJpbmFyeU5hbWUsICgpID0+IHJ1c3RSZWxlYXNlQmluYXJ5VXJsKGNvbW1hbmQsIGFzc2V0LCB2ZXJzaW9uKSwge1xuICAgIGF1dG9VbnBhY2thZ2U6IHRydWUsXG4gICAgZGVzdGluYXRpb24sXG4gICAgbWluVmVyc2lvbjogdmVyc2lvbixcbiAgICB2ZXJzaW9uUGFyc2VyOiAob3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCBpbnN0YWxsZWQgPSBiaW4ucGFyc2VWZXJzaW9uKG91dHB1dCk7XG4gICAgICByZXR1cm4gaW5zdGFsbGVkID09PSB2ZXJzaW9uID8gaW5zdGFsbGVkIDogdW5kZWZpbmVkO1xuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzaWduYWxFeGl0Q29kZShzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogbnVtYmVyIHtcbiAgcmV0dXJuIDEyOCArIChvc0NvbnN0YW50cy5zaWduYWxzW3NpZ25hbF0gPz8gMCk7XG59XG5cbi8qKiBJbnN0YWxsIGFuZCBydW4gYSBSdXN0IGNvbW1hbmQgd2l0aCBpbmhlcml0ZWQgdGVybWluYWwgSS9PLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blJ1c3RSZWxlYXNlQmluYXJ5KFxuICBjb21tYW5kOiBSdXN0UmVsZWFzZUJpbmFyeUNvbW1hbmQsXG4gIGFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBvcHRpb25zOiBSdXN0UmVsZWFzZUJpbmFyeU9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IGVuc3VyZVJ1c3RSZWxlYXNlQmluYXJ5KGNvbW1hbmQsIG9wdGlvbnMpO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKGluc3RhbGxlZC5wYXRoLCBhcmdzLCB7IHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcbiAgY29uc3Qgc2lnbmFscyA9IFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIiwgXCJTSUdIVVBcIl0gYXMgY29uc3Q7XG4gIGNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcDxOb2RlSlMuU2lnbmFscywgKCkgPT4gdm9pZD4oKTtcbiAgZm9yIChjb25zdCBzaWduYWwgb2Ygc2lnbmFscykge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAoIWNoaWxkLmtpbGxlZCkgY2hpbGQua2lsbChzaWduYWwpO1xuICAgIH07XG4gICAgaGFuZGxlcnMuc2V0KHNpZ25hbCwgaGFuZGxlcik7XG4gICAgcHJvY2Vzcy5vbihzaWduYWwsIGhhbmRsZXIpO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGQub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICBjaGlsZC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICByZXNvbHZlKHNpZ25hbCA/IHNpZ25hbEV4aXRDb2RlKHNpZ25hbCkgOiAoY29kZSA/PyAxKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmb3IgKGNvbnN0IFtzaWduYWwsIGhhbmRsZXJdIG9mIGhhbmRsZXJzKSBwcm9jZXNzLm9mZihzaWduYWwsIGhhbmRsZXIpO1xuICB9XG59XG4iXX0=
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/bootstrap.ts","../src/bun.ts","../src/cli.ts","../src/root.ts","../index.ts","../bin/dbx-tools.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../src/_rust-release-binaries.ts","../src/bootstrap.ts","../src/bun.ts","../src/cli.ts","../src/root.ts","../src/rust-binary.ts","../index.ts","../bin/dbx-tools.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@clack/prompts": "^1.7.0",
|
|
31
|
-
"@dbx-tools/cli-appkit-env": "0.6.
|
|
32
|
-
"@dbx-tools/cli-auth": "0.6.
|
|
33
|
-
"@dbx-tools/cli-tunnel": "0.6.
|
|
34
|
-
"@dbx-tools/core": "0.6.
|
|
35
|
-
"@dbx-tools/shared-core": "0.6.
|
|
31
|
+
"@dbx-tools/cli-appkit-env": "0.6.188",
|
|
32
|
+
"@dbx-tools/cli-auth": "0.6.188",
|
|
33
|
+
"@dbx-tools/cli-tunnel": "0.6.188",
|
|
34
|
+
"@dbx-tools/core": "0.6.188",
|
|
35
|
+
"@dbx-tools/shared-core": "0.6.188",
|
|
36
36
|
"commander": "^15.0.0"
|
|
37
37
|
},
|
|
38
38
|
"main": "./lib/index.js",
|
|
@@ -66,10 +66,14 @@
|
|
|
66
66
|
"types": "./lib/src/root.d.ts",
|
|
67
67
|
"default": "./lib/src/root.js"
|
|
68
68
|
},
|
|
69
|
+
"./rust-binary": {
|
|
70
|
+
"types": "./lib/src/rust-binary.d.ts",
|
|
71
|
+
"default": "./lib/src/rust-binary.js"
|
|
72
|
+
},
|
|
69
73
|
"./package.json": "./package.json"
|
|
70
74
|
}
|
|
71
75
|
},
|
|
72
|
-
"version": "0.6.
|
|
76
|
+
"version": "0.6.188",
|
|
73
77
|
"types": "./lib/index.d.ts",
|
|
74
78
|
"type": "module",
|
|
75
79
|
"exports": {
|
|
@@ -93,6 +97,10 @@
|
|
|
93
97
|
"types": "./lib/src/root.d.ts",
|
|
94
98
|
"default": "./lib/src/root.js"
|
|
95
99
|
},
|
|
100
|
+
"./rust-binary": {
|
|
101
|
+
"types": "./lib/src/rust-binary.d.ts",
|
|
102
|
+
"default": "./lib/src/rust-binary.js"
|
|
103
|
+
},
|
|
96
104
|
"./package.json": "./package.json"
|
|
97
105
|
},
|
|
98
106
|
"files": [
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// GENERATED by projen - DO NOT EDIT.
|
|
2
|
+
// Rust release package options are the source of truth.
|
|
3
|
+
|
|
4
|
+
export const RUST_RELEASE_BINARY_COMMANDS = [
|
|
5
|
+
{
|
|
6
|
+
"command": "lakebase-proxy",
|
|
7
|
+
"description": "Loopback PostgreSQL proxy for Databricks Lakebase",
|
|
8
|
+
"binaryName": "dbx-lakebase-proxy",
|
|
9
|
+
"repository": "https://github.com/reggie-db/dbx-tools",
|
|
10
|
+
"assets": [
|
|
11
|
+
{
|
|
12
|
+
"os": "linux",
|
|
13
|
+
"cpu": "x64",
|
|
14
|
+
"name": "dbx-lakebase-proxy-linux-x64-gnu.tar.gz"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"os": "linux",
|
|
18
|
+
"cpu": "arm64",
|
|
19
|
+
"name": "dbx-lakebase-proxy-linux-arm64-gnu.tar.gz"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"os": "darwin",
|
|
23
|
+
"cpu": "x64",
|
|
24
|
+
"name": "dbx-lakebase-proxy-darwin-x64.tar.gz"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"os": "darwin",
|
|
28
|
+
"cpu": "arm64",
|
|
29
|
+
"name": "dbx-lakebase-proxy-darwin-arm64.tar.gz"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"command": "model-proxy",
|
|
35
|
+
"description": "Multi-protocol Databricks model proxy",
|
|
36
|
+
"binaryName": "dbx-model-proxy",
|
|
37
|
+
"repository": "https://github.com/reggie-db/dbx-tools",
|
|
38
|
+
"assets": [
|
|
39
|
+
{
|
|
40
|
+
"os": "linux",
|
|
41
|
+
"cpu": "x64",
|
|
42
|
+
"name": "dbx-model-proxy-linux-x64-gnu.tar.gz"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"os": "linux",
|
|
46
|
+
"cpu": "arm64",
|
|
47
|
+
"name": "dbx-model-proxy-linux-arm64-gnu.tar.gz"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"os": "darwin",
|
|
51
|
+
"cpu": "x64",
|
|
52
|
+
"name": "dbx-model-proxy-darwin-x64.tar.gz"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"os": "darwin",
|
|
56
|
+
"cpu": "arm64",
|
|
57
|
+
"name": "dbx-model-proxy-darwin-arm64.tar.gz"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"os": "win32",
|
|
61
|
+
"cpu": "x64",
|
|
62
|
+
"name": "dbx-model-proxy-win32-x64-msvc.zip"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
] as const;
|
package/src/cli.ts
CHANGED
|
@@ -21,6 +21,11 @@ import {
|
|
|
21
21
|
} from "./bootstrap.ts";
|
|
22
22
|
import { ensureWorkspaceReady, runBun, runProjen } from "./bun.ts";
|
|
23
23
|
import { findWorkspaceRoot, needsBootstrap, needsToolchain } from "./root.ts";
|
|
24
|
+
import {
|
|
25
|
+
runRustReleaseBinary,
|
|
26
|
+
rustReleaseBinaryCommands,
|
|
27
|
+
type RustReleaseBinaryCommand,
|
|
28
|
+
} from "./rust-binary.ts";
|
|
24
29
|
|
|
25
30
|
/** Commands the bin exposes, and the names help is rendered under. */
|
|
26
31
|
const PROGRAM_NAMES = ["dbx", "dbx-tools"] as const;
|
|
@@ -81,11 +86,26 @@ function addForwardedCommand(
|
|
|
81
86
|
});
|
|
82
87
|
}
|
|
83
88
|
|
|
89
|
+
function addRustReleaseCommand(program: Command, command: RustReleaseBinaryCommand): void {
|
|
90
|
+
program
|
|
91
|
+
.command(command.command)
|
|
92
|
+
.description(command.description)
|
|
93
|
+
.argument("[args...]", `arguments forwarded to ${command.binaryName}`)
|
|
94
|
+
.allowUnknownOption()
|
|
95
|
+
.allowExcessArguments()
|
|
96
|
+
.helpOption(false)
|
|
97
|
+
.action(async (args: string[]) => {
|
|
98
|
+
process.exitCode = await runRustReleaseBinary(command, args);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
84
102
|
/** Build the `dbx` commander program (no side effects until parsed). */
|
|
85
103
|
export function buildProgram(name: string = PROGRAM_NAMES[0]): Command {
|
|
86
104
|
const program = new Command()
|
|
87
105
|
.name(name)
|
|
88
|
-
.description(
|
|
106
|
+
.description(
|
|
107
|
+
"Databricks developer tools: workspace lifecycle, AppKit env, auth, tunnels, and native proxies",
|
|
108
|
+
)
|
|
89
109
|
.showHelpAfterError()
|
|
90
110
|
.helpOption("-h, --help", `Show ${name} help`);
|
|
91
111
|
|
|
@@ -121,6 +141,10 @@ export function buildProgram(name: string = PROGRAM_NAMES[0]): Command {
|
|
|
121
141
|
async () => (await import("@dbx-tools/cli-tunnel/cli")).buildProgram,
|
|
122
142
|
);
|
|
123
143
|
|
|
144
|
+
for (const command of rustReleaseBinaryCommands()) {
|
|
145
|
+
addRustReleaseCommand(program, command);
|
|
146
|
+
}
|
|
147
|
+
|
|
124
148
|
return program;
|
|
125
149
|
}
|
|
126
150
|
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy installation and transparent execution of Rust release binaries.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from "node:child_process";
|
|
7
|
+
import { constants as osConstants, homedir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
|
|
10
|
+
import { bin } from "@dbx-tools/core";
|
|
11
|
+
import { RUST_RELEASE_BINARY_COMMANDS } from "./_rust-release-binaries.ts";
|
|
12
|
+
|
|
13
|
+
/** One release archive available to the current Node runtime. */
|
|
14
|
+
export interface RustReleaseBinaryAsset {
|
|
15
|
+
readonly os: string;
|
|
16
|
+
readonly cpu: string;
|
|
17
|
+
readonly name: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Generated registration for one `dbx` Rust command. */
|
|
21
|
+
export interface RustReleaseBinaryCommand {
|
|
22
|
+
readonly command: string;
|
|
23
|
+
readonly description: string;
|
|
24
|
+
readonly binaryName: string;
|
|
25
|
+
readonly repository: string;
|
|
26
|
+
readonly assets: readonly RustReleaseBinaryAsset[];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Overrides used by tests and callers that install under a custom home. */
|
|
30
|
+
export interface RustReleaseBinaryOptions {
|
|
31
|
+
readonly homeDir?: string;
|
|
32
|
+
readonly platform?: NodeJS.Platform;
|
|
33
|
+
readonly arch?: string;
|
|
34
|
+
readonly version?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Return every Rust command registered by the synthesized workspace. */
|
|
38
|
+
export function rustReleaseBinaryCommands(): readonly RustReleaseBinaryCommand[] {
|
|
39
|
+
return RUST_RELEASE_BINARY_COMMANDS;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Resolve one registered Rust command by its `dbx` subcommand. */
|
|
43
|
+
export function rustReleaseBinaryCommand(command: string): RustReleaseBinaryCommand {
|
|
44
|
+
const resolved = RUST_RELEASE_BINARY_COMMANDS.find((candidate) => candidate.command === command);
|
|
45
|
+
if (!resolved) throw new Error(`Unknown Rust release command: ${command}`);
|
|
46
|
+
return resolved;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function repositoryName(repository: string): string {
|
|
50
|
+
const parsed = new URL(repository.replace(/^git\+/, ""));
|
|
51
|
+
const name = parsed.pathname.replace(/^\/+|\/+$/g, "").replace(/\.git$/, "");
|
|
52
|
+
if (parsed.hostname !== "github.com" || name.split("/").length !== 2) {
|
|
53
|
+
throw new Error(`Rust release repository must be a GitHub owner/repository: ${repository}`);
|
|
54
|
+
}
|
|
55
|
+
return name;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function packageVersion(): Promise<string> {
|
|
59
|
+
return (await import("../index.ts")).PACKAGE_VERSION;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function versionedBinaryName(
|
|
63
|
+
binaryName: string,
|
|
64
|
+
version: string,
|
|
65
|
+
platform: NodeJS.Platform,
|
|
66
|
+
): string {
|
|
67
|
+
const suffix = version.replace(/[^0-9A-Za-z]+/g, "_");
|
|
68
|
+
const extension = platform === "win32" ? ".exe" : "";
|
|
69
|
+
return `${binaryName}_${suffix}${extension}`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Select the archive for an OS and CPU pair. */
|
|
73
|
+
export function rustReleaseBinaryAsset(
|
|
74
|
+
command: RustReleaseBinaryCommand,
|
|
75
|
+
platform: NodeJS.Platform,
|
|
76
|
+
arch: string,
|
|
77
|
+
): RustReleaseBinaryAsset {
|
|
78
|
+
const asset = command.assets.find(
|
|
79
|
+
(candidate) => candidate.os === platform && candidate.cpu === arch,
|
|
80
|
+
);
|
|
81
|
+
if (!asset) {
|
|
82
|
+
throw new Error(`${command.command} has no release binary for ${platform}/${arch}`);
|
|
83
|
+
}
|
|
84
|
+
return asset;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Build the GitHub release URL for a generated archive entry. */
|
|
88
|
+
export function rustReleaseBinaryUrl(
|
|
89
|
+
command: RustReleaseBinaryCommand,
|
|
90
|
+
asset: RustReleaseBinaryAsset,
|
|
91
|
+
version: string,
|
|
92
|
+
): string {
|
|
93
|
+
return `https://github.com/${repositoryName(command.repository)}/releases/download/v${version}/${asset.name}`;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Install the release binary matching this CLI version and host platform. */
|
|
97
|
+
export async function ensureRustReleaseBinary(
|
|
98
|
+
command: RustReleaseBinaryCommand,
|
|
99
|
+
options: RustReleaseBinaryOptions = {},
|
|
100
|
+
): Promise<bin.BinContext> {
|
|
101
|
+
const platform = options.platform ?? process.platform;
|
|
102
|
+
const arch = options.arch ?? process.arch;
|
|
103
|
+
const version = options.version ?? (await packageVersion());
|
|
104
|
+
const asset = rustReleaseBinaryAsset(command, platform, arch);
|
|
105
|
+
const root = join(options.homeDir ?? homedir(), ".dbx-tools");
|
|
106
|
+
const binDir = join(root, "bin");
|
|
107
|
+
const destination: bin.BinContext = {
|
|
108
|
+
root,
|
|
109
|
+
binDir,
|
|
110
|
+
path: join(binDir, versionedBinaryName(command.binaryName, version, platform)),
|
|
111
|
+
};
|
|
112
|
+
return bin.ensure(command.binaryName, () => rustReleaseBinaryUrl(command, asset, version), {
|
|
113
|
+
autoUnpackage: true,
|
|
114
|
+
destination,
|
|
115
|
+
minVersion: version,
|
|
116
|
+
versionParser: (output) => {
|
|
117
|
+
const installed = bin.parseVersion(output);
|
|
118
|
+
return installed === version ? installed : undefined;
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function signalExitCode(signal: NodeJS.Signals): number {
|
|
124
|
+
return 128 + (osConstants.signals[signal] ?? 0);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Install and run a Rust command with inherited terminal I/O. */
|
|
128
|
+
export async function runRustReleaseBinary(
|
|
129
|
+
command: RustReleaseBinaryCommand,
|
|
130
|
+
args: readonly string[],
|
|
131
|
+
options: RustReleaseBinaryOptions = {},
|
|
132
|
+
): Promise<number> {
|
|
133
|
+
const installed = await ensureRustReleaseBinary(command, options);
|
|
134
|
+
const child = spawn(installed.path, args, { stdio: "inherit" });
|
|
135
|
+
const signals = ["SIGINT", "SIGTERM", "SIGHUP"] as const;
|
|
136
|
+
const handlers = new Map<NodeJS.Signals, () => void>();
|
|
137
|
+
for (const signal of signals) {
|
|
138
|
+
const handler = () => {
|
|
139
|
+
if (!child.killed) child.kill(signal);
|
|
140
|
+
};
|
|
141
|
+
handlers.set(signal, handler);
|
|
142
|
+
process.on(signal, handler);
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
return await new Promise<number>((resolve, reject) => {
|
|
146
|
+
child.once("error", reject);
|
|
147
|
+
child.once("close", (code, signal) => {
|
|
148
|
+
resolve(signal ? signalExitCode(signal) : (code ?? 1));
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
} finally {
|
|
152
|
+
for (const [signal, handler] of handlers) process.off(signal, handler);
|
|
153
|
+
}
|
|
154
|
+
}
|