guanghulab/services/zhuyuan-bridge/scripts/parse-instruction.js

82 lines
2.4 KiB
JavaScript
Raw Normal View History

/**
* 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✅ 指令解析完成');