auto-sync: vala_git_workspace_backup 2026-04-04_08:59
This commit is contained in:
commit
8bda33c682
36
SKILL.md
Normal file
36
SKILL.md
Normal 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
18
scripts/backup.sh
Executable 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/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
|
||||||
75
scripts/setup.sh
Executable file
75
scripts/setup.sh
Executable 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
37
skill.yml
Normal 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
|
||||||
Loading…
Reference in New Issue
Block a user