speccore 8.3.58 → 8.3.60
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/.agents/skills/spec-deploy/SKILL.md +311 -0
- package/.agents/skills/spec-verify/SKILL.md +226 -0
- package/README.md +60 -3
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/about.d.ts.map +1 -1
- package/dist/commands/about.js +9 -2
- package/dist/commands/about.js.map +1 -1
- package/dist/commands/build.d.ts +9 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +180 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/deploy.d.ts +11 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +118 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +28 -0
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/pipeline.d.ts +10 -0
- package/dist/commands/pipeline.d.ts.map +1 -0
- package/dist/commands/pipeline.js +365 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/pr.d.ts +3 -0
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +218 -0
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/update-env-configs.d.ts +3 -0
- package/dist/commands/update-env-configs.d.ts.map +1 -0
- package/dist/commands/update-env-configs.js +252 -0
- package/dist/commands/update-env-configs.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +13 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +343 -4
- package/dist/commands/verify.js.map +1 -1
- package/dist/core/deploy/engine.d.ts +25 -0
- package/dist/core/deploy/engine.d.ts.map +1 -0
- package/dist/core/deploy/engine.js +348 -0
- package/dist/core/deploy/engine.js.map +1 -0
- package/dist/core/environment-config.d.ts +61 -0
- package/dist/core/environment-config.d.ts.map +1 -0
- package/dist/core/environment-config.js +178 -0
- package/dist/core/environment-config.js.map +1 -0
- package/dist/core/pipeline-test.d.ts +83 -0
- package/dist/core/pipeline-test.d.ts.map +1 -0
- package/dist/core/pipeline-test.js +467 -0
- package/dist/core/pipeline-test.js.map +1 -0
- package/dist/core/test-config.d.ts +39 -0
- package/dist/core/test-config.d.ts.map +1 -0
- package/dist/core/test-config.js +162 -0
- package/dist/core/test-config.js.map +1 -0
- package/dist/core/ui-verify/spec-generator.d.ts.map +1 -1
- package/dist/core/ui-verify/spec-generator.js +27 -0
- package/dist/core/ui-verify/spec-generator.js.map +1 -1
- package/dist/core/unified-config.d.ts +54 -0
- package/dist/core/unified-config.d.ts.map +1 -1
- package/dist/core/unified-config.js +89 -0
- package/dist/core/unified-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadEnvironmentConfig = loadEnvironmentConfig;
|
|
4
|
+
exports.resolveEnvironmentConfig = resolveEnvironmentConfig;
|
|
5
|
+
exports.loadEnvironmentByNameOrPath = loadEnvironmentByNameOrPath;
|
|
6
|
+
/**
|
|
7
|
+
* environment-config — 环境配置加载与管理
|
|
8
|
+
*
|
|
9
|
+
* 支持 .speccore/environments/*.yaml 文件夹化管理。
|
|
10
|
+
* 环境配置可覆盖 PROJECT.yaml 中的 deploy/build 参数。
|
|
11
|
+
*
|
|
12
|
+
* v8.3.60+
|
|
13
|
+
*/
|
|
14
|
+
const fs_extra_1 = require("fs-extra");
|
|
15
|
+
const path_1 = require("path");
|
|
16
|
+
const logger_1 = require("../utils/logger");
|
|
17
|
+
const ENV_DIR = (0, path_1.join)('.speccore', 'environments');
|
|
18
|
+
/** 解析 YAML(复用统一配置中的解析逻辑) */
|
|
19
|
+
function parseEnvYaml(content) {
|
|
20
|
+
const result = {};
|
|
21
|
+
const lines = content.split('\n');
|
|
22
|
+
let stack = [{ obj: result, indent: -1 }];
|
|
23
|
+
for (const line of lines) {
|
|
24
|
+
if (!line.trim() || line.trim().startsWith('#'))
|
|
25
|
+
continue;
|
|
26
|
+
const indent = line.length - line.trimStart().length;
|
|
27
|
+
while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
|
|
28
|
+
stack.pop();
|
|
29
|
+
}
|
|
30
|
+
const trimmed = line.trim();
|
|
31
|
+
const parent = stack[stack.length - 1].obj;
|
|
32
|
+
if (trimmed.startsWith('- ')) {
|
|
33
|
+
const value = trimmed.slice(2).trim();
|
|
34
|
+
if (!Array.isArray(parent))
|
|
35
|
+
continue;
|
|
36
|
+
if (value.includes(':')) {
|
|
37
|
+
const obj = {};
|
|
38
|
+
const [k, ...rest] = value.split(':');
|
|
39
|
+
const v = rest.join(':').trim();
|
|
40
|
+
if (v)
|
|
41
|
+
obj[k.trim()] = autoType(v);
|
|
42
|
+
parent.push(obj);
|
|
43
|
+
stack.push({ obj, indent });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
parent.push(autoType(value));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (trimmed.endsWith(':')) {
|
|
50
|
+
const key = trimmed.slice(0, -1).trim();
|
|
51
|
+
if (Array.isArray(parent)) {
|
|
52
|
+
const last = parent[parent.length - 1];
|
|
53
|
+
if (last && typeof last === 'object' && !Array.isArray(last)) {
|
|
54
|
+
last[key] = {};
|
|
55
|
+
stack.push({ obj: last[key], indent });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
if (!parent[key])
|
|
60
|
+
parent[key] = {};
|
|
61
|
+
stack.push({ obj: parent[key], indent });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (trimmed.includes(':')) {
|
|
65
|
+
const [k, ...rest] = trimmed.split(':');
|
|
66
|
+
const v = rest.join(':').trim();
|
|
67
|
+
if (Array.isArray(parent)) {
|
|
68
|
+
const last = parent[parent.length - 1];
|
|
69
|
+
if (last && typeof last === 'object') {
|
|
70
|
+
last[k.trim()] = autoType(v);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
parent[k.trim()] = autoType(v);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
function autoType(v) {
|
|
81
|
+
if (v === 'true')
|
|
82
|
+
return true;
|
|
83
|
+
if (v === 'false')
|
|
84
|
+
return false;
|
|
85
|
+
if (/^-?\d+$/.test(v))
|
|
86
|
+
return parseInt(v, 10);
|
|
87
|
+
if (/^-?\d+\.\d+$/.test(v))
|
|
88
|
+
return parseFloat(v);
|
|
89
|
+
return v;
|
|
90
|
+
}
|
|
91
|
+
/** 加载指定路径的环境配置文件 */
|
|
92
|
+
async function loadEnvironmentConfig(filePath) {
|
|
93
|
+
if (!(await (0, fs_extra_1.pathExists)(filePath))) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const raw = await (0, fs_extra_1.readFile)(filePath, 'utf-8');
|
|
98
|
+
const parsed = parseEnvYaml(raw);
|
|
99
|
+
const config = {
|
|
100
|
+
env: parsed.env || 'unknown',
|
|
101
|
+
branch: parsed.branch || undefined,
|
|
102
|
+
platforms: {},
|
|
103
|
+
};
|
|
104
|
+
if (parsed.defaults && typeof parsed.defaults === 'object') {
|
|
105
|
+
config.defaults = {
|
|
106
|
+
build_cmd: parsed.defaults.build_cmd,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (parsed.platforms && typeof parsed.platforms === 'object') {
|
|
110
|
+
for (const [name, pcfg] of Object.entries(parsed.platforms)) {
|
|
111
|
+
const platformConfig = {};
|
|
112
|
+
if (pcfg && typeof pcfg === 'object') {
|
|
113
|
+
const pc = pcfg;
|
|
114
|
+
if (pc.build_cmd)
|
|
115
|
+
platformConfig.build_cmd = String(pc.build_cmd);
|
|
116
|
+
if (pc.deploy && typeof pc.deploy === 'object') {
|
|
117
|
+
platformConfig.deploy = pc.deploy;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
config.platforms[name] = platformConfig;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (parsed.tests && typeof parsed.tests === 'object') {
|
|
124
|
+
const t = parsed.tests;
|
|
125
|
+
config.tests = {};
|
|
126
|
+
if (t.base_urls && typeof t.base_urls === 'object') {
|
|
127
|
+
config.tests.base_urls = t.base_urls;
|
|
128
|
+
}
|
|
129
|
+
if (t.visual_model && typeof t.visual_model === 'object') {
|
|
130
|
+
config.tests.visual_model = t.visual_model;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// 解析 pipeline 测试配置
|
|
134
|
+
if (parsed.pipeline && typeof parsed.pipeline === 'object') {
|
|
135
|
+
const p = parsed.pipeline;
|
|
136
|
+
config.pipeline = {};
|
|
137
|
+
if (p.test && typeof p.test === 'object') {
|
|
138
|
+
const pt = p.test;
|
|
139
|
+
config.pipeline.test = {
|
|
140
|
+
enabled: pt.enabled === true || pt.enabled === 'true',
|
|
141
|
+
type: pt.type || 'build-check',
|
|
142
|
+
stage: pt.stage || 'pre-deploy',
|
|
143
|
+
config: pt.config,
|
|
144
|
+
fail_on_error: pt.fail_on_error !== false && pt.fail_on_error !== 'false',
|
|
145
|
+
auto_fix: pt.auto_fix !== false && pt.auto_fix !== 'false',
|
|
146
|
+
max_retries: typeof pt.max_retries === 'number' ? pt.max_retries : undefined,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return config;
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
logger_1.logger.warn(`⚠️ 环境配置文件解析失败: ${filePath} — ${e.message}`);
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/** 按环境名解析配置文件路径 */
|
|
158
|
+
async function resolveEnvironmentConfig(envName) {
|
|
159
|
+
const envPath = (0, path_1.join)(ENV_DIR, `${envName}.yaml`);
|
|
160
|
+
const config = await loadEnvironmentConfig(envPath);
|
|
161
|
+
return { config, path: envPath };
|
|
162
|
+
}
|
|
163
|
+
/** 按环境名或文件路径加载(自动识别) */
|
|
164
|
+
async function loadEnvironmentByNameOrPath(input) {
|
|
165
|
+
if (!input)
|
|
166
|
+
return null;
|
|
167
|
+
// 若包含路径分隔符,视为文件路径
|
|
168
|
+
if (input.includes('/') || input.includes('\\') || input.endsWith('.yaml') || input.endsWith('.yml')) {
|
|
169
|
+
return loadEnvironmentConfig(input);
|
|
170
|
+
}
|
|
171
|
+
// 否则视为环境名
|
|
172
|
+
const { config } = await resolveEnvironmentConfig(input);
|
|
173
|
+
if (!config) {
|
|
174
|
+
logger_1.logger.warn(`⚠️ 未找到环境配置: .speccore/environments/${input}.yaml`);
|
|
175
|
+
}
|
|
176
|
+
return config;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=environment-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-config.js","sourceRoot":"","sources":["../../src/core/environment-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pipeline-test — Pipeline 专用测试引擎
|
|
3
|
+
*
|
|
4
|
+
* 在 build 之后、deploy 之前执行,测试失败可阻断部署。
|
|
5
|
+
*
|
|
6
|
+
* 支持三种测试层级:
|
|
7
|
+
* 1. build-check: 构建产物检查(默认,轻量级)
|
|
8
|
+
* 2. smoke: HTTP 可达性检查(需要 base_url)
|
|
9
|
+
* 3. visual: 视觉回归测试(需要 Playwright + 视觉模型)
|
|
10
|
+
* 4. api: API 契约测试
|
|
11
|
+
* 5. all: 依次执行 build-check + smoke + visual + api
|
|
12
|
+
*
|
|
13
|
+
* v8.3.60+
|
|
14
|
+
*/
|
|
15
|
+
import type { EnvironmentConfig } from './environment-config';
|
|
16
|
+
import type { PlatformConfig } from './unified-config';
|
|
17
|
+
import type { SmokeResult, VisualResult } from './ui-verify';
|
|
18
|
+
import type { ApiVerifyReport } from './api-verify';
|
|
19
|
+
export interface PipelineTestOptions {
|
|
20
|
+
/** 测试平台 */
|
|
21
|
+
platform: PlatformConfig;
|
|
22
|
+
/** 环境名 */
|
|
23
|
+
env: string;
|
|
24
|
+
/** 测试类型 */
|
|
25
|
+
type: 'build-check' | 'smoke' | 'visual' | 'api' | 'all';
|
|
26
|
+
/** 环境配置(用于读取 tests.base_urls 等) */
|
|
27
|
+
envConfig?: EnvironmentConfig;
|
|
28
|
+
/** 是否预览模式 */
|
|
29
|
+
dryRun?: boolean;
|
|
30
|
+
/** 构建输出目录(用于 build-check) */
|
|
31
|
+
outputDir?: string;
|
|
32
|
+
/** 超时时间(毫秒) */
|
|
33
|
+
timeout?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface PipelineTestResult {
|
|
36
|
+
/** 平台名 */
|
|
37
|
+
platform: string;
|
|
38
|
+
/** 是否全部通过 */
|
|
39
|
+
passed: boolean;
|
|
40
|
+
/** 失败严重程度: critical(严重,必须阻断) / warning(警告,可继续部署) */
|
|
41
|
+
severity: 'critical' | 'warning';
|
|
42
|
+
/** 执行的测试类型列表 */
|
|
43
|
+
types: string[];
|
|
44
|
+
/** 耗时(毫秒) */
|
|
45
|
+
duration: number;
|
|
46
|
+
/** 各测试详情 */
|
|
47
|
+
details: {
|
|
48
|
+
buildCheck?: BuildCheckResult;
|
|
49
|
+
smoke?: SmokeResult[];
|
|
50
|
+
visual?: VisualResult[];
|
|
51
|
+
api?: ApiVerifyReport;
|
|
52
|
+
};
|
|
53
|
+
/** 汇总 */
|
|
54
|
+
summary: {
|
|
55
|
+
total: number;
|
|
56
|
+
passed: number;
|
|
57
|
+
failed: number;
|
|
58
|
+
};
|
|
59
|
+
/** 错误信息(整体失败时) */
|
|
60
|
+
error?: string;
|
|
61
|
+
}
|
|
62
|
+
interface BuildCheckResult {
|
|
63
|
+
passed: boolean;
|
|
64
|
+
checks: Array<{
|
|
65
|
+
name: string;
|
|
66
|
+
passed: boolean;
|
|
67
|
+
message?: string;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 执行 Pipeline 测试
|
|
72
|
+
*
|
|
73
|
+
* 按配置的类型依次执行测试,任一失败即返回失败结果。
|
|
74
|
+
*/
|
|
75
|
+
export declare function runPipelineTest(options: PipelineTestOptions): Promise<PipelineTestResult>;
|
|
76
|
+
/**
|
|
77
|
+
* 生成 Pipeline 测试报告(供 Skill / AI 读取)
|
|
78
|
+
*
|
|
79
|
+
* 输出格式便于 AI 解析失败原因。
|
|
80
|
+
*/
|
|
81
|
+
export declare function formatPipelineTestReport(result: PipelineTestResult): string;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=pipeline-test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-test.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAc,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,cAAc,CAAC;AAGrE,MAAM,WAAW,mBAAmB;IAClC,WAAW;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IACzD,mCAAmC;IACnC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,aAAa;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;IACjC,gBAAgB;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,OAAO,EAAE;QACP,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QACxB,GAAG,CAAC,EAAE,eAAe,CAAC;KACvB,CAAC;IACF,SAAS;IACT,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAqH7B;AA8RD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAmE3E"}
|