135 lines
2.6 KiB
Bash
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 "发布成功!"
|