132 lines
4.9 KiB
YAML
132 lines
4.9 KiB
YAML
# ═══════════════════════════════════════════════
|
||
# 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
|
||
# 📜 Copyright: 国作登字-2026-A-00037559
|
||
# ═══════════════════════════════════════════════
|
||
#
|
||
# 开发者门户部署工作流
|
||
# Developer Portal Channel Deploy
|
||
#
|
||
# 触发条件: PR 合并到 main 且修改了 docs/dev-portal/channels/
|
||
# 作用: 更新门户 manifest.json,同步开发者动态到 Notion
|
||
#
|
||
name: 🌐 开发者门户 · 频道部署
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
paths:
|
||
- 'docs/dev-portal/channels/**'
|
||
|
||
permissions:
|
||
contents: write
|
||
|
||
jobs:
|
||
update-manifest:
|
||
name: 📋 更新门户清单
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 2
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '20'
|
||
|
||
- name: 🔍 检测频道变更
|
||
id: detect
|
||
run: |
|
||
# Find which channels were updated
|
||
CHANGED=$(git diff --name-only HEAD~1 HEAD -- docs/dev-portal/channels/ || true)
|
||
if [ -z "$CHANGED" ]; then
|
||
echo "skip=true" >> "$GITHUB_OUTPUT"
|
||
echo "无频道文件变更"
|
||
exit 0
|
||
fi
|
||
|
||
echo "skip=false" >> "$GITHUB_OUTPUT"
|
||
|
||
# Extract unique DEV-IDs
|
||
DEV_IDS=$(echo "$CHANGED" | grep -oP 'DEV-\d{3}' | sort -u | tr '\n' ',' | sed 's/,$//')
|
||
echo "dev_ids=$DEV_IDS" >> "$GITHUB_OUTPUT"
|
||
echo "变更频道: $DEV_IDS"
|
||
|
||
# Count files per channel
|
||
echo "$CHANGED" | while read f; do echo " · $f"; done
|
||
|
||
- name: 📋 更新 manifest.json
|
||
if: steps.detect.outputs.skip != 'true'
|
||
run: |
|
||
node -e "
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
const manifestPath = 'docs/dev-portal/manifest.json';
|
||
const configPath = '.github/persona-brain/gate-guard-config.json';
|
||
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
||
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
||
|
||
const devIds = '${{ steps.detect.outputs.dev_ids }}'.split(',').filter(Boolean);
|
||
const now = new Date().toISOString();
|
||
|
||
for (const devId of devIds) {
|
||
if (!manifest.channels[devId]) continue;
|
||
|
||
// Update channel info
|
||
const ch = manifest.channels[devId];
|
||
ch.status = 'active';
|
||
ch.last_deploy = now;
|
||
ch.deploy_count = (ch.deploy_count || 0) + 1;
|
||
|
||
// Scan channel directory for modules
|
||
const channelDir = path.join('docs/dev-portal/channels', devId);
|
||
if (fs.existsSync(channelDir)) {
|
||
const items = fs.readdirSync(channelDir).filter(f => f !== 'README.md' && f !== '.gitkeep');
|
||
ch.modules = items;
|
||
ch.last_deploy_summary = items.length + ' 个文件已部署';
|
||
}
|
||
|
||
// Add activity entry
|
||
const devConfig = config.developer_permissions && config.developer_permissions[devId];
|
||
manifest.recent_activity.unshift({
|
||
time: now,
|
||
dev_id: devId,
|
||
dev_name: devConfig ? devConfig.name : devId,
|
||
persona_id: devConfig ? devConfig.persona_id : null,
|
||
summary: '部署更新到 ' + devId + ' 频道'
|
||
});
|
||
}
|
||
|
||
// Keep only last 50 activity entries
|
||
manifest.recent_activity = manifest.recent_activity.slice(0, 50);
|
||
manifest.updated_at = now;
|
||
manifest.updated_by = 'dev-portal-deploy';
|
||
|
||
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
||
console.log('✅ manifest.json 已更新');
|
||
"
|
||
|
||
- name: 📡 同步开发者动态到 Notion
|
||
if: steps.detect.outputs.skip != 'true' && env.NOTION_API_KEY != ''
|
||
env:
|
||
NOTION_API_KEY: ${{ secrets.NOTION_API_KEY }}
|
||
DEV_PROFILE_DB_ID: ${{ secrets.DEV_PROFILE_DB_ID }}
|
||
run: |
|
||
node scripts/skyeye/dev-portal-notion-sync.js \
|
||
--dev-ids "${{ steps.detect.outputs.dev_ids }}" \
|
||
--action "channel_deploy" \
|
||
--timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
||
|| echo "⚠️ Notion同步失败(非致命)"
|
||
|
||
- name: 💾 提交 manifest 更新
|
||
if: steps.detect.outputs.skip != 'true'
|
||
run: |
|
||
git config user.name "github-actions[bot]"
|
||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||
git add docs/dev-portal/manifest.json
|
||
git diff --cached --quiet && echo "无变更" || git commit -m "📋 开发者门户: 更新频道清单 [${{ steps.detect.outputs.dev_ids }}]"
|
||
git push 2>&1 || echo "⚠️ manifest 推送失败(非致命)"
|