shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🔧 铸渊协作指令:GitHub → Notion 数据桥 v1 0(霜砚签发·2026-03-06) 287fb1e1f2664778905484241588c96b.md
Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

298 lines
8.7 KiB
Markdown
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.

---
belongs_to:
- "[[INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议]]"
---
# 🔧 铸渊协作指令GitHub → Notion 数据桥 v1.0霜砚签发·2026-03-06
<aside>
🚨
**紧急任务** · 霜砚签发 · 2026-03-06
霜砚Notion AI`view-code-repo` 工具无法访问 GitHub 仓库权限链断裂Notion侧无法修复
需要铸渊在 GitHub 侧建立 **反向数据桥**GitHub 主动推送数据到 Notion 数据库,霜砚从 Notion 侧读取。
</aside>
## 🎯 核心思路
```
原来的设计(断了):
霜砚 → 直接读取 GitHub 仓库文件 → 处理
修复方案(反向推送):
铸渊 → 监听 GitHub 仓库变更 → 通过 Notion API 写入 Notion 数据库 → 霜砚从 Notion 读取
```
---
## 📊 Notion 侧已建好的两个数据库
### ① 📥 GitHub SYSLOG 收件箱
**用途**:铸渊将 `syslog-inbox/` 中的新 SYSLOG 推送到此数据库,霜砚从此读取并处理
**Notion Database ID**: `330ab17507d542c9bbb96d0749b41197`
**API Endpoint**: `POST https://api.notion.com/v1/pages`
**属性字段映射**
| Notion属性名 | 类型 | 说明 | Notion API property type |
| --- | --- | --- | --- |
| 标题 | title | SYSLOG文件名 | `title` |
| DEV编号 | select | 开发者编号,如 DEV-001 | `select` |
| 文件内容 | text | SYSLOG文件的完整文本 | `rich_text` |
| 接收时间 | date | 推送时间 | `date` |
| 处理状态 | status | 固定填 `待处理`(霜砚处理后会改为已处理) | `status` |
| 来源路径 | text | GitHub中的文件路径 | `rich_text` |
| commit_sha | text | 对应的 Git commit SHA | `rich_text` |
| 推送方 | text | 固定填 `铸渊` | `rich_text` |
**示例 API 请求**
```json
{
"parent": { "database_id": "330ab17507d542c9bbb96d0749b41197" },
"properties": {
"标题": {
"title": [{ "text": { "content": "SYSLOG-DEV-001-20260306.json" } }]
},
"DEV编号": {
"select": { "name": "DEV-001" }
},
"文件内容": {
"rich_text": [{ "text": { "content": "{\"syslog_version\": \"v3.0\", ...SYSLOG全文...}" } }]
},
"接收时间": {
"date": { "start": "2026-03-06T14:30:00+08:00" }
},
"处理状态": {
"status": { "name": "待处理" }
},
"来源路径": {
"rich_text": [{ "text": { "content": "syslog-inbox/DEV-001/SYSLOG-20260306.json" } }]
},
"commit_sha": {
"rich_text": [{ "text": { "content": "abc123def456" } }]
},
"推送方": {
"rich_text": [{ "text": { "content": "铸渊" } }]
}
}
}
```
---
### ② 📋 GitHub 变更日志
**用途**:铸渊将每次 push/PR 的变更摘要推送到此数据库,霜砚从此感知仓库变更
**Notion Database ID**: `e740b77aa6bd4ac0a2e8a75f678fba98`
**API Endpoint**: `POST https://api.notion.com/v1/pages`
**属性字段映射**
| Notion属性名 | 类型 | 说明 | Notion API property type |
| --- | --- | --- | --- |
| 标题 | title | commit message 或 PR标题 | `title` |
| 提交者 | select | DEV编号或“铸渊”“妈妈” | `select` |
| 变更类型 | select | Commit / PR opened / PR merged / PR closed | `select` |
| 变更文件 | text | 变更的文件路径列表 | `rich_text` |
| 提交时间 | date | Git提交时间 | `date` |
| commit_sha | text | Git commit SHA | `rich_text` |
| PR编号 | text | PR号如果是 PR事件 | `rich_text` |
| 分支 | text | 分支名 | `rich_text` |
| 霜砚已读 | checkbox | 固定填 false霜砚读取后会改为 true | `checkbox` |
**示例 API 请求**
```json
{
"parent": { "database_id": "e740b77aa6bd4ac0a2e8a75f678fba98" },
"properties": {
"标题": {
"title": [{ "text": { "content": "DEV-004: M17环节2完成" } }]
},
"提交者": {
"select": { "name": "DEV-004" }
},
"变更类型": {
"select": { "name": "Commit" }
},
"变更文件": {
"rich_text": [{ "text": { "content": "dynamic-comic/index.html\ndynamic-comic/style.css\ndynamic-comic/app.js" } }]
},
"提交时间": {
"date": { "start": "2026-03-06T14:30:00+08:00" }
},
"commit_sha": {
"rich_text": [{ "text": { "content": "abc123def456789" } }]
},
"PR编号": {
"rich_text": [{ "text": { "content": "" } }]
},
"分支": {
"rich_text": [{ "text": { "content": "main" } }]
},
"霜砚已读": {
"checkbox": false
}
}
}
```
---
## 🔧 铸渊需要创建的 GitHub Actions Workflows
### Workflow 1`bridge-syslog-to-notion.yml`
```yaml
name: Bridge SYSLOG to Notion
on:
push:
paths:
- 'syslog-inbox/**'
- 'syslog-processed/**'
jobs:
sync-to-notion:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Find new SYSLOG files
id: find
run: |
# 找到本次push新增/修改的SYSLOG文件
FILES=$(git diff --name-only HEAD~1 HEAD -- 'syslog-inbox/' 'syslog-processed/' || echo "")
echo "files=$FILES" >> $GITHUB_OUTPUT
- name: Push to Notion
if: steps.find.outputs.files != ''
env:
NOTION_TOKEN: $ secrets.NOTION_TOKEN
SYSLOG_DB_ID: "330ab17507d542c9bbb96d0749b41197"
run: |
# 对每个新SYSLOG文件调用 Notion API 创建一条记录
# 铸渊按实际情况编写具体逻辑
node scripts/notion-bridge.js syslog
```
### Workflow 2`bridge-changes-to-notion.yml`
```yaml
name: Bridge Changes to Notion
on:
push:
branches: [main]
pull_request:
types: [opened, closed]
jobs:
notify-notion:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Collect change info
id: changes
run: |
FILES=$(git diff --name-only HEAD~1 HEAD || echo "")
MSG=$(git log -1 --pretty=%B)
SHA=$(git rev-parse HEAD)
AUTHOR=$(git log -1 --pretty=%an)
echo "files=$FILES" >> $GITHUB_OUTPUT
echo "msg=$MSG" >> $GITHUB_OUTPUT
echo "sha=$SHA" >> $GITHUB_OUTPUT
echo "author=$AUTHOR" >> $GITHUB_OUTPUT
- name: Push to Notion
env:
NOTION_TOKEN: $ secrets.NOTION_TOKEN
CHANGES_DB_ID: "e740b77aa6bd4ac0a2e8a75f678fba98"
run: |
# 调用 Notion API 写入变更日志
node scripts/notion-bridge.js changes
```
### 共用脚本:`scripts/notion-bridge.js`
```jsx
// 铸渊按实际需要编写
// 核心功能:读取文件/变更信息 → 调用 Notion API 创建页面
const NOTION_TOKEN = process.env.NOTION_TOKEN;
const SYSLOG_DB_ID = process.env.SYSLOG_DB_ID || '330ab17507d542c9bbb96d0749b41197';
const CHANGES_DB_ID = process.env.CHANGES_DB_ID || 'e740b77aa6bd4ac0a2e8a75f678fba98';
const NOTION_API = 'https://api.notion.com/v1';
const HEADERS = {
'Authorization': `Bearer ${NOTION_TOKEN}`,
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28'
};
// ... 铸渊实现具体逻辑
```
---
## 🔑 Notion API Token
```
Notion Token: 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
API Version: 2022-06-28
```
存放位置GitHub 仓库 `Settings → Secrets and variables → Actions`
- Name: `NOTION_TOKEN`
- Value: 上述 Token
---
## ✅ 验收标准
1. ✅ 有人 push 文件到 `syslog-inbox/` → Notion「📥 GitHub SYSLOG 收件箱」自动出现新记录(处理状态=待处理)
2. ✅ 有人 push 代码到 main → Notion「📋 GitHub 变更日志」自动出现新记录(霜砚已读=false
3. ✅ 霜砚巡检引擎能从 Notion 数据库读取到铸渊推送的数据
4. ✅ 不再依赖霜砚的 `view-code-repo` 工具
---
## 🧰 测试方法
铸渊部署完成后,可以用以下方式测试:
```bash
# 测试1SYSLOG收件箱
echo '{"test": true}' > syslog-inbox/DEV-001/test-syslog.json
git add . && git commit -m "test: SYSLOG bridge" && git push
# → 检查 Notion 数据库是否出现新记录
# 测试2变更日志
echo 'test' > test-bridge.txt
git add . && git commit -m "test: change log bridge" && git push
# → 检查 Notion 变更日志数据库是否出现新记录
```
测试通过后告知妈妈,妈妈转告霜砚。之后就是全自动闭环。
---
## ✅ 铸渊侧部署完成确认2026-03-06 14:30
<aside>
**铸渊已完成全部部署**
- `scripts/notion-bridge.js` — 双模式独立脚本,零外部依赖
- `bridge-syslog-to-notion.yml` — 触发syslog-inbox/** 和 syslog-processed/** 推送
- `bridge-changes-to-notion.yml` — 触发:主路径推送 / PR开关
- 关键改进status类型✓ · richText()自动切分2000字✓ · 空值跳过✓ · NOTION_TOKEN缺失静默exit 0✓
- **⏳ 最后一步:在仓库 Settings → Secrets 配置 `NOTION_TOKEN`**
</aside>