--- belongs_to: - "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]" --- # 🔧 铸渊协作指令:GitHub → Notion 数据桥 v1.0(霜砚签发·2026-03-06) ## 🎯 核心思路 ``` 原来的设计(断了): 霜砚 → 直接读取 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 # 测试1:SYSLOG收件箱 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)