75 lines
3.1 KiB
YAML
75 lines
3.1 KiB
YAML
name: 铸渊 · Sync Login Entry · Notion → 飞书文档A
|
||
|
||
# 链路1:登录入口同步
|
||
# Notion 霜砚登录入口页面 → 全量替换飞书文档A
|
||
#
|
||
# 依赖 Secrets:
|
||
# NOTION_TOKEN Notion API token
|
||
# NOTION_LOGIN_PAGE_ID Notion 登录入口页面 ID
|
||
# FEISHU_APP_ID 飞书应用 App ID
|
||
# FEISHU_APP_SECRET 飞书应用 App Secret
|
||
# FEISHU_DOC_A_ID 飞书文档A的 document_id
|
||
|
||
on:
|
||
repository_dispatch:
|
||
types: [sync-login-entry]
|
||
workflow_dispatch:
|
||
|
||
jobs:
|
||
sync-login-entry:
|
||
name: 📋 同步登录入口到飞书
|
||
runs-on: ubuntu-latest
|
||
permissions:
|
||
contents: read
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '20'
|
||
|
||
- name: 🔗 同步 Notion 登录入口 → 飞书文档A
|
||
env:
|
||
NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
|
||
NOTION_LOGIN_PAGE_ID: ${{ secrets.NOTION_LOGIN_PAGE_ID }}
|
||
FEISHU_APP_ID: ${{ secrets.FEISHU_APP_ID }}
|
||
FEISHU_APP_SECRET: ${{ secrets.FEISHU_APP_SECRET }}
|
||
FEISHU_DOC_A_ID: ${{ secrets.FEISHU_DOC_A_ID }}
|
||
run: node scripts/sync-login-entry.js
|
||
|
||
- name: 🔴 失败告警 → 飞书通知
|
||
if: failure()
|
||
env:
|
||
FEISHU_APP_ID: ${{ secrets.FEISHU_APP_ID }}
|
||
FEISHU_APP_SECRET: ${{ secrets.FEISHU_APP_SECRET }}
|
||
ALERT_CHAT_ID: ${{ secrets.FEISHU_ALERT_CHAT_ID }}
|
||
run: |
|
||
if [ -z "$ALERT_CHAT_ID" ]; then
|
||
echo "⚠️ 未配置 FEISHU_ALERT_CHAT_ID,跳过告警"
|
||
exit 0
|
||
fi
|
||
node -e "
|
||
const https = require('https');
|
||
function post(url, body) {
|
||
return new Promise((resolve, reject) => {
|
||
const payload = JSON.stringify(body);
|
||
const u = new URL(url);
|
||
const req = https.request({ hostname: u.hostname, port: 443, path: u.pathname, method: 'POST',
|
||
headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(payload) }
|
||
}, res => { let d=''; res.on('data', c => d+=c); res.on('end', () => resolve(d)); });
|
||
req.on('error', reject); req.write(payload); req.end();
|
||
});
|
||
}
|
||
(async () => {
|
||
const tokenRes = JSON.parse(await post('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal',
|
||
{ app_id: process.env.FEISHU_APP_ID, app_secret: process.env.FEISHU_APP_SECRET }));
|
||
const token = tokenRes.tenant_access_token;
|
||
const payload = JSON.stringify({ text: '🔴 GitHub Action 失败告警\n\n工作流: sync-login-entry\n时间: ' + new Date().toISOString() + '\n请检查 GitHub Actions 日志。' });
|
||
await post('https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id',
|
||
JSON.stringify({ receive_id: process.env.ALERT_CHAT_ID, msg_type: 'text', content: payload }));
|
||
})().catch(e => console.error(e.message));
|
||
"
|