ai-project-manage-cli 2.0.12 → 2.0.13

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.
Files changed (91) hide show
  1. package/README.md +6 -6
  2. package/dist/api/cli.d.ts +62 -1
  3. package/dist/api/cli.d.ts.map +1 -1
  4. package/dist/api/client.d.ts +3 -0
  5. package/dist/api/client.d.ts.map +1 -1
  6. package/dist/api/request-config.d.ts +4 -1
  7. package/dist/api/request-config.d.ts.map +1 -1
  8. package/dist/api/request-config.js +12 -0
  9. package/dist/api/request-config.js.map +1 -1
  10. package/dist/cli/commands/deploy-backend.d.ts +7 -0
  11. package/dist/cli/commands/deploy-backend.d.ts.map +1 -0
  12. package/dist/cli/commands/deploy-backend.js +81 -0
  13. package/dist/cli/commands/deploy-backend.js.map +1 -0
  14. package/dist/cli/commands/deploy-frontend.d.ts +3 -0
  15. package/dist/cli/commands/deploy-frontend.d.ts.map +1 -0
  16. package/dist/cli/commands/deploy-frontend.js +98 -0
  17. package/dist/cli/commands/deploy-frontend.js.map +1 -0
  18. package/dist/cli/commands/get.d.ts.map +1 -1
  19. package/dist/cli/commands/get.js +1 -1
  20. package/dist/cli/commands/get.js.map +1 -1
  21. package/dist/cli/commands/init.js +1 -1
  22. package/dist/cli/commands/publish.d.ts.map +1 -1
  23. package/dist/cli/commands/publish.js +42 -127
  24. package/dist/cli/commands/publish.js.map +1 -1
  25. package/dist/cli/commands/release.d.ts +3 -0
  26. package/dist/cli/commands/release.d.ts.map +1 -0
  27. package/dist/cli/commands/release.js +39 -0
  28. package/dist/cli/commands/release.js.map +1 -0
  29. package/dist/cli/utils/parse.d.ts +2 -0
  30. package/dist/cli/utils/parse.d.ts.map +1 -0
  31. package/dist/cli/utils/parse.js +12 -0
  32. package/dist/cli/utils/parse.js.map +1 -0
  33. package/dist/cli.js +6 -2
  34. package/dist/cli.js.map +1 -1
  35. package/dist/core/apm-config.d.ts +60 -1
  36. package/dist/core/apm-config.d.ts.map +1 -1
  37. package/dist/core/apm-config.js +111 -3
  38. package/dist/core/apm-config.js.map +1 -1
  39. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +16 -0
  40. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +1 -0
  41. package/dist/core/backend-deploy/backend-deploy-workflow.js +53 -0
  42. package/dist/core/backend-deploy/backend-deploy-workflow.js.map +1 -0
  43. package/dist/core/backend-deploy/image-tag.d.ts +2 -0
  44. package/dist/core/backend-deploy/image-tag.d.ts.map +1 -0
  45. package/dist/core/backend-deploy/image-tag.js +15 -0
  46. package/dist/core/backend-deploy/image-tag.js.map +1 -0
  47. package/dist/core/backend-deploy/index.d.ts +12 -0
  48. package/dist/core/backend-deploy/index.d.ts.map +1 -0
  49. package/dist/core/backend-deploy/index.js +23 -0
  50. package/dist/core/backend-deploy/index.js.map +1 -0
  51. package/dist/core/backend-deploy/local-docker-build.d.ts +11 -0
  52. package/dist/core/backend-deploy/local-docker-build.d.ts.map +1 -0
  53. package/dist/core/backend-deploy/local-docker-build.js +29 -0
  54. package/dist/core/backend-deploy/local-docker-build.js.map +1 -0
  55. package/dist/core/backend-deploy/registry-login-push.d.ts +14 -0
  56. package/dist/core/backend-deploy/registry-login-push.d.ts.map +1 -0
  57. package/dist/core/backend-deploy/registry-login-push.js +48 -0
  58. package/dist/core/backend-deploy/registry-login-push.js.map +1 -0
  59. package/dist/core/backend-deploy/remote-docker-client.d.ts +11 -0
  60. package/dist/core/backend-deploy/remote-docker-client.d.ts.map +1 -0
  61. package/dist/core/backend-deploy/remote-docker-client.js +33 -0
  62. package/dist/core/backend-deploy/remote-docker-client.js.map +1 -0
  63. package/dist/core/backend-deploy/remote-pull-image.d.ts +9 -0
  64. package/dist/core/backend-deploy/remote-pull-image.d.ts.map +1 -0
  65. package/dist/core/backend-deploy/remote-pull-image.js +39 -0
  66. package/dist/core/backend-deploy/remote-pull-image.js.map +1 -0
  67. package/dist/core/backend-deploy/resolve-dockerfile.d.ts +12 -0
  68. package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +1 -0
  69. package/dist/core/backend-deploy/resolve-dockerfile.js +33 -0
  70. package/dist/core/backend-deploy/resolve-dockerfile.js.map +1 -0
  71. package/dist/core/backend-deploy/run-docker-cli.d.ts +14 -0
  72. package/dist/core/backend-deploy/run-docker-cli.d.ts.map +1 -0
  73. package/dist/core/backend-deploy/run-docker-cli.js +33 -0
  74. package/dist/core/backend-deploy/run-docker-cli.js.map +1 -0
  75. package/dist/core/backend-deploy/types.d.ts +69 -0
  76. package/dist/core/backend-deploy/types.d.ts.map +1 -0
  77. package/dist/core/backend-deploy/types.js +6 -0
  78. package/dist/core/backend-deploy/types.js.map +1 -0
  79. package/dist/core/branch-name.d.ts +8 -0
  80. package/dist/core/branch-name.d.ts.map +1 -0
  81. package/dist/core/branch-name.js +37 -0
  82. package/dist/core/branch-name.js.map +1 -0
  83. package/dist/core/cursor-cmd.d.ts.map +1 -1
  84. package/dist/core/cursor-cmd.js +2 -1
  85. package/dist/core/cursor-cmd.js.map +1 -1
  86. package/dist/core/minio.d.ts +35 -0
  87. package/dist/core/minio.d.ts.map +1 -0
  88. package/dist/core/minio.js +154 -0
  89. package/dist/core/minio.js.map +1 -0
  90. package/package.json +6 -5
  91. package/templates/skills/apm-release/SKILL.md +87 -0
@@ -0,0 +1,16 @@
1
+ import type { BackendDeployParams, BackendDeployResult } from "./types";
2
+ /**
3
+ * 后端镜像部署编排:本地构建 → 推送私有 Registry → 远程 Docker 拉取镜像。
4
+ *
5
+ * 配置(仓库地址、账号、远程主机、证书路径等)由 {@link BackendDeployParams} 传入,
6
+ * 后续可改为从 `.apm/apm.config.json` 读取并映射到该结构。
7
+ */
8
+ export declare class BackendDeployWorkflow {
9
+ private readonly params;
10
+ constructor(params: BackendDeployParams);
11
+ /**
12
+ * @param cwd - 解析相对路径时的基准目录(Dockerfile / context)
13
+ */
14
+ run(cwd?: string): Promise<BackendDeployResult>;
15
+ }
16
+ //# sourceMappingURL=backend-deploy-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-deploy-workflow.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/backend-deploy-workflow.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAExD;;OAEG;IACG,GAAG,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAgCrE"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackendDeployWorkflow = void 0;
4
+ const local_docker_build_1 = require("./local-docker-build");
5
+ const registry_login_push_1 = require("./registry-login-push");
6
+ const remote_docker_client_1 = require("./remote-docker-client");
7
+ const remote_pull_image_1 = require("./remote-pull-image");
8
+ const resolve_dockerfile_1 = require("./resolve-dockerfile");
9
+ /**
10
+ * 后端镜像部署编排:本地构建 → 推送私有 Registry → 远程 Docker 拉取镜像。
11
+ *
12
+ * 配置(仓库地址、账号、远程主机、证书路径等)由 {@link BackendDeployParams} 传入,
13
+ * 后续可改为从 `.apm/apm.config.json` 读取并映射到该结构。
14
+ */
15
+ class BackendDeployWorkflow {
16
+ params;
17
+ constructor(params) {
18
+ this.params = params;
19
+ }
20
+ /**
21
+ * @param cwd - 解析相对路径时的基准目录(Dockerfile / context)
22
+ */
23
+ async run(cwd = process.cwd()) {
24
+ const completedSteps = [];
25
+ console.log("开始解析 Dockerfile 路径");
26
+ const paths = (0, resolve_dockerfile_1.resolveDockerBuildPaths)(this.params, cwd);
27
+ completedSteps.push("resolveDockerfile");
28
+ console.log("已经找到 Dockerfile,开始构建镜像");
29
+ await (0, local_docker_build_1.buildDockerImageLocally)({
30
+ dockerfileAbs: paths.dockerfileAbs,
31
+ contextAbs: paths.contextAbs,
32
+ imageRef: this.params.imageRef,
33
+ });
34
+ completedSteps.push("localBuild");
35
+ console.log("镜像构建完成,开始登录并推送镜像");
36
+ await (0, registry_login_push_1.loginAndPushImage)(this.params.registry, this.params.imageRef);
37
+ completedSteps.push("registryPush");
38
+ console.log("登录并推送镜像完成,开始远程拉取镜像");
39
+ const remoteClient = (0, remote_docker_client_1.createRemoteDockerClient)(this.params.remoteDocker);
40
+ await (0, remote_pull_image_1.pullImageOnRemote)(remoteClient, this.params.imageRef, this.params.remotePullAuth);
41
+ completedSteps.push("remotePull");
42
+ console.log("远程拉取镜像完成,部署完成");
43
+ return {
44
+ ok: true,
45
+ imageRef: this.params.imageRef,
46
+ dockerfileAbs: paths.dockerfileAbs,
47
+ contextAbs: paths.contextAbs,
48
+ completedSteps,
49
+ };
50
+ }
51
+ }
52
+ exports.BackendDeployWorkflow = BackendDeployWorkflow;
53
+ //# 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":";;;AAAA,6DAA+D;AAC/D,+DAA0D;AAC1D,iEAAkE;AAClE,2DAAwD;AACxD,6DAA+D;AAO/D;;;;;GAKG;AACH,MAAa,qBAAqB;IACH;IAA7B,YAA6B,MAA2B;QAA3B,WAAM,GAAN,MAAM,CAAqB;IAAG,CAAC;IAE5D;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,cAAc,GAAwB,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAA,4CAAuB,EAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACxD,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,IAAA,4CAAuB,EAAC;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;SAC/B,CAAC,CAAC;QACH,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,MAAM,IAAA,uCAAiB,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,IAAA,+CAAwB,EAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxE,MAAM,IAAA,qCAAiB,EACrB,YAAY,EACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,EACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAC3B,CAAC;QACF,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,cAAc;SACf,CAAC;IACJ,CAAC;CACF;AAtCD,sDAsCC"}
@@ -0,0 +1,2 @@
1
+ export declare function assertDeployImageTag(tag: string, label: string): void;
2
+ //# sourceMappingURL=image-tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-tag.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/image-tag.ts"],"names":[],"mappings":"AAMA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOrE"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertDeployImageTag = assertDeployImageTag;
4
+ /**
5
+ * 部署用镜像 tag:与 OCI tag 常见规则接近(与分支名片段兼容);不用 semver 版本号作唯一约定。
6
+ * 例:test、aaa_bbb、feat-1、prod
7
+ */
8
+ const DEPLOY_IMAGE_TAG = /^(?!\.|-)[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/;
9
+ function assertDeployImageTag(tag, label) {
10
+ const t = tag.trim();
11
+ if (!DEPLOY_IMAGE_TAG.test(t)) {
12
+ throw new Error(`${label} 须为合法镜像 tag(字母数字及 ._-,不以 . 或 - 开头,最长 128 字符),当前:${JSON.stringify(tag)}`);
13
+ }
14
+ }
15
+ //# sourceMappingURL=image-tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-tag.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/image-tag.ts"],"names":[],"mappings":";;AAMA,oDAOC;AAbD;;;GAGG;AACH,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AAEtE,SAAgB,oBAAoB,CAAC,GAAW,EAAE,KAAa;IAC7D,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,mDAAmD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { assertDeployImageTag } from "./image-tag";
2
+ export { BackendDeployWorkflow } from "./backend-deploy-workflow";
3
+ export { buildDockerImageLocally } from "./local-docker-build";
4
+ export { resolveDockerBuildPaths } from "./resolve-dockerfile";
5
+ export type { ResolvedDockerBuildPaths } from "./resolve-dockerfile";
6
+ export { dockerLoginPrivateRegistry, dockerPushImage, loginAndPushImage, } from "./registry-login-push";
7
+ export { runDockerCli, runProcess } from "./run-docker-cli";
8
+ export { createRemoteDockerClient } from "./remote-docker-client";
9
+ export type { DockerodeInstance } from "./remote-docker-client";
10
+ export { pullImageOnRemote } from "./remote-pull-image";
11
+ export type { BackendDeployParams, BackendDeployResult, BackendDeployStep, PrivateRegistryCredentials, RemoteDockerTlsOptions, RemotePullRegistryAuth, } from "./types";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pullImageOnRemote = exports.createRemoteDockerClient = exports.runProcess = exports.runDockerCli = exports.loginAndPushImage = exports.dockerPushImage = exports.dockerLoginPrivateRegistry = exports.resolveDockerBuildPaths = exports.buildDockerImageLocally = exports.BackendDeployWorkflow = exports.assertDeployImageTag = void 0;
4
+ var image_tag_1 = require("./image-tag");
5
+ Object.defineProperty(exports, "assertDeployImageTag", { enumerable: true, get: function () { return image_tag_1.assertDeployImageTag; } });
6
+ var backend_deploy_workflow_1 = require("./backend-deploy-workflow");
7
+ Object.defineProperty(exports, "BackendDeployWorkflow", { enumerable: true, get: function () { return backend_deploy_workflow_1.BackendDeployWorkflow; } });
8
+ var local_docker_build_1 = require("./local-docker-build");
9
+ Object.defineProperty(exports, "buildDockerImageLocally", { enumerable: true, get: function () { return local_docker_build_1.buildDockerImageLocally; } });
10
+ var resolve_dockerfile_1 = require("./resolve-dockerfile");
11
+ Object.defineProperty(exports, "resolveDockerBuildPaths", { enumerable: true, get: function () { return resolve_dockerfile_1.resolveDockerBuildPaths; } });
12
+ var registry_login_push_1 = require("./registry-login-push");
13
+ Object.defineProperty(exports, "dockerLoginPrivateRegistry", { enumerable: true, get: function () { return registry_login_push_1.dockerLoginPrivateRegistry; } });
14
+ Object.defineProperty(exports, "dockerPushImage", { enumerable: true, get: function () { return registry_login_push_1.dockerPushImage; } });
15
+ Object.defineProperty(exports, "loginAndPushImage", { enumerable: true, get: function () { return registry_login_push_1.loginAndPushImage; } });
16
+ var run_docker_cli_1 = require("./run-docker-cli");
17
+ Object.defineProperty(exports, "runDockerCli", { enumerable: true, get: function () { return run_docker_cli_1.runDockerCli; } });
18
+ Object.defineProperty(exports, "runProcess", { enumerable: true, get: function () { return run_docker_cli_1.runProcess; } });
19
+ var remote_docker_client_1 = require("./remote-docker-client");
20
+ Object.defineProperty(exports, "createRemoteDockerClient", { enumerable: true, get: function () { return remote_docker_client_1.createRemoteDockerClient; } });
21
+ var remote_pull_image_1 = require("./remote-pull-image");
22
+ Object.defineProperty(exports, "pullImageOnRemote", { enumerable: true, get: function () { return remote_pull_image_1.pullImageOnRemote; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/index.ts"],"names":[],"mappings":";;;AAAA,yCAAmD;AAA1C,iHAAA,oBAAoB,OAAA;AAC7B,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,2DAA+D;AAAtD,6HAAA,uBAAuB,OAAA;AAChC,2DAA+D;AAAtD,6HAAA,uBAAuB,OAAA;AAEhC,6DAI+B;AAH7B,iIAAA,0BAA0B,OAAA;AAC1B,sHAAA,eAAe,OAAA;AACf,wHAAA,iBAAiB,OAAA;AAEnB,mDAA4D;AAAnD,8GAAA,YAAY,OAAA;AAAE,4GAAA,UAAU,OAAA;AACjC,+DAAkE;AAAzD,gIAAA,wBAAwB,OAAA;AAEjC,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 使用本机 Docker CLI 构建镜像(`docker build`)。
3
+ *
4
+ * 使用绝对路径指定 Dockerfile 与 context,避免工作目录与相对 `-f` 歧义。
5
+ */
6
+ export declare function buildDockerImageLocally(params: {
7
+ dockerfileAbs: string;
8
+ contextAbs: string;
9
+ imageRef: string;
10
+ }): Promise<void>;
11
+ //# sourceMappingURL=local-docker-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-docker-build.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/local-docker-build.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAahB"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildDockerImageLocally = buildDockerImageLocally;
4
+ const node_os_1 = require("node:os");
5
+ const run_docker_cli_1 = require("./run-docker-cli");
6
+ /**
7
+ * 在 macOS(Apple 芯片)上本机构建时,默认指定目标平台为 `linux/amd64`,
8
+ * 以便与常见 Linux 服务器一致,避免默认构建出 arm64 镜像。
9
+ */
10
+ function dockerBuildPlatformFlags() {
11
+ return (0, node_os_1.platform)() === "darwin" ? ["--platform", "linux/amd64"] : [];
12
+ }
13
+ /**
14
+ * 使用本机 Docker CLI 构建镜像(`docker build`)。
15
+ *
16
+ * 使用绝对路径指定 Dockerfile 与 context,避免工作目录与相对 `-f` 歧义。
17
+ */
18
+ async function buildDockerImageLocally(params) {
19
+ await (0, run_docker_cli_1.runDockerCli)([
20
+ "build",
21
+ ...dockerBuildPlatformFlags(),
22
+ "-f",
23
+ params.dockerfileAbs,
24
+ "-t",
25
+ params.imageRef,
26
+ params.contextAbs,
27
+ ], {});
28
+ }
29
+ //# sourceMappingURL=local-docker-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-docker-build.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/local-docker-build.ts"],"names":[],"mappings":";;AAiBA,0DAiBC;AAlCD,qCAAmC;AAEnC,qDAAgD;AAEhD;;;GAGG;AACH,SAAS,wBAAwB;IAC/B,OAAO,IAAA,kBAAQ,GAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,uBAAuB,CAAC,MAI7C;IACC,MAAM,IAAA,6BAAY,EAChB;QACE,OAAO;QACP,GAAG,wBAAwB,EAAE;QAC7B,IAAI;QACJ,MAAM,CAAC,aAAa;QACpB,IAAI;QACJ,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,UAAU;KAClB,EACD,EAAE,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { PrivateRegistryCredentials } from "./types";
2
+ /**
3
+ * 向私有 Registry 登录(`docker login`,密码经 stdin 传入,避免出现在进程列表中)。
4
+ */
5
+ export declare function dockerLoginPrivateRegistry(registry: PrivateRegistryCredentials): Promise<void>;
6
+ /**
7
+ * 推送镜像到已登录的 Registry(`docker push`)。
8
+ */
9
+ export declare function dockerPushImage(imageRef: string): Promise<void>;
10
+ /**
11
+ * 登录私有仓库并推送镜像(本地构建后的典型步骤)。
12
+ */
13
+ export declare function loginAndPushImage(registry: PrivateRegistryCredentials, imageRef: string): Promise<void>;
14
+ //# sourceMappingURL=registry-login-push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-login-push.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/registry-login-push.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAG1D;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,0BAA0B,GACnC,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,0BAA0B,EACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dockerLoginPrivateRegistry = dockerLoginPrivateRegistry;
4
+ exports.dockerPushImage = dockerPushImage;
5
+ exports.loginAndPushImage = loginAndPushImage;
6
+ const node_child_process_1 = require("node:child_process");
7
+ const run_docker_cli_1 = require("./run-docker-cli");
8
+ /**
9
+ * 向私有 Registry 登录(`docker login`,密码经 stdin 传入,避免出现在进程列表中)。
10
+ */
11
+ function dockerLoginPrivateRegistry(registry) {
12
+ return new Promise((resolve, reject) => {
13
+ const child = (0, node_child_process_1.spawn)("docker", [
14
+ "login",
15
+ "--username",
16
+ registry.username,
17
+ "--password-stdin",
18
+ registry.registryHost,
19
+ ], {
20
+ stdio: ["pipe", "inherit", "inherit"],
21
+ shell: false,
22
+ });
23
+ child.stdin?.write(`${registry.password}\n`);
24
+ child.stdin?.end();
25
+ child.on("error", reject);
26
+ child.on("close", (code) => {
27
+ if (code === 0) {
28
+ resolve();
29
+ return;
30
+ }
31
+ reject(new Error(`docker login 失败(退出码 ${code ?? "?"}),仓库:${registry.registryHost}`));
32
+ });
33
+ });
34
+ }
35
+ /**
36
+ * 推送镜像到已登录的 Registry(`docker push`)。
37
+ */
38
+ async function dockerPushImage(imageRef) {
39
+ await (0, run_docker_cli_1.runDockerCli)(["push", imageRef], {});
40
+ }
41
+ /**
42
+ * 登录私有仓库并推送镜像(本地构建后的典型步骤)。
43
+ */
44
+ async function loginAndPushImage(registry, imageRef) {
45
+ await dockerLoginPrivateRegistry(registry);
46
+ await dockerPushImage(imageRef);
47
+ }
48
+ //# sourceMappingURL=registry-login-push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-login-push.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/registry-login-push.ts"],"names":[],"mappings":";;AAQA,gEAmCC;AAKD,0CAEC;AAKD,8CAMC;AA7DD,2DAA2C;AAG3C,qDAAgD;AAEhD;;GAEG;AACH,SAAgB,0BAA0B,CACxC,QAAoC;IAEpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,0BAAK,EACjB,QAAQ,EACR;YACE,OAAO;YACP,YAAY;YACZ,QAAQ,CAAC,QAAQ;YACjB,kBAAkB;YAClB,QAAQ,CAAC,YAAY;SACtB,EACD;YACE,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;YACrC,KAAK,EAAE,KAAK;SACb,CACF,CAAC;QAEF,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QAEnB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,CACJ,IAAI,KAAK,CACP,uBAAuB,IAAI,IAAI,GAAG,QAAQ,QAAQ,CAAC,YAAY,EAAE,CAClE,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,IAAA,6BAAY,EAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,QAAoC,EACpC,QAAgB;IAEhB,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import Docker from "dockerode";
2
+ import type { RemoteDockerTlsOptions } from "./types";
3
+ export type DockerodeInstance = Docker;
4
+ /**
5
+ * 根据 TLS 选项创建连接**远程** Docker 守护进程的 dockerode 客户端。
6
+ *
7
+ * - 若提供 ca/cert/key 路径,则读取为 Buffer 传入 Modem(与 `docker --host` 使用证书场景一致)。
8
+ * - 仅内网 HTTP 且无需证书时,可只设置 protocol: 'http',不传 ca/cert/key。
9
+ */
10
+ export declare function createRemoteDockerClient(options: RemoteDockerTlsOptions): DockerodeInstance;
11
+ //# sourceMappingURL=remote-docker-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-docker-client.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/remote-docker-client.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,iBAAiB,CAoBnB"}
@@ -0,0 +1,33 @@
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.createRemoteDockerClient = createRemoteDockerClient;
7
+ const node_fs_1 = require("node:fs");
8
+ const dockerode_1 = __importDefault(require("dockerode"));
9
+ /**
10
+ * 根据 TLS 选项创建连接**远程** Docker 守护进程的 dockerode 客户端。
11
+ *
12
+ * - 若提供 ca/cert/key 路径,则读取为 Buffer 传入 Modem(与 `docker --host` 使用证书场景一致)。
13
+ * - 仅内网 HTTP 且无需证书时,可只设置 protocol: 'http',不传 ca/cert/key。
14
+ */
15
+ function createRemoteDockerClient(options) {
16
+ const protocol = options.protocol ?? "https";
17
+ const modemOpts = {
18
+ host: options.host,
19
+ port: options.port,
20
+ protocol,
21
+ };
22
+ if (options.caPath) {
23
+ modemOpts.ca = (0, node_fs_1.readFileSync)(options.caPath);
24
+ }
25
+ if (options.certPath) {
26
+ modemOpts.cert = (0, node_fs_1.readFileSync)(options.certPath);
27
+ }
28
+ if (options.keyPath) {
29
+ modemOpts.key = (0, node_fs_1.readFileSync)(options.keyPath);
30
+ }
31
+ return new dockerode_1.default(modemOpts);
32
+ }
33
+ //# sourceMappingURL=remote-docker-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-docker-client.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/remote-docker-client.ts"],"names":[],"mappings":";;;;;AAcA,4DAsBC;AApCD,qCAAuC;AAEvC,0DAA+B;AAM/B;;;;;GAKG;AACH,SAAgB,wBAAwB,CACtC,OAA+B;IAE/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAE7C,MAAM,SAAS,GAAyB;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ;KACT,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,SAAS,CAAC,EAAE,GAAG,IAAA,sBAAY,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,GAAG,IAAA,sBAAY,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,CAAC,GAAG,GAAG,IAAA,sBAAY,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,mBAAM,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import Docker from "dockerode";
2
+ import type { RemotePullRegistryAuth } from "./types";
3
+ /**
4
+ * 在远程 Docker 上拉取镜像(`docker pull` 的 API 等价物),并等待拉取流结束。
5
+ *
6
+ * 私有仓库拉取需在远程引擎侧提供 authconfig(与本地 `docker login` 写入的认证类似)。
7
+ */
8
+ export declare function pullImageOnRemote(docker: Docker, imageRef: string, auth?: RemotePullRegistryAuth): Promise<void>;
9
+ //# sourceMappingURL=remote-pull-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-pull-image.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/remote-pull-image.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAStD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pullImageOnRemote = pullImageOnRemote;
4
+ /**
5
+ * 在远程 Docker 上拉取镜像(`docker pull` 的 API 等价物),并等待拉取流结束。
6
+ *
7
+ * 私有仓库拉取需在远程引擎侧提供 authconfig(与本地 `docker login` 写入的认证类似)。
8
+ */
9
+ function pullImageOnRemote(docker, imageRef, auth) {
10
+ return new Promise((resolve, reject) => {
11
+ const authConfig = auth
12
+ ? {
13
+ username: auth.username,
14
+ password: auth.password,
15
+ serveraddress: auth.serveraddress,
16
+ }
17
+ : undefined;
18
+ const cb = (err, stream) => {
19
+ if (err) {
20
+ reject(err);
21
+ return;
22
+ }
23
+ if (!stream) {
24
+ reject(new Error("docker pull 未返回流"));
25
+ return;
26
+ }
27
+ docker.modem.followProgress(stream, (progressErr) => {
28
+ if (progressErr) {
29
+ reject(progressErr);
30
+ }
31
+ else {
32
+ resolve();
33
+ }
34
+ });
35
+ };
36
+ docker.pull(imageRef, {}, cb, authConfig);
37
+ });
38
+ }
39
+ //# sourceMappingURL=remote-pull-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-pull-image.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/remote-pull-image.ts"],"names":[],"mappings":";;AAgBA,8CAqCC;AA1CD;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,QAAgB,EAChB,IAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,UAAU,GAA2B,IAAI;YAC7C,CAAC,CAAC;gBACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,EAAE,GAAG,CACT,GAAiB,EACjB,MAAyC,EACzC,EAAE;YACF,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,WAAyB,EAAE,EAAE;gBAChE,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,CAAC,WAAW,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { BackendDeployParams } from "./types";
2
+ export type ResolvedDockerBuildPaths = {
3
+ dockerfileAbs: string;
4
+ contextAbs: string;
5
+ };
6
+ /**
7
+ * 校验 Dockerfile 与构建上下文路径,并解析为绝对路径。
8
+ *
9
+ * @param cwd - 解析相对路径时的基准目录,一般为 `process.cwd()`
10
+ */
11
+ export declare function resolveDockerBuildPaths(params: Pick<BackendDeployParams, "dockerfilePath" | "contextPath">, cwd: string): ResolvedDockerBuildPaths;
12
+ //# sourceMappingURL=resolve-dockerfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-dockerfile.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/resolve-dockerfile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,aAAa,CAAC,EACnE,GAAG,EAAE,MAAM,GACV,wBAAwB,CAqB1B"}
@@ -0,0 +1,33 @@
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.resolveDockerBuildPaths = resolveDockerBuildPaths;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ /**
10
+ * 校验 Dockerfile 与构建上下文路径,并解析为绝对路径。
11
+ *
12
+ * @param cwd - 解析相对路径时的基准目录,一般为 `process.cwd()`
13
+ */
14
+ function resolveDockerBuildPaths(params, cwd) {
15
+ const dockerfileAbs = node_path_1.default.resolve(cwd, params.dockerfilePath);
16
+ if (!(0, node_fs_1.existsSync)(dockerfileAbs)) {
17
+ throw new Error(`Dockerfile 不存在:${dockerfileAbs}`);
18
+ }
19
+ if (!(0, node_fs_1.statSync)(dockerfileAbs).isFile()) {
20
+ throw new Error(`路径不是文件(应为 Dockerfile):${dockerfileAbs}`);
21
+ }
22
+ const contextAbs = params.contextPath
23
+ ? node_path_1.default.resolve(cwd, params.contextPath)
24
+ : node_path_1.default.dirname(dockerfileAbs);
25
+ if (!(0, node_fs_1.existsSync)(contextAbs)) {
26
+ throw new Error(`构建上下文目录不存在:${contextAbs}`);
27
+ }
28
+ if (!(0, node_fs_1.statSync)(contextAbs).isDirectory()) {
29
+ throw new Error(`构建上下文不是目录:${contextAbs}`);
30
+ }
31
+ return { dockerfileAbs, contextAbs };
32
+ }
33
+ //# sourceMappingURL=resolve-dockerfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-dockerfile.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/resolve-dockerfile.ts"],"names":[],"mappings":";;;;;AAeA,0DAwBC;AAvCD,qCAA+C;AAC/C,0DAA6B;AAS7B;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,MAAmE,EACnE,GAAW;IAEX,MAAM,aAAa,GAAG,mBAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAA,oBAAU,EAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,IAAA,kBAAQ,EAAC,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW;QACnC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhC,IAAI,CAAC,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,IAAA,kBAAQ,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type RunProcessOptions = {
2
+ cwd?: string;
3
+ /** 默认继承当前进程的 stdio,便于在终端看到 docker 输出 */
4
+ stdio?: "inherit" | "pipe";
5
+ };
6
+ /**
7
+ * 执行本地 `docker` CLI(需已安装 Docker Desktop / Engine 且 `docker` 在 PATH 中)。
8
+ */
9
+ export declare function runDockerCli(args: string[], options?: RunProcessOptions): Promise<void>;
10
+ /**
11
+ * 通用子进程封装:非 0 退出码时 reject。
12
+ */
13
+ export declare function runProcess(command: string, args: string[], options?: RunProcessOptions): Promise<void>;
14
+ //# sourceMappingURL=run-docker-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-docker-cli.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/run-docker-cli.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDockerCli = runDockerCli;
4
+ exports.runProcess = runProcess;
5
+ const node_child_process_1 = require("node:child_process");
6
+ /**
7
+ * 执行本地 `docker` CLI(需已安装 Docker Desktop / Engine 且 `docker` 在 PATH 中)。
8
+ */
9
+ function runDockerCli(args, options) {
10
+ return runProcess("docker", args, options);
11
+ }
12
+ /**
13
+ * 通用子进程封装:非 0 退出码时 reject。
14
+ */
15
+ function runProcess(command, args, options) {
16
+ return new Promise((resolve, reject) => {
17
+ const child = (0, node_child_process_1.spawn)(command, args, {
18
+ stdio: options?.stdio ?? "inherit",
19
+ shell: false,
20
+ cwd: options?.cwd,
21
+ });
22
+ child.on("error", reject);
23
+ child.on("close", (code, signal) => {
24
+ if (code === 0) {
25
+ resolve();
26
+ return;
27
+ }
28
+ const hint = signal ? `,信号 ${signal}` : "";
29
+ reject(new Error(`命令失败:${command} ${args.join(" ")}(退出码 ${code ?? "?"}${hint})`));
30
+ });
31
+ });
32
+ }
33
+ //# sourceMappingURL=run-docker-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-docker-cli.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/run-docker-cli.ts"],"names":[],"mappings":";;AAWA,oCAKC;AAKD,gCAyBC;AA9CD,2DAA2C;AAQ3C;;GAEG;AACH,SAAgB,YAAY,CAC1B,IAAc,EACd,OAA2B;IAE3B,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,OAAe,EACf,IAAc,EACd,OAA2B;IAE3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,SAAS;YAClC,KAAK,EAAE,KAAK;YACZ,GAAG,EAAE,OAAO,EAAE,GAAG;SAClB,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,CACJ,IAAI,KAAK,CACP,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,CAC/D,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 后端镜像部署相关类型(后续可由 .apm/apm.config.json 映射注入)。
3
+ */
4
+ /** 阿里云(或其它兼容 Docker Registry V2 的)私有仓库登录信息 */
5
+ export type PrivateRegistryCredentials = {
6
+ /** 仓库主机名,如 registry.cn-hangzhou.aliyuncs.com */
7
+ registryHost: string;
8
+ username: string;
9
+ password: string;
10
+ };
11
+ /**
12
+ * 远程 Docker 守护进程连接参数(通常对应 TLS 的 Docker Host)。
13
+ * 与 dockerode / DockerModem 选项对齐。
14
+ */
15
+ export type RemoteDockerTlsOptions = {
16
+ host: string;
17
+ port: number;
18
+ /** 默认可为 https(TLS),内网无证书场景可用 http */
19
+ protocol?: "https" | "http";
20
+ /** CA 证书文件路径(PEM) */
21
+ caPath?: string;
22
+ /** 客户端证书路径(PEM),与 keyPath 成对使用 */
23
+ certPath?: string;
24
+ /** 客户端私钥路径(PEM) */
25
+ keyPath?: string;
26
+ };
27
+ /**
28
+ * 在远程主机上拉取私有镜像时,传给 docker pull 的认证(与本地 docker login 类似)。
29
+ * serveraddress 一般为 https://{registryHost}
30
+ */
31
+ export type RemotePullRegistryAuth = {
32
+ username: string;
33
+ password: string;
34
+ /** 例如 https://registry.cn-hangzhou.aliyuncs.com */
35
+ serveraddress: string;
36
+ };
37
+ /**
38
+ * 单次后端部署流程的输入:路径、镜像名、仓库与远程连接均由调用方组装(例如来自 CLI 或配置文件)。
39
+ */
40
+ export type BackendDeployParams = {
41
+ /** Dockerfile 路径(相对 cwd 或绝对路径) */
42
+ dockerfilePath: string;
43
+ /**
44
+ * 构建上下文目录;缺省为 Dockerfile 所在目录。
45
+ * 须包含 Dockerfile 中 COPY 所依赖的文件。
46
+ */
47
+ contextPath?: string;
48
+ /**
49
+ * 完整镜像引用(含 tag),如
50
+ * registry.cn-hangzhou.aliyuncs.com/my-ns/my-app:v1.0.0
51
+ */
52
+ imageRef: string;
53
+ registry: PrivateRegistryCredentials;
54
+ remoteDocker: RemoteDockerTlsOptions;
55
+ /**
56
+ * 远程 docker pull 拉取私有镜像时是否需要认证。
57
+ * 若镜像仓库可在远程主机上匿名拉取,可省略。
58
+ */
59
+ remotePullAuth?: RemotePullRegistryAuth;
60
+ };
61
+ export type BackendDeployStep = "resolveDockerfile" | "localBuild" | "registryPush" | "remotePull";
62
+ export type BackendDeployResult = {
63
+ ok: true;
64
+ imageRef: string;
65
+ dockerfileAbs: string;
66
+ contextAbs: string;
67
+ completedSteps: BackendDeployStep[];
68
+ };
69
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,0BAA0B,GAAG;IACvC,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,0BAA0B,CAAC;IACrC,YAAY,EAAE,sBAAsB,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,mBAAmB,GACnB,YAAY,GACZ,cAAc,GACd,YAAY,CAAC;AAEjB,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * 后端镜像部署相关类型(后续可由 .apm/apm.config.json 映射注入)。
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 与 `deploy-frontend` / `deploy-backend` 共享:从位置参数解析「分支名片段」及 `--env` 环境标签。
3
+ */
4
+ export declare function sanitizeBranchName(raw: string): string;
5
+ export declare function normalizeBranchName(raw: string): string;
6
+ /** `--env` 默认含逗号时取第一段作为标签(如「测试环境」) */
7
+ export declare function resolveEnvTag(raw: string): string;
8
+ //# sourceMappingURL=branch-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-name.d.ts","sourceRoot":"","sources":["../../src/core/branch-name.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,sCAAsC;AACtC,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjD"}