guanghulab/services/zhuyuan-bridge/scripts/parse-instruction.js
2026-05-10 13:12:44 +08:00

82 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* services/zhuyuan-bridge/scripts/parse-instruction.js
*
* 解析 Issue 中的铸渊执行指令
* 从 Issue 标题和正文中提取DEV 编号、目标仓库、指令内容
*
* 环境变量:
* ISSUE_BODY — Issue 正文
* ISSUE_TITLE — Issue 标题
*
* 输出:
* /tmp/parsed-instruction.json — 解析后的指令 JSON
* GitHub Actions outputs通过 GITHUB_OUTPUT
*/
'use strict';
const fs = require('fs');
const path = require('path');
const issueBody = process.env.ISSUE_BODY || '';
const issueTitle = process.env.ISSUE_TITLE || '';
console.log('📋 开始解析执行指令...');
console.log(` 标题: ${issueTitle}`);
console.log(` 正文长度: ${issueBody.length} 字符`);
// ===== 解析 DEV 编号 =====
const devMatch = issueBody.match(/DEV-\d{3}/);
const devId = devMatch ? devMatch[0] : null;
// ===== 解析目标仓库 =====
const repoMatch = issueBody.match(/目标仓库[:]\s*(\S+)/);
const targetRepo = repoMatch ? repoMatch[1] : null;
// ===== 解析指令编号 =====
const instrMatch = issueTitle.match(/\[(ZY-EXEC[^\]]*)\]/);
const instructionId = instrMatch ? instrMatch[1] : null;
// ===== 提取指令内容(在 ``` 代码块之间) =====
const codeBlockMatch = issueBody.match(/```[\s\S]*?\n([\s\S]*?)```/);
const instructionContent = codeBlockMatch ? codeBlockMatch[1].trim() : '';
const parsed = {
instructionId: instructionId || 'ZY-EXEC-UNKNOWN',
devId,
targetRepo,
instructionContent,
issueTitle,
parsedAt: new Date().toISOString()
};
console.log('\n📋 解析结果:');
console.log(JSON.stringify(parsed, null, 2));
// ===== 写入临时文件供后续步骤使用 =====
fs.writeFileSync('/tmp/parsed-instruction.json', JSON.stringify(parsed, null, 2));
// ===== 写入 GitHub Actions outputs =====
const outputFile = process.env.GITHUB_OUTPUT;
if (outputFile) {
const outputs = [
`instruction_id=${parsed.instructionId}`,
`dev_id=${parsed.devId || ''}`,
`target_repo=${parsed.targetRepo || ''}`,
].join('\n') + '\n';
fs.appendFileSync(outputFile, outputs);
}
// ===== 验证指令格式 =====
if (!devId) {
console.error('❌ 指令格式不合法:缺少 DEV 编号格式DEV-XXX');
process.exit(1);
}
if (!instructionContent) {
console.error('❌ 指令格式不合法:缺少指令内容(需要在 ``` 代码块中)');
process.exit(1);
}
console.log('\n✅ 指令解析完成');