@lark-project/cli
Version:
飞书项目插件开发工具
71 lines (70 loc) • 3.8 kB
JavaScript
;
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();