Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
16 KiB
16 KiB
belongs_to
| belongs_to | |
|---|---|
|
🚀 铸渊 CD 指令:自动部署 guanghulab.com(push → 自动上线)
🎯 核心目标
开发者 push 模块代码到 main
↓
铸渊 GitHub Actions 自动触发
↓
① HLI 接口校验(contract-check)
② 模块指纹检查(route-align-check)
↓ 全部通过
③ 构建 & 部署到 guanghulab.com
↓
④ 通知 Notion 变更日志(bridge-changes-to-notion)
↓
网站自动上线 ✅
📋 部署方案选择
方案 A:GitHub 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 域名配置(铸渊确认/执行):
- 仓库
Settings → Pages → Source设为 GitHub Actions Settings → Pages → Custom domain填入guanghulab.com- 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 |
- 仓库根目录创建
CNAME文件(内容:guanghulab.com) - 勾选 Enforce HTTPS
方案 B:VPS / 云服务器部署
适用条件:网站部署在独立服务器(如阿里云、腾讯云 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 用户名 | root 或 deploy |
DEPLOY_KEY |
SSH 私钥(完整内容) | -----BEGIN OPENSSH... |
DEPLOY_PATH |
服务器上网站目录 | /var/www/guanghulab.com/ |
方案 C:Vercel / 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)━━━
· 部署方式:方案 B(VPS + Nginx)
· 服务器:Linux VPS(SSH 登录)
· 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 显示看板✅ |
待解决:
- ⚠️ SSL 证书申请/修复 → 开启 HTTPS
- ⏳ 肃猖上传完整 frontend 代码后切换首页
- ✅ 铸渊已创建 deploy-to-server.yml(200行,3 Job)
- ✅ GitHub Secrets 已配置(DEPLOY_HOST / USER / KEY / PATH)
- ✅ SSH 密钥已生成并配置到 authorized_keys
- ⚠️ PR 合并被分支保护规则阻止,待解除后首次触发 CD
- ⏳ Vercel 旧部署触发被限流(不影响铸渊 CD)
🔗 关联文档
- 铸渊协作指令主页:⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议
- GitHub → Notion 数据桥:🔧 铸渊协作指令:GitHub → Notion 数据桥 v1.0(霜砚签发·2026-03-06)
- HLI 接口注册表:🔌 HLI接口注册表 · HoloLake Interface Registry
- 模块指纹注册表:🔍 模块指纹注册表 · Module Fingerprint Registry
- GitHub 自动化指令:⚙️ GitHub 自动化指令 · HoloLake CI/CD + Copilot Rules
- 仓库地址:https://github.com/qinfendebingshuo/guanghulab
- 线上网站:https://guanghulab.com/