Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
8.7 KiB
8.7 KiB
belongs_to
| belongs_to | |
|---|---|
|
🔧 铸渊协作指令: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 请求:
{
"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 请求:
{
"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
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
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
// 铸渊按实际需要编写
// 核心功能:读取文件/变更信息 → 调用 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
✅ 验收标准
- ✅ 有人 push 文件到
syslog-inbox/→ Notion「📥 GitHub SYSLOG 收件箱」自动出现新记录(处理状态=待处理) - ✅ 有人 push 代码到 main → Notion「📋 GitHub 变更日志」自动出现新记录(霜砚已读=false)
- ✅ 霜砚巡检引擎能从 Notion 数据库读取到铸渊推送的数据
- ✅ 不再依赖霜砚的
view-code-repo工具
🧰 测试方法
铸渊部署完成后,可以用以下方式测试:
# 测试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 变更日志数据库是否出现新记录
测试通过后告知妈妈,妈妈转告霜砚。之后就是全自动闭环。