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.
- 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 +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 +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 +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 -5
- package/templates/skills/apm-release/SKILL.md +87 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 与 `deploy-frontend` / `deploy-backend` 共享:从位置参数解析「分支名片段」及 `--env` 环境标签。
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sanitizeBranchName = sanitizeBranchName;
|
|
7
|
+
exports.normalizeBranchName = normalizeBranchName;
|
|
8
|
+
exports.resolveEnvTag = resolveEnvTag;
|
|
9
|
+
function sanitizeBranchName(raw) {
|
|
10
|
+
const normalized = raw.replace(/\\/g, "/").replace(/^\/+/, "").trim();
|
|
11
|
+
if (!normalized) {
|
|
12
|
+
throw new Error("branchName 不能为空");
|
|
13
|
+
}
|
|
14
|
+
const segs = normalized.split("/");
|
|
15
|
+
if (segs.some((s) => s === "" || s === "." || s === "..")) {
|
|
16
|
+
throw new Error("branchName 非法");
|
|
17
|
+
}
|
|
18
|
+
return segs[segs.length - 1] ?? "";
|
|
19
|
+
}
|
|
20
|
+
function normalizeBranchName(raw) {
|
|
21
|
+
const normalized = raw.trim().replace(/\\/g, "/").replace(/^\/+/, "");
|
|
22
|
+
if (!normalized)
|
|
23
|
+
return "";
|
|
24
|
+
const segs = normalized.split("/");
|
|
25
|
+
if (segs.some((s) => s === "" || s === "." || s === ".."))
|
|
26
|
+
return "";
|
|
27
|
+
return segs[segs.length - 1] ?? "";
|
|
28
|
+
}
|
|
29
|
+
/** `--env` 默认含逗号时取第一段作为标签(如「测试环境」) */
|
|
30
|
+
function resolveEnvTag(raw) {
|
|
31
|
+
const parts = raw
|
|
32
|
+
.split(",")
|
|
33
|
+
.map((s) => s.trim())
|
|
34
|
+
.filter((s) => s.length > 0);
|
|
35
|
+
return parts[0] ?? "测试环境";
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=branch-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-name.js","sourceRoot":"","sources":["../../src/core/branch-name.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,gDAUC;AAED,kDAMC;AAGD,sCAMC;AA3BD,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,sCAAsC;AACtC,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AAC5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-cmd.d.ts","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,gBAAgB;IAW/B,OAAO;IAab,OAAO,CAAC,SAAS;YAwBH,SAAS;IA4BvB,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"cursor-cmd.d.ts","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,gBAAgB;IAW/B,OAAO;IAab,OAAO,CAAC,SAAS;YAwBH,SAAS;IA4BvB,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,eAAe;YAgBT,MAAM;YAUN,YAAY;YAmBZ,WAAW;CAM1B"}
|
package/dist/core/cursor-cmd.js
CHANGED
|
@@ -112,7 +112,6 @@ class CursorCmd {
|
|
|
112
112
|
return chatId;
|
|
113
113
|
}
|
|
114
114
|
execCommand(command, args) {
|
|
115
|
-
console.log("执行 cursor 命令", command, args);
|
|
116
115
|
const isWin = process.platform === "win32";
|
|
117
116
|
if (isWin) {
|
|
118
117
|
return (0, node_child_process_1.spawn)("cmd.exe", ["/d", "/s", "/c", command, ...args], {
|
|
@@ -156,6 +155,8 @@ class CursorCmd {
|
|
|
156
155
|
"/prd-review": "REVIEWING",
|
|
157
156
|
"/prd-sync": "POLISHING",
|
|
158
157
|
"/prd-testcase": "GENERATING_TEST_CASE",
|
|
158
|
+
"/apm-auto-dev": "DEVELOPING",
|
|
159
|
+
"/apm-fixbug": "FIXING_DEFECT",
|
|
159
160
|
};
|
|
160
161
|
const status = statusMap[this.name];
|
|
161
162
|
if (!status) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-cmd.js","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cursor-cmd.js","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type MinioClientOptions = {
|
|
2
|
+
endPoint: string;
|
|
3
|
+
port: number;
|
|
4
|
+
useSSL: boolean;
|
|
5
|
+
accessKey: string;
|
|
6
|
+
secretKey: string;
|
|
7
|
+
};
|
|
8
|
+
export type ArtifactFile = {
|
|
9
|
+
absPath: string;
|
|
10
|
+
relativePath: string;
|
|
11
|
+
size: number;
|
|
12
|
+
};
|
|
13
|
+
export declare const MIME_BY_EXT: Record<string, string>;
|
|
14
|
+
export declare const DEFAULT_MAX_FILE_SIZE_MB = 100;
|
|
15
|
+
export declare function sanitizeRelativePath(raw: string): string;
|
|
16
|
+
export declare function toArtifactObjectKey(input: {
|
|
17
|
+
branchName: string;
|
|
18
|
+
relativePath: string;
|
|
19
|
+
}): string;
|
|
20
|
+
export declare function isDirectoryPath(absPath: string): Promise<boolean>;
|
|
21
|
+
export declare function readArtifactFile(absPath: string): Promise<Buffer>;
|
|
22
|
+
export declare function collectFiles(rootDir: string): Promise<ArtifactFile[]>;
|
|
23
|
+
export declare function detectMimeType(filePath: string): string;
|
|
24
|
+
export declare function toMB(bytes: number): string;
|
|
25
|
+
export declare class MinioClient {
|
|
26
|
+
private readonly client;
|
|
27
|
+
constructor(options: MinioClientOptions);
|
|
28
|
+
ensureBucket(bucket: string): Promise<void>;
|
|
29
|
+
deleteObjectsByPrefix(bucket: string, prefix: string): Promise<void>;
|
|
30
|
+
putObject(bucket: string, objectKey: string, data: Buffer, meta?: {
|
|
31
|
+
"Content-Type"?: string;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
setBucketPublicRead(bucket: string): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=minio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minio.d.ts","sourceRoot":"","sources":["../../src/core/minio.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkB9C,CAAC;AAEF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAIT;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAK3E;AAqBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AAwBD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,kBAAkB;IAUjC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpE,SAAS,CACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC,IAAI,CAAC;IAIV,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD"}
|
|
@@ -0,0 +1,154 @@
|
|
|
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.MinioClient = exports.DEFAULT_MAX_FILE_SIZE_MB = exports.MIME_BY_EXT = void 0;
|
|
7
|
+
exports.sanitizeRelativePath = sanitizeRelativePath;
|
|
8
|
+
exports.toArtifactObjectKey = toArtifactObjectKey;
|
|
9
|
+
exports.isDirectoryPath = isDirectoryPath;
|
|
10
|
+
exports.readArtifactFile = readArtifactFile;
|
|
11
|
+
exports.collectFiles = collectFiles;
|
|
12
|
+
exports.detectMimeType = detectMimeType;
|
|
13
|
+
exports.toMB = toMB;
|
|
14
|
+
const promises_1 = require("node:fs/promises");
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
const minio_1 = require("minio");
|
|
17
|
+
exports.MIME_BY_EXT = {
|
|
18
|
+
".html": "text/html; charset=utf-8",
|
|
19
|
+
".js": "application/javascript; charset=utf-8",
|
|
20
|
+
".mjs": "application/javascript; charset=utf-8",
|
|
21
|
+
".css": "text/css; charset=utf-8",
|
|
22
|
+
".json": "application/json; charset=utf-8",
|
|
23
|
+
".map": "application/json; charset=utf-8",
|
|
24
|
+
".txt": "text/plain; charset=utf-8",
|
|
25
|
+
".svg": "image/svg+xml",
|
|
26
|
+
".png": "image/png",
|
|
27
|
+
".jpg": "image/jpeg",
|
|
28
|
+
".jpeg": "image/jpeg",
|
|
29
|
+
".webp": "image/webp",
|
|
30
|
+
".gif": "image/gif",
|
|
31
|
+
".ico": "image/x-icon",
|
|
32
|
+
".woff": "font/woff",
|
|
33
|
+
".woff2": "font/woff2",
|
|
34
|
+
".ttf": "font/ttf",
|
|
35
|
+
};
|
|
36
|
+
exports.DEFAULT_MAX_FILE_SIZE_MB = 100;
|
|
37
|
+
function sanitizeRelativePath(raw) {
|
|
38
|
+
const normalized = raw.replace(/\\/g, "/").replace(/^\/+/, "").trim();
|
|
39
|
+
if (!normalized) {
|
|
40
|
+
throw new Error("relativePath 不能为空");
|
|
41
|
+
}
|
|
42
|
+
const segs = normalized.split("/");
|
|
43
|
+
if (segs.some((s) => s === "" || s === "." || s === "..")) {
|
|
44
|
+
throw new Error("relativePath 非法");
|
|
45
|
+
}
|
|
46
|
+
return segs.join("/");
|
|
47
|
+
}
|
|
48
|
+
function toArtifactObjectKey(input) {
|
|
49
|
+
return `${input.branchName}/dist/${input.relativePath}`
|
|
50
|
+
.replace(/\/+/g, "/")
|
|
51
|
+
.replace(/^\//, "");
|
|
52
|
+
}
|
|
53
|
+
async function isDirectoryPath(absPath) {
|
|
54
|
+
try {
|
|
55
|
+
const st = await (0, promises_1.stat)(absPath);
|
|
56
|
+
return st.isDirectory();
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function readArtifactFile(absPath) {
|
|
63
|
+
return (0, promises_1.readFile)(absPath);
|
|
64
|
+
}
|
|
65
|
+
async function collectFiles(rootDir) {
|
|
66
|
+
const out = [];
|
|
67
|
+
await walk(rootDir, rootDir, out);
|
|
68
|
+
out.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
async function walk(rootDir, currentDir, out) {
|
|
72
|
+
const entries = await (0, promises_1.readdir)(currentDir, { withFileTypes: true });
|
|
73
|
+
for (const ent of entries) {
|
|
74
|
+
const absPath = node_path_1.default.join(currentDir, ent.name);
|
|
75
|
+
if (ent.isDirectory()) {
|
|
76
|
+
await walk(rootDir, absPath, out);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (!ent.isFile())
|
|
80
|
+
continue;
|
|
81
|
+
const st = await (0, promises_1.stat)(absPath);
|
|
82
|
+
const rel = node_path_1.default.relative(rootDir, absPath).split(node_path_1.default.sep).join("/");
|
|
83
|
+
out.push({ absPath, relativePath: rel, size: st.size });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function detectMimeType(filePath) {
|
|
87
|
+
const ext = node_path_1.default.extname(filePath).toLowerCase();
|
|
88
|
+
return exports.MIME_BY_EXT[ext] || "application/octet-stream";
|
|
89
|
+
}
|
|
90
|
+
function toMB(bytes) {
|
|
91
|
+
return (bytes / 1024 / 1024).toFixed(2);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* minio 默认 listObjectsV2 每页最多 1000 条,单页 XML 在 fast-xml-parser 中会触发
|
|
95
|
+
* Entity expansion limit exceeded。用 listObjectsV2Query 缩小每页条数并分页列举。
|
|
96
|
+
*/
|
|
97
|
+
const LIST_OBJECTS_PAGE_MAX_KEYS = 500;
|
|
98
|
+
/** 匿名可读桶内所有对象(仅 s3:GetObject),用于路径直链 */
|
|
99
|
+
function buildPublicReadPolicy(bucket) {
|
|
100
|
+
const policy = {
|
|
101
|
+
Version: "2012-10-17",
|
|
102
|
+
Statement: [
|
|
103
|
+
{
|
|
104
|
+
Effect: "Allow",
|
|
105
|
+
Principal: { AWS: ["*"] },
|
|
106
|
+
Action: ["s3:GetObject"],
|
|
107
|
+
Resource: [`arn:aws:s3:::${bucket}/*`],
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
return JSON.stringify(policy);
|
|
112
|
+
}
|
|
113
|
+
class MinioClient {
|
|
114
|
+
client;
|
|
115
|
+
constructor(options) {
|
|
116
|
+
this.client = new minio_1.Client({
|
|
117
|
+
endPoint: options.endPoint,
|
|
118
|
+
port: options.port,
|
|
119
|
+
useSSL: options.useSSL,
|
|
120
|
+
accessKey: options.accessKey,
|
|
121
|
+
secretKey: options.secretKey,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
async ensureBucket(bucket) {
|
|
125
|
+
const exists = await this.client.bucketExists(bucket);
|
|
126
|
+
if (!exists) {
|
|
127
|
+
await this.client.makeBucket(bucket);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async deleteObjectsByPrefix(bucket, prefix) {
|
|
131
|
+
let continuationToken = "";
|
|
132
|
+
const removeBatchSize = 1000;
|
|
133
|
+
for (;;) {
|
|
134
|
+
const result = await this.client.listObjectsV2Query(bucket, prefix, continuationToken, "", LIST_OBJECTS_PAGE_MAX_KEYS, "");
|
|
135
|
+
const keys = result.objects
|
|
136
|
+
.map((obj) => ("name" in obj && obj.name ? obj.name.trim() : ""))
|
|
137
|
+
.filter((name) => name.length > 0);
|
|
138
|
+
for (let i = 0; i < keys.length; i += removeBatchSize) {
|
|
139
|
+
await this.client.removeObjects(bucket, keys.slice(i, i + removeBatchSize));
|
|
140
|
+
}
|
|
141
|
+
if (!result.isTruncated)
|
|
142
|
+
break;
|
|
143
|
+
continuationToken = result.nextContinuationToken ?? "";
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async putObject(bucket, objectKey, data, meta) {
|
|
147
|
+
await this.client.putObject(bucket, objectKey, data, data.length, meta);
|
|
148
|
+
}
|
|
149
|
+
async setBucketPublicRead(bucket) {
|
|
150
|
+
await this.client.setBucketPolicy(bucket, buildPublicReadPolicy(bucket));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.MinioClient = MinioClient;
|
|
154
|
+
//# sourceMappingURL=minio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minio.js","sourceRoot":"","sources":["../../src/core/minio.ts"],"names":[],"mappings":";;;;;;AAwCA,oDAUC;AAED,kDAOC;AAED,0CAOC;AAED,4CAEC;AAED,oCAKC;AAqBD,wCAGC;AAED,oBAEC;AA3GD,+CAA2D;AAC3D,0DAA6B;AAC7B,iCAA+B;AAgBlB,QAAA,WAAW,GAA2B;IACjD,OAAO,EAAE,0BAA0B;IACnC,KAAK,EAAE,uCAAuC;IAC9C,MAAM,EAAE,uCAAuC;IAC/C,MAAM,EAAE,yBAAyB;IACjC,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,iCAAiC;IACzC,MAAM,EAAE,2BAA2B;IACnC,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,UAAU;CACnB,CAAC;AAEW,QAAA,wBAAwB,GAAG,GAAG,CAAC;AAE5C,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAGnC;IACC,OAAO,GAAG,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,YAAY,EAAE;SACpD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,IAAA,eAAI,EAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,OAAe;IACpD,OAAO,IAAA,mBAAQ,EAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,OAAe,EACf,UAAkB,EAClB,GAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YAAE,SAAS;QAC5B,MAAM,EAAE,GAAG,MAAM,IAAA,eAAI,EAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,mBAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,mBAAW,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;AACxD,CAAC;AAED,SAAgB,IAAI,CAAC,KAAa;IAChC,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAEvC,wCAAwC;AACxC,SAAS,qBAAqB,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE;YACT;gBACE,MAAM,EAAE,OAAO;gBACf,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;gBACzB,MAAM,EAAE,CAAC,cAAc,CAAC;gBACxB,QAAQ,EAAE,CAAC,gBAAgB,MAAM,IAAI,CAAC;aACvC;SACF;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,MAAa,WAAW;IACL,MAAM,CAAS;IAEhC,YAAY,OAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,cAAM,CAAC;YACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,MAAc;QACxD,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CACjD,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,EAAE,EACF,0BAA0B,EAC1B,EAAE,CACH,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO;iBACxB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAChE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC;gBACtD,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC7B,MAAM,EACN,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CACnC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,WAAW;gBAAE,MAAM;YAC/B,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAc,EACd,SAAiB,EACjB,IAAY,EACZ,IAAkC;QAElC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,MAAc;QACtC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF;AA1DD,kCA0DC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-project-manage-cli",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.13",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "AI 项目管理 CLI 工具,结合飞书项目实现AI项目开发工作流",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
"apm:login": "node ./dist/cli.js login",
|
|
28
28
|
"apm:config:get-base-url": "node ./dist/cli.js config get base-url",
|
|
29
29
|
"apm:init": "node ./dist/cli.js init",
|
|
30
|
-
"apm:publish:test": "cd ../.. && node packages/cli/dist/cli.js publish cli-publish-test --dir packages/cli/dist",
|
|
31
30
|
"apm:comment:help": "node ./dist/cli.js comment --help",
|
|
32
31
|
"apm:comment:update": "node ./dist/cli.js comment update",
|
|
33
32
|
"apm:comment:process": "node ./dist/cli.js comment process",
|
|
@@ -41,11 +40,13 @@
|
|
|
41
40
|
"commander": "^13.1.0",
|
|
42
41
|
"listpage-http": "0.0.316",
|
|
43
42
|
"ws": "~8.20.0",
|
|
44
|
-
"minio": "~8.0.7"
|
|
43
|
+
"minio": "~8.0.7",
|
|
44
|
+
"dockerode": "~4.0.10"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/node": "^22.10.7",
|
|
48
48
|
"typescript": "~5.7.3",
|
|
49
|
-
"@types/ws": "~8.18.1"
|
|
49
|
+
"@types/ws": "~8.18.1",
|
|
50
|
+
"@types/dockerode": "~4.0.1"
|
|
50
51
|
}
|
|
51
|
-
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apm-release
|
|
3
|
+
description: 需求上线:取分支 → 切分支并拉最新 → code-deploy 正式环境 → apm release 同步状态。用户 @ 本技能时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 需求上线(apm-release)
|
|
7
|
+
|
|
8
|
+
## 输入
|
|
9
|
+
|
|
10
|
+
- **`requirementId`(必须)**:需求主键 ID。
|
|
11
|
+
- **`-f` / `--force`(可选,默认不加)**:仅当用户在对话中**明确表态**「不用走代码审核 / 不审代码直接上线 / 合并 PR 即可」等同类含义时,第 4 步的 `apm release` 才增加 **`-f`**(与 CLI 一致:创建 PR 后对其实施 squash 合并)。**用户未明确说时一律不带 `-f`**,不得自行替用户决定。
|
|
12
|
+
|
|
13
|
+
## 执行顺序(严格 1 → 2 → 3 → 4)
|
|
14
|
+
|
|
15
|
+
### 第 1 步 — 获取分支名
|
|
16
|
+
|
|
17
|
+
执行:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
apm get branchName <requirementId>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
从标准输出读取**一行分支名**,记为 `BRANCH`。若命令失败,**不要继续第 2、3 步**,直接进入第 4 步(见下:若拿不到 `BRANCH`,`-b` 无法填写时须在对话中说明,并按失败场景处理)。
|
|
24
|
+
|
|
25
|
+
**对话输出**:本步结束后,在回复中写明**执行状态**(成功/失败)与**结果**(分支名或报错摘要)。
|
|
26
|
+
|
|
27
|
+
### 第 2 步 — 切分支并拉取最新
|
|
28
|
+
|
|
29
|
+
1. 若工作区有未提交变更(含未跟踪文件按项目习惯):先 `git stash`(或等价方式)保存,再切分支。
|
|
30
|
+
2. `git checkout <BRANCH>`(已在该分支可跳过 checkout)。
|
|
31
|
+
3. `git pull`(或 `git fetch` + 与项目一致的合并方式),确保当前分支与远程一致、代码最新。
|
|
32
|
+
4. **合并冲突时**(pull/merge 产生冲突):
|
|
33
|
+
- 可先**自行解决**,但**只处理**与本次需求意图**明显无冲突**的情形(例如无关文件、能明确判定为可安全合并的变更)。
|
|
34
|
+
- 一旦出现**无法分辨**的冲突(说不清是否影响本需求、怀疑与需求意图相悖、或不能确信合并结果正确):**立即判定本步骤失败**,**不要**猜测性选边或强行合并;进入第 4 步,`-r` 用简短说明(如 `pull 冲突无法安全解决`)。
|
|
35
|
+
|
|
36
|
+
任一步失败则**停止第 3 步**,进入第 4 步。
|
|
37
|
+
|
|
38
|
+
**对话输出**:本步结束后,在回复中写明**执行状态**与**结果**(当前分支、pull 是否成功、stash 是否使用、若有冲突则是否已解决或已判失败等)。
|
|
39
|
+
|
|
40
|
+
### 第 3 步 — 部署正式环境
|
|
41
|
+
|
|
42
|
+
调用 **`code-deploy` 技能**:按项目 `.apm/deploy/README.md`(或技能约定)部署**线上/正式环境**。
|
|
43
|
+
|
|
44
|
+
失败则**停止**,进入第 4 步。
|
|
45
|
+
|
|
46
|
+
**对话输出**:本步结束后,在回复中写明**执行状态**与**结果**(部署是否完成、关键输出摘要)。
|
|
47
|
+
|
|
48
|
+
### 第 4 步 — 同步状态(`apm release`)
|
|
49
|
+
|
|
50
|
+
**始终在本流程末尾执行本步**(前面任一步失败也要执行,用于同步服务端状态)。
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
apm release <requirementId> -b <BRANCH>
|
|
54
|
+
# 用户已明确「不审代码直接上线」时(见上文「输入」):
|
|
55
|
+
apm release <requirementId> -b <BRANCH> -f
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- **第 1~3 步全部成功**:带 `-b`;**仅**在用户已明确要求时再加 `-f`。不带 `-r`。
|
|
59
|
+
- **任一步失败**:带 `-b` 与 **`-r`**,`reason` 为**简短**失败说明(十来字~一两行),不要把整段日志塞进 `-r`。**失败路径不要加 `-f`**(`-f` 只用于成功同步且用户明确要跳审合并的场景)。
|
|
60
|
+
|
|
61
|
+
示例:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
apm release <requirementId> -b <BRANCH> -r "获取分支失败"
|
|
65
|
+
apm release <requirementId> -b <BRANCH> -r "git pull 冲突"
|
|
66
|
+
apm release <requirementId> -b <BRANCH> -r "code-deploy 失败"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
若第 1 步未得到 `BRANCH`,无法在命令行合法填写 `-b` 时:在对话中说明阻塞原因;若能从用户或环境确认分支名再补 `-b`,否则不要编造分支名。
|
|
70
|
+
|
|
71
|
+
## 对话输出(必选)
|
|
72
|
+
|
|
73
|
+
**第 1~3 步**在面向用户的回复中用下面表格呈现(每步一行;未执行的步骤填「未执行」及原因):
|
|
74
|
+
|
|
75
|
+
| 步骤 | 状态 | 结果/说明 |
|
|
76
|
+
|------|------|-----------|
|
|
77
|
+
| 1 获取分支名 | 成功 / 失败 / 未执行 | 分支名或报错摘要 |
|
|
78
|
+
| 2 切分支并拉取 | 成功 / 失败 / 未执行 | 当前分支、pull/stash/冲突处理摘要 |
|
|
79
|
+
| 3 code-deploy | 成功 / 失败 / 未执行 | 部署是否完成、关键输出摘要 |
|
|
80
|
+
|
|
81
|
+
**第 4 步**:在表格后另起一段说明是否执行 `apm release`、是否带 **`-r`**、是否因用户明确要求而带 **`-f`**、命令是否成功。
|
|
82
|
+
|
|
83
|
+
## 约束
|
|
84
|
+
|
|
85
|
+
- `-r` 仅用于概括失败类型,详细日志放在对话说明里。
|
|
86
|
+
- **`-f`**:仅在用户**明确口头表达**「不审代码直接上线」等含义时使用;不得因图省事或默认假设而加 `-f`。
|
|
87
|
+
- 不要为「碰运气」重复执行同一意图的 `apm release`;成功路径 `-b`(无 `-r`)与失败路径 `-b -r` 各以一次为常例。
|