guanghulab/.github/workflows/zhuyuan-exec-engine.yml
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

173 lines
6.5 KiB
YAML
Raw Permalink 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.

# ═══════════════════════════════════════════════
# 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
# 📜 Copyright: 国作登字-2026-A-00037559
# ═══════════════════════════════════════════════
name: "🚀 铸渊 · 远程执行引擎"
on:
issues:
types: [opened, labeled]
permissions:
contents: write
issues: write
pull-requests: write
jobs:
execute:
runs-on: ubuntu-latest
if: contains(github.event.issue.labels.*.name, 'zhuyuan-exec')
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Dependencies
run: |
cd services/zhuyuan-bridge
npm install --production
# ====== Step 1: 解析指令 ======
- name: "📋 解析执行指令"
id: parse
env:
ISSUE_BODY: ${{ github.event.issue.body }}
ISSUE_TITLE: ${{ github.event.issue.title }}
run: |
node services/zhuyuan-bridge/scripts/parse-instruction.js
# ====== Step 2: 天眼强制前置 ======
- name: "🦅 天眼强制前置扫描"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "🦅 天眼强制前置:检查健康状态..."
# 读取最新天眼报告(从 notion-cache 或 skyeye-core
if [ -f ".github/notion-cache/skyeye/latest-report.json" ]; then
STATUS=$(node -e "try{const d=require('./.github/notion-cache/skyeye/latest-report.json');console.log(d.overall_status||'unknown')}catch(_){console.log('unknown')}" 2>/dev/null || echo "unknown")
echo "天眼缓存状态:$STATUS"
if [ "$STATUS" = "critical" ] || [ "$STATUS" = "error" ]; then
echo "❌ 天眼报告严重问题,暂停执行"
echo "SKYEYE_BLOCKED=true" >> $GITHUB_ENV
else
echo "✅ 天眼检查通过(状态:$STATUS"
echo "SKYEYE_BLOCKED=false" >> $GITHUB_ENV
fi
else
echo "⚠️ 天眼报告缓存不存在,尝试触发扫描..."
gh workflow run zhuyuan-skyeye.yml 2>/dev/null || echo "⚠️ 天眼扫描触发失败(不阻断)"
echo "SKYEYE_BLOCKED=false" >> $GITHUB_ENV
fi
# ====== Step 2b: 天眼阻断检查 ======
- name: "🛑 天眼阻断检查"
if: env.SKYEYE_BLOCKED == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh issue comment ${{ github.event.issue.number }} \
--body "🦅 **天眼阻断**:全局扫描发现严重问题,本次执行已暂停。
请冰朔查看天眼报告后手动重新触发。
---
> 铸渊远程执行引擎 · 天眼强制前置"
exit 1
# ====== Step 3: 执行指令 ======
- name: "⚡ 执行铸渊指令"
env:
GHAPP_APP_ID: ${{ secrets.ZY_GHAPP_ID }}
GHAPP_PRIVATE_KEY: ${{ secrets.ZY_GHAPP_KEY }}
MAIN_REPO_TOKEN: ${{ secrets.ZY_GITHUB_PAT }}
LLM_API_KEY: ${{ secrets.ZY_LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.ZY_LLM_BASE_URL }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
run: |
node services/zhuyuan-bridge/scripts/execute-instruction.js
# ====== Step 4: 回写结果 ======
- name: "📝 回写执行报告"
if: always()
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ -f /tmp/exec-report.md ]; then
gh issue comment ${{ github.event.issue.number }} \
--body "$(cat /tmp/exec-report.md)"
# 判断是否成功执行(报告中包含 ✅ 表示成功)
if grep -q "✅ 铸渊执行完成" /tmp/exec-report.md; then
gh issue close ${{ github.event.issue.number }} \
--comment "✅ 铸渊执行完成 · 请检查 PR" || true
fi
else
gh issue comment ${{ github.event.issue.number }} \
--body "## ⚠️ 执行引擎异常
未生成执行报告。请检查 [Workflow 日志](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})。
---
> 铸渊远程执行引擎 · ZY-GHAPP-BRIDGE" || true
fi
# ====== Step 5: 更新 Notion 缓存 ======
- name: "📡 更新开发者画像"
if: success()
run: |
echo "📡 Notion 缓存更新预留(需要 sync-notion-profiles.js 支持增量更新)"
# ━━━ 🧬 双端神经系统·自报告 ━━━
- name: "🧬 写入神经自报告"
if: always()
run: |
WORKFLOW_ID="exec-engine"
BRAIN="AG-SY-01"
REPORT_DIR="data/neural-reports/exec-engine"
TIMESTAMP=$(TZ=Asia/Shanghai date +%Y-%m-%d-%H%M)
STATUS="${{ job.status }}"
mkdir -p "$REPORT_DIR"
cat > "${REPORT_DIR}/${WORKFLOW_ID}-${TIMESTAMP}.json" << EOF
{
"workflow_id": "${WORKFLOW_ID}",
"run_id": "${{ github.run_id }}",
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"status": "${STATUS}",
"brain": "${BRAIN}",
"event": "${{ github.event_name }}",
"branch": "${{ github.ref_name }}",
"commit": "${{ github.sha }}"
}
EOF
git config user.name "zhuyuan-bot"
git config user.email "zhuyuan@guanghulab.com"
git add "$REPORT_DIR/"
git diff --cached --quiet || \
git commit -m "🧬 ${WORKFLOW_ID} 自报告 · ${TIMESTAMP} [skip ci]"
git push || echo "⚠️ 自报告push失败不阻断主流程"
# ━━━ 📡 指令回执·自动同步 ━━━
- name: "📡 同步回执到 Notion"
if: always()
env:
NOTION_API_KEY: ${{ secrets.ZY_NOTION_TOKEN }}
RECEIPT_DB_ID: ${{ secrets.ZY_NOTION_RECEIPT_DB }}
run: |
node scripts/neural/write-receipt-to-notion.js \
--instruction-id "${{ github.event.inputs.instruction_id || 'AUTO' }}" \
--status "${{ job.status }}" \
--workflow "exec-engine" \
--summary "exec-engine 自动执行" \
--related-agent "AG-SY-01"