auto-sync: vala_git_workspace_backup 2026-04-04_02:00

This commit is contained in:
ai_member_only 2026-04-04 02:00:03 +08:00
commit 76490bbc6a
4 changed files with 166 additions and 0 deletions

36
SKILL.md Normal file
View File

@ -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`

18
scripts/backup.sh Executable file
View File

@ -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/openclaw message send --channel feishu --target "user:4aagb443" --message "✅ 工作区自动备份成功已同步到公司Git仓库"
else
echo "❌ 备份失败:$(date)"
exit 1
fi

75
scripts/setup.sh Executable file
View File

@ -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 <<EOF
secrets.md
.secrets
*.env
*.pem
*.key
*.crt
.DS_Store
node_modules/
logs/
tmp/
temp/
*.log
EOF
# 配置Git用户信息
git config user.name "$GIT_USERNAME"
git config user.email "$GIT_EMAIL"
# 配置远程仓库地址动态拼接Token
FULL_REPO_URL=$(echo "$GIT_REPO_URL" | sed "s|https://|https://$GIT_USERNAME:$GIT_TOKEN@|")
git remote remove origin 2>/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"

37
skill.yml Normal file
View File

@ -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