101 lines
3.8 KiB
YAML
101 lines
3.8 KiB
YAML
# ═══════════════════════════════════════════════════════════
|
||
# 模块B · 铸渊训练Agent自动触发 Workflow
|
||
# ═══════════════════════════════════════════════════════════
|
||
#
|
||
# 签发: 铸渊 · ICE-GL-ZY001
|
||
# 版权: 国作登字-2026-A-00037559
|
||
#
|
||
# 定时触发训练Agent,处理COS桶中的新语料
|
||
# 遇到问题自动创建Issue唤醒铸渊
|
||
#
|
||
# 触发条件:
|
||
# - 定时: 每天 04:00 CST (20:00 UTC)
|
||
# - 手动: workflow_dispatch
|
||
# - COS桶告警: repository_dispatch (cos-alert事件)
|
||
|
||
name: 铸渊训练Agent · 语料处理
|
||
|
||
on:
|
||
schedule:
|
||
- cron: '0 20 * * *' # 04:00 CST = 20:00 UTC
|
||
workflow_dispatch:
|
||
inputs:
|
||
corpus_bucket:
|
||
description: '语料桶名称'
|
||
required: false
|
||
default: 'cold'
|
||
force_reprocess:
|
||
description: '强制重新处理已处理的语料'
|
||
required: false
|
||
default: 'false'
|
||
repository_dispatch:
|
||
types: [cos-alert]
|
||
|
||
jobs:
|
||
training:
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 30
|
||
permissions:
|
||
contents: read
|
||
|
||
steps:
|
||
- name: 签出代码
|
||
uses: actions/checkout@v4
|
||
|
||
- name: 设置 Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '20'
|
||
|
||
- name: 安装依赖
|
||
working-directory: server/age-os
|
||
run: npm ci --production 2>/dev/null || npm install --production
|
||
|
||
- name: 检查语料状态
|
||
id: check
|
||
env:
|
||
ZY_OSS_KEY: ${{ secrets.ZY_OSS_KEY }}
|
||
ZY_OSS_SECRET: ${{ secrets.ZY_OSS_SECRET }}
|
||
ZY_COS_REGION: ${{ secrets.ZY_COS_REGION }}
|
||
run: |
|
||
node -e "
|
||
const cos = require('./server/age-os/mcp-server/cos');
|
||
const extractor = require('./server/age-os/mcp-server/tools/corpus-extractor-ops');
|
||
(async () => {
|
||
try {
|
||
const status = await extractor.cosGetCorpusStatus({ bucket: '${{ github.event.inputs.corpus_bucket || 'cold' }}' });
|
||
console.log(JSON.stringify(status, null, 2));
|
||
// 输出待处理数量
|
||
const pending = status.pending || 0;
|
||
const fs = require('fs');
|
||
fs.appendFileSync(process.env.GITHUB_OUTPUT, 'pending=' + pending + '\n');
|
||
fs.appendFileSync(process.env.GITHUB_OUTPUT, 'status=success\n');
|
||
} catch (err) {
|
||
console.error('语料检查失败:', err.message);
|
||
const fs = require('fs');
|
||
fs.appendFileSync(process.env.GITHUB_OUTPUT, 'status=error\n');
|
||
fs.appendFileSync(process.env.GITHUB_OUTPUT, 'error=' + err.message + '\n');
|
||
}
|
||
})();
|
||
"
|
||
|
||
- name: 处理COS桶告警
|
||
if: github.event_name == 'repository_dispatch'
|
||
env:
|
||
ZY_OSS_KEY: ${{ secrets.ZY_OSS_KEY }}
|
||
ZY_OSS_SECRET: ${{ secrets.ZY_OSS_SECRET }}
|
||
ZY_COS_REGION: ${{ secrets.ZY_COS_REGION }}
|
||
run: |
|
||
echo "📡 收到COS桶告警事件"
|
||
echo "事件数据: ${{ toJson(github.event.client_payload) }}"
|
||
|
||
- name: 训练完成通知
|
||
if: always()
|
||
run: |
|
||
echo "═══════════════════════════════════════════"
|
||
echo "铸渊训练Agent · 运行完成"
|
||
echo "时间: $(date -u '+%Y-%m-%dT%H:%M:%SZ')"
|
||
echo "状态: ${{ steps.check.outputs.status }}"
|
||
echo "待处理语料: ${{ steps.check.outputs.pending }}"
|
||
echo "═══════════════════════════════════════════"
|