@lark-apaas/fullstack-cli 1.1.22 → 1.1.24
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 +41 -3
- package/dist/index.js +90 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @lark-apaas/fullstack-cli
|
|
2
2
|
|
|
3
|
-
> Fullstack 开发工具集 - 文件派生、数据库 Schema 生成、OpenAPI
|
|
3
|
+
> Fullstack 开发工具集 - 文件派生、数据库 Schema 生成、OpenAPI 生成、能力管理、构建工具
|
|
4
4
|
|
|
5
5
|
## 功能
|
|
6
6
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
3. **OpenAPI 生成** - 自动生成 API 文档和客户端 SDK
|
|
10
10
|
4. **Action 插件管理** - 安装、更新、删除 action 插件
|
|
11
11
|
5. **能力配置管理** - 查看、充血、迁移能力配置
|
|
12
|
+
6. **构建工具** - 获取 STI 制品上传凭证等构建相关操作
|
|
12
13
|
|
|
13
14
|
## 安装
|
|
14
15
|
|
|
@@ -201,7 +202,40 @@ fullstack-cli capability migration --skip-code
|
|
|
201
202
|
}
|
|
202
203
|
```
|
|
203
204
|
|
|
204
|
-
### 7.
|
|
205
|
+
### 7. 构建工具
|
|
206
|
+
|
|
207
|
+
获取构建流程所需的 STI 制品上传凭证:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Pipeline 发布场景 - 需要 commit-id
|
|
211
|
+
fullstack-cli build get-token --app-id app_xxx --scene pipeline --commit-id abc123
|
|
212
|
+
|
|
213
|
+
# 静态资源部署场景
|
|
214
|
+
fullstack-cli build get-token --app-id app_xxx --scene static
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**参数说明:**
|
|
218
|
+
|
|
219
|
+
| 参数 | 必填 | 说明 |
|
|
220
|
+
|------|------|------|
|
|
221
|
+
| `--app-id <id>` | 是 | 应用 ID |
|
|
222
|
+
| `--scene <scene>` | 是 | 构建场景(`pipeline`、`static`) |
|
|
223
|
+
| `--commit-id <id>` | scene=pipeline 时必填 | Git Commit ID |
|
|
224
|
+
|
|
225
|
+
**输出:** stdout 输出 API 返回的完整 JSON,日志/错误输出到 stderr,便于脚本解析:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
token_response=$(fullstack-cli build get-token --app-id "$APP_ID" --scene pipeline --commit-id "$COMMIT_ID")
|
|
229
|
+
credential=$(echo "$token_response" | jq -r '.data.accessKeyID')
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**环境变量:**
|
|
233
|
+
- `FORCE_AUTHN_INNERAPI_DOMAIN` — API 域名
|
|
234
|
+
- `FORCE_AUTHN_ACCESS_KEY` — Access Key
|
|
235
|
+
- `FORCE_AUTHN_ACCESS_SECRET` — Secret Key
|
|
236
|
+
- `FORCE_FRAMEWORK_CLI_CANARY_ENV` — Canary 环境(可选)
|
|
237
|
+
|
|
238
|
+
### 8. CLI 命令
|
|
205
239
|
|
|
206
240
|
```bash
|
|
207
241
|
# 查看帮助
|
|
@@ -223,11 +257,15 @@ fullstack-cli capability --help
|
|
|
223
257
|
fullstack-cli capability list
|
|
224
258
|
fullstack-cli capability migration --dry-run
|
|
225
259
|
|
|
260
|
+
# 构建工具
|
|
261
|
+
fullstack-cli build --help
|
|
262
|
+
fullstack-cli build get-token --app-id <id> --scene <scene> [--commit-id <id>]
|
|
263
|
+
|
|
226
264
|
# 查看版本
|
|
227
265
|
fullstack-cli --version
|
|
228
266
|
```
|
|
229
267
|
|
|
230
|
-
###
|
|
268
|
+
### 9. 全局选项
|
|
231
269
|
|
|
232
270
|
#### Canary 环境
|
|
233
271
|
|
package/dist/index.js
CHANGED
|
@@ -481,6 +481,7 @@ var replaceUnknownTransform = {
|
|
|
481
481
|
transform(ctx) {
|
|
482
482
|
const { sourceFile, stats } = ctx;
|
|
483
483
|
const fullText = sourceFile.getFullText();
|
|
484
|
+
const replacements = [];
|
|
484
485
|
sourceFile.forEachDescendant((node) => {
|
|
485
486
|
if (!Node5.isCallExpression(node)) {
|
|
486
487
|
return;
|
|
@@ -511,13 +512,23 @@ var replaceUnknownTransform = {
|
|
|
511
512
|
break;
|
|
512
513
|
}
|
|
513
514
|
}
|
|
515
|
+
replacements.push({
|
|
516
|
+
expression,
|
|
517
|
+
factoryName,
|
|
518
|
+
foundKnownType,
|
|
519
|
+
isArrayType,
|
|
520
|
+
node
|
|
521
|
+
});
|
|
522
|
+
});
|
|
523
|
+
for (const { expression, factoryName, foundKnownType, isArrayType, node } of replacements) {
|
|
514
524
|
expression.replaceWithText(factoryName);
|
|
515
525
|
if (isArrayType && foundKnownType) {
|
|
516
526
|
const parent = node.getParent();
|
|
517
527
|
if (Node5.isPropertyAccessExpression(parent) && parent.getName() === "array") {
|
|
518
528
|
const grandParent = parent.getParent();
|
|
519
529
|
if (Node5.isCallExpression(grandParent)) {
|
|
520
|
-
|
|
530
|
+
const nodeText = node.getText();
|
|
531
|
+
grandParent.replaceWithText(nodeText);
|
|
521
532
|
}
|
|
522
533
|
}
|
|
523
534
|
}
|
|
@@ -526,7 +537,7 @@ var replaceUnknownTransform = {
|
|
|
526
537
|
} else {
|
|
527
538
|
stats.fallbackToText++;
|
|
528
539
|
}
|
|
529
|
-
}
|
|
540
|
+
}
|
|
530
541
|
const todoCommentRegex = /\/\/ TODO: failed to parse database type '[^']+'\s*\n/g;
|
|
531
542
|
const currentText = sourceFile.getFullText();
|
|
532
543
|
const cleanedText = currentText.replace(todoCommentRegex, "");
|
|
@@ -6491,6 +6502,81 @@ var readLogsCommand = {
|
|
|
6491
6502
|
}
|
|
6492
6503
|
};
|
|
6493
6504
|
|
|
6505
|
+
// src/commands/build/types.ts
|
|
6506
|
+
var SCENE_CONFIGS = {
|
|
6507
|
+
pipeline: {
|
|
6508
|
+
name: "pipeline",
|
|
6509
|
+
requiredOptions: ["commitId"],
|
|
6510
|
+
buildRequestBody: (opts) => ({ commitID: opts.commitId })
|
|
6511
|
+
},
|
|
6512
|
+
static: {
|
|
6513
|
+
name: "static",
|
|
6514
|
+
requiredOptions: [],
|
|
6515
|
+
buildRequestBody: () => ({ commitID: "" })
|
|
6516
|
+
}
|
|
6517
|
+
};
|
|
6518
|
+
|
|
6519
|
+
// src/commands/build/api-client.ts
|
|
6520
|
+
async function genArtifactUploadCredential(appId, body) {
|
|
6521
|
+
const client = getHttpClient();
|
|
6522
|
+
const url = `/v1/app/${appId}/pipeline/gen_artifact_upload_credential`;
|
|
6523
|
+
const response = await client.post(url, body);
|
|
6524
|
+
if (!response.ok || response.status !== 200) {
|
|
6525
|
+
throw new Error(
|
|
6526
|
+
`API request failed: ${response.status} ${response.statusText}`
|
|
6527
|
+
);
|
|
6528
|
+
}
|
|
6529
|
+
return response.json();
|
|
6530
|
+
}
|
|
6531
|
+
|
|
6532
|
+
// src/commands/build/get-token.handler.ts
|
|
6533
|
+
async function getToken(options) {
|
|
6534
|
+
try {
|
|
6535
|
+
const sceneConfig = SCENE_CONFIGS[options.scene];
|
|
6536
|
+
if (!sceneConfig) {
|
|
6537
|
+
const available = Object.keys(SCENE_CONFIGS).join(", ");
|
|
6538
|
+
console.error(
|
|
6539
|
+
`[build] Error: invalid scene "${options.scene}". Available scenes: ${available}`
|
|
6540
|
+
);
|
|
6541
|
+
process.exit(1);
|
|
6542
|
+
}
|
|
6543
|
+
for (const key of sceneConfig.requiredOptions) {
|
|
6544
|
+
if (!options[key]) {
|
|
6545
|
+
console.error(
|
|
6546
|
+
`[build] Error: --${camelToKebab(key)} is required for scene "${options.scene}"`
|
|
6547
|
+
);
|
|
6548
|
+
process.exit(1);
|
|
6549
|
+
}
|
|
6550
|
+
}
|
|
6551
|
+
const body = sceneConfig.buildRequestBody(options);
|
|
6552
|
+
const response = await genArtifactUploadCredential(options.appId, body);
|
|
6553
|
+
console.log(JSON.stringify(response));
|
|
6554
|
+
} catch (error) {
|
|
6555
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
6556
|
+
console.error(`[build] Error: ${message}`);
|
|
6557
|
+
process.exit(1);
|
|
6558
|
+
}
|
|
6559
|
+
}
|
|
6560
|
+
function camelToKebab(str) {
|
|
6561
|
+
return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
6562
|
+
}
|
|
6563
|
+
|
|
6564
|
+
// src/commands/build/index.ts
|
|
6565
|
+
var getTokenCommand = {
|
|
6566
|
+
name: "get-token",
|
|
6567
|
+
description: "Get artifact upload credential (STI token)",
|
|
6568
|
+
register(program) {
|
|
6569
|
+
program.command(this.name).description(this.description).requiredOption("--app-id <id>", "Application ID").requiredOption("--scene <scene>", "Build scene (pipeline, static)").option("--commit-id <id>", "Git commit ID (required for pipeline scene)").action(async (options) => {
|
|
6570
|
+
await getToken(options);
|
|
6571
|
+
});
|
|
6572
|
+
}
|
|
6573
|
+
};
|
|
6574
|
+
var buildCommandGroup = {
|
|
6575
|
+
name: "build",
|
|
6576
|
+
description: "Build related commands",
|
|
6577
|
+
commands: [getTokenCommand]
|
|
6578
|
+
};
|
|
6579
|
+
|
|
6494
6580
|
// src/commands/index.ts
|
|
6495
6581
|
var commands = [
|
|
6496
6582
|
genDbSchemaCommand,
|
|
@@ -6499,7 +6585,8 @@ var commands = [
|
|
|
6499
6585
|
capabilityCommandGroup,
|
|
6500
6586
|
componentCommandGroup,
|
|
6501
6587
|
migrationCommand,
|
|
6502
|
-
readLogsCommand
|
|
6588
|
+
readLogsCommand,
|
|
6589
|
+
buildCommandGroup
|
|
6503
6590
|
];
|
|
6504
6591
|
|
|
6505
6592
|
// src/index.ts
|