Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
217 lines
5.9 KiB
Markdown
217 lines
5.9 KiB
Markdown
---
|
||
belongs_to:
|
||
- "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]"
|
||
---
|
||
# 🧪 铸渊指令|Notion数据桥连通性验证(2026-03-09·霜砚签发)
|
||
|
||
<aside>
|
||
🚨
|
||
|
||
**紧急验证指令 · P0 · 读到就做**
|
||
|
||
来源:霜砚(Notion执行体)→ 铸渊(GitHub执行体)
|
||
|
||
签发时间:2026-03-09 13:00 北京时间
|
||
|
||
背景:妈妈已在 GitHub Secrets 配置了 `NOTION_TOKEN`,铸渊巡检也已提醒数据桥 workflow 未生效。现在需要铸渊自行验证连通性。
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 指令目标
|
||
|
||
验证 GitHub Actions 能否通过已配置的 `NOTION_TOKEN` 成功调用 Notion API,确认数据桥双向通路已打通。
|
||
|
||
---
|
||
|
||
## 验证步骤(铸渊自行执行·不等人)
|
||
|
||
### Step 1 · Secrets 可读性验证
|
||
|
||
在任意 workflow 中确认 `NOTION_TOKEN` secret 存在且非空:
|
||
|
||
```yaml
|
||
- name: Check NOTION_TOKEN exists
|
||
run: |
|
||
if [ -z "$NOTION_TOKEN" ]; then
|
||
echo "❌ NOTION_TOKEN is empty or not set"
|
||
exit 1
|
||
else
|
||
echo "✅ NOTION_TOKEN is set (length: ${#NOTION_TOKEN})"
|
||
fi
|
||
env:
|
||
NOTION_TOKEN: $ secrets.NOTION_TOKEN
|
||
```
|
||
|
||
### Step 2 · Notion API 基础连通测试
|
||
|
||
调用 Notion API 的 `/v1/users/me` 端点,验证 Token 有效:
|
||
|
||
```yaml
|
||
- name: Test Notion API connectivity
|
||
run: |
|
||
RESPONSE=$(curl -s -w "\n%{http_code}" \
|
||
-H "Authorization: Bearer $NOTION_TOKEN" \
|
||
-H "Notion-Version: 2022-06-28" \
|
||
https://api.notion.com/v1/users/me)
|
||
|
||
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
|
||
BODY=$(echo "$RESPONSE" | head -n -1)
|
||
|
||
echo "HTTP Status: $HTTP_CODE"
|
||
echo "Response: $BODY"
|
||
|
||
if [ "$HTTP_CODE" = "200" ]; then
|
||
echo "✅ Notion API 连通成功!Token 有效。"
|
||
else
|
||
echo "❌ Notion API 连通失败。HTTP $HTTP_CODE"
|
||
echo "可能原因:Token无效 / Token未关联Integration / 网络问题"
|
||
exit 1
|
||
fi
|
||
env:
|
||
NOTION_TOKEN: $ secrets.NOTION_TOKEN
|
||
```
|
||
|
||
### Step 3 · 目标数据库写入测试
|
||
|
||
向 **📥 GitHub SYSLOG 收件箱** 数据库尝试查询,验证 Integration 有权限访问:
|
||
|
||
```yaml
|
||
- name: Test SYSLOG Inbox DB access
|
||
run: |
|
||
# SYSLOG收件箱数据库ID
|
||
DB_ID="330ab17507d542c9bbb96d0749b41197"
|
||
|
||
RESPONSE=$(curl -s -w "\n%{http_code}" \
|
||
-X POST \
|
||
-H "Authorization: Bearer $NOTION_TOKEN" \
|
||
-H "Notion-Version: 2022-06-28" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"page_size": 1}' \
|
||
https://api.notion.com/v1/databases/$DB_ID/query)
|
||
|
||
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
|
||
BODY=$(echo "$RESPONSE" | head -n -1)
|
||
|
||
echo "HTTP Status: $HTTP_CODE"
|
||
|
||
if [ "$HTTP_CODE" = "200" ]; then
|
||
echo "✅ SYSLOG收件箱数据库 读取权限正常"
|
||
else
|
||
echo "❌ SYSLOG收件箱数据库 访问失败。HTTP $HTTP_CODE"
|
||
echo "可能原因:Integration未连接到该数据库 → 妈妈需在数据库 ··· → 连接 → 添加铸渊信号桥"
|
||
exit 1
|
||
fi
|
||
env:
|
||
NOTION_TOKEN: $ secrets.NOTION_TOKEN
|
||
```
|
||
|
||
### Step 4 · 变更日志数据库访问测试
|
||
|
||
```yaml
|
||
- name: Test Change Log DB access
|
||
run: |
|
||
# GitHub变更日志数据库ID
|
||
DB_ID="e740b77aa6bd4ac0a2e8a75f678fba98"
|
||
|
||
RESPONSE=$(curl -s -w "\n%{http_code}" \
|
||
-X POST \
|
||
-H "Authorization: Bearer $NOTION_TOKEN" \
|
||
-H "Notion-Version: 2022-06-28" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"page_size": 1}' \
|
||
https://api.notion.com/v1/databases/$DB_ID/query)
|
||
|
||
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
|
||
|
||
if [ "$HTTP_CODE" = "200" ]; then
|
||
echo "✅ GitHub变更日志数据库 读取权限正常"
|
||
else
|
||
echo "❌ GitHub变更日志数据库 访问失败。HTTP $HTTP_CODE"
|
||
exit 1
|
||
fi
|
||
env:
|
||
NOTION_TOKEN: $ secrets.NOTION_TOKEN
|
||
```
|
||
|
||
### Step 5 · 巡检日志数据库写入测试
|
||
|
||
```yaml
|
||
- name: Test Patrol Log DB access
|
||
run: |
|
||
# 霜砚维护日志数据库ID(妈妈已连接铸渊信号桥)
|
||
DB_ID="这里铸渊从routing-map.json的infra.notion_bridge中读取"
|
||
|
||
echo "✅ 巡检日志数据库ID从routing-map.json获取"
|
||
echo "如routing-map.json中未包含此ID,铸渊跳过此步,在报告中标注"
|
||
env:
|
||
NOTION_TOKEN: $ secrets.NOTION_TOKEN
|
||
```
|
||
|
||
---
|
||
|
||
## 推荐执行方式
|
||
|
||
铸渊可以选择以下任一方式执行:
|
||
|
||
**方式A(推荐)**:创建一个专用验证 workflow
|
||
|
||
```yaml
|
||
# .github/workflows/test-notion-bridge.yml
|
||
name: "🧪 Notion Bridge Connectivity Test"
|
||
on:
|
||
workflow_dispatch: # 手动触发
|
||
push:
|
||
paths:
|
||
- '.github/workflows/test-notion-bridge.yml'
|
||
|
||
jobs:
|
||
test-notion:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
# 把上面 Step 1-5 的所有步骤放这里
|
||
```
|
||
|
||
**方式B**:在现有的 `zhuyuan-daily-selfcheck.yml` 中新增一个 Notion 连通性检查 step
|
||
|
||
---
|
||
|
||
## 验收标准
|
||
|
||
| **检查项** | **期望结果** | NOTION_TOKEN 存在 | ✅ 非空 |
|
||
| --- | --- | --- | --- |
|
||
| /v1/users/me 返回 200 | ✅ Token 有效 | SYSLOG收件箱可查询 | ✅ HTTP 200 |
|
||
| 变更日志可查询 | ✅ HTTP 200 | 巡检日志可查询 | ✅ HTTP 200(妈妈已连接Integration) |
|
||
|
||
---
|
||
|
||
## 执行完成后
|
||
|
||
铸渊在本次验证 workflow 的日志中输出完整报告,格式:
|
||
|
||
```
|
||
━━━ Notion数据桥连通性验证报告 ━━━
|
||
验证时间:2026-03-09 HH:mm UTC
|
||
|
||
① NOTION_TOKEN:✅/❌
|
||
② API基础连通:✅/❌(HTTP xxx)
|
||
③ SYSLOG收件箱:✅/❌(HTTP xxx)
|
||
④ 变更日志库:✅/❌(HTTP xxx)
|
||
⑤ 巡检日志库:✅/❌(HTTP xxx)
|
||
|
||
总结:X/5 通过
|
||
数据桥状态:已打通 / 部分打通 / 未打通
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
```
|
||
|
||
如果全部通过 → 铸渊在 commit message 中标注 `[GL-BRIDGE] Notion连通性验证全通 ✅`
|
||
|
||
如果部分失败 → 铸渊自动在工单簿创建工单,标注哪个环节失败 + 建议修复方案
|
||
|
||
<aside>
|
||
⚒️
|
||
|
||
**铸渊读到这条指令 = 立即执行验证 = 不等人 = 结果自动输出到 Actions 日志**
|
||
|
||
</aside> |