guanghulab/.forgejo/workflows/ci-and-deploy.yaml
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

172 lines
5.8 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ════════════════════════════════════════════════════
# 光湖 · CI检查 + 合并后自动部署
# ────────────────────────────────────────────────────
# main分支: 冰朔合并PR后 → 自动部署到服务器
# dev分支: 铸渊自己push → 只跑检查不部署
# PR到main: 跑检查 → 冰朔看绿✅红❌再决定合不合
# ════════════════════════════════════════════════════
name: 🚀 构建与部署
on:
pull_request:
branches: [main]
push:
branches: [main, dev]
jobs:
# ── 所有情况都跑:基础检查 ──────────────────────
check:
runs-on: ubuntu
steps:
- name: 服务健康检查
run: |
echo "═══ 服务健康检查 ═══"
FAIL=0
if systemctl is-active --quiet nginx; then
echo "✅ Nginx 正常"
else
echo "❌ Nginx 宕机"
FAIL=1
fi
if curl -sf http://127.0.0.1:3001/ > /dev/null 2>&1; then
echo "✅ Forgejo 代码仓库 正常"
else
echo "❌ Forgejo 代码仓库 未响应"
FAIL=1
fi
if systemctl is-active --quiet gitea-runner; then
echo "✅ Runner 运行器 正常"
else
echo "⚠️ Runner 运行器 未运行"
fi
if [ $FAIL -eq 1 ]; then
echo "❌ 关键服务异常,请通知铸渊检查"
exit 1
fi
echo "═══ 检查通过 ✅ ═══"
- name: 代码检查
run: |
cd /data/guanghulab/repo
echo "仓库大小: $(du -sh .git | cut -f1)"
echo "最新提交: $(git log --oneline -1)"
echo "✅ 代码检查完成"
# ── 只有合并到main才跑自动部署 ────────────────
deploy:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: check
runs-on: ubuntu
steps:
- name: 同步最新代码
run: |
cd /data/guanghulab/repo
git fetch origin
git reset --hard origin/main
echo "✅ 代码已同步到最新"
- name: 安装依赖
run: |
echo "═══ 安装依赖 ═══"
# 逐个检查并安装
for pkg_dir in server/git-sync server/wake-gate server/secrets-vault server/mcp-server; do
if [ -f "/data/guanghulab/repo/$pkg_dir/package.json" ]; then
cd "/data/guanghulab/repo/$pkg_dir"
npm install --production 2>/dev/null || true
echo "✅ $pkg_dir 依赖已安装"
fi
done
- name: 部署 MCP Server
env:
ZY_REPO_TOKEN: ${{ secrets.ZY_REPO_TOKEN }}
run: |
echo "═══ 部署 MCP Server ═══"
MCP_DIR="/data/guanghulab/repo/server/mcp-server"
mkdir -p /data/guanghulab/mcp-server /data/guanghulab/.runtime/logs
# 注入 Gitea 令牌
if [ -n "$ZY_REPO_TOKEN" ]; then
sed -i "s/GITEA_TOKEN: ''/GITEA_TOKEN: '$ZY_REPO_TOKEN'/" "$MCP_DIR/ecosystem.config.js"
echo "✅ Gitea 令牌已注入"
fi
# 启动或重启 MCP Server
if pm2 describe guanghulab-mcp-server &>/dev/null; then
pm2 restart guanghulab-mcp-server
echo "✅ MCP Server 已重启"
else
cd "$MCP_DIR"
pm2 start ecosystem.config.js
echo "✅ MCP Server 已启动"
fi
pm2 save
- name: 重启服务
run: |
echo "═══ 重启服务 ═══"
if command -v pm2 &>/dev/null; then
pm2 restart all 2>/dev/null || true
echo "✅ PM2 服务已重启"
fi
echo "═══ 重启完成 ═══"
- name: 同步主页 HTML 到 nginx 服务路径
run: |
echo "═══ 同步主页 HTML ═══"
SRC="/data/guanghulab/repo/homepage/main/index.html"
DST="/var/www/guanghulab/index.html"
if [ ! -f "$SRC" ]; then
echo "⚠️ 主页源文件不存在: $SRC"
else
mkdir -p "$(dirname "$DST")"
cp "$SRC" "$DST"
chmod 644 "$DST"
echo "✅ 主页 HTML 已同步: $SRC → $DST"
echo " $(wc -c < $DST) bytes"
fi
- name: 部署验证
run: |
sleep 3
echo "═══ 部署验证 ═══"
FAIL=0
if curl -sf http://127.0.0.1:3001/ > /dev/null 2>&1; then
echo "✅ 代码仓库 正常"
else
echo "❌ 代码仓库 异常"
FAIL=1
fi
if curl -sf http://127.0.0.1:8081/api/health > /dev/null 2>&1; then
echo "✅ 唤醒门 正常"
else
echo "⚠️ 唤醒门 未响应"
fi
if curl -sf http://127.0.0.1:8082/health > /dev/null 2>&1; then
echo "✅ 代码同步服务 正常"
else
echo "⚠️ 代码同步服务 未响应"
fi
if curl -sf http://127.0.0.1:8083/health > /dev/null 2>&1; then
echo "✅ MCP Server 正常"
else
echo "⚠️ MCP Server 未响应"
fi
if [ $FAIL -eq 1 ]; then
echo "❌ 部署后关键服务异常"
exit 1
fi
echo "═══ 部署完成 ✅ $(date '+%Y-%m-%d %H:%M:%S') ═══"