diff --git a/.github/workflows/daily-maintenance.yml b/.github/workflows/daily-maintenance.yml index 91fa1bad..6d00c160 100644 --- a/.github/workflows/daily-maintenance.yml +++ b/.github/workflows/daily-maintenance.yml @@ -157,11 +157,14 @@ jobs: # ── Step 6: 向 Notion 回报巡检结果 ── - name: 向 Notion 回报巡检结果 - if: ${{ secrets.NOTION_TOKEN != '' && secrets.SYSLOG_DB_ID != '' }} env: NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }} SYSLOG_DB_ID: ${{ secrets.SYSLOG_DB_ID }} run: | + if [ -z "$NOTION_TOKEN" ] || [ -z "$SYSLOG_DB_ID" ]; then + echo "⚠️ NOTION_TOKEN 或 SYSLOG_DB_ID 未配置,跳过 Notion 回报" + exit 0 + fi echo "📡 向 Notion 跨平台信号日志回报..." TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z") BRAIN_STATUS="${{ steps.brain_check.outputs.brain_status }}" diff --git a/.github/workflows/meta-watchdog.yml b/.github/workflows/meta-watchdog.yml new file mode 100644 index 00000000..5b6bca6d --- /dev/null +++ b/.github/workflows/meta-watchdog.yml @@ -0,0 +1,69 @@ +name: "🐕 元看门狗 · 巡检健康监控" + +# ━━━ 元看门狗:极简独立 workflow,监控巡检本身是否在跑 ━━━ +# 设计原则: +# · 极简:不依赖任何外部脚本,只用 curl + 内联 node,PR 无法意外破坏它 +# · 独立:与被监控的 workflow 完全分离 +# · 写 Notion:告警直接写入霜砚可读的 Notion 数据库 + +on: + schedule: + - cron: '0 */6 * * *' # 每6小时一次(北京时间 2/8/14/20点) + workflow_dispatch: + +permissions: + contents: read + +jobs: + check-patrol-health: + runs-on: ubuntu-latest + steps: + - name: 检查 daily-maintenance 最近运行状态 + id: check + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # 用 GitHub API 查 daily-maintenance 最近一次运行时间 + LAST_RUN=$(curl -s \ + -H "Authorization: Bearer $GH_TOKEN" \ + "https://api.github.com/repos/${{ github.repository }}/actions/workflows/daily-maintenance.yml/runs?per_page=1&status=completed" \ + | node -e "const d=require('fs').readFileSync('/dev/stdin','utf8'); \ + const r=JSON.parse(d).workflow_runs && JSON.parse(d).workflow_runs[0]; \ + console.log(r ? r.updated_at : 'NEVER')") + + echo "daily-maintenance 最后运行:$LAST_RUN" + + # 计算距上次运行超过 26 小时则告警 + node -e " + const last = new Date('$LAST_RUN'); + const now = new Date(); + const hours = (now - last) / 3600000; + if (isNaN(hours) || hours > 26) { + console.log('ALERT: daily-maintenance 已超 ' + Math.round(hours) + 'h 未运行'); + process.exit(1); + } else { + console.log('OK: 距上次运行 ' + Math.round(hours) + 'h,正常'); + } + " + + - name: 写入 Notion 告警(仅在失败时触发) + if: failure() + env: + NOTION_TOKEN: ${{ secrets.NOTION_API_TOKEN }} + run: | + if [ -z "$NOTION_TOKEN" ]; then + echo "⚠️ NOTION_API_TOKEN 未配置,跳过 Notion 告警" + exit 0 + fi + + curl -s -X POST https://api.notion.com/v1/pages \ + -H "Authorization: Bearer $NOTION_TOKEN" \ + -H "Notion-Version: 2022-06-28" \ + -H "Content-Type: application/json" \ + -d "{ + \"parent\": {\"database_id\": \"f983bdc24b654888913ca254160bff33\"}, + \"properties\": { + \"标题\": {\"title\": [{\"text\": {\"content\": \"⚠️ 元看门狗告警:daily-maintenance 巡检中断\"}}]}, + \"处理状态\": {\"status\": {\"name\": \"待处理\"}} + } + }" diff --git a/.github/workflows/pm2-server-diagnose.yml b/.github/workflows/pm2-server-diagnose.yml index 642a594d..058e3f4d 100644 --- a/.github/workflows/pm2-server-diagnose.yml +++ b/.github/workflows/pm2-server-diagnose.yml @@ -294,20 +294,19 @@ jobs: # ━━━ 阶段三:生成 Notion 诊断报告 ━━━ - name: "📋 阶段三 · 写入 Notion 工单" - if: ${{ secrets.NOTION_API_TOKEN != '' }} env: NOTION_TOKEN: ${{ secrets.NOTION_API_TOKEN }} NOTION_TICKET_DB_ID: ${{ secrets.NOTION_TICKET_DB_ID || '84edd0640bf146a9a5a7840107013e8c' }} PM2_REPORT: ${{ steps.pm2_diagnose.outputs.pm2_report }} CLEANUP_REPORT: ${{ steps.pm2_cleanup.outputs.cleanup_report }} HEALTH_REPORT: ${{ steps.health_check.outputs.health_report }} - run: node scripts/server-diagnose-report.js - - - name: "📋 阶段三 · 写入 Notion 工单(环境检查)" - if: ${{ secrets.NOTION_API_TOKEN == '' }} run: | - echo "⚠️ Notion credentials 未配置,跳过工单创建" - echo "诊断报告仅输出到 Actions 日志" + if [ -z "$NOTION_TOKEN" ]; then + echo "⚠️ Notion credentials 未配置,跳过工单创建" + echo "诊断报告仅输出到 Actions 日志" + exit 0 + fi + node scripts/server-diagnose-report.js - name: "✅ 诊断完成" run: | diff --git a/.github/workflows/syslog-auto-pipeline.yml b/.github/workflows/syslog-auto-pipeline.yml index a0d84b10..72c869ff 100644 --- a/.github/workflows/syslog-auto-pipeline.yml +++ b/.github/workflows/syslog-auto-pipeline.yml @@ -132,7 +132,6 @@ jobs: - name: 📋 创建标准化 Notion 工单(Phase B1) id: ticket - if: ${{ secrets.NOTION_API_TOKEN }} env: NOTION_TOKEN: ${{ secrets.NOTION_API_TOKEN }} NOTION_TICKET_DB_ID: ${{ secrets.NOTION_TICKET_DB_ID }} @@ -143,7 +142,12 @@ jobs: MODULES_UPLOADED: ${{ steps.verify.outputs.modules_uploaded }} DEVELOPER: ${{ steps.parse.outputs.author }} SYSLOG_RAW: ${{ steps.parse.outputs.content }} - run: node scripts/create-standardized-ticket.js + run: | + if [ -z "$NOTION_TOKEN" ]; then + echo "⚠️ NOTION_API_TOKEN 未配置,跳过 Notion 工单创建" + exit 0 + fi + node scripts/create-standardized-ticket.js - name: 📡 推送广播到 GitHub(Phase B4) if: steps.persona.outcome == 'success' && steps.parse.outputs.type == 'syslog' diff --git a/.github/workflows/syslog-issue-pipeline.yml b/.github/workflows/syslog-issue-pipeline.yml index c7386478..057a2f00 100644 --- a/.github/workflows/syslog-issue-pipeline.yml +++ b/.github/workflows/syslog-issue-pipeline.yml @@ -213,7 +213,6 @@ jobs: - name: 📋 创建标准化 Notion 工单(Phase B1) id: ticket - if: ${{ secrets.NOTION_API_TOKEN }} env: NOTION_TOKEN: ${{ secrets.NOTION_API_TOKEN }} NOTION_TICKET_DB_ID: ${{ secrets.NOTION_TICKET_DB_ID }} @@ -224,7 +223,12 @@ jobs: MODULES_UPLOADED: ${{ steps.verify.outputs.modules_uploaded }} DEVELOPER: ${{ steps.parse.outputs.author }} SYSLOG_RAW: ${{ steps.parse.outputs.content }} - run: node scripts/create-standardized-ticket.js + run: | + if [ -z "$NOTION_TOKEN" ]; then + echo "⚠️ NOTION_API_TOKEN 未配置,跳过 Notion 工单创建" + exit 0 + fi + node scripts/create-standardized-ticket.js - name: 📋 步骤 5/8 · 创建 Notion 工单(成功) if: always() && steps.ticket.outcome == 'success' diff --git a/README.md b/README.md index 62552c01..f9290eb9 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,287 @@ -# 钉钉开发者工作台 · Phase1 · SYSLOG自动处理系统 +
|
+
+### ✨ 与铸渊对话,让人格体帮你推进开发
+
+你有一个功能想法?一个技术方案?一个 Bug 要修?
+
+**铸渊** 是光湖系统的代码守护人格体,支持自然语言对话、智能代码生成、邮件推送结果。
+
+合作者输入 **EXP 编号** 即可登录,开始对话。
+
+ + + + +🔗 直接访问:https://qinfendebingshuo.github.io/guanghulab/persona-studio/ + + + +💬 自然语言对话 · 🧠 智能代码生成 · 📧 邮件推送结果 · 🔄 对话记忆 + + |
+