ai-project-manage-cli 2.0.12 → 2.0.14
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 +6 -6
- package/dist/api/cli.d.ts +62 -1
- package/dist/api/cli.d.ts.map +1 -1
- package/dist/api/client.d.ts +3 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/request-config.d.ts +4 -1
- package/dist/api/request-config.d.ts.map +1 -1
- package/dist/api/request-config.js +12 -0
- package/dist/api/request-config.js.map +1 -1
- package/dist/cli/commands/deploy-backend.d.ts +7 -0
- package/dist/cli/commands/deploy-backend.d.ts.map +1 -0
- package/dist/cli/commands/deploy-backend.js +67 -0
- package/dist/cli/commands/deploy-backend.js.map +1 -0
- package/dist/cli/commands/deploy-frontend.d.ts +3 -0
- package/dist/cli/commands/deploy-frontend.d.ts.map +1 -0
- package/dist/cli/commands/deploy-frontend.js +98 -0
- package/dist/cli/commands/deploy-frontend.js.map +1 -0
- package/dist/cli/commands/get.d.ts.map +1 -1
- package/dist/cli/commands/get.js +1 -1
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/publish.d.ts.map +1 -1
- package/dist/cli/commands/publish.js +42 -127
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/commands/release.d.ts +3 -0
- package/dist/cli/commands/release.d.ts.map +1 -0
- package/dist/cli/commands/release.js +39 -0
- package/dist/cli/commands/release.js.map +1 -0
- package/dist/cli/utils/parse.d.ts +2 -0
- package/dist/cli/utils/parse.d.ts.map +1 -0
- package/dist/cli/utils/parse.js +12 -0
- package/dist/cli/utils/parse.js.map +1 -0
- package/dist/cli.js +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/apm-config.d.ts +48 -1
- package/dist/core/apm-config.d.ts.map +1 -1
- package/dist/core/apm-config.js +93 -3
- package/dist/core/apm-config.js.map +1 -1
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +19 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +1 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.js +79 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.js.map +1 -0
- package/dist/core/backend-deploy/command-runner.d.ts +11 -0
- package/dist/core/backend-deploy/command-runner.d.ts.map +1 -0
- package/dist/core/backend-deploy/command-runner.js +47 -0
- package/dist/core/backend-deploy/command-runner.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/client.d.ts +18 -0
- package/dist/core/backend-deploy/dockerode-client/client.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/client.js +114 -0
- package/dist/core/backend-deploy/dockerode-client/client.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts +6 -0
- package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/connection-options.js +52 -0
- package/dist/core/backend-deploy/dockerode-client/connection-options.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts +3 -0
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js +23 -0
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/container-options.d.ts +4 -0
- package/dist/core/backend-deploy/dockerode-client/container-options.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/container-options.js +36 -0
- package/dist/core/backend-deploy/dockerode-client/container-options.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/env.d.ts +3 -0
- package/dist/core/backend-deploy/dockerode-client/env.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/env.js +37 -0
- package/dist/core/backend-deploy/dockerode-client/env.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/index.d.ts +8 -0
- package/dist/core/backend-deploy/dockerode-client/index.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/index.js +17 -0
- package/dist/core/backend-deploy/dockerode-client/index.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/ports.d.ts +9 -0
- package/dist/core/backend-deploy/dockerode-client/ports.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/ports.js +35 -0
- package/dist/core/backend-deploy/dockerode-client/ports.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/runtime.d.ts +7 -0
- package/dist/core/backend-deploy/dockerode-client/runtime.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/runtime.js +26 -0
- package/dist/core/backend-deploy/dockerode-client/runtime.js.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/types.d.ts +62 -0
- package/dist/core/backend-deploy/dockerode-client/types.d.ts.map +1 -0
- package/dist/core/backend-deploy/dockerode-client/types.js +3 -0
- package/dist/core/backend-deploy/dockerode-client/types.js.map +1 -0
- package/dist/core/backend-deploy/image-tag.d.ts +2 -0
- package/dist/core/backend-deploy/image-tag.d.ts.map +1 -0
- package/dist/core/backend-deploy/image-tag.js +15 -0
- package/dist/core/backend-deploy/image-tag.js.map +1 -0
- package/dist/core/backend-deploy/index.d.ts +3 -0
- package/dist/core/backend-deploy/index.d.ts.map +1 -0
- package/dist/core/backend-deploy/index.js +6 -0
- package/dist/core/backend-deploy/index.js.map +1 -0
- package/dist/core/backend-deploy/local-docker-build.d.ts +8 -0
- package/dist/core/backend-deploy/local-docker-build.d.ts.map +1 -0
- package/dist/core/backend-deploy/local-docker-build.js +25 -0
- package/dist/core/backend-deploy/local-docker-build.js.map +1 -0
- package/dist/core/backend-deploy/logger.d.ts +10 -0
- package/dist/core/backend-deploy/logger.d.ts.map +1 -0
- package/dist/core/backend-deploy/logger.js +22 -0
- package/dist/core/backend-deploy/logger.js.map +1 -0
- package/dist/core/backend-deploy/registry-login-push.d.ts +24 -0
- package/dist/core/backend-deploy/registry-login-push.d.ts.map +1 -0
- package/dist/core/backend-deploy/registry-login-push.js +37 -0
- package/dist/core/backend-deploy/registry-login-push.js.map +1 -0
- package/dist/core/backend-deploy/remote-docker-client.d.ts +11 -0
- package/dist/core/backend-deploy/remote-docker-client.d.ts.map +1 -0
- package/dist/core/backend-deploy/remote-docker-client.js +34 -0
- package/dist/core/backend-deploy/remote-docker-client.js.map +1 -0
- package/dist/core/backend-deploy/remote-pull-image.d.ts +9 -0
- package/dist/core/backend-deploy/remote-pull-image.d.ts.map +1 -0
- package/dist/core/backend-deploy/remote-pull-image.js +39 -0
- package/dist/core/backend-deploy/remote-pull-image.js.map +1 -0
- package/dist/core/backend-deploy/resolve-dockerfile.d.ts +7 -0
- package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +1 -0
- package/dist/core/backend-deploy/resolve-dockerfile.js +24 -0
- package/dist/core/backend-deploy/resolve-dockerfile.js.map +1 -0
- package/dist/core/backend-deploy/run-docker-cli.d.ts +9 -0
- package/dist/core/backend-deploy/run-docker-cli.d.ts.map +1 -0
- package/dist/core/backend-deploy/run-docker-cli.js +14 -0
- package/dist/core/backend-deploy/run-docker-cli.js.map +1 -0
- package/dist/core/backend-deploy/types.d.ts +21 -0
- package/dist/core/backend-deploy/types.d.ts.map +1 -0
- package/dist/core/backend-deploy/types.js +3 -0
- package/dist/core/backend-deploy/types.js.map +1 -0
- package/dist/core/branch-name.d.ts +8 -0
- package/dist/core/branch-name.d.ts.map +1 -0
- package/dist/core/branch-name.js +37 -0
- package/dist/core/branch-name.js.map +1 -0
- package/dist/core/cursor-cmd.d.ts.map +1 -1
- package/dist/core/cursor-cmd.js +2 -1
- package/dist/core/cursor-cmd.js.map +1 -1
- package/dist/core/minio.d.ts +35 -0
- package/dist/core/minio.d.ts.map +1 -0
- package/dist/core/minio.js +154 -0
- package/dist/core/minio.js.map +1 -0
- package/package.json +6 -5
- package/templates/skills/apm-release/SKILL.md +87 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BackendDeployWorkflow = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const dockerode_client_1 = require("./dockerode-client");
|
|
9
|
+
const image_tag_1 = require("./image-tag");
|
|
10
|
+
const local_docker_build_1 = require("./local-docker-build");
|
|
11
|
+
const logger_1 = require("./logger");
|
|
12
|
+
const registry_login_push_1 = require("./registry-login-push");
|
|
13
|
+
const resolve_dockerfile_1 = require("./resolve-dockerfile");
|
|
14
|
+
const env_1 = require("./dockerode-client/env");
|
|
15
|
+
/**
|
|
16
|
+
* 后端镜像部署编排:本地构建 → 推送私有 Registry → 远程 Docker 拉取镜像。
|
|
17
|
+
*
|
|
18
|
+
* 与常见「Deployer」脚本对应关系:本地 `docker build` + `docker login` + `docker push`
|
|
19
|
+
* 在这里拆成独立步骤;镜像名在 CLI 侧已拼成完整 `imageRef`(等价于先 build -t 再 tag 成仓库地址)。
|
|
20
|
+
* 远程 `docker pull` 用 dockerode 调用远程引擎 API(参考代码若只操作本机则不会包含这一步)。
|
|
21
|
+
*
|
|
22
|
+
* 配置由 {@link BackendDeployParams} 传入(例如从 `.apm/apm.config.json` 映射)。
|
|
23
|
+
*/
|
|
24
|
+
class BackendDeployWorkflow {
|
|
25
|
+
params;
|
|
26
|
+
constructor(params) {
|
|
27
|
+
this.params = params;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @param cwd - 解析相对路径时的基准目录(Dockerfile)
|
|
31
|
+
*/
|
|
32
|
+
async run(cwd) {
|
|
33
|
+
(0, resolve_dockerfile_1.resolveDockerBuildPaths)(cwd);
|
|
34
|
+
(0, image_tag_1.assertDeployImageTag)(this.params.tag);
|
|
35
|
+
(0, local_docker_build_1.buildDockerImageLocally)(this.params, cwd);
|
|
36
|
+
(0, registry_login_push_1.dockerLoginPrivateRegistry)(this.params, cwd);
|
|
37
|
+
(0, registry_login_push_1.dockerTagImage)(this.params, cwd);
|
|
38
|
+
(0, registry_login_push_1.dockerPushImage)(this.params, cwd);
|
|
39
|
+
const remoteClient = (0, dockerode_client_1.createDockerodeClient)({
|
|
40
|
+
host: this.params.remoteHost,
|
|
41
|
+
port: this.params.remotePort,
|
|
42
|
+
protocol: this.params.remoteProtocol,
|
|
43
|
+
ca: this.params.remoteCaPath,
|
|
44
|
+
cert: this.params.remoteCertPath,
|
|
45
|
+
key: this.params.remoteKeyPath,
|
|
46
|
+
});
|
|
47
|
+
const serveraddress = `https://${this.params.registryHost}`;
|
|
48
|
+
const image = `${this.params.registryHost}/${this.params.registryNamespace}/${this.params.image}:${this.params.tag}`;
|
|
49
|
+
const containerName = `${this.params.image}:${this.params.tag}`;
|
|
50
|
+
const existingContainerId = await remoteClient.findContainerIdByName(containerName);
|
|
51
|
+
if (existingContainerId) {
|
|
52
|
+
logger_1.Logger.info(`远程容器「${containerName}」已存在,正在停止并删除容器...`);
|
|
53
|
+
await remoteClient.stopContainer(existingContainerId);
|
|
54
|
+
await remoteClient.removeContainer(existingContainerId);
|
|
55
|
+
}
|
|
56
|
+
if (await remoteClient.imageExists(image)) {
|
|
57
|
+
logger_1.Logger.info("远程已存在同名镜像,正在删除以便重新拉取...");
|
|
58
|
+
await remoteClient.removeImage(image);
|
|
59
|
+
}
|
|
60
|
+
await remoteClient.pullImage(image, {
|
|
61
|
+
username: this.params.registryUser,
|
|
62
|
+
password: this.params.registryPassword,
|
|
63
|
+
serveraddress,
|
|
64
|
+
});
|
|
65
|
+
logger_1.Logger.success("远程拉取镜像完成");
|
|
66
|
+
const envFilePath = node_path_1.default.resolve(cwd, this.params.envFilePath || '.env');
|
|
67
|
+
const envObj = (0, dockerode_client_1.loadEnvFromFile)(envFilePath);
|
|
68
|
+
const containerId = await remoteClient.createContainer({
|
|
69
|
+
name: containerName,
|
|
70
|
+
image,
|
|
71
|
+
env: (0, env_1.toEnvArray)(envObj),
|
|
72
|
+
...(0, dockerode_client_1.parsePorts)(this.params.containerPortsMappings)
|
|
73
|
+
});
|
|
74
|
+
await remoteClient.startContainer(containerId);
|
|
75
|
+
logger_1.Logger.success("远程容器创建并启动完成");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.BackendDeployWorkflow = BackendDeployWorkflow;
|
|
79
|
+
//# sourceMappingURL=backend-deploy-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-deploy-workflow.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/backend-deploy-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-runner.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/command-runner.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAgBlD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAY3D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommandRunner = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 命令执行工具类
|
|
6
|
+
*/
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const logger_1 = require("./logger");
|
|
9
|
+
class CommandRunner {
|
|
10
|
+
/**
|
|
11
|
+
* 执行命令
|
|
12
|
+
*/
|
|
13
|
+
static exec(command, cwd) {
|
|
14
|
+
try {
|
|
15
|
+
logger_1.Logger.info(`执行命令: ${command}`);
|
|
16
|
+
const result = (0, child_process_1.execSync)(command, {
|
|
17
|
+
cwd,
|
|
18
|
+
encoding: "utf8",
|
|
19
|
+
stdio: "pipe",
|
|
20
|
+
});
|
|
21
|
+
return result.toString().trim();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
logger_1.Logger.error(`命令执行失败: ${command}`);
|
|
25
|
+
logger_1.Logger.error(error.message);
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 执行命令并显示输出
|
|
31
|
+
*/
|
|
32
|
+
static execWithOutput(command, cwd) {
|
|
33
|
+
try {
|
|
34
|
+
logger_1.Logger.info(`执行命令: ${command}`);
|
|
35
|
+
(0, child_process_1.execSync)(command, {
|
|
36
|
+
cwd,
|
|
37
|
+
stdio: "inherit",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
logger_1.Logger.error(`命令执行失败: ${command}`);
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.CommandRunner = CommandRunner;
|
|
47
|
+
//# sourceMappingURL=command-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-runner.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/command-runner.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,iDAAyC;AACzC,qCAAkC;AAElC,MAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,GAAY;QACvC,IAAI,CAAC;YACH,eAAM,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,OAAO,EAAE;gBAC/B,GAAG;gBACH,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YACnC,eAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAe,EAAE,GAAY;QACjD,IAAI,CAAC;YACH,eAAM,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;YAChC,IAAA,wBAAQ,EAAC,OAAO,EAAE;gBAChB,GAAG;gBACH,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YACnC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAnCD,sCAmCC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DockerContainerStateSummary, DockerCreateContainerInput, DockerodeClientFactory, DockerodeClientPort, DockerDeployConnectionConfig, DockerPullAuth } from "./types";
|
|
2
|
+
export declare class DockerodeClient implements DockerodeClientPort {
|
|
3
|
+
private readonly client;
|
|
4
|
+
constructor(config: DockerDeployConnectionConfig);
|
|
5
|
+
ping(): Promise<void>;
|
|
6
|
+
imageExists(image: string): Promise<boolean>;
|
|
7
|
+
removeImage(image: string): Promise<void>;
|
|
8
|
+
pullImage(image: string, auth?: DockerPullAuth): Promise<void>;
|
|
9
|
+
findContainerIdByName(name: string): Promise<string | undefined>;
|
|
10
|
+
stopContainer(id: string): Promise<void>;
|
|
11
|
+
removeContainer(id: string): Promise<void>;
|
|
12
|
+
createContainer(input: DockerCreateContainerInput): Promise<string>;
|
|
13
|
+
startContainer(id: string): Promise<void>;
|
|
14
|
+
inspectContainer(id: string): Promise<DockerContainerStateSummary>;
|
|
15
|
+
getContainerLogs(id: string, tail?: number): Promise<string>;
|
|
16
|
+
}
|
|
17
|
+
export declare const createDockerodeClient: DockerodeClientFactory;
|
|
18
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,4BAA4B,EAC5B,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,qBAAa,eAAgB,YAAW,mBAAmB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,4BAA4B;IAK1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B9D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQhE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C,eAAe,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAiBlE,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAchE;AAED,eAAO,MAAM,qBAAqB,EAAE,sBACP,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createDockerodeClient = exports.DockerodeClient = void 0;
|
|
7
|
+
const dockerode_1 = __importDefault(require("dockerode"));
|
|
8
|
+
const connection_options_1 = require("./connection-options");
|
|
9
|
+
const container_inspect_format_1 = require("./container-inspect-format");
|
|
10
|
+
const container_options_1 = require("./container-options");
|
|
11
|
+
class DockerodeClient {
|
|
12
|
+
client;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
const options = (0, connection_options_1.toDockerConnectionOptions)(config);
|
|
15
|
+
this.client = new dockerode_1.default(options);
|
|
16
|
+
}
|
|
17
|
+
async ping() {
|
|
18
|
+
await this.client.ping();
|
|
19
|
+
}
|
|
20
|
+
async imageExists(image) {
|
|
21
|
+
try {
|
|
22
|
+
await this.client.getImage(image).inspect();
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async removeImage(image) {
|
|
30
|
+
await this.client.getImage(image).remove({ force: true });
|
|
31
|
+
}
|
|
32
|
+
async pullImage(image, auth) {
|
|
33
|
+
const stream = await new Promise((resolve, reject) => {
|
|
34
|
+
const pullOptions = auth ? { authconfig: auth } : undefined;
|
|
35
|
+
this.client.pull(image, pullOptions, (err, output) => {
|
|
36
|
+
if (err || !output) {
|
|
37
|
+
reject(err ?? new Error("docker pull 返回空输出"));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
resolve(output);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
await new Promise((resolve, reject) => {
|
|
44
|
+
this.client.modem.followProgress(stream, (err) => {
|
|
45
|
+
if (err) {
|
|
46
|
+
reject(err);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
resolve();
|
|
50
|
+
}, () => undefined);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async findContainerIdByName(name) {
|
|
54
|
+
const containers = await this.client.listContainers({ all: true });
|
|
55
|
+
const matched = containers.find((item) => (item.Names ?? []).some((n) => n === `/${name}`));
|
|
56
|
+
return matched?.Id;
|
|
57
|
+
}
|
|
58
|
+
async stopContainer(id) {
|
|
59
|
+
const container = this.client.getContainer(id);
|
|
60
|
+
try {
|
|
61
|
+
await container.stop();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Container may already be stopped.
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async removeContainer(id) {
|
|
68
|
+
const container = this.client.getContainer(id);
|
|
69
|
+
await container.remove({ force: true });
|
|
70
|
+
}
|
|
71
|
+
async createContainer(input) {
|
|
72
|
+
const payload = (0, container_options_1.toContainerCreateOptions)(input);
|
|
73
|
+
const container = await this.client.createContainer(payload);
|
|
74
|
+
return container.id;
|
|
75
|
+
}
|
|
76
|
+
async startContainer(id) {
|
|
77
|
+
const container = this.client.getContainer(id);
|
|
78
|
+
await container.start();
|
|
79
|
+
}
|
|
80
|
+
async inspectContainer(id) {
|
|
81
|
+
const container = this.client.getContainer(id);
|
|
82
|
+
const inspectInfo = await container.inspect();
|
|
83
|
+
const state = inspectInfo?.State;
|
|
84
|
+
const portMappings = (0, container_inspect_format_1.formatPortMappings)(inspectInfo);
|
|
85
|
+
return {
|
|
86
|
+
running: state?.Running,
|
|
87
|
+
status: state?.Status,
|
|
88
|
+
exitCode: state?.ExitCode,
|
|
89
|
+
error: state?.Error,
|
|
90
|
+
startedAt: state?.StartedAt,
|
|
91
|
+
finishedAt: state?.FinishedAt,
|
|
92
|
+
health: state?.Health?.Status,
|
|
93
|
+
portMappings,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async getContainerLogs(id, tail = 100) {
|
|
97
|
+
const container = this.client.getContainer(id);
|
|
98
|
+
const logs = await container.logs({
|
|
99
|
+
stdout: true,
|
|
100
|
+
stderr: true,
|
|
101
|
+
timestamps: true,
|
|
102
|
+
follow: false,
|
|
103
|
+
tail,
|
|
104
|
+
});
|
|
105
|
+
if (typeof logs === "string") {
|
|
106
|
+
return logs;
|
|
107
|
+
}
|
|
108
|
+
return logs.toString("utf8");
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.DockerodeClient = DockerodeClient;
|
|
112
|
+
const createDockerodeClient = (config) => new DockerodeClient(config);
|
|
113
|
+
exports.createDockerodeClient = createDockerodeClient;
|
|
114
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DockerDeployConnectionConfig } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* 将通用连接配置转为 dockerode 可用的 modem 选项(含可选 TLS)。
|
|
4
|
+
*/
|
|
5
|
+
export declare function toDockerConnectionOptions(config: DockerDeployConnectionConfig): Record<string, unknown>;
|
|
6
|
+
//# sourceMappingURL=connection-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-options.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/connection-options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAgB5D;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,4BAA4B,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BzB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toDockerConnectionOptions = toDockerConnectionOptions;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
function asOptionalTlsBuffer(value) {
|
|
6
|
+
if (typeof value !== "string") {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const normalized = value.trim();
|
|
10
|
+
if (normalized === "") {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if ((0, node_fs_1.existsSync)(normalized)) {
|
|
14
|
+
return (0, node_fs_1.readFileSync)(normalized);
|
|
15
|
+
}
|
|
16
|
+
return Buffer.from(normalized);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 将通用连接配置转为 dockerode 可用的 modem 选项(含可选 TLS)。
|
|
20
|
+
*/
|
|
21
|
+
function toDockerConnectionOptions(config) {
|
|
22
|
+
const protocol = (config.protocol ?? "https").toLowerCase();
|
|
23
|
+
const isHttps = protocol === "https";
|
|
24
|
+
const options = {
|
|
25
|
+
host: config.host ?? "127.0.0.1",
|
|
26
|
+
port: config.port ?? 2376,
|
|
27
|
+
protocol,
|
|
28
|
+
};
|
|
29
|
+
const socketPath = (config.socketPath ?? "").trim();
|
|
30
|
+
if (socketPath !== "") {
|
|
31
|
+
options.socketPath = socketPath;
|
|
32
|
+
}
|
|
33
|
+
if (isHttps) {
|
|
34
|
+
const tlsOptions = {
|
|
35
|
+
ca: asOptionalTlsBuffer(config.ca),
|
|
36
|
+
cert: asOptionalTlsBuffer(config.cert),
|
|
37
|
+
key: asOptionalTlsBuffer(config.key),
|
|
38
|
+
};
|
|
39
|
+
if (tlsOptions.ca) {
|
|
40
|
+
options.ca = tlsOptions.ca;
|
|
41
|
+
}
|
|
42
|
+
if (tlsOptions.cert) {
|
|
43
|
+
options.cert = tlsOptions.cert;
|
|
44
|
+
}
|
|
45
|
+
if (tlsOptions.key) {
|
|
46
|
+
options.key = tlsOptions.key;
|
|
47
|
+
}
|
|
48
|
+
options.checkServerIdentity = () => undefined;
|
|
49
|
+
}
|
|
50
|
+
return options;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=connection-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-options.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/connection-options.ts"],"names":[],"mappings":";;AAqBA,8DAiCC;AAtDD,qCAAmD;AAInD,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAA,sBAAY,EAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,MAAoC;IAEpC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAG,QAAQ,KAAK,OAAO,CAAC;IACrC,MAAM,OAAO,GAA4B;QACvC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;QACzB,QAAQ;KACT,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG;YACjB,EAAE,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,GAAG,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;SACrC,CAAC;QACF,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QACjC,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,mBAAmB,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-inspect-format.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-inspect-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAEpC,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,CAAC,oBAAoB,GACvC,MAAM,EAAE,GAAG,SAAS,CAoBtB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatPortMappings = formatPortMappings;
|
|
4
|
+
function formatPortMappings(inspectInfo) {
|
|
5
|
+
const ports = inspectInfo?.NetworkSettings?.Ports;
|
|
6
|
+
if (!ports || typeof ports !== "object") {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const mappings = [];
|
|
10
|
+
for (const [containerPort, hostBindings] of Object.entries(ports)) {
|
|
11
|
+
if (!hostBindings || hostBindings.length === 0) {
|
|
12
|
+
mappings.push(`${containerPort} -> <not-published>`);
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
for (const binding of hostBindings) {
|
|
16
|
+
const hostIp = binding.HostIp || "0.0.0.0";
|
|
17
|
+
const hostPort = binding.HostPort || "<unknown>";
|
|
18
|
+
mappings.push(`${containerPort} -> ${hostIp}:${hostPort}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return mappings.length > 0 ? mappings : undefined;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=container-inspect-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-inspect-format.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-inspect-format.ts"],"names":[],"mappings":";;AAEA,gDAsBC;AAtBD,SAAgB,kBAAkB,CAChC,WAAwC;IAExC,MAAM,KAAK,GAAG,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC;IAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,qBAAqB,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;YAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-options.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-options.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE1D,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,0BAA0B,GAChC,MAAM,CAAC,sBAAsB,CAiC/B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toContainerCreateOptions = toContainerCreateOptions;
|
|
4
|
+
function toContainerCreateOptions(input) {
|
|
5
|
+
const hostConfig = {};
|
|
6
|
+
let hasHostConfig = false;
|
|
7
|
+
if (input.portBindings) {
|
|
8
|
+
hostConfig.PortBindings = input.portBindings;
|
|
9
|
+
hasHostConfig = true;
|
|
10
|
+
}
|
|
11
|
+
if (input.binds) {
|
|
12
|
+
hostConfig.Binds = input.binds;
|
|
13
|
+
hasHostConfig = true;
|
|
14
|
+
}
|
|
15
|
+
if (typeof input.nanoCpus === "number") {
|
|
16
|
+
hostConfig.NanoCpus = input.nanoCpus;
|
|
17
|
+
hasHostConfig = true;
|
|
18
|
+
}
|
|
19
|
+
if (typeof input.memory === "number") {
|
|
20
|
+
hostConfig.Memory = Number(input.memory) * 1024 * 1024;
|
|
21
|
+
hasHostConfig = true;
|
|
22
|
+
}
|
|
23
|
+
const payload = {
|
|
24
|
+
name: input.name,
|
|
25
|
+
Image: input.image,
|
|
26
|
+
Env: input.env,
|
|
27
|
+
};
|
|
28
|
+
if (input.exposedPorts) {
|
|
29
|
+
payload.ExposedPorts = input.exposedPorts;
|
|
30
|
+
}
|
|
31
|
+
if (hasHostConfig) {
|
|
32
|
+
payload.HostConfig = hostConfig;
|
|
33
|
+
}
|
|
34
|
+
return payload;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=container-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-options.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-options.ts"],"names":[],"mappings":";;AAIA,4DAmCC;AAnCD,SAAgB,wBAAwB,CACtC,KAAiC;IAEjC,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAC7C,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACrC,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACvD,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAkC;QAC7C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC;IACF,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC5C,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/env.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyB3E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAEhE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadEnvFromFile = loadEnvFromFile;
|
|
7
|
+
exports.toEnvArray = toEnvArray;
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
function loadEnvFromFile(envFilePath) {
|
|
11
|
+
if (!envFilePath) {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
const targetPath = node_path_1.default.resolve(envFilePath);
|
|
15
|
+
const raw = (0, node_fs_1.readFileSync)(targetPath, "utf-8");
|
|
16
|
+
const result = {};
|
|
17
|
+
for (const line of raw.split(/\r?\n/)) {
|
|
18
|
+
const normalized = line.trim();
|
|
19
|
+
if (normalized === "" || normalized.startsWith("#")) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const eqIndex = normalized.indexOf("=");
|
|
23
|
+
if (eqIndex <= 0) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const key = normalized.slice(0, eqIndex).trim();
|
|
27
|
+
const value = normalized.slice(eqIndex + 1);
|
|
28
|
+
if (key !== "") {
|
|
29
|
+
result[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
function toEnvArray(env) {
|
|
35
|
+
return Object.entries(env).map(([key, value]) => `${key}=${value}`);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/env.ts"],"names":[],"mappings":";;;;;AAGA,0CAyBC;AAED,gCAEC;AAhCD,qCAAuC;AACvC,0DAA6B;AAE7B,SAAgB,eAAe,CAAC,WAAmB;IACjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,mBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,UAAU,CAAC,GAA2B;IACpD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { DockerContainerRuntimeInput, DockerContainerStateSummary, DockerCreateContainerInput, DockerDeployConnectionConfig, DockerodeClientFactory, DockerodeClientPort, DockerPullAuth, } from "./types";
|
|
2
|
+
export { DockerodeClient, createDockerodeClient } from "./client";
|
|
3
|
+
export { toDockerConnectionOptions } from "./connection-options";
|
|
4
|
+
export { formatPortMappings } from "./container-inspect-format";
|
|
5
|
+
export { toContainerCreateOptions } from "./container-options";
|
|
6
|
+
export { loadEnvFromFile } from "./env";
|
|
7
|
+
export { parsePorts } from "./ports";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsePorts = exports.loadEnvFromFile = exports.toContainerCreateOptions = exports.formatPortMappings = exports.toDockerConnectionOptions = exports.createDockerodeClient = exports.DockerodeClient = void 0;
|
|
4
|
+
var client_1 = require("./client");
|
|
5
|
+
Object.defineProperty(exports, "DockerodeClient", { enumerable: true, get: function () { return client_1.DockerodeClient; } });
|
|
6
|
+
Object.defineProperty(exports, "createDockerodeClient", { enumerable: true, get: function () { return client_1.createDockerodeClient; } });
|
|
7
|
+
var connection_options_1 = require("./connection-options");
|
|
8
|
+
Object.defineProperty(exports, "toDockerConnectionOptions", { enumerable: true, get: function () { return connection_options_1.toDockerConnectionOptions; } });
|
|
9
|
+
var container_inspect_format_1 = require("./container-inspect-format");
|
|
10
|
+
Object.defineProperty(exports, "formatPortMappings", { enumerable: true, get: function () { return container_inspect_format_1.formatPortMappings; } });
|
|
11
|
+
var container_options_1 = require("./container-options");
|
|
12
|
+
Object.defineProperty(exports, "toContainerCreateOptions", { enumerable: true, get: function () { return container_options_1.toContainerCreateOptions; } });
|
|
13
|
+
var env_1 = require("./env");
|
|
14
|
+
Object.defineProperty(exports, "loadEnvFromFile", { enumerable: true, get: function () { return env_1.loadEnvFromFile; } });
|
|
15
|
+
var ports_1 = require("./ports");
|
|
16
|
+
Object.defineProperty(exports, "parsePorts", { enumerable: true, get: function () { return ports_1.parsePorts; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/index.ts"],"names":[],"mappings":";;;AAUA,mCAAkE;AAAzD,yGAAA,eAAe,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAC/C,2DAAiE;AAAxD,+HAAA,yBAAyB,OAAA;AAClC,uEAAgE;AAAvD,8HAAA,kBAAkB,OAAA;AAC3B,yDAA+D;AAAtD,6HAAA,wBAAwB,OAAA;AACjC,6BAAwC;AAA/B,sGAAA,eAAe,OAAA;AACxB,iCAAqC;AAA5B,mGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Docker from "dockerode";
|
|
2
|
+
/**
|
|
3
|
+
* 解析 `hostPort:containerPort[/udp]` 形式的端口列表为 dockerode 的 ExposedPorts / PortBindings。
|
|
4
|
+
*/
|
|
5
|
+
export declare function parsePorts(ports?: string[]): {
|
|
6
|
+
exposedPorts?: Docker.ContainerCreateOptions["ExposedPorts"];
|
|
7
|
+
portBindings?: Docker.HostConfig["PortBindings"];
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/ports.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;CAClD,CAgCA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsePorts = parsePorts;
|
|
4
|
+
/**
|
|
5
|
+
* 解析 `hostPort:containerPort[/udp]` 形式的端口列表为 dockerode 的 ExposedPorts / PortBindings。
|
|
6
|
+
*/
|
|
7
|
+
function parsePorts(ports) {
|
|
8
|
+
if (!ports || ports.length === 0) {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
const exposedPorts = {};
|
|
12
|
+
const portBindings = {};
|
|
13
|
+
for (const rawPort of ports) {
|
|
14
|
+
const normalized = rawPort.trim();
|
|
15
|
+
if (normalized === "") {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const [hostAndContainer, protocolPart] = normalized.split("/");
|
|
19
|
+
const protocol = protocolPart?.trim() === "udp" ? "udp" : "tcp";
|
|
20
|
+
const segments = hostAndContainer.split(":").map((part) => part.trim());
|
|
21
|
+
if (segments.length !== 2 || !segments[0] || !segments[1]) {
|
|
22
|
+
throw new Error(`container.ports 配置无效: ${rawPort}`);
|
|
23
|
+
}
|
|
24
|
+
const hostPort = segments[0];
|
|
25
|
+
const containerPort = segments[1];
|
|
26
|
+
const key = `${containerPort}/${protocol}`;
|
|
27
|
+
exposedPorts[key] = {};
|
|
28
|
+
portBindings[key] = [{ HostPort: hostPort }];
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
exposedPorts: Object.keys(exposedPorts).length > 0 ? exposedPorts : undefined,
|
|
32
|
+
portBindings: Object.keys(portBindings).length > 0 ? portBindings : undefined,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/ports.ts"],"names":[],"mappings":";;AAKA,gCAmCC;AAtCD;;GAEG;AACH,SAAgB,UAAU,CAAC,KAAgB;IAIzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAkD,EAAE,CAAC;IACvE,MAAM,YAAY,GAAsC,EAAE,CAAC;IAE3D,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,YAAY,EAAE,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,aAAa,IAAI,QAAQ,EAAE,CAAC;QAC3C,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACvB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC7E,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;KAC9E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DockerContainerRuntimeInput, DockerCreateContainerInput } from "./types";
|
|
2
|
+
export declare function toRuntimeContainerInput(input: {
|
|
3
|
+
runtime: DockerContainerRuntimeInput;
|
|
4
|
+
resolve: (...parts: string[]) => string;
|
|
5
|
+
readText: (path: string) => string;
|
|
6
|
+
}): DockerCreateContainerInput;
|
|
7
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAIvF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,OAAO,EAAE,2BAA2B,CAAC;IACrC,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC,GAAG,0BAA0B,CAoB7B"}
|