guanghulab/.forgejo/workflows/ci-and-deploy.yaml

125 lines
4.1 KiB
YAML
Raw Normal View History

# ════════════════════════════════════════════════════
# 光湖 · CI检查 + 合并后自动部署
# ────────────────────────────────────────────────────
# main分支: 冰朔合并PR后 → 自动部署到服务器
# dev分支: 铸渊自己push → 只跑检查不部署
# PR到main: 跑检查 → 冰朔看绿✅红❌再决定合不合
# ════════════════════════════════════════════════════
name: CI检查 + 自动部署
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; 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: 重启服务
run: |
echo "═══ 重启服务 ═══"
if command -v pm2 &>/dev/null; then
pm2 restart all 2>/dev/null || true
echo "✅ PM2 服务已重启"
fi
echo "═══ 重启完成 ═══"
- 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 [ $FAIL -eq 1 ]; then
echo "❌ 部署后关键服务异常"
exit 1
fi
echo "═══ 部署完成 ✅ $(date '+%Y-%m-%d %H:%M:%S') ═══"