ai-project-manage-cli 2.0.11 → 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.
- package/README.md +6 -6
- package/dist/api/cli.d.ts +84 -7
- package/dist/api/cli.d.ts.map +1 -1
- package/dist/api/client.d.ts +5 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/request-config.d.ts +6 -2
- package/dist/api/request-config.d.ts.map +1 -1
- package/dist/api/request-config.js +18 -2
- 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 +81 -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 +37 -13
- 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/commands/set.d.ts.map +1 -1
- package/dist/cli/commands/set.js +0 -8
- package/dist/cli/commands/set.js.map +1 -1
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +44 -0
- package/dist/cli/commands/status.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 +8 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/apm-config.d.ts +60 -1
- package/dist/core/apm-config.d.ts.map +1 -1
- package/dist/core/apm-config.js +111 -3
- package/dist/core/apm-config.js.map +1 -1
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +16 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +1 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.js +53 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.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 +12 -0
- package/dist/core/backend-deploy/index.d.ts.map +1 -0
- package/dist/core/backend-deploy/index.js +23 -0
- package/dist/core/backend-deploy/index.js.map +1 -0
- package/dist/core/backend-deploy/local-docker-build.d.ts +11 -0
- package/dist/core/backend-deploy/local-docker-build.d.ts.map +1 -0
- package/dist/core/backend-deploy/local-docker-build.js +29 -0
- package/dist/core/backend-deploy/local-docker-build.js.map +1 -0
- package/dist/core/backend-deploy/registry-login-push.d.ts +14 -0
- package/dist/core/backend-deploy/registry-login-push.d.ts.map +1 -0
- package/dist/core/backend-deploy/registry-login-push.js +48 -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 +33 -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 +12 -0
- package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +1 -0
- package/dist/core/backend-deploy/resolve-dockerfile.js +33 -0
- package/dist/core/backend-deploy/resolve-dockerfile.js.map +1 -0
- package/dist/core/backend-deploy/run-docker-cli.d.ts +14 -0
- package/dist/core/backend-deploy/run-docker-cli.d.ts.map +1 -0
- package/dist/core/backend-deploy/run-docker-cli.js +33 -0
- package/dist/core/backend-deploy/run-docker-cli.js.map +1 -0
- package/dist/core/backend-deploy/types.d.ts +69 -0
- package/dist/core/backend-deploy/types.d.ts.map +1 -0
- package/dist/core/backend-deploy/types.js +6 -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 -6
- package/templates/skills/apm-apply-change/SKILL.md +1 -1
- package/templates/skills/apm-auto-dev/SKILL.md +1 -1
- package/templates/skills/apm-fixbug/SKILL.md +53 -115
- package/templates/skills/apm-release/SKILL.md +87 -0
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
/** 后端镜像部署(`apm deploy-backend`),连接信息放在此节,由你在 `.apm/apm.config.json` 中填写 */
|
|
2
|
+
export type ApmBackendDeploy = {
|
|
3
|
+
registryHost: string;
|
|
4
|
+
registryUser: string;
|
|
5
|
+
registryPassword: string;
|
|
6
|
+
remoteHost: string;
|
|
7
|
+
remotePort: number;
|
|
8
|
+
remoteProtocol: "https" | "http";
|
|
9
|
+
/** 可选;空字符串表示未配置 */
|
|
10
|
+
caPath?: string;
|
|
11
|
+
certPath?: string;
|
|
12
|
+
keyPath?: string;
|
|
13
|
+
/** 远程 pull 的 registry serveraddress;空则使用 `https://{registryHost}` */
|
|
14
|
+
remotePullServeraddress?: string;
|
|
15
|
+
/** 空则使用 registryUser */
|
|
16
|
+
remotePullUser?: string;
|
|
17
|
+
/** 空则使用 registryPassword */
|
|
18
|
+
remotePullPassword?: string;
|
|
19
|
+
/**
|
|
20
|
+
* 镜像仓库完整路径(**不含 tag**),与后续容器名一致时仅 tag 不同。
|
|
21
|
+
* 例:registry.cn-hangzhou.aliyuncs.com/my-ns/my-service
|
|
22
|
+
*/
|
|
23
|
+
imageRepository: string;
|
|
24
|
+
/**
|
|
25
|
+
* 与镜像对应的容器名;空则使用 imageRepository 路径最后一段(与镜像「短名」一致)。
|
|
26
|
+
*/
|
|
27
|
+
containerName?: string;
|
|
28
|
+
};
|
|
1
29
|
export type ApmConfig = {
|
|
2
30
|
auth: {
|
|
3
31
|
id: number;
|
|
@@ -7,7 +35,8 @@ export type ApmConfig = {
|
|
|
7
35
|
url: string;
|
|
8
36
|
wsPort: number;
|
|
9
37
|
};
|
|
10
|
-
deploy
|
|
38
|
+
/** 前端发布(MinIO 等),与 `apm deploy-frontend` 一致;服务端 `/cli/variables/get` 同步此节 */
|
|
39
|
+
frontendDeploy: {
|
|
11
40
|
endpoint: string;
|
|
12
41
|
port: number;
|
|
13
42
|
useSsl: boolean;
|
|
@@ -15,6 +44,36 @@ export type ApmConfig = {
|
|
|
15
44
|
accessKey: string;
|
|
16
45
|
secretKey: string;
|
|
17
46
|
};
|
|
47
|
+
/** 缺省时在解析时与默认合并 */
|
|
48
|
+
backendDeploy?: ApmBackendDeploy;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* 读取并校验 `apm.config.json` 中的 `backendDeploy`,供 `deploy-backend` 使用。
|
|
52
|
+
* 必填项缺失或非法时抛出带说明的 Error。
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveBackendDeployFromApmConfig(cfg: ApmConfig): {
|
|
55
|
+
registry: {
|
|
56
|
+
registryHost: string;
|
|
57
|
+
username: string;
|
|
58
|
+
password: string;
|
|
59
|
+
};
|
|
60
|
+
remoteDocker: {
|
|
61
|
+
host: string;
|
|
62
|
+
port: number;
|
|
63
|
+
protocol: "https" | "http";
|
|
64
|
+
caPath?: string;
|
|
65
|
+
certPath?: string;
|
|
66
|
+
keyPath?: string;
|
|
67
|
+
};
|
|
68
|
+
remotePullAuth: {
|
|
69
|
+
username: string;
|
|
70
|
+
password: string;
|
|
71
|
+
serveraddress: string;
|
|
72
|
+
};
|
|
73
|
+
/** 不含 tag,如 registry.cn-xxx.aliyuncs.com/ns/app */
|
|
74
|
+
imageRepository: string;
|
|
75
|
+
/** 与镜像短名一致,供后续 docker run --name 等使用 */
|
|
76
|
+
containerName: string;
|
|
18
77
|
};
|
|
19
78
|
export declare function loadApmConfig(): ApmConfig;
|
|
20
79
|
export declare function syncApmConfig(options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apm-config.d.ts","sourceRoot":"","sources":["../../src/core/apm-config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE;QAEJ,EAAE,EAAE,MAAM,CAAC;QAEX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QAEN,GAAG,EAAE,MAAM,CAAC;QAEZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,
|
|
1
|
+
{"version":3,"file":"apm-config.d.ts","sourceRoot":"","sources":["../../src/core/apm-config.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4BAA4B;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE;QAEJ,EAAE,EAAE,MAAM,CAAC;QAEX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QAEN,GAAG,EAAE,MAAM,CAAC;QAEZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,6EAA6E;IAC7E,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,mBAAmB;IACnB,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAClC,CAAC;AAkBF;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,SAAS,GAAG;IACjE,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;CACvB,CAkGA;AAoBD,wBAAgB,aAAa,IAAI,SAAS,CAazC;AAGD,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAYxE;AAMD,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,QAKzC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,QA4BpE"}
|
package/dist/core/apm-config.js
CHANGED
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveBackendDeployFromApmConfig = resolveBackendDeployFromApmConfig;
|
|
6
7
|
exports.loadApmConfig = loadApmConfig;
|
|
7
8
|
exports.syncApmConfig = syncApmConfig;
|
|
8
9
|
exports.isApmConfigExists = isApmConfigExists;
|
|
@@ -12,14 +13,120 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
12
13
|
const node_fs_1 = require("node:fs");
|
|
13
14
|
const node_process_1 = require("node:process");
|
|
14
15
|
const client_1 = __importDefault(require("../api/client"));
|
|
16
|
+
const DEFAULT_BACKEND_DEPLOY = {
|
|
17
|
+
registryHost: "",
|
|
18
|
+
registryUser: "",
|
|
19
|
+
registryPassword: "",
|
|
20
|
+
remoteHost: "",
|
|
21
|
+
remotePort: 2376,
|
|
22
|
+
remoteProtocol: "https",
|
|
23
|
+
caPath: "",
|
|
24
|
+
certPath: "",
|
|
25
|
+
keyPath: "",
|
|
26
|
+
remotePullServeraddress: "",
|
|
27
|
+
remotePullUser: "",
|
|
28
|
+
remotePullPassword: "",
|
|
29
|
+
imageRepository: "",
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* 读取并校验 `apm.config.json` 中的 `backendDeploy`,供 `deploy-backend` 使用。
|
|
33
|
+
* 必填项缺失或非法时抛出带说明的 Error。
|
|
34
|
+
*/
|
|
35
|
+
function resolveBackendDeployFromApmConfig(cfg) {
|
|
36
|
+
const b = { ...DEFAULT_BACKEND_DEPLOY, ...cfg.backendDeploy };
|
|
37
|
+
const registryHost = b.registryHost.trim();
|
|
38
|
+
const registryUser = b.registryUser.trim();
|
|
39
|
+
const registryPassword = b.registryPassword.trim();
|
|
40
|
+
const remoteHost = b.remoteHost.trim();
|
|
41
|
+
if (!registryHost) {
|
|
42
|
+
throw new Error("请在 .apm/apm.config.json 的 backendDeploy.registryHost 中配置镜像仓库主机名");
|
|
43
|
+
}
|
|
44
|
+
if (!registryUser) {
|
|
45
|
+
throw new Error("请在 .apm/apm.config.json 的 backendDeploy.registryUser 中配置 Registry 用户名");
|
|
46
|
+
}
|
|
47
|
+
if (!registryPassword) {
|
|
48
|
+
throw new Error("请在 .apm/apm.config.json 的 backendDeploy.registryPassword 中配置 Registry 密码");
|
|
49
|
+
}
|
|
50
|
+
if (!remoteHost) {
|
|
51
|
+
throw new Error("请在 .apm/apm.config.json 的 backendDeploy.remoteHost 中配置远程 Docker 地址");
|
|
52
|
+
}
|
|
53
|
+
const remotePort = Number(b.remotePort);
|
|
54
|
+
if (!Number.isFinite(remotePort) ||
|
|
55
|
+
remotePort < 1 ||
|
|
56
|
+
remotePort > 65535) {
|
|
57
|
+
throw new Error("请在 .apm/apm.config.json 的 backendDeploy.remotePort 中配置合法端口(1–65535)");
|
|
58
|
+
}
|
|
59
|
+
const protocol = b.remoteProtocol === "http"
|
|
60
|
+
? "http"
|
|
61
|
+
: b.remoteProtocol === "https"
|
|
62
|
+
? "https"
|
|
63
|
+
: (() => {
|
|
64
|
+
throw new Error("backendDeploy.remoteProtocol 仅支持 https 或 http");
|
|
65
|
+
})();
|
|
66
|
+
const trimOrUndef = (s) => {
|
|
67
|
+
const t = (s ?? "").trim();
|
|
68
|
+
return t.length > 0 ? t : undefined;
|
|
69
|
+
};
|
|
70
|
+
const remotePullServeraddress = trimOrUndef(b.remotePullServeraddress) ??
|
|
71
|
+
`https://${registryHost}`;
|
|
72
|
+
const remotePullUser = trimOrUndef(b.remotePullUser) ?? registryUser;
|
|
73
|
+
const remotePullPassword = trimOrUndef(b.remotePullPassword) ?? registryPassword;
|
|
74
|
+
const imageRepository = b.imageRepository.trim();
|
|
75
|
+
if (!imageRepository) {
|
|
76
|
+
throw new Error("请在 .apm/apm.config.json 的 backendDeploy.imageRepository 中配置镜像名(完整仓库路径,不含 tag)");
|
|
77
|
+
}
|
|
78
|
+
if (imageRepository.includes(":")) {
|
|
79
|
+
throw new Error("backendDeploy.imageRepository 不应包含 tag(不能出现 ':'),tag 由 `apm deploy-backend` 的位置参数 `<name>` 指定");
|
|
80
|
+
}
|
|
81
|
+
const containerName = trimOrUndef(b.containerName) ?? repositoryBaseName(imageRepository);
|
|
82
|
+
return {
|
|
83
|
+
registry: {
|
|
84
|
+
registryHost,
|
|
85
|
+
username: registryUser,
|
|
86
|
+
password: registryPassword,
|
|
87
|
+
},
|
|
88
|
+
remoteDocker: {
|
|
89
|
+
host: remoteHost,
|
|
90
|
+
port: remotePort,
|
|
91
|
+
protocol,
|
|
92
|
+
caPath: trimOrUndef(b.caPath),
|
|
93
|
+
certPath: trimOrUndef(b.certPath),
|
|
94
|
+
keyPath: trimOrUndef(b.keyPath),
|
|
95
|
+
},
|
|
96
|
+
remotePullAuth: {
|
|
97
|
+
username: remotePullUser,
|
|
98
|
+
password: remotePullPassword,
|
|
99
|
+
serveraddress: remotePullServeraddress,
|
|
100
|
+
},
|
|
101
|
+
imageRepository,
|
|
102
|
+
containerName,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function repositoryBaseName(imageRepositoryWithoutTag) {
|
|
106
|
+
const s = imageRepositoryWithoutTag.trim();
|
|
107
|
+
const i = s.lastIndexOf("/");
|
|
108
|
+
return i >= 0 ? s.slice(i + 1) : s;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 将历史键名 `deploy` 迁到 `frontendDeploy`(读入后删除旧键,下次写回即为新协议)。
|
|
112
|
+
*/
|
|
113
|
+
function migrateLegacyDeployKeyInPlace(raw) {
|
|
114
|
+
if (raw.frontendDeploy === undefined && raw.deploy !== undefined) {
|
|
115
|
+
raw.frontendDeploy = raw.deploy;
|
|
116
|
+
}
|
|
117
|
+
if (raw.deploy !== undefined) {
|
|
118
|
+
delete raw.deploy;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
15
121
|
function loadApmConfig() {
|
|
16
122
|
try {
|
|
17
123
|
const p = getApmConfigPath();
|
|
18
124
|
if (!(0, node_fs_1.existsSync)(p)) {
|
|
19
125
|
createApmConfig({ id: 0 });
|
|
20
126
|
}
|
|
21
|
-
const
|
|
22
|
-
|
|
127
|
+
const raw = JSON.parse((0, node_fs_1.readFileSync)(p, "utf8"));
|
|
128
|
+
migrateLegacyDeployKeyInPlace(raw);
|
|
129
|
+
return raw;
|
|
23
130
|
}
|
|
24
131
|
catch (e) {
|
|
25
132
|
console.error(e);
|
|
@@ -69,7 +176,7 @@ function createApmConfig(options) {
|
|
|
69
176
|
url: options.url || "http://localhost:3000",
|
|
70
177
|
wsPort: 4000,
|
|
71
178
|
},
|
|
72
|
-
|
|
179
|
+
frontendDeploy: {
|
|
73
180
|
endpoint: "",
|
|
74
181
|
port: 0,
|
|
75
182
|
useSsl: false,
|
|
@@ -77,6 +184,7 @@ function createApmConfig(options) {
|
|
|
77
184
|
accessKey: "",
|
|
78
185
|
secretKey: "",
|
|
79
186
|
},
|
|
187
|
+
backendDeploy: DEFAULT_BACKEND_DEPLOY,
|
|
80
188
|
}, null, 2));
|
|
81
189
|
}
|
|
82
190
|
//# sourceMappingURL=apm-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apm-config.js","sourceRoot":"","sources":["../../src/core/apm-config.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"apm-config.js","sourceRoot":"","sources":["../../src/core/apm-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|