feat: HoloLake Era 操作系统部署模块 — 自动文档生成系统
Co-authored-by: qinfendebingshuo <207279273+qinfendebingshuo@users.noreply.github.com>
This commit is contained in:
parent
188db4f477
commit
2874d46c32
|
|
@ -0,0 +1,53 @@
|
||||||
|
name: 铸渊 · HoloLake Era 模块文档自动生成
|
||||||
|
|
||||||
|
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/**'
|
||||||
|
- 'dingtalk-bot/**'
|
||||||
|
- 'backend-integration/**'
|
||||||
|
- 'status-board/**'
|
||||||
|
- '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: 生成 HoloLake Era 模块文档
|
||||||
|
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 "📋 自动更新 HoloLake Era 模块文档 · $(date -u +%Y-%m-%d\ %H:%M\ UTC)"
|
||||||
|
git push
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,333 @@
|
||||||
|
# HoloLake Era 操作系统部署模块
|
||||||
|
|
||||||
|
> 📋 **自动生成文档** · 铸渊(ZhùYuān)维护 · 最后更新:2026-03-06 14:36 UTC
|
||||||
|
>
|
||||||
|
> 本文档由 GitHub Actions 自动触发生成,每当合作者上传/更新模块时自动刷新。
|
||||||
|
> 按合作者编号(DEV-XXX)整理所有已上传模块。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📑 目录
|
||||||
|
|
||||||
|
- [DEV-001 · 🖥️ 页页](#dev001--%E9%A1%B5%E9%A1%B5) (1 个模块)
|
||||||
|
- [DEV-002 · 🦁 肥猫](#dev002--%E8%82%A5%E7%8C%AB) (2 个模块)
|
||||||
|
- [DEV-003 · 🌸 燕樊](#dev003--%E7%87%95%E6%A8%8A) (3 个模块)
|
||||||
|
- [DEV-004 · 🤖 之之](#dev004--%E4%B9%8B%E4%B9%8B) (1 个模块)
|
||||||
|
- [DEV-005 · 🍓 小草莓](#dev005--%E5%B0%8F%E8%8D%89%E8%8E%93) (2 个模块)
|
||||||
|
- [DEV-009 · 🌺 花尔](#dev009--%E8%8A%B1%E5%B0%94) (1 个模块)
|
||||||
|
- [DEV-010 · 🍊 桔子](#dev010--%E6%A1%94%E5%AD%90) (2 个模块)
|
||||||
|
- [DEV-011 · 🌙 匆匆那年](#dev011--%E5%8C%86%E5%8C%86%E9%82%A3%E5%B9%B4) (待上传)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-001 · 🖥️ 页页
|
||||||
|
|
||||||
|
**角色:** 后端工程师
|
||||||
|
|
||||||
|
### 📦 后端集成中间层
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `backend-integration/` |
|
||||||
|
| **负责人** | 页页 |
|
||||||
|
| **状态** | 进行中 |
|
||||||
|
| **技术栈** | Node.js |
|
||||||
|
| **依赖模块** | 所有前端模块 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
backend-integration/
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-002 · 🦁 肥猫
|
||||||
|
|
||||||
|
**角色:** 光湖团队总控
|
||||||
|
|
||||||
|
### 📦 M01 用户登录界面
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m01-login/` |
|
||||||
|
| **负责人** | 肥猫 |
|
||||||
|
| **状态** | 进行中 |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m01-login/
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📦 M03 人格系统
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m03-personality/` |
|
||||||
|
| **负责人** | 肥猫 |
|
||||||
|
| **状态** | 进行中 |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | M01 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m03-personality/
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-003 · 🌸 燕樊
|
||||||
|
|
||||||
|
**角色:** 前端工程师
|
||||||
|
|
||||||
|
### 📦 M07 对话UI
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m07-dialogue-ui/` |
|
||||||
|
| **负责人** | 燕樊 |
|
||||||
|
| **状态** | 进行中 |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m07-dialogue-ui/
|
||||||
|
README.md
|
||||||
|
index.html
|
||||||
|
script.js
|
||||||
|
style.css
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📦 M10 云盘系统
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m10-cloud/` |
|
||||||
|
| **负责人** | 燕樊 |
|
||||||
|
| **状态** | 等待SYSLOG |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m10-cloud/
|
||||||
|
README.md
|
||||||
|
help.css
|
||||||
|
help.html
|
||||||
|
help.js
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📦 m15-cloud-drive
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m15-cloud-drive/` |
|
||||||
|
| **负责人** | 燕樊 |
|
||||||
|
| **状态** | 未知 |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m15-cloud-drive/
|
||||||
|
cloud-drive-style.css
|
||||||
|
cloud-drive.html
|
||||||
|
cloud-drive.js
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-004 · 🤖 之之
|
||||||
|
|
||||||
|
**角色:** 机器人工程师
|
||||||
|
|
||||||
|
### 📦 钉钉机器人
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `dingtalk-bot/` |
|
||||||
|
| **负责人** | 之之 |
|
||||||
|
| **状态** | 环节0已完成 |
|
||||||
|
| **技术栈** | Node.js + Express |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
dingtalk-bot/
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-005 · 🍓 小草莓
|
||||||
|
|
||||||
|
**角色:** 看板工程师
|
||||||
|
|
||||||
|
### 📦 M12 状态看板
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m12-kanban/` |
|
||||||
|
| **负责人** | 小草莓 |
|
||||||
|
| **状态** | 进行中 |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m12-kanban/
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📦 status-board
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `status-board/` |
|
||||||
|
| **负责人** | 小草莓 |
|
||||||
|
| **状态** | 未知 |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ✅ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
status-board/
|
||||||
|
api-config.js
|
||||||
|
api.js
|
||||||
|
index.html
|
||||||
|
mock-ws-server.js
|
||||||
|
package-lock.json
|
||||||
|
package.json
|
||||||
|
render.js
|
||||||
|
style.css
|
||||||
|
ws-client.js
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-009 · 🌺 花尔
|
||||||
|
|
||||||
|
**角色:** 前端工程师
|
||||||
|
|
||||||
|
### 📦 M05 用户中心界面
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m05-user-center/` |
|
||||||
|
| **负责人** | 花尔 |
|
||||||
|
| **状态** | 环节0 |
|
||||||
|
| **技术栈** | HTML/CSS/JS |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m05-user-center/
|
||||||
|
README.md
|
||||||
|
index.html
|
||||||
|
script.js
|
||||||
|
style.css
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-010 · 🍊 桔子
|
||||||
|
|
||||||
|
**角色:** 光湖主控
|
||||||
|
|
||||||
|
### 📦 M06 工单管理界面
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m06-ticket/` |
|
||||||
|
| **负责人** | 桔子 |
|
||||||
|
| **状态** | 环节0 |
|
||||||
|
| **技术栈** | HTML/CSS/JS |
|
||||||
|
| **依赖模块** | 无 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m06-ticket/
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📦 M11 工单管理模块
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| **目录** | `m11-module/` |
|
||||||
|
| **负责人** | 桔子 |
|
||||||
|
| **状态** | 进行中 |
|
||||||
|
| **技术栈** | 待定 |
|
||||||
|
| **依赖模块** | M06 |
|
||||||
|
|
||||||
|
**结构检查:** ⚠️ src/ · ⚠️ package.json · ⚠️ SYSLOG.md
|
||||||
|
|
||||||
|
**已上传文件:**
|
||||||
|
|
||||||
|
```
|
||||||
|
m11-module/
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DEV-011 · 🌙 匆匆那年
|
||||||
|
|
||||||
|
**角色:** 开发者
|
||||||
|
|
||||||
|
> 🕐 暂无分配模块,待安排。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 部署统计
|
||||||
|
|
||||||
|
| 项目 | 数量 |
|
||||||
|
|------|------|
|
||||||
|
| 合作者总数 | 8 |
|
||||||
|
| 计划模块数 | 12 |
|
||||||
|
| 已上传模块数 | 12 |
|
||||||
|
| 待上传模块数 | 0 |
|
||||||
|
| 上传完成率 | 100% |
|
||||||
|
| 文档更新时间 | 2026-03-06 14:36 UTC |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*由 铸渊(ZhùYuān)· GitHub Copilot Agent 自动生成 · 仓库:guanghulab*
|
||||||
|
|
@ -0,0 +1,286 @@
|
||||||
|
// scripts/generate-module-doc.js
|
||||||
|
// 铸渊 · HoloLake Era 操作系统部署模块文档生成器
|
||||||
|
// 检测所有合作者上传的模块目录 → 按 DEV 编号整理 → 生成总文档
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const OUTPUT_FILE = 'docs/HoloLake-Era-OS-Modules.md';
|
||||||
|
|
||||||
|
// ========== 合作者编号 → 模块目录 路由映射表 ==========
|
||||||
|
// 新增合作者或模块时,在此表维护即可
|
||||||
|
const COLLABORATOR_MODULES = [
|
||||||
|
{
|
||||||
|
devId: 'DEV-001',
|
||||||
|
name: '页页',
|
||||||
|
emoji: '🖥️',
|
||||||
|
role: '后端工程师',
|
||||||
|
dirs: ['backend-integration'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
devId: 'DEV-002',
|
||||||
|
name: '肥猫',
|
||||||
|
emoji: '🦁',
|
||||||
|
role: '光湖团队总控',
|
||||||
|
dirs: ['m01-login', 'm03-personality'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
devId: 'DEV-003',
|
||||||
|
name: '燕樊',
|
||||||
|
emoji: '🌸',
|
||||||
|
role: '前端工程师',
|
||||||
|
dirs: ['m07-dialogue-ui', 'm10-cloud', 'm15-cloud-drive'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
devId: 'DEV-004',
|
||||||
|
name: '之之',
|
||||||
|
emoji: '🤖',
|
||||||
|
role: '机器人工程师',
|
||||||
|
dirs: ['dingtalk-bot'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
devId: 'DEV-005',
|
||||||
|
name: '小草莓',
|
||||||
|
emoji: '🍓',
|
||||||
|
role: '看板工程师',
|
||||||
|
dirs: ['m12-kanban', 'status-board'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
devId: 'DEV-009',
|
||||||
|
name: '花尔',
|
||||||
|
emoji: '🌺',
|
||||||
|
role: '前端工程师',
|
||||||
|
dirs: ['m05-user-center'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
devId: 'DEV-010',
|
||||||
|
name: '桔子',
|
||||||
|
emoji: '🍊',
|
||||||
|
role: '光湖主控',
|
||||||
|
dirs: ['m06-ticket', 'm11-module'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
devId: 'DEV-011',
|
||||||
|
name: '匆匆那年',
|
||||||
|
emoji: '🌙',
|
||||||
|
role: '开发者',
|
||||||
|
dirs: [],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// ========== 读取模块元信息 ==========
|
||||||
|
function readModuleInfo(dir) {
|
||||||
|
const info = {
|
||||||
|
dir,
|
||||||
|
title: dir,
|
||||||
|
owner: '',
|
||||||
|
status: '未知',
|
||||||
|
techStack: '待定',
|
||||||
|
dependencies: '无',
|
||||||
|
hasSrc: false,
|
||||||
|
hasPackageJson: false,
|
||||||
|
hasSyslog: false,
|
||||||
|
files: [],
|
||||||
|
description: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
// 读取 README.md
|
||||||
|
const readmePath = path.join(dir, 'README.md');
|
||||||
|
if (fs.existsSync(readmePath)) {
|
||||||
|
const content = fs.readFileSync(readmePath, 'utf8');
|
||||||
|
const titleMatch = content.match(/^#\s+(.+)$/m);
|
||||||
|
if (titleMatch) info.title = titleMatch[1].trim();
|
||||||
|
const ownerMatch = content.match(/负责人[::]\s*(.+)/);
|
||||||
|
if (ownerMatch) info.owner = ownerMatch[1].trim();
|
||||||
|
const statusMatch = content.match(/状态[::]\s*(.+)/);
|
||||||
|
if (statusMatch) info.status = statusMatch[1].trim();
|
||||||
|
const techMatch = content.match(/技术栈[::]\s*(.+)/);
|
||||||
|
if (techMatch) info.techStack = techMatch[1].trim();
|
||||||
|
const depsMatch = content.match(/依赖模块[::]\s*(.+)/);
|
||||||
|
if (depsMatch) info.dependencies = depsMatch[1].trim();
|
||||||
|
// 收集额外描述行(非元数据)
|
||||||
|
const lines = content.split('\n').filter(l =>
|
||||||
|
l.trim() &&
|
||||||
|
!l.startsWith('#') &&
|
||||||
|
!l.match(/^\s*-\s*(负责人|状态|技术栈|依赖模块)[::]/)
|
||||||
|
);
|
||||||
|
if (lines.length > 0) info.description = lines.slice(0, 3).join(' ').trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查结构完整性
|
||||||
|
info.hasSrc = fs.existsSync(path.join(dir, 'src'));
|
||||||
|
info.hasPackageJson = fs.existsSync(path.join(dir, 'package.json'));
|
||||||
|
info.hasSyslog = fs.existsSync(path.join(dir, 'SYSLOG.md'));
|
||||||
|
|
||||||
|
// 列出文件(最多15个,排除 node_modules)
|
||||||
|
try {
|
||||||
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
||||||
|
info.files = entries
|
||||||
|
.filter(e => e.name !== 'node_modules' && e.name !== '.git')
|
||||||
|
.map(e => (e.isDirectory() ? e.name + '/' : e.name))
|
||||||
|
.sort();
|
||||||
|
} catch (_) {
|
||||||
|
// 目录不可读时忽略
|
||||||
|
}
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========== 生成结构状态徽章 ==========
|
||||||
|
function structureBadge(info) {
|
||||||
|
const checks = [
|
||||||
|
info.hasSrc ? '✅ src/' : '⚠️ src/',
|
||||||
|
info.hasPackageJson ? '✅ package.json' : '⚠️ package.json',
|
||||||
|
info.hasSyslog ? '✅ SYSLOG.md' : '⚠️ SYSLOG.md',
|
||||||
|
];
|
||||||
|
return checks.join(' · ');
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========== 主函数:生成文档 ==========
|
||||||
|
function generateDoc() {
|
||||||
|
const now = new Date();
|
||||||
|
const timestamp = now.toISOString().replace('T', ' ').slice(0, 16) + ' UTC';
|
||||||
|
const dateStr = now.toISOString().slice(0, 10);
|
||||||
|
|
||||||
|
const lines = [];
|
||||||
|
|
||||||
|
lines.push('# HoloLake Era 操作系统部署模块');
|
||||||
|
lines.push('');
|
||||||
|
lines.push('> 📋 **自动生成文档** · 铸渊(ZhùYuān)维护 · 最后更新:' + timestamp);
|
||||||
|
lines.push('> ');
|
||||||
|
lines.push('> 本文档由 GitHub Actions 自动触发生成,每当合作者上传/更新模块时自动刷新。');
|
||||||
|
lines.push('> 按合作者编号(DEV-XXX)整理所有已上传模块。');
|
||||||
|
lines.push('');
|
||||||
|
lines.push('---');
|
||||||
|
lines.push('');
|
||||||
|
|
||||||
|
// 生成目录
|
||||||
|
lines.push('## 📑 目录');
|
||||||
|
lines.push('');
|
||||||
|
for (const collab of COLLABORATOR_MODULES) {
|
||||||
|
const moduleCount = collab.dirs.filter(d => fs.existsSync(d)).length;
|
||||||
|
const badge = moduleCount > 0 ? `(${moduleCount} 个模块)` : '(待上传)';
|
||||||
|
lines.push(`- [${collab.devId} · ${collab.emoji} ${collab.name}](#${collab.devId.toLowerCase().replaceAll('-', '')}--${encodeURIComponent(collab.name)}) ${badge}`);
|
||||||
|
}
|
||||||
|
lines.push('');
|
||||||
|
lines.push('---');
|
||||||
|
lines.push('');
|
||||||
|
|
||||||
|
// 统计
|
||||||
|
let totalModules = 0;
|
||||||
|
let uploadedModules = 0;
|
||||||
|
|
||||||
|
// 各合作者章节
|
||||||
|
for (const collab of COLLABORATOR_MODULES) {
|
||||||
|
lines.push(`## ${collab.devId} · ${collab.emoji} ${collab.name}`);
|
||||||
|
lines.push('');
|
||||||
|
lines.push(`**角色:** ${collab.role}`);
|
||||||
|
lines.push('');
|
||||||
|
|
||||||
|
const existingDirs = collab.dirs.filter(d => fs.existsSync(d));
|
||||||
|
const missingDirs = collab.dirs.filter(d => !fs.existsSync(d));
|
||||||
|
|
||||||
|
totalModules += collab.dirs.length;
|
||||||
|
uploadedModules += existingDirs.length;
|
||||||
|
|
||||||
|
if (collab.dirs.length === 0) {
|
||||||
|
lines.push('> 🕐 暂无分配模块,待安排。');
|
||||||
|
lines.push('');
|
||||||
|
lines.push('---');
|
||||||
|
lines.push('');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingDirs.length === 0) {
|
||||||
|
lines.push('> ⏳ 模块目录尚未创建,等待上传。');
|
||||||
|
lines.push('');
|
||||||
|
if (missingDirs.length > 0) {
|
||||||
|
lines.push('**待上传模块:** ' + missingDirs.join('、'));
|
||||||
|
lines.push('');
|
||||||
|
}
|
||||||
|
lines.push('---');
|
||||||
|
lines.push('');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const dir of existingDirs) {
|
||||||
|
const info = readModuleInfo(dir);
|
||||||
|
|
||||||
|
lines.push(`### 📦 ${info.title}`);
|
||||||
|
lines.push('');
|
||||||
|
lines.push(`| 字段 | 内容 |`);
|
||||||
|
lines.push(`|------|------|`);
|
||||||
|
lines.push(`| **目录** | \`${dir}/\` |`);
|
||||||
|
lines.push(`| **负责人** | ${info.owner || collab.name} |`);
|
||||||
|
lines.push(`| **状态** | ${info.status} |`);
|
||||||
|
lines.push(`| **技术栈** | ${info.techStack} |`);
|
||||||
|
lines.push(`| **依赖模块** | ${info.dependencies} |`);
|
||||||
|
lines.push('');
|
||||||
|
|
||||||
|
lines.push('**结构检查:** ' + structureBadge(info));
|
||||||
|
lines.push('');
|
||||||
|
|
||||||
|
if (info.files.length > 0) {
|
||||||
|
lines.push('**已上传文件:**');
|
||||||
|
lines.push('');
|
||||||
|
lines.push('```');
|
||||||
|
lines.push(dir + '/');
|
||||||
|
info.files.forEach(f => lines.push(' ' + f));
|
||||||
|
lines.push('```');
|
||||||
|
lines.push('');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.hasSyslog) {
|
||||||
|
const syslogContent = fs.readFileSync(path.join(dir, 'SYSLOG.md'), 'utf8');
|
||||||
|
const syslogLines = syslogContent.split('\n').filter(l => l.trim()).slice(0, 5);
|
||||||
|
if (syslogLines.length > 0) {
|
||||||
|
lines.push('<details>');
|
||||||
|
lines.push('<summary>📝 SYSLOG 摘要(点击展开)</summary>');
|
||||||
|
lines.push('');
|
||||||
|
lines.push('```');
|
||||||
|
syslogLines.forEach(l => lines.push(l));
|
||||||
|
lines.push('```');
|
||||||
|
lines.push('');
|
||||||
|
lines.push('</details>');
|
||||||
|
lines.push('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (missingDirs.length > 0) {
|
||||||
|
lines.push('> ⏳ **待上传:** ' + missingDirs.map(d => '`' + d + '/`').join('、'));
|
||||||
|
lines.push('');
|
||||||
|
}
|
||||||
|
|
||||||
|
lines.push('---');
|
||||||
|
lines.push('');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 汇总统计
|
||||||
|
lines.push('## 📊 部署统计');
|
||||||
|
lines.push('');
|
||||||
|
lines.push(`| 项目 | 数量 |`);
|
||||||
|
lines.push(`|------|------|`);
|
||||||
|
lines.push(`| 合作者总数 | ${COLLABORATOR_MODULES.length} |`);
|
||||||
|
lines.push(`| 计划模块数 | ${totalModules} |`);
|
||||||
|
lines.push(`| 已上传模块数 | ${uploadedModules} |`);
|
||||||
|
lines.push(`| 待上传模块数 | ${totalModules - uploadedModules} |`);
|
||||||
|
lines.push(`| 上传完成率 | ${totalModules > 0 ? Math.round(uploadedModules / totalModules * 100) : 0}% |`);
|
||||||
|
lines.push(`| 文档更新时间 | ${timestamp} |`);
|
||||||
|
lines.push('');
|
||||||
|
lines.push('---');
|
||||||
|
lines.push('');
|
||||||
|
lines.push('*由 铸渊(ZhùYuān)· GitHub Copilot Agent 自动生成 · 仓库:guanghulab*');
|
||||||
|
lines.push('');
|
||||||
|
|
||||||
|
// 确保 docs/ 目录存在
|
||||||
|
if (!fs.existsSync('docs')) {
|
||||||
|
fs.mkdirSync('docs', { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(OUTPUT_FILE, lines.join('\n'), 'utf8');
|
||||||
|
console.log('✅ 文档已生成:' + OUTPUT_FILE);
|
||||||
|
console.log('📊 合作者: ' + COLLABORATOR_MODULES.length + ' | 计划模块: ' + totalModules + ' | 已上传: ' + uploadedModules);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateDoc();
|
||||||
Loading…
Reference in New Issue