@wneng/create-keel 0.3.0 → 0.3.3
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 +26 -1
- package/dist/index.js +118 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/templates/ci-gitee/files/PULL_REQUEST_TEMPLATE.md +62 -0
- package/src/templates/ci-gitee/files/pipeline.yml +150 -16
- package/src/templates/ci-gitee/fragment.yaml +4 -1
- package/src/templates/ci-github/files/PULL_REQUEST_TEMPLATE.md +62 -0
- package/src/templates/ci-github/files/ci.yml +199 -6
- package/src/templates/ci-github/fragment.yaml +4 -1
- package/src/templates/contracts-base/files/_spectral.yaml +21 -0
- package/src/templates/contracts-base/fragment.yaml +4 -1
- package/src/templates/docs-skeleton/files/README.md +3 -3
- package/src/templates/docs-skeleton/files/governance-checklists.md +3 -3
- package/src/templates/docs-skeleton/files/governance-security.md +6 -2
- package/src/templates/root-files/files/CODEOWNERS +40 -0
- package/src/templates/root-files/fragment.yaml +3 -0
- package/src/templates/server-go/files/_golangci.yml +41 -0
- package/src/templates/server-go/fragment.yaml +4 -1
- package/src/templates/server-java/files/checkstyle.xml +62 -0
- package/src/templates/server-java/files/pom.xml +57 -0
- package/src/templates/server-java/fragment.yaml +4 -1
- package/src/templates/server-node/files/_eslintrc.cjs +20 -0
- package/src/templates/server-node/files/_prettierrc +12 -0
- package/src/templates/server-node/files/package.json +14 -1
- package/src/templates/server-node/fragment.yaml +7 -1
- package/src/templates/server-python/files/pyproject.toml +44 -0
- package/src/templates/web-react/files/_eslintrc.cjs +34 -0
- package/src/templates/web-react/files/_prettierrc +12 -0
- package/src/templates/web-react/files/package.json +11 -1
- package/src/templates/web-react/fragment.yaml +7 -1
- package/src/templates/web-vue/files/_eslintrc.cjs +28 -0
- package/src/templates/web-vue/files/_prettierrc +12 -0
- package/src/templates/web-vue/fragment.yaml +7 -1
package/README.md
CHANGED
|
@@ -5,7 +5,32 @@
|
|
|
5
5
|
[](./LICENSE)
|
|
6
6
|
[](https://nodejs.org)
|
|
7
7
|
|
|
8
|
-
Scaffolder for Contract First + Vibe Coding projects following the `keel` conventions (see root `AGENTS.md`).
|
|
8
|
+
Scaffolder for **Contract First + Vibe Coding** projects following the `keel` conventions (see root `AGENTS.md`).
|
|
9
|
+
|
|
10
|
+
> **完整中文安装与使用指南**:[`docs/03-工程规范与研发基础设施/keel-getting-started.md`](https://gitee.com/wangneng521/keel/blob/main/docs/03-%E5%B7%A5%E7%A8%8B%E8%A7%84%E8%8C%83%E4%B8%8E%E7%A0%94%E5%8F%91%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD/keel-getting-started.md)(13 节,含三档采用策略、工程规范四大类、AI 访问模式、常见故障排查)。
|
|
11
|
+
|
|
12
|
+
## TL;DR
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Quickstart:创建项目(交互式)
|
|
16
|
+
npx @wneng/create-keel create my-app
|
|
17
|
+
|
|
18
|
+
# 推荐第一次试用:带完整样例特性
|
|
19
|
+
npx @wneng/create-keel create demo --yes --sample-feature
|
|
20
|
+
|
|
21
|
+
# 给已有项目加特性
|
|
22
|
+
cd my-app
|
|
23
|
+
npx @wneng/create-keel feature add user-signup
|
|
24
|
+
|
|
25
|
+
# 完整档(To B 多客户交付)
|
|
26
|
+
npx @wneng/create-keel create my-full \
|
|
27
|
+
--backend java --frontend react --mobile flutter --miniapp wechat \
|
|
28
|
+
--agent rust-desktop --deploy kubernetes --contract rest+events \
|
|
29
|
+
--ai kiro --license apache-2.0 --gitLfs --integrations \
|
|
30
|
+
--ci github --roles qa,field,data,legal-security,marketing,design \
|
|
31
|
+
--engineering-standards full \
|
|
32
|
+
--yes
|
|
33
|
+
```
|
|
9
34
|
|
|
10
35
|
## Usage
|
|
11
36
|
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/version.ts
|
|
4
|
-
var SCAFFOLDER_VERSION = "0.3.
|
|
4
|
+
var SCAFFOLDER_VERSION = "0.3.3";
|
|
5
5
|
|
|
6
6
|
// src/schema/options.ts
|
|
7
7
|
import Ajv from "ajv";
|
|
@@ -414,6 +414,32 @@ function parseCreateArgs(args) {
|
|
|
414
414
|
let engineeringStandards;
|
|
415
415
|
let engineeringStandardsExplicit = false;
|
|
416
416
|
let multiApp = false;
|
|
417
|
+
let backend;
|
|
418
|
+
let frontend;
|
|
419
|
+
let mobile;
|
|
420
|
+
let miniapp;
|
|
421
|
+
let agent;
|
|
422
|
+
let deploy;
|
|
423
|
+
let contract;
|
|
424
|
+
let ai;
|
|
425
|
+
let license;
|
|
426
|
+
let gitLfs;
|
|
427
|
+
let integrations;
|
|
428
|
+
function takeEnum(flag, next, enumValues) {
|
|
429
|
+
if (next === void 0 || next.startsWith("--")) {
|
|
430
|
+
throw new UserInputError(
|
|
431
|
+
`${flag} requires a value`,
|
|
432
|
+
`\u53EF\u9009\u503C\uFF1A${enumValues.join(" | ")}`
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
if (!enumValues.includes(next)) {
|
|
436
|
+
throw new UserInputError(
|
|
437
|
+
`invalid ${flag} value: ${JSON.stringify(next)}`,
|
|
438
|
+
`\u53EF\u9009\u503C\uFF1A${enumValues.join(" | ")}`
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
return next;
|
|
442
|
+
}
|
|
417
443
|
for (let i = 0; i < args.length; i += 1) {
|
|
418
444
|
const a = args[i];
|
|
419
445
|
switch (a) {
|
|
@@ -438,6 +464,58 @@ function parseCreateArgs(args) {
|
|
|
438
464
|
case "--multi-app":
|
|
439
465
|
multiApp = true;
|
|
440
466
|
break;
|
|
467
|
+
case "--gitLfs":
|
|
468
|
+
case "--git-lfs":
|
|
469
|
+
gitLfs = true;
|
|
470
|
+
break;
|
|
471
|
+
case "--integrations":
|
|
472
|
+
integrations = true;
|
|
473
|
+
break;
|
|
474
|
+
case "--backend": {
|
|
475
|
+
backend = takeEnum("--backend", args[i + 1], BACKEND_LANGUAGES);
|
|
476
|
+
i += 1;
|
|
477
|
+
break;
|
|
478
|
+
}
|
|
479
|
+
case "--frontend": {
|
|
480
|
+
frontend = takeEnum("--frontend", args[i + 1], FRONTEND_FRAMEWORKS);
|
|
481
|
+
i += 1;
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
484
|
+
case "--mobile": {
|
|
485
|
+
mobile = takeEnum("--mobile", args[i + 1], MOBILE_KINDS);
|
|
486
|
+
i += 1;
|
|
487
|
+
break;
|
|
488
|
+
}
|
|
489
|
+
case "--miniapp": {
|
|
490
|
+
miniapp = takeEnum("--miniapp", args[i + 1], MINIAPP_KINDS);
|
|
491
|
+
i += 1;
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
494
|
+
case "--agent": {
|
|
495
|
+
agent = takeEnum("--agent", args[i + 1], AGENT_KINDS);
|
|
496
|
+
i += 1;
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
case "--deploy": {
|
|
500
|
+
deploy = takeEnum("--deploy", args[i + 1], DEPLOY_TARGETS);
|
|
501
|
+
i += 1;
|
|
502
|
+
break;
|
|
503
|
+
}
|
|
504
|
+
case "--contract": {
|
|
505
|
+
contract = takeEnum("--contract", args[i + 1], CONTRACT_KINDS);
|
|
506
|
+
i += 1;
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
509
|
+
case "--ai": {
|
|
510
|
+
ai = takeEnum("--ai", args[i + 1], AI_TOOLS);
|
|
511
|
+
i += 1;
|
|
512
|
+
break;
|
|
513
|
+
}
|
|
514
|
+
case "--license": {
|
|
515
|
+
license = takeEnum("--license", args[i + 1], LICENSE_KINDS);
|
|
516
|
+
i += 1;
|
|
517
|
+
break;
|
|
518
|
+
}
|
|
441
519
|
case "--engineering-standards": {
|
|
442
520
|
const next = args[i + 1];
|
|
443
521
|
if (next === void 0 || next.startsWith("--")) {
|
|
@@ -545,7 +623,18 @@ function parseCreateArgs(args) {
|
|
|
545
623
|
...roles !== void 0 ? { roles } : {},
|
|
546
624
|
...sampleFeature ? { sampleFeature: true } : {},
|
|
547
625
|
...engineeringStandards !== void 0 ? { engineeringStandards } : {},
|
|
548
|
-
...multiApp ? { multiApp: true } : {}
|
|
626
|
+
...multiApp ? { multiApp: true } : {},
|
|
627
|
+
...backend !== void 0 ? { backend } : {},
|
|
628
|
+
...frontend !== void 0 ? { frontend } : {},
|
|
629
|
+
...mobile !== void 0 ? { mobile } : {},
|
|
630
|
+
...miniapp !== void 0 ? { miniapp } : {},
|
|
631
|
+
...agent !== void 0 ? { agent } : {},
|
|
632
|
+
...deploy !== void 0 ? { deploy } : {},
|
|
633
|
+
...contract !== void 0 ? { contract } : {},
|
|
634
|
+
...ai !== void 0 ? { ai } : {},
|
|
635
|
+
...license !== void 0 ? { license } : {},
|
|
636
|
+
...gitLfs !== void 0 ? { gitLfs } : {},
|
|
637
|
+
...integrations !== void 0 ? { integrations } : {}
|
|
549
638
|
};
|
|
550
639
|
if (sampleFeature && dryRun) {
|
|
551
640
|
throw new UserInputError(
|
|
@@ -553,7 +642,7 @@ function parseCreateArgs(args) {
|
|
|
553
642
|
"\u8BF7\u53BB\u6389\u4E00\u9879\u540E\u91CD\u8BD5"
|
|
554
643
|
);
|
|
555
644
|
}
|
|
556
|
-
if (!engineeringStandardsExplicit
|
|
645
|
+
if (!engineeringStandardsExplicit) {
|
|
557
646
|
return {
|
|
558
647
|
projectName,
|
|
559
648
|
flags: { ...flags, engineeringStandards: "standard" }
|
|
@@ -624,6 +713,17 @@ function helpText() {
|
|
|
624
713
|
" Adoption tier for engineering standards: " + ADOPTION_TIERS.join("|"),
|
|
625
714
|
" (default in --yes mode: standard; omitted in interactive mode)",
|
|
626
715
|
" --multi-app Initialise the project in multi-app mode (<env>/apps/<name>/)",
|
|
716
|
+
" --backend <kind> " + BACKEND_LANGUAGES.join("|"),
|
|
717
|
+
" --frontend <kind> " + FRONTEND_FRAMEWORKS.join("|"),
|
|
718
|
+
" --mobile <kind> " + MOBILE_KINDS.join("|"),
|
|
719
|
+
" --miniapp <kind> " + MINIAPP_KINDS.join("|"),
|
|
720
|
+
" --agent <kind> " + AGENT_KINDS.join("|"),
|
|
721
|
+
" --deploy <kind> " + DEPLOY_TARGETS.join("|"),
|
|
722
|
+
" --contract <kind> " + CONTRACT_KINDS.join("|"),
|
|
723
|
+
" --ai <kind> " + AI_TOOLS.join("|"),
|
|
724
|
+
" --license <kind> " + LICENSE_KINDS.join("|"),
|
|
725
|
+
" --gitLfs Enable Git LFS in the generated project",
|
|
726
|
+
" --integrations Enable docs/06-\u96C6\u6210\u5BF9\u63A5/ at create time",
|
|
627
727
|
" -h, --help Show this help",
|
|
628
728
|
" -v, --version Show the scaffolder version",
|
|
629
729
|
"",
|
|
@@ -710,7 +810,8 @@ var PARTIAL_OPTIONS_SCHEMA = {
|
|
|
710
810
|
type: "array",
|
|
711
811
|
items: { type: "string", enum: [...ROLE_KINDS] },
|
|
712
812
|
uniqueItems: true
|
|
713
|
-
}
|
|
813
|
+
},
|
|
814
|
+
multiApp: { type: "boolean" }
|
|
714
815
|
}
|
|
715
816
|
};
|
|
716
817
|
var ajv2 = new Ajv2({ allErrors: true, strict: true });
|
|
@@ -2222,7 +2323,19 @@ async function resolveOptions(input) {
|
|
|
2222
2323
|
...merged,
|
|
2223
2324
|
projectName,
|
|
2224
2325
|
...flags.ci !== void 0 ? { ci: flags.ci } : {},
|
|
2225
|
-
...flags.roles !== void 0 ? { roles: flags.roles } : {}
|
|
2326
|
+
...flags.roles !== void 0 ? { roles: flags.roles } : {},
|
|
2327
|
+
...flags.backend !== void 0 ? { backend: flags.backend } : {},
|
|
2328
|
+
...flags.frontend !== void 0 ? { frontend: flags.frontend } : {},
|
|
2329
|
+
...flags.mobile !== void 0 ? { mobile: flags.mobile } : {},
|
|
2330
|
+
...flags.miniapp !== void 0 ? { miniapp: flags.miniapp } : {},
|
|
2331
|
+
...flags.agent !== void 0 ? { agent: flags.agent } : {},
|
|
2332
|
+
...flags.deploy !== void 0 ? { deploy: flags.deploy } : {},
|
|
2333
|
+
...flags.contract !== void 0 ? { contract: flags.contract } : {},
|
|
2334
|
+
...flags.ai !== void 0 ? { ai: flags.ai } : {},
|
|
2335
|
+
...flags.license !== void 0 ? { license: flags.license } : {},
|
|
2336
|
+
...flags.gitLfs !== void 0 ? { gitLfs: flags.gitLfs } : {},
|
|
2337
|
+
...flags.integrations !== void 0 ? { integrations: flags.integrations } : {},
|
|
2338
|
+
...flags.multiApp !== void 0 ? { multiApp: flags.multiApp } : {}
|
|
2226
2339
|
};
|
|
2227
2340
|
if (flags.yes) {
|
|
2228
2341
|
const full = { ...buildDefaultOptions(projectName), ...merged };
|