guanghulab/.github/archived-workflows/generate-module-doc.yml
2026-05-10 13:12:44 +08:00

163 lines
5.8 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:
push:
branches: [main]
paths:
- 'm01-login/**'
- 'm03-personality/**'
- 'm05-user-center/**'
- 'm06-ticket/**'
- 'm07-dialogue-ui/**'
- 'm10-cloud/**'
- 'm11-module/**'
- 'm12-kanban/**'
- 'm15-cloud-drive/**'
- 'm18-health-check/**'
- 'dingtalk-bot/**'
- 'backend-integration/**'
- 'status-board/**'
- 'backend/**'
- 'frontend/**'
- 'notification/**'
- 'ticket-system/**'
- 'scripts/generate-module-doc.js'
workflow_dispatch:
jobs:
generate-doc:
name: 📋 生成部署模块总文档
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: main
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 生成光湖纪元模块文档
run: node scripts/generate-module-doc.js
- name: 提交更新文档
run: |
git config user.name "铸渊 (ZhùYuān)"
git config user.email "zhuyuan@guanghulab.com"
git add docs/HoloLake-Era-OS-Modules.md
if git diff --cached --quiet; then
echo "📋 文档无变化,跳过提交"
else
git commit -m "📋 自动更新光湖纪元模块文档 · $(date -u +%Y-%m-%d\ %H:%M\ UTC)"
git pull --rebase origin main || echo "⚠️ rebase 失败(可能有冲突),尝试直接推送..."
git push || {
echo "⚠️ 推送失败,尝试重新拉取后再推送..."
git pull --rebase origin main
git push
}
fi
check-and-notify:
name: 🔍 模块自检 + 📧 通知推送者
runs-on: ubuntu-latest
# 仅 push 事件触发workflow_dispatch 为手动,不发通知)
if: github.event_name == 'push'
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 2
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 获取本次 push 改动的文件列表
id: changed
run: |
# 获取本次 push 相对于上一个 commit 改动的文件
FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || git show --name-only --format="" HEAD)
echo "files<<EOF" >> $GITHUB_OUTPUT
echo "$FILES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
echo "📄 改动文件:$FILES"
- name: 🔍 模块自检
id: check
run: |
CHANGED_FILES="${{ steps.changed.outputs.files }}"
MODULES="m01-login m03-personality m05-user-center m06-ticket m07-dialogue-ui m10-cloud m11-module m12-kanban m15-cloud-drive m18-health-check dingtalk-bot backend-integration status-board backend frontend notification ticket-system"
RESULT="pass"
DETAILS=""
for mod in $MODULES; do
# 只检查本次有改动的模块
if echo "$CHANGED_FILES" | grep -q "^${mod}/"; then
echo "🔍 检查模块: $mod"
if [ -d "$mod" ]; then
if [ ! -f "$mod/README.md" ]; then
DETAILS="${DETAILS}❌ ${mod} 缺少 README.md必须提供"$'\n'
RESULT="fail"
fi
if [ ! -f "$mod/package.json" ]; then
DETAILS="${DETAILS}⚠️ ${mod} 缺少 package.json建议补充"$'\n'
fi
if [ ! -d "$mod/src" ]; then
DETAILS="${DETAILS}⚠️ ${mod} 缺少 src/ 目录(建议补充)"$'\n'
fi
# 检查 package.json 格式是否正确
if [ -f "$mod/package.json" ]; then
if ! node -e "JSON.parse(require('fs').readFileSync('$mod/package.json','utf8'))" 2>/dev/null; then
DETAILS="${DETAILS}❌ ${mod}/package.json 格式错误JSON 解析失败)"$'\n'
RESULT="fail"
else
DETAILS="${DETAILS}✅ ${mod} 结构检查通过"$'\n'
fi
else
DETAILS="${DETAILS}✅ ${mod} 基本结构检查通过"$'\n'
fi
fi
fi
done
if [ -z "$DETAILS" ]; then
DETAILS="✅ 所有模块检查通过"
fi
echo "test_result=$RESULT" >> $GITHUB_OUTPUT
# 使用 heredoc 方式输出多行详情
echo "test_details<<EOF" >> $GITHUB_OUTPUT
echo "$DETAILS" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
echo "🔍 自检结果: $RESULT"
- name: 📧 发送模块收讫通知Commit Comment → 推送者本人)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPO: ${{ github.repository }}
PUSHER_LOGIN: ${{ github.actor }}
CHANGED_FILES: ${{ steps.changed.outputs.files }}
COMMIT_SHA: ${{ github.sha }}
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
TEST_RESULT: ${{ steps.check.outputs.test_result }}
TEST_DETAILS: ${{ steps.check.outputs.test_details }}
run: node scripts/notify-module-received.js