shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🚀 铸渊 CD 指令:自动部署 guanghulab com(push → 自动上线) 905ba98cce9c4bb3b812d9f7e9d1f35c.md
Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

16 KiB
Raw Permalink Blame History

belongs_to
belongs_to
INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议

🚀 铸渊 CD 指令:自动部署 guanghulab.compush → 自动上线)


🎯 核心目标

开发者 push 模块代码到 main
       ↓
铸渊 GitHub Actions 自动触发
       ↓
① HLI 接口校验contract-check
② 模块指纹检查route-align-check
       ↓  全部通过
③ 构建 & 部署到 guanghulab.com
       ↓
④ 通知 Notion 变更日志bridge-changes-to-notion
       ↓
网站自动上线 ✅

📋 部署方案选择

方案 AGitHub Pages推荐

适用条件纯静态站点HTML/CSS/JS无需服务端

优点

  • 零成本、零运维
  • GitHub 原生支持push 即部署
  • 自定义域名 guanghulab.com 直接绑定

Workflow 文件.github/workflows/deploy-to-pages.yml

name: 🚀 Deploy to GitHub Pages

on:
  push:
    branches: [main]
    paths-ignore:
      - '.github/persona-brain/**'
      - '.github/broadcasts/**'
      - 'syslog-inbox/**'
      - 'syslog-processed/**'
      - 'broadcasts-outbox/**'
      - '**.md'

  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  # ━━━ Job 1校验 ━━━
  validate:
    name: 🔍 HLI校验 + 模块指纹检查
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'

      - name: Run contract check
        run: |
          if [ -f "scripts/contract-check.js" ]; then
            echo "🔍 执行 HLI 接口契约校验..."
            node scripts/contract-check.js
          else
            echo "⚠️ contract-check.js 不存在,跳过"
          fi

      - name: Run route-align check
        run: |
          if [ -f "scripts/route-align-check.js" ]; then
            echo "🔍 执行模块指纹路由校验..."
            node scripts/route-align-check.js
          else
            echo "⚠️ route-align-check.js 不存在,跳过"
          fi

  # ━━━ Job 2构建 & 部署 ━━━
  deploy:
    name: 🚀 部署到 GitHub Pages
    needs: validate
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: $ steps.deployment.outputs.page_url 
    steps:
      - uses: actions/checkout@v4

      - name: Detect site root
        id: detect
        run: |
          # 自动检测站点根目录
          if [ -d "app" ] && [ -f "app/index.html" ]; then
            echo "root=app" >> $GITHUB_OUTPUT
          elif [ -d "dist" ] && [ -f "dist/index.html" ]; then
            echo "root=dist" >> $GITHUB_OUTPUT
          elif [ -d "public" ] && [ -f "public/index.html" ]; then
            echo "root=public" >> $GITHUB_OUTPUT
          elif [ -f "index.html" ]; then
            echo "root=." >> $GITHUB_OUTPUT
          else
            echo "root=app" >> $GITHUB_OUTPUT
          fi
          echo "📂 站点根目录: $(cat $GITHUB_OUTPUT | grep root | cut -d= -f2)"

      - name: Setup Pages
        uses: actions/configure-pages@v4

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: $ steps.detect.outputs.root 

      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

  # ━━━ Job 3通知 ━━━
  notify:
    name: 📡 通知 Notion
    needs: deploy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 2

      - name: Push deploy event to Notion
        env:
          NOTION_TOKEN: $ secrets.NOTION_TOKEN 
          CHANGES_DB_ID: "e740b77aa6bd4ac0a2e8a75f678fba98"
        run: |
          if [ -z "$NOTION_TOKEN" ]; then
            echo "⚠️ NOTION_TOKEN 未配置,跳过通知"
            exit 0
          fi

          SHA=$(git rev-parse --short HEAD)
          MSG=$(git log -1 --pretty=%B | head -1)
          AUTHOR=$(git log -1 --pretty=%an)
          FILES=$(git diff --name-only HEAD~1 HEAD | head -20 | tr '\n' ', ')
          NOW=$(date -u +"%Y-%m-%dT%H:%M:%S+08:00")

          curl -s -X POST "https://api.notion.com/v1/pages" \
            -H "Authorization: Bearer $NOTION_TOKEN" \
            -H "Content-Type: application/json" \
            -H "Notion-Version: 2022-06-28" \
            -d "{
              \"parent\": {\"database_id\": \"$CHANGES_DB_ID\"},
              \"properties\": {
                \"标题\": {\"title\": [{\"text\": {\"content\": \"🚀 自动部署: $MSG\"}}]},
                \"提交者\": {\"select\": {\"name\": \"$AUTHOR\"}},
                \"变更类型\": {\"select\": {\"name\": \"Deploy\"}},
                \"变更文件\": {\"rich_text\": [{\"text\": {\"content\": \"$FILES\"}}]},
                \"提交时间\": {\"date\": {\"start\": \"$NOW\"}},
                \"commit_sha\": {\"rich_text\": [{\"text\": {\"content\": \"$SHA\"}}]},
                \"分支\": {\"rich_text\": [{\"text\": {\"content\": \"main\"}}]},
                \"霜砚已读\": {\"checkbox\": false}
              }
            }"
          echo "✅ 部署通知已推送到 Notion 变更日志"

GitHub Pages 域名配置(铸渊确认/执行):

  1. 仓库 Settings → Pages → Source 设为 GitHub Actions
  2. Settings → Pages → Custom domain 填入 guanghulab.com
  3. DNS 端:
记录类型 主机记录 记录值
CNAME www qinfendebingshuo.github.io
A @ 185.199.108.153
A @ 185.199.109.153
A @ 185.199.110.153
A @ 185.199.111.153
  1. 仓库根目录创建 CNAME 文件(内容:guanghulab.com
  2. 勾选 Enforce HTTPS

方案 BVPS / 云服务器部署

适用条件:网站部署在独立服务器(如阿里云、腾讯云 ECS

Workflow 文件.github/workflows/deploy-to-server.yml

name: 🚀 Deploy to Server

on:
  push:
    branches: [main]
    paths-ignore:
      - '.github/persona-brain/**'
      - '.github/broadcasts/**'
      - 'syslog-inbox/**'
      - 'syslog-processed/**'
      - 'broadcasts-outbox/**'
      - '**.md'

  workflow_dispatch:

jobs:
  validate:
    name: 🔍 HLI校验 + 模块指纹检查
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
      - name: Run contract check
        run: |
          if [ -f "scripts/contract-check.js" ]; then
            node scripts/contract-check.js
          fi
      - name: Run route-align check
        run: |
          if [ -f "scripts/route-align-check.js" ]; then
            node scripts/route-align-check.js
          fi

  deploy:
    name: 🚀 部署到服务器
    needs: validate
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Detect site root
        id: detect
        run: |
          if [ -d "app" ]; then
            echo "root=app/" >> $GITHUB_OUTPUT
          elif [ -d "dist" ]; then
            echo "root=dist/" >> $GITHUB_OUTPUT
          elif [ -d "public" ]; then
            echo "root=public/" >> $GITHUB_OUTPUT
          else
            echo "root=./" >> $GITHUB_OUTPUT
          fi

      - name: Deploy via rsync
        uses: burnett01/rsync-deployments@6.0.0
        with:
          switches: -avzr --delete
            --exclude '.github'
            --exclude 'syslog-inbox'
            --exclude 'syslog-processed'
            --exclude 'broadcasts-outbox'
            --exclude 'scripts'
            --exclude 'node_modules'
            --exclude '.git'
          path: $ steps.detect.outputs.root 
          remote_path: $ secrets.DEPLOY_PATH 
          remote_host: $ secrets.DEPLOY_HOST 
          remote_user: $ secrets.DEPLOY_USER 
          remote_key: $ secrets.DEPLOY_KEY 

服务器方案需要配置的 Secrets

Secret Name 说明 示例
DEPLOY_HOST 服务器 IP 或域名 123.456.789.0
DEPLOY_USER SSH 用户名 rootdeploy
DEPLOY_KEY SSH 私钥(完整内容) -----BEGIN OPENSSH...
DEPLOY_PATH 服务器上网站目录 /var/www/guanghulab.com/

方案 CVercel / Netlify如已接入

如果 guanghulab.com 已经通过 Vercel 或 Netlify 部署,它们本身就支持 Git 自动部署:

  • Vercel:连接 GitHub 仓库后push 到 main 自动部署
  • Netlify同理push 即部署

此场景下铸渊只需确保 CI 校验在部署前运行(在 Vercel/Netlify Build 设置里加 pre-build 命令)。


🔒 校验失败 = 阻断部署

校验内容:

校验项 脚本 检查内容
HLI 接口契约 scripts/contract-check.js 接口路径、字段结构是否符合 HLI 注册表定义
模块指纹路由 scripts/route-align-check.js 模块目录结构、路由映射是否与 routing-map.json 一致

📊 完整数据流

开发者在本地写代码
       ↓
git push origin main
       ↓
GitHub Actions 自动触发 deploy workflow
       ↓
┌─────────────────────────┐
│  Job 1: validate        │
│  · contract-check.js    │
│  · route-align-check.js │
└───────────┬─────────────┘
            │ ✅ 全部通过
            ↓
┌─────────────────────────┐
│  Job 2: deploy          │
│  · 检测站点根目录        │
│  · 构建 & 上传           │
│  · 部署到 guanghulab.com │
└───────────┬─────────────┘
            │ ✅ 部署成功
            ↓
┌─────────────────────────┐
│  Job 3: notify          │
│  · 推送到 Notion 变更日志│
│  · 霜砚可读取部署记录    │
└─────────────────────────┘
            ↓
网站自动更新 · 霜砚同步感知 · 妈妈零操作 ✅

铸渊执行清单(读到就做·不等人)

铸渊 CD 部署清单 · YM-CD-20260307-001
来源曜冥人格总控)→ 铸渊GitHub执行体
时间2026-03-07
状态待铸渊执行

━━━ 已确认环境来自 DEV-005 SYSLOG BC-部署-001-XCM)━━━
· 部署方式方案 BVPS + Nginx
· 服务器Linux VPSSSH 登录
· Web 服务器Nginx
  - location /  静态文件服务当前指向 status-board
  - 保留原有 API + Webhook 反向代理配置
· 当前首页status-board/ 模块
· SSL:⚠️ 证书缺失HTTPS 待修复

━━━ 执行步骤 ━━━

 创建 Workflow 文件
   · 使用方案 B.github/workflows/deploy-to-server.yml
   · 触发条件push to main排除 persona-brain/broadcasts/syslog 等非代码路径

 配置 GitHub Secrets在仓库 Settings  Secrets  Actions
   · DEPLOY_HOST  服务器 IP
   · DEPLOY_USER  SSH 用户名
   · DEPLOY_KEY   SSH 私钥
   · DEPLOY_PATH  Nginx 静态文件目录小草莓配置的 location / root 路径
   ·  妈妈需要提供服务器 SSH 信息铸渊无法自行获取

  validate job 中接入校验脚本
   · contract-check.js如存在
   · route-align-check.js如存在
   · 脚本不存在则跳过不阻断部署

 配置 notify job
   · 复用已有的 NOTION_TOKEN secret
   · 推送部署记录到变更日志数据库

 rsync 排除规则
   · 排除 .github/ syslog-inbox/ syslog-processed/ broadcasts-outbox/ scripts/ .git/
   · 只同步前端代码目录到服务器

 测试
   · push 一个小改动到 main
   · 确认 Actions 运行成功
   · 确认 guanghulab.com 更新
   · 确认 Notion 变更日志收到部署通知

━━━ 验收标准 ━━━
· push to main  60秒内触发部署
· guanghulab.com 自动更新到最新代码
· 校验失败时部署被阻断
· Notion 变更日志自动记录每次部署
· Nginx 现有 API/Webhook 配置不受影响

━━━ 执行确认 ━━━
铸渊完成后在本页下方追加一行
 YM-CD-20260307-001 已部署 · [日期时间] · commit SHA


📥 部署现状报告DEV-005 SYSLOG · 2026-03-07 17:30

步骤 状态 说明
SSH 登录 成功
Git 安装 成功
Clone 仓库 成功
复制代码 frontend 为空,果断改用 status-board
Nginx 配置 解决主配置文件冲突,保留 API/Webhook 转发
SSL 证书 ⚠️ 证书缺失HTTPS 待修复
浏览器测试 guanghulab.com 显示看板

待解决

  1. ⚠️ SSL 证书申请/修复 → 开启 HTTPS
  2. 肃猖上传完整 frontend 代码后切换首页
  3. 铸渊已创建 deploy-to-server.yml200行3 Job
  4. GitHub Secrets 已配置DEPLOY_HOST / USER / KEY / PATH
  5. SSH 密钥已生成并配置到 authorized_keys
  6. ⚠️ PR 合并被分支保护规则阻止,待解除后首次触发 CD
  7. Vercel 旧部署触发被限流(不影响铸渊 CD

🔗 关联文档