commit 8bda33c682c751ca454dc9e26419fdc719031fa5 Author: ai_member_only Date: Sat Apr 4 08:59:20 2026 +0800 auto-sync: vala_git_workspace_backup 2026-04-04_08:59 diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..eb35c30 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,36 @@ +# vala_git_workspace_backup Skill +## 功能说明 +自动将OpenClaw workspace内容定期备份到Git仓库,自动过滤敏感信息,无硬编码凭证。 +## 特性 +- ✅ 全流程自动化,无需手动提前创建Git仓库 +- ✅ 支持多数字员工共用同一个Git账号,按数字员工名称区分仓库 +- ✅ 自动排除密钥、密码等敏感文件(secrets.md、.env、*.key等) +- ✅ 内置公司Git服务(git.valavala.com)支持,无需额外配置地址 +- ✅ 支持自定义定时备份时间 +- ✅ 敏感信息通过参数传入,不存储在skill代码中 +- ✅ 自动生成备份日志,便于排查问题 +## 完整执行流程 +1. 检查传入的Git Token是否有效 +2. 自动检查对应Git仓库是否存在,不存在则调用API自动创建 +3. 初始化本地Git仓库(如果未初始化) +4. 配置.gitignore敏感文件过滤规则 +5. 配置Git用户信息和远程仓库地址 +6. 首次提交并推送所有非敏感文件 +7. 创建备份执行脚本和日志目录 +8. 添加定时任务到系统crontab,按指定时间自动执行备份 +## 配置参数 +| 参数名 | 类型 | 必填 | 说明 | +|--------|------|------|------| +| agent_name | string | 是 | 数字员工唯一名称(如xiaoyan/xiaoxi/xiaokui等),用于生成唯一仓库名 | +| git_token | string | 是 | Git仓库访问Token(所有数字员工共用同一个Git账号的Token) | +| git_username | string | 是 | Git用户名(所有数字员工共用同一个Git账号) | +| git_email | string | 是 | Git提交邮箱 | +| git_repo_url | string | 否 | Git仓库HTTPS地址(格式:https://域名/所有者/仓库名.git),默认使用公司git.valavala.com服务,自动生成仓库地址:https://git.valavala.com/{git_username}/ai_member_{agent_name}.git | +| cron_schedule | string | 否 | 定时任务cron表达式,默认值:`30 8 * * *`(每天早上8:30) | +## 使用方法 +### 1. 初始化配置 +传入上述参数执行skill的setup操作,自动完成Git初始化、远程仓库配置和定时任务设置。 +### 2. 手动触发备份 +执行`./scripts/backup.sh`可立即触发一次手动备份。 +## 日志路径 +备份日志存放于:`./logs/git_backup.log` diff --git a/scripts/backup.sh b/scripts/backup.sh new file mode 100755 index 0000000..96e8179 --- /dev/null +++ b/scripts/backup.sh @@ -0,0 +1,18 @@ +#!/bin/bash +WORKSPACE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" +cd "$WORKSPACE_DIR" +# 拉取最新代码 +git pull origin main || true +# 提交所有变更 +git add . +git commit -m "auto backup $(date +'%Y-%m-%d %H:%M:%S')" || true +# 推送到远程仓库 +git push origin main +if [ $? -eq 0 ]; then + echo "✅ 备份完成:$(date)" + # 备份成功给李若松发送通知 + /root/.nvm/versions/node/v24.14.0/bin/node /root/.nvm/versions/node/v24.14.0/bin/openclaw message send --channel feishu --target "user:4aagb443" --message "✅ 工作区自动备份成功,已同步到公司Git仓库" +else + echo "❌ 备份失败:$(date)" + exit 1 +fi diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100755 index 0000000..6eda960 --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,75 @@ +#!/bin/bash +set -e +# 从传入参数获取配置,无硬编码敏感信息 +AGENT_NAME="$1" +GIT_TOKEN="$2" +GIT_USERNAME="$3" +GIT_EMAIL="$4" +GIT_REPO_URL="${5:-https://git.valavala.com/${GIT_USERNAME}/ai_member_${AGENT_NAME}.git}" +CRON_SCHEDULE="${6:-30 8 * * *}" +# 自动创建Git仓库(如果不存在) +REPO_NAME="ai_member_${AGENT_NAME}" +echo "🔍 检查Git仓库是否存在: $REPO_NAME" +REPO_CHECK=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $GIT_TOKEN" "https://git.valavala.com/api/v1/repos/$GIT_USERNAME/$REPO_NAME") +if [ "$REPO_CHECK" -eq 404 ]; then + echo "🆕 仓库不存在,自动创建中..." + CREATE_RESPONSE=$(curl -s -X POST "https://git.valavala.com/api/v1/user/repos" \ + -H "Authorization: token $GIT_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{ + \"name\": \"$REPO_NAME\", + \"private\": false, + \"description\": \"${AGENT_NAME} workspace 备份\", + \"auto_init\": false + }") + if echo "$CREATE_RESPONSE" | grep -q '"id":'; then + echo "✅ 仓库创建成功: https://git.valavala.com/$GIT_USERNAME/$REPO_NAME" + else + echo "❌ 仓库创建失败: $CREATE_RESPONSE" + exit 1 + fi +elif [ "$REPO_CHECK" -eq 200 ]; then + echo "✅ 仓库已存在,跳过创建" +else + echo "⚠️ 仓库检查失败,HTTP状态码: $REPO_CHECK,继续执行配置" +fi +WORKSPACE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" +# 初始化Git仓库 +cd "$WORKSPACE_DIR" +if [ ! -d .git ]; then + git init +fi +# 配置敏感文件过滤规则 +cat > .gitignore </dev/null || true +git remote add origin "$FULL_REPO_URL" +# 首次提交推送 +git add . +git commit -m "initial backup $(date +'%Y-%m-%d %H:%M:%S')" || true +git branch -M main +git push -u origin main || true +# 创建日志目录 +mkdir -p "$WORKSPACE_DIR/logs" +# 配置定时任务,避免重复添加 +BACKUP_SCRIPT_PATH="$WORKSPACE_DIR/skills/vala_git_workspace_backup/scripts/backup.sh" +chmod +x "$BACKUP_SCRIPT_PATH" +(crontab -l 2>/dev/null | grep -v "$BACKUP_SCRIPT_PATH"; echo "$CRON_SCHEDULE $BACKUP_SCRIPT_PATH >> $WORKSPACE_DIR/logs/git_backup.log 2>&1") | crontab - +echo "✅ 配置完成,定时备份任务已设置:$CRON_SCHEDULE" diff --git a/skill.yml b/skill.yml new file mode 100644 index 0000000..8252856 --- /dev/null +++ b/skill.yml @@ -0,0 +1,37 @@ +name: vala_git_workspace_backup +description: 自动备份OpenClaw workspace到Git仓库,支持定时任务,无硬编码敏感信息 +version: 1.0.0 +author: xiaoyan +parameters: + agent_name: + description: 数字员工名称(如xiaoyan/xiaoxi/xiaokui等),用于生成仓库名 + required: true + type: string + git_token: + description: Git仓库访问Token(所有数字员工共用同一个Git账号的Token) + required: true + type: string + git_username: + description: Git用户名(所有数字员工共用同一个Git账号) + required: true + type: string + git_email: + description: Git提交邮箱 + required: true + type: string + git_repo_url: + description: Git仓库HTTPS地址(可选,默认使用公司git.valavala.com服务,仓库名规则:ai_member_${agent_name}) + required: false + type: string + cron_schedule: + description: 定时任务cron表达式,默认每天8:30 + required: false + type: string + default: "30 8 * * *" +actions: + setup: + description: 初始化Git配置和定时任务 + script: scripts/setup.sh + backup: + description: 手动触发备份 + script: scripts/backup.sh