#!/bin/bash # # Skill 发布脚本 # # 使用方式: # ./publish.sh # # 示例: # ./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 " 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 "发布成功!"