guanghulab/.github/workflows/infinity-evolution.yml
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

394 lines
16 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.

# ═══════════════════════════════════════════════
# 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
# 📜 Copyright: 国作登字-2026-A-00037559
# ═══════════════════════════════════════════════
# ♾️ 光湖语言世界 · 自主进化定时工作流
#
# 触发条件:
# - push到main: ∞版本文件变更时自动部署 (deploy-infinity)
# - 每月1号: 月度进化 (LLM分析 + 流量重置邮件)
# - 手动触发: 任意∞版本操作
#
# 注: 大部分定时任务由服务器上的PM2进程 (auto-evolution.js)
# 自动执行。此工作流作为补充/备份触发机制。
# ═══════════════════════════════════════════════
name: '♾️ 光湖∞ · 自主进化'
on:
push:
branches: [main]
paths:
- 'server/proxy/service/auto-evolution.js'
- 'server/proxy/service/email-hub.js'
- 'server/proxy/service/protocol-mirror.js'
- 'server/proxy/service/bandwidth-pool-agent.js'
- 'server/proxy/service/swarm-defense-agent.js'
- 'server/proxy/service/user-guardian-agent.js'
- 'server/proxy/service/subscription-server-v3.js'
- 'server/proxy/config/release-notes.json'
- 'server/proxy/ecosystem.brain-proxy-v3.config.js'
schedule:
# 每月1号 UTC 16:00 = CST 00:00 (月度进化)
- cron: '0 16 1 * *'
workflow_dispatch:
inputs:
action:
description: '操作类型'
required: true
type: choice
options:
- monthly-evolution
- deploy-infinity
- status
- add-user
- remove-user
- list-users
- send-subscription-v3
- send-monthly-reset
- send-update-notify
- send-update-notify-single
- send-traffic-warn
- send-bandwidth-auth
- send-bandwidth-auth-single
- send-threat-alert
- send-threat-cleared
- list-user-emails
default: 'status'
message:
description: '附加消息 (update-notify描述 / traffic-warn百分比 / threat-alert消息) · 描述支持分号分隔多条内容'
required: false
type: string
email:
description: '目标邮箱 (add-user/remove-user/send-subscription-v3/send-update-notify-single/send-bandwidth-auth-single时需要)'
required: false
type: string
quota_gb:
description: '月配额GB (add-user时可选默认500)'
required: false
type: string
default: '500'
permissions:
contents: read
concurrency:
group: infinity-evolution
cancel-in-progress: false
jobs:
# ═══ §1 ∞版本部署/管理 ═══
infinity-action:
name: '♾️ ${{ github.event_name == ''push'' && ''deploy-infinity (auto)'' || github.event.inputs.action || ''monthly-evolution'' }}'
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: '📥 检出代码'
uses: actions/checkout@v4
- name: '🔑 配置SSH'
run: |
mkdir -p ~/.ssh
echo "${{ secrets.ZY_BRAIN_KEY }}" > ~/.ssh/brain_key
chmod 600 ~/.ssh/brain_key
ssh-keyscan -H ${{ secrets.ZY_BRAIN_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || true
- name: '♾️ 执行∞操作'
env:
ACTION: ${{ github.event_name == 'push' && 'deploy-infinity' || github.event.inputs.action || 'monthly-evolution' }}
MESSAGE: ${{ github.event.inputs.message || '' }}
EMAIL: ${{ github.event.inputs.email || '' }}
QUOTA: ${{ github.event.inputs.quota_gb || '500' }}
ZY_SMTP_USER: ${{ secrets.ZY_SMTP_USER }}
ZY_SMTP_PASS: ${{ secrets.ZY_SMTP_PASS }}
run: |
SSH_CMD="ssh -i ~/.ssh/brain_key -o StrictHostKeyChecking=no ${{ secrets.ZY_BRAIN_USER }}@${{ secrets.ZY_BRAIN_HOST }}"
PROXY_DIR="/opt/zhuyuan-brain/proxy"
SCP_CMD="scp -i ~/.ssh/brain_key -o StrictHostKeyChecking=no"
REMOTE_HOST="${{ secrets.ZY_BRAIN_USER }}@${{ secrets.ZY_BRAIN_HOST }}"
# ── 同步邮件模块到服务器 ──
# 确保服务器上的email-hub.js和相关模块是最新版本
sync_email_files() {
echo "📦 同步邮件模块到服务器..."
$SSH_CMD "mkdir -p $PROXY_DIR/.deploy-tmp $PROXY_DIR/config"
$SCP_CMD \
server/proxy/service/email-hub.js \
server/proxy/service/bandwidth-pool-agent.js \
server/proxy/service/subscription-server-v3.js \
server/proxy/config/release-notes.json \
${REMOTE_HOST}:$PROXY_DIR/.deploy-tmp/
$SSH_CMD "
cp $PROXY_DIR/.deploy-tmp/email-hub.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/bandwidth-pool-agent.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/subscription-server-v3.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/release-notes.json $PROXY_DIR/config/
rm -rf $PROXY_DIR/.deploy-tmp
"
echo "✅ 邮件模块已同步"
}
echo "════════════════════════════════════════"
echo "♾️ 光湖∞ · 自主进化 · action=$ACTION"
echo "════════════════════════════════════════"
case "$ACTION" in
deploy-infinity)
echo "部署∞版本..."
# 先同步最新代码到服务器
$SSH_CMD "mkdir -p $PROXY_DIR/.deploy-tmp"
scp -i ~/.ssh/brain_key -o StrictHostKeyChecking=no \
server/proxy/service/auto-evolution.js \
server/proxy/service/email-hub.js \
server/proxy/service/protocol-mirror.js \
server/proxy/service/bandwidth-pool-agent.js \
server/proxy/service/swarm-defense-agent.js \
server/proxy/service/user-guardian-agent.js \
server/proxy/service/subscription-server-v3.js \
server/proxy/config/release-notes.json \
server/proxy/ecosystem.brain-proxy-v3.config.js \
${{ secrets.ZY_BRAIN_USER }}@${{ secrets.ZY_BRAIN_HOST }}:$PROXY_DIR/.deploy-tmp/
$SSH_CMD "
cp $PROXY_DIR/.deploy-tmp/auto-evolution.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/email-hub.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/protocol-mirror.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/bandwidth-pool-agent.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/swarm-defense-agent.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/user-guardian-agent.js $PROXY_DIR/service/
cp $PROXY_DIR/.deploy-tmp/subscription-server-v3.js $PROXY_DIR/service/
mkdir -p $PROXY_DIR/config
cp $PROXY_DIR/.deploy-tmp/release-notes.json $PROXY_DIR/config/
cp $PROXY_DIR/.deploy-tmp/ecosystem.brain-proxy-v3.config.js $PROXY_DIR/
rm -rf $PROXY_DIR/.deploy-tmp
mkdir -p $PROXY_DIR/data/evolution-reports
cd $PROXY_DIR && pm2 startOrRestart ecosystem.brain-proxy-v3.config.js --update-env && pm2 save
echo '✅ ∞版本已部署'
pm2 list
"
;;
monthly-evolution)
sync_email_files
echo "触发月度进化..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js monthly-reset 2>&1 || echo '⚠️ 月度邮件发送遇到问题'
echo '✅ 月度进化已触发'
"
;;
status)
echo "查询∞版本状态..."
$SSH_CMD "
cd $PROXY_DIR
echo '── PM2进程 ──'
pm2 list 2>/dev/null || echo '⚠️ PM2不可用'
echo ''
echo '── 进化状态 ──'
cat data/auto-evolution-status.json 2>/dev/null || echo '(未初始化)'
echo ''
echo '── 镜像状态 ──'
cat data/protocol-mirror-status.json 2>/dev/null || echo '(未初始化)'
echo ''
echo '── 流量池 ──'
cat data/pool-quota-status.json 2>/dev/null || echo '(未初始化)'
"
;;
add-user)
if [ -z "$EMAIL" ]; then
echo "❌ 请提供目标邮箱 (email字段)"
exit 1
fi
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
echo "❌ 邮箱格式不正确: $EMAIL"
exit 1
fi
echo " 新增用户: $EMAIL (配额: ${QUOTA}GB/月)"
$SSH_CMD "
cd $PROXY_DIR
node service/user-manager.js add '$EMAIL' '${QUOTA}'
"
echo ""
echo "════════════════════════════════════════"
echo "✅ 用户已添加"
echo "下一步: 运行 send-subscription-v3 发送V3订阅链接到 $EMAIL"
echo "════════════════════════════════════════"
;;
remove-user)
if [ -z "$EMAIL" ]; then
echo "❌ 请提供目标邮箱 (email字段)"
exit 1
fi
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
echo "❌ 邮箱格式不正确: $EMAIL"
exit 1
fi
echo " 移除用户: $EMAIL"
$SSH_CMD "
cd $PROXY_DIR
node service/user-manager.js remove '$EMAIL'
"
;;
list-users)
echo "📋 用户列表:"
$SSH_CMD "
cd $PROXY_DIR
node service/user-manager.js list
"
;;
send-subscription-v3)
if [ -z "$EMAIL" ]; then
echo "❌ 请提供目标邮箱 (email字段)"
echo "💡 可先使用 list-users 或 list-user-emails 查看用户"
exit 1
fi
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
echo "❌ 邮箱格式不正确: $EMAIL"
exit 1
fi
sync_email_files
echo "发送V3订阅链接 (含系统介绍+带宽共享邀请) 给: $EMAIL ..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js send-subscription-v3 '$EMAIL'
"
;;
send-monthly-reset)
sync_email_files
echo "发送月初重置邮件..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js monthly-reset
"
;;
send-update-notify)
sync_email_files
echo "一键发送更新通知 (全部用户)..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
# 有MESSAGE时传入描述否则省略让email-hub自动读取release-notes.json
node service/email-hub.js update-notify ${MESSAGE:+'$MESSAGE'}
"
;;
send-update-notify-single)
if [ -z "$EMAIL" ]; then
echo "❌ 请提供目标邮箱 (email字段)"
echo "💡 可先使用 list-user-emails 查看所有用户邮箱"
exit 1
fi
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
echo "❌ 邮箱格式不正确: $EMAIL"
exit 1
fi
sync_email_files
echo "单独发送更新通知给: $EMAIL ..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
# 有MESSAGE时传入描述否则省略让email-hub自动读取release-notes.json
node service/email-hub.js update-notify-single '$EMAIL' ${MESSAGE:+'$MESSAGE'}
"
;;
send-traffic-warn)
sync_email_files
echo "发送流量预警..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js traffic-warn '${MESSAGE:-70}'
"
;;
send-bandwidth-auth)
sync_email_files
echo "一键发送带宽验证码 (全部用户·自动提取邮箱·加密发送)..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js bandwidth-auth-all
"
;;
send-bandwidth-auth-single)
if [ -z "$EMAIL" ]; then
echo "❌ 请提供目标邮箱 (email字段)"
echo "💡 可先使用 list-user-emails 查看所有用户邮箱"
exit 1
fi
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
echo "❌ 邮箱格式不正确: $EMAIL"
exit 1
fi
sync_email_files
echo "单独发送带宽验证码给: $EMAIL ..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js bandwidth-auth '$EMAIL'
"
;;
list-user-emails)
sync_email_files
echo "查询所有用户邮箱..."
$SSH_CMD "
cd $PROXY_DIR
node service/email-hub.js list-emails
"
;;
send-threat-alert)
sync_email_files
echo "发送全体用户风险提示..."
if [ -z "$MESSAGE" ]; then
echo "❌ 请在message中输入风险描述"
exit 1
fi
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js threat-alert '$MESSAGE'
"
;;
send-threat-cleared)
sync_email_files
echo "发送全体用户安全恢复通知..."
$SSH_CMD "
cd $PROXY_DIR
export ZY_SMTP_USER='$ZY_SMTP_USER'
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
node service/email-hub.js threat-cleared
"
;;
*)
echo "❌ 未知操作: $ACTION"
exit 1
;;
esac