95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
|
|
/**
|
|||
|
|
* scripts/grid-db/write-code-check-result.js
|
|||
|
|
*
|
|||
|
|
* 代码校验结果写入 Grid-DB
|
|||
|
|
*
|
|||
|
|
* 用途:在 CI 代码校验完成后,自动向 grid-db 写入进度消息。
|
|||
|
|
* 被现有 contract-check workflow 的末尾 step 调用。
|
|||
|
|
*
|
|||
|
|
* 参数:
|
|||
|
|
* --dev-id=DEV-XXX 开发者编号
|
|||
|
|
* --result=pass|fail 校验结果
|
|||
|
|
* --files-checked=N 检查的文件数
|
|||
|
|
*
|
|||
|
|
* 守护: PER-ZY001 铸渊
|
|||
|
|
* 系统: SYS-GLW-0001
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
const fs = require('fs');
|
|||
|
|
const path = require('path');
|
|||
|
|
|
|||
|
|
const INBOX = path.join(__dirname, '../../grid-db/inbox');
|
|||
|
|
|
|||
|
|
function parseArgs() {
|
|||
|
|
const args = {};
|
|||
|
|
process.argv.slice(2).forEach(arg => {
|
|||
|
|
const [key, value] = arg.replace(/^--/, '').split('=');
|
|||
|
|
if (key && value) {
|
|||
|
|
args[key] = value;
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
return args;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getDateStr() {
|
|||
|
|
return new Date().toISOString().slice(0, 10).replace(/-/g, '');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getTimeStr() {
|
|||
|
|
return new Date().toISOString().slice(11, 19).replace(/:/g, '');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function main() {
|
|||
|
|
const args = parseArgs();
|
|||
|
|
const devId = args['dev-id'];
|
|||
|
|
const result = args['result'] || 'unknown';
|
|||
|
|
const filesChecked = args['files-checked'] || '0';
|
|||
|
|
|
|||
|
|
if (!devId || !/^DEV-\d{3}$/.test(devId)) {
|
|||
|
|
console.error('[write-code-check-result] Invalid or missing --dev-id');
|
|||
|
|
process.exit(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const dateStr = getDateStr();
|
|||
|
|
const timeStr = getTimeStr();
|
|||
|
|
const messageId = `${dateStr}-${timeStr}-${devId}-code-check`;
|
|||
|
|
|
|||
|
|
const message = {
|
|||
|
|
schema_version: '1.0',
|
|||
|
|
message_id: messageId,
|
|||
|
|
timestamp: new Date().toISOString(),
|
|||
|
|
source: 'workflow',
|
|||
|
|
dev_id: devId,
|
|||
|
|
persona_id: 'PER-ZY001',
|
|||
|
|
type: 'progress-update',
|
|||
|
|
priority: result === 'fail' ? 'P1' : 'info',
|
|||
|
|
payload: {
|
|||
|
|
summary: `Code check ${result}: ${filesChecked} files checked for ${devId}`,
|
|||
|
|
detail: {
|
|||
|
|
result: result,
|
|||
|
|
files_checked: parseInt(filesChecked, 10),
|
|||
|
|
triggered_by: 'contract-check-workflow'
|
|||
|
|
},
|
|||
|
|
code_refs: [],
|
|||
|
|
broadcast_ref: null,
|
|||
|
|
emotion_markers: {}
|
|||
|
|
},
|
|||
|
|
context: {
|
|||
|
|
session_id: `ci-${dateStr}-${timeStr}`,
|
|||
|
|
interaction_count: 0,
|
|||
|
|
persona_state: {
|
|||
|
|
engagement_level: 'automated',
|
|||
|
|
teaching_mode: 'code-review'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const filename = `${messageId}.json`;
|
|||
|
|
const filePath = path.join(INBOX, filename);
|
|||
|
|
|
|||
|
|
fs.writeFileSync(filePath, JSON.stringify(message, null, 2) + '\n');
|
|||
|
|
console.log(`[write-code-check-result] Written ${filename} to inbox`);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
main();
|