ai-project-manage-cli 6.0.66 → 6.0.68
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/dist/index.js +63 -47
- package/package.json +1 -1
- package/template/deploy/README.md +3 -23
- package/template/skills/apm-deploy/SKILL.md +4 -6
package/dist/index.js
CHANGED
|
@@ -2603,7 +2603,20 @@ function fail(message) {
|
|
|
2603
2603
|
process.exit(1);
|
|
2604
2604
|
}
|
|
2605
2605
|
function expandPath(pathStr) {
|
|
2606
|
-
|
|
2606
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
2607
|
+
return path2.resolve(pathStr.replace(/^~(?=\/|\\|$)/, home));
|
|
2608
|
+
}
|
|
2609
|
+
function quoteForShell(value) {
|
|
2610
|
+
if (process.platform === "win32") {
|
|
2611
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
2612
|
+
}
|
|
2613
|
+
return shellSingleQuote(value);
|
|
2614
|
+
}
|
|
2615
|
+
function formatMavenLocalRepoArg(repoPath) {
|
|
2616
|
+
if (process.platform === "win32") {
|
|
2617
|
+
return `-Dmaven.repo.local=${quoteForShell(repoPath)}`;
|
|
2618
|
+
}
|
|
2619
|
+
return `-Dmaven.repo.local=${repoPath}`;
|
|
2607
2620
|
}
|
|
2608
2621
|
function deployCacheDir() {
|
|
2609
2622
|
return path2.join(workspaceApmDir(), "deploy", ".deploy_cache");
|
|
@@ -2708,33 +2721,40 @@ function getMvnExecutable() {
|
|
|
2708
2721
|
const isWin = process.platform === "win32";
|
|
2709
2722
|
const candidates = isWin ? ["mvn.cmd", "mvn.bat", "mvn"] : ["mvn"];
|
|
2710
2723
|
for (const name of candidates) {
|
|
2711
|
-
const result = spawnSync2(isWin ?
|
|
2712
|
-
encoding: "utf8"
|
|
2724
|
+
const result = spawnSync2(isWin ? `where ${name}` : `which ${name}`, {
|
|
2725
|
+
encoding: "utf8",
|
|
2726
|
+
shell: true
|
|
2713
2727
|
});
|
|
2714
2728
|
if (result.status === 0 && result.stdout.trim()) {
|
|
2715
|
-
return result.stdout.trim().split(/\r?\n/)[0];
|
|
2729
|
+
return result.stdout.trim().split(/\r?\n/)[0].trim();
|
|
2716
2730
|
}
|
|
2717
2731
|
}
|
|
2718
2732
|
fail("\u672A\u627E\u5230 mvn \u547D\u4EE4\uFF0C\u8BF7\u786E\u8BA4 Maven \u5DF2\u5B89\u88C5\u5E76\u52A0\u5165 PATH");
|
|
2719
2733
|
}
|
|
2720
2734
|
function runMavenBuild(projectRoot, mavenLocalRepo) {
|
|
2721
2735
|
const mavenRepo = expandPath(mavenLocalRepo);
|
|
2722
|
-
const
|
|
2723
|
-
|
|
2736
|
+
const mvn = getMvnExecutable();
|
|
2737
|
+
const command = [
|
|
2738
|
+
quoteForShell(mvn),
|
|
2724
2739
|
"clean",
|
|
2725
2740
|
"package",
|
|
2726
2741
|
`-P${MAVEN_PROFILE}`,
|
|
2727
|
-
|
|
2742
|
+
formatMavenLocalRepoArg(mavenRepo),
|
|
2728
2743
|
"-DskipTests"
|
|
2729
|
-
];
|
|
2730
|
-
log(`\u5F00\u59CB Maven \u6784\u5EFA: ${
|
|
2744
|
+
].join(" ");
|
|
2745
|
+
log(`\u5F00\u59CB Maven \u6784\u5EFA: ${command}`);
|
|
2731
2746
|
log(`Maven \u672C\u5730\u4ED3\u5E93: ${mavenRepo}`);
|
|
2732
|
-
|
|
2747
|
+
log(`\u6784\u5EFA\u76EE\u5F55: ${projectRoot}`);
|
|
2748
|
+
const result = spawnSync2(command, {
|
|
2733
2749
|
cwd: projectRoot,
|
|
2734
|
-
stdio: "inherit"
|
|
2750
|
+
stdio: "inherit",
|
|
2751
|
+
shell: true,
|
|
2752
|
+
env: process.env
|
|
2735
2753
|
});
|
|
2736
2754
|
if (result.status !== 0) {
|
|
2737
|
-
fail(
|
|
2755
|
+
fail(
|
|
2756
|
+
`Maven \u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${result.status ?? 1}\u3002\u8BF7\u5728\u9879\u76EE\u6839\u76EE\u5F55\u624B\u52A8\u6267\u884C\u4EE5\u67E5\u770B\u8BE6\u7EC6\u9519\u8BEF: ${command}`
|
|
2757
|
+
);
|
|
2738
2758
|
}
|
|
2739
2759
|
}
|
|
2740
2760
|
function locateLibDir(projectRoot) {
|
|
@@ -2978,9 +2998,7 @@ async function runWisdomBackendDeploy(options) {
|
|
|
2978
2998
|
log(`=== \u81EA\u52A8\u90E8\u7F72: ${config.projectName} ===`);
|
|
2979
2999
|
log(`\u914D\u7F6E\u6587\u4EF6: ${path2.join(workspaceApmDir(), "apm.config.json")}`);
|
|
2980
3000
|
log(`\u9879\u76EE\u6839\u76EE\u5F55: ${projectRoot}`);
|
|
2981
|
-
|
|
2982
|
-
runMavenBuild(projectRoot, config.mavenLocalRepo);
|
|
2983
|
-
}
|
|
3001
|
+
runMavenBuild(projectRoot, config.mavenLocalRepo);
|
|
2984
3002
|
const libDir = locateLibDir(projectRoot);
|
|
2985
3003
|
let manifest = loadManifest3();
|
|
2986
3004
|
const conn = await connectSsh(config);
|
|
@@ -3110,10 +3128,12 @@ async function runWisdomAutoDeploy(options) {
|
|
|
3110
3128
|
const configPath = options.configPath ?? path3.join(workspaceApmDir(cwd), "apm.config.json");
|
|
3111
3129
|
const cfg = loadApmConfig({ configPath });
|
|
3112
3130
|
const settings = resolveWisdomBackendDeployFromApmConfig(cfg);
|
|
3131
|
+
console.error(
|
|
3132
|
+
`[apm] \u540E\u7AEF\u90E8\u7F72\u4E0D\u533A\u5206 test/online\uFF0C\u5FFD\u7565\u73AF\u5883\u53C2\u6570: ${options.env}`
|
|
3133
|
+
);
|
|
3113
3134
|
await runWisdomBackendDeploy({
|
|
3114
3135
|
config: settings,
|
|
3115
|
-
projectRoot: cwd
|
|
3116
|
-
skipMaven: Boolean(options.skipMaven)
|
|
3136
|
+
projectRoot: cwd
|
|
3117
3137
|
});
|
|
3118
3138
|
return { projectType };
|
|
3119
3139
|
}
|
|
@@ -4498,37 +4518,34 @@ function runShellCommand3(command, cwd) {
|
|
|
4498
4518
|
}
|
|
4499
4519
|
function registerDeployMainCommand(program) {
|
|
4500
4520
|
program.command("deploy").description(
|
|
4501
|
-
"\u7EDF\u4E00\u90E8\u7F72\uFF1A\u533B\u52A1\u5B58\u91CF\
|
|
4521
|
+
"\u7EDF\u4E00\u90E8\u7F72\uFF1A\u533B\u52A1\u5B58\u91CF\u81EA\u52A8\u8BC6\u522B\u524D\u540E\u7AEF\uFF08\u524D\u7AEF\u6309 deploy:<env> \u811A\u672C\uFF1B\u540E\u7AEF test/online \u540C\u4E00\u5957\uFF09\uFF1B\u5176\u4ED6\u9879\u76EE\u6309 deploy.<\u73AF\u5883> \u6267\u884C shell \u547D\u4EE4"
|
|
4502
4522
|
).argument("<env>", "\u90E8\u7F72\u73AF\u5883\u540D\uFF08\u5982 test\u3001online\uFF09").option(
|
|
4503
4523
|
"--config <path>",
|
|
4504
4524
|
"apm.config.json \u8DEF\u5F84\uFF08\u9ED8\u8BA4 .apm/apm.config.json\uFF09"
|
|
4505
|
-
).
|
|
4506
|
-
|
|
4507
|
-
|
|
4508
|
-
|
|
4509
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
});
|
|
4516
|
-
return;
|
|
4517
|
-
}
|
|
4518
|
-
const deployCommands = cfg.deploy ?? {};
|
|
4519
|
-
const command = deployCommands[env]?.trim();
|
|
4520
|
-
if (!command) {
|
|
4521
|
-
const keys = Object.keys(deployCommands);
|
|
4522
|
-
console.error(
|
|
4523
|
-
keys.length > 0 ? `apm.config.json \u4E2D\u672A\u914D\u7F6E deploy.${env}\uFF0C\u53EF\u7528\u73AF\u5883: ${keys.join(
|
|
4524
|
-
", "
|
|
4525
|
-
)}` : `apm.config.json \u4E2D\u672A\u914D\u7F6E deploy \u6BB5`
|
|
4526
|
-
);
|
|
4527
|
-
process.exit(1);
|
|
4528
|
-
}
|
|
4529
|
-
runShellCommand3(command, cwd);
|
|
4525
|
+
).action(async (env, opts) => {
|
|
4526
|
+
const cwd = process.cwd();
|
|
4527
|
+
const cfg = loadApmConfig({ configPath: opts.config });
|
|
4528
|
+
if (isWisdomLegacyDeploy(cfg)) {
|
|
4529
|
+
await runWisdomAutoDeploy({
|
|
4530
|
+
env,
|
|
4531
|
+
cwd,
|
|
4532
|
+
configPath: opts.config
|
|
4533
|
+
});
|
|
4534
|
+
return;
|
|
4530
4535
|
}
|
|
4531
|
-
|
|
4536
|
+
const deployCommands = cfg.deploy ?? {};
|
|
4537
|
+
const command = deployCommands[env]?.trim();
|
|
4538
|
+
if (!command) {
|
|
4539
|
+
const keys = Object.keys(deployCommands);
|
|
4540
|
+
console.error(
|
|
4541
|
+
keys.length > 0 ? `apm.config.json \u4E2D\u672A\u914D\u7F6E deploy.${env}\uFF0C\u53EF\u7528\u73AF\u5883: ${keys.join(
|
|
4542
|
+
", "
|
|
4543
|
+
)}` : `apm.config.json \u4E2D\u672A\u914D\u7F6E deploy \u6BB5`
|
|
4544
|
+
);
|
|
4545
|
+
process.exit(1);
|
|
4546
|
+
}
|
|
4547
|
+
runShellCommand3(command, cwd);
|
|
4548
|
+
});
|
|
4532
4549
|
}
|
|
4533
4550
|
|
|
4534
4551
|
// src/commands/deploy/backend.ts
|
|
@@ -5428,12 +5445,11 @@ function registerDeployWisdomBackendCommands(program) {
|
|
|
5428
5445
|
).option(
|
|
5429
5446
|
"--config <path>",
|
|
5430
5447
|
"apm.config.json \u8DEF\u5F84\uFF08\u9ED8\u8BA4 .apm/apm.config.json\uFF09"
|
|
5431
|
-
).
|
|
5448
|
+
).action(async (opts) => {
|
|
5432
5449
|
const cfg = loadApmConfig({ configPath: opts.config });
|
|
5433
5450
|
const settings = resolveWisdomBackendDeployFromApmConfig(cfg);
|
|
5434
5451
|
await runWisdomBackendDeploy({
|
|
5435
|
-
config: settings
|
|
5436
|
-
skipMaven: Boolean(opts.skipMaven)
|
|
5452
|
+
config: settings
|
|
5437
5453
|
});
|
|
5438
5454
|
});
|
|
5439
5455
|
}
|
package/package.json
CHANGED
|
@@ -1,28 +1,8 @@
|
|
|
1
|
-
##
|
|
1
|
+
## 部署
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
部署测试环境:`apm deploy test`
|
|
4
|
+
部署线上环境:`apm deploy online`
|
|
5
5
|
|
|
6
|
-
CLI 会自动识别项目类型(根目录有 `package.json` 为前端 Vue,否则为后端 Java)。
|
|
7
|
-
|
|
8
|
-
前端仓库需在 `package.json` 中配置 `deploy:test` / `deploy:online` 脚本,例如:
|
|
9
|
-
|
|
10
|
-
```json
|
|
11
|
-
{
|
|
12
|
-
"scripts": {
|
|
13
|
-
"deploy:test": "npm run build && apm deploy-sftp --dir=dist --extract",
|
|
14
|
-
"deploy:online": "npm run build && apm deploy-sftp --dir=dist --extract"
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
执行 `apm deploy test` 时会自动转为 `npm run deploy:test`。
|
|
20
|
-
|
|
21
|
-
## 后端部署(不区分正式环境和测试环境)
|
|
22
|
-
|
|
23
|
-
后端仓库直接执行:`apm deploy test` 或 `apm deploy online`(环境参数对后端无影响)
|
|
24
|
-
|
|
25
|
-
也可单独执行:`apm deploy-wisdom-backend`
|
|
26
6
|
|
|
27
7
|
## 前端产物下载地址
|
|
28
8
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
## 工作流程
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
使用**Read**工具阅读 `.apm/deploy/README.md`
|
|
3
|
+
在项目根目录执行 `apm deploy <环境名称>`
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
## 示例
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
2. 用户没有明确部署环境
|
|
7
|
+
1. 部署测试环境:`apm deploy test`
|
|
8
|
+
2. 部署正式环境: `apm deploy online`
|