1
0
Files
Skill/publish.sh
2026-03-18 22:28:57 +08:00

135 lines
2.6 KiB
Bash

#!/bin/bash
#
# Skill 发布脚本
#
# 使用方式:
# ./publish.sh <skill-name>
#
# 示例:
# ./publish.sh lyxy-kb
# ./publish.sh lyxy-reader-office
#
set -e
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# 配置
TARGET_REPO_URL="https://github.com/lanyuanxiaoyao/skills.git"
TEMP_DIR_BASE="${TMPDIR:-/tmp}/lyxy-skill-publish"
# 颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# 打印信息
info() {
echo -e "${GREEN}>>>${NC} $1"
}
error() {
echo -e "${RED}错误:${NC} $1"
}
# 显示使用说明
show_usage() {
echo "使用方式:"
echo " $0 <skill-name>"
echo ""
echo "可用的 skills:"
for dir in skills/*/; do
if [ -d "$dir" ]; then
name="$(basename "$dir")"
echo " - $name"
fi
done
echo ""
echo "示例:"
echo " $0 lyxy-kb"
echo " $0 lyxy-reader-office"
exit 1
}
# 检查参数
if [ $# -eq 0 ]; then
error "缺少 skill 名称参数"
show_usage
fi
SKILL_NAME="$1"
SKILL_DIR="$SCRIPT_DIR/skills/$SKILL_NAME"
TARGET_PATH="skills/$SKILL_NAME"
# 检查 skill 目录是否存在
if [ ! -d "$SKILL_DIR" ]; then
error "Skill 目录不存在: $SKILL_DIR"
echo ""
echo "可用的 skills:"
for dir in skills/*/; do
if [ -d "$dir" ]; then
name="$(basename "$dir")"
echo " - $name"
fi
done
exit 1
fi
info "发布 Skill: $SKILL_NAME"
info "目标仓库: $TARGET_REPO_URL"
info "目标路径: $TARGET_PATH"
echo ""
# 创建临时目录
TIMESTAMP=$(date +%s)
TEMP_DIR="$TEMP_DIR_BASE-$TIMESTAMP"
mkdir -p "$TEMP_DIR"
# 清理函数
cleanup() {
if [ -d "$TEMP_DIR" ]; then
rm -rf "$TEMP_DIR"
fi
}
trap cleanup EXIT
# Clone 仓库
info "[1/4] Clone 仓库..."
REPO_DIR="$TEMP_DIR/skills-repo"
git clone --depth 1 "$TARGET_REPO_URL" "$REPO_DIR"
# 清空目标目录
info "[2/4] 清空目标目录..."
TARGET_DIR="$REPO_DIR/$TARGET_PATH"
if [ -d "$TARGET_DIR" ]; then
rm -rf "$TARGET_DIR"
fi
mkdir -p "$TARGET_DIR"
# 复制内容
info "[3/4] 复制 Skill 文件..."
# 复制除了 __pycache__ 之外的所有内容
for item in "$SKILL_DIR"/*; do
basename_item="$(basename "$item")"
# 跳过 __pycache__
if [ "$basename_item" = "__pycache__" ]; then
continue
fi
if [ -d "$item" ]; then
cp -r "$item" "$TARGET_DIR/"
else
cp "$item" "$TARGET_DIR/"
fi
done
# 提交并推送
info "[4/4] 提交并推送到 GitHub..."
cd "$REPO_DIR"
git add .
git commit -m "publish: $SKILL_NAME"
git push
info "发布成功!"