UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

71 lines (70 loc) 3.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const child_process_1 = require("child_process"); const fs_extra_1 = require("fs-extra"); const runner_1 = require("./runner"); const matrix_1 = require("./matrix"); function parseArgs() { const args = process.argv.slice(2); const get = (flag) => { const i = args.indexOf(flag); return i >= 0 ? args[i + 1] : undefined; }; const point = get('--point'); const projectDir = get('--project'); if (!point || !projectDir) { console.error('Usage: yarn conformance --point <ai_node|ai_field> --project <plugin-project-dir>'); process.exit(1); } return { point, projectDir: path_1.default.resolve(projectDir) }; } function main() { const { point, projectDir } = parseArgs(); const repoRoot = path_1.default.resolve(__dirname, '../../../..'); const catalogPath = path_1.default.join(repoRoot, 'eval/conformance', `${point}.probes.json`); if (!(0, fs_extra_1.existsSync)(catalogPath)) { console.error(`Catalog not found: ${catalogPath}`); process.exit(1); } const draftPath = path_1.default.join(projectDir, '.lpm-cache/config', 'conformance-draft.json'); (0, fs_extra_1.ensureDirSync)(path_1.default.dirname(draftPath)); const remoteJsonPath = path_1.default.join(projectDir, '.lpm-cache/config/remote.json'); // 快照由 `lpm update --save-snapshot`(子进程 cwd=projectDir)写到插件工程下的 // <projectDir>/.point-eval/snapshots/。cli.ts 自己的 cwd 是 meego-cli 仓, // 不能用 ../snapshot 的 loadSnapshot(它按 process.cwd() 解析,会找错目录)。 const snapshotsDir = path_1.default.join(projectDir, '.point-eval/snapshots'); const deps = { execLpm: (cliArgs) => { var _a, _b, _c, _d, _e; try { const stdout = (0, child_process_1.execFileSync)('lpm', cliArgs, { cwd: projectDir, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }); return { exitCode: 0, stdout, stderr: '' }; } catch (e) { return { exitCode: (_a = e.status) !== null && _a !== void 0 ? _a : 1, stdout: (_c = (_b = e.stdout) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : '', stderr: (_e = (_d = e.stderr) === null || _d === void 0 ? void 0 : _d.toString()) !== null && _e !== void 0 ? _e : '' }; } }, readJson: (p) => (0, fs_extra_1.readJSONSync)(p), writeJson: (p, data) => (0, fs_extra_1.writeJSONSync)(p, data, { spaces: 2 }), loadSnapshot: (caseId) => { const snapPath = path_1.default.join(snapshotsDir, `${caseId}.json`); return (0, fs_extra_1.existsSync)(snapPath) ? (0, fs_extra_1.readJSONSync)(snapPath) : null; }, readRemoteJson: () => ((0, fs_extra_1.existsSync)(remoteJsonPath) ? (0, fs_extra_1.readJSONSync)(remoteJsonPath) : null), }; const results = (0, runner_1.runConformance)({ catalogPath, draftPath }, deps); const catalog = (0, fs_extra_1.readJSONSync)(catalogPath); const md = (0, matrix_1.renderMatrix)(catalog, results); const date = new Date().toISOString().slice(0, 10); const outPath = path_1.default.join(repoRoot, 'eval/runs', `conformance-${point}-${date}.md`); (0, fs_extra_1.ensureDirSync)(path_1.default.dirname(outPath)); (0, fs_extra_1.writeFileSync)(outPath, md, 'utf8'); console.log(md); console.log(`\nMatrix written to ${outPath}`); process.exit(results.every(r => r.pass) ? 0 : 1); } main();