diff --git a/scripts/notify-feishu.sh b/scripts/notify-feishu.sh new file mode 100755 index 00000000..384087da --- /dev/null +++ b/scripts/notify-feishu.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# Send skillhub-cli release notification to Feishu group via bot webhook +# Usage: FEISHU_WEBHOOK_URL=xxx ./scripts/notify-feishu.sh [prev_version] +set -euo pipefail + +WEBHOOK_URL="${FEISHU_WEBHOOK_URL:-}" +VERSION="${1:-}" +PREV_VERSION="${2:-}" + +if [ -z "$WEBHOOK_URL" ]; then + echo "Error: FEISHU_WEBHOOK_URL is not set" + echo "Usage: FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxx $0 [prev_version]" + exit 1 +fi + +if [ -z "$VERSION" ]; then + echo "Error: version is required" + echo "Usage: $0 [prev_version]" + exit 1 +fi + +# Generate changelog from git log +if [ -n "$PREV_VERSION" ]; then + RANGE="skillhub-cli/v${PREV_VERSION}..HEAD" +else + # If no prev version, use last 20 commits touching skillhub-cli/ + RANGE="HEAD~20..HEAD" +fi + +# Extract changelog lines, escape for JSON +CHANGELOG=$(git log "$RANGE" --oneline --no-merges -- skillhub-cli/ 2>/dev/null | head -20 | \ + sed 's/\\/\\\\/g; s/"/\\"/g; s/$/\\n/' | tr -d '\n' | sed 's/\\n$//') + +if [ -z "$CHANGELOG" ]; then + CHANGELOG="详见 npm 页面" +fi + +BODY=$(cat < 1.0.8 +# ./scripts/release-cli.sh minor # 1.0.7 -> 1.1.0 +# ./scripts/release-cli.sh patch 1.0.6 # with prev_version for changelog +set -euo pipefail + +BUMP="${1:-patch}" +PREV_VERSION="${2:-}" + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +CLI_DIR="$PROJECT_DIR/skillhub-cli" + +echo "=== skillhub-cli release ===" +echo "" + +# Step 1: Build +echo "[1/5] Building..." +cd "$CLI_DIR" +pnpm build +echo "Build OK" +echo "" + +# Step 2: Run tests +echo "[2/5] Running tests..." +if pnpm test; then + echo "Tests OK" +else + echo "Tests FAILED. Aborting release." + exit 1 +fi +echo "" + +# Step 3: Bump version +OLD_VERSION=$(node -p "require('./package.json').version") +npm version "$BUMP" --no-git-tag-version -m "chore(cli): release v%s" +NEW_VERSION=$(node -p "require('./package.json').version") +echo "[3/5] Version bumped: $OLD_VERSION -> $NEW_VERSION" +echo "" + +# Step 4: Publish +echo "[4/5] Publishing to npm..." +npm publish --access public +echo "Published motovis-skillhub@$NEW_VERSION" +echo "" + +# Step 5: Notify via Feishu +echo "[5/5] Sending Feishu notification..." +if [ -n "${FEISHU_WEBHOOK_URL:-}" ]; then + "$SCRIPT_DIR/notify-feishu.sh" "$NEW_VERSION" "$PREV_VERSION" +else + echo "FEISHU_WEBHOOK_URL not set, skipping notification" + echo "To send manually: FEISHU_WEBHOOK_URL=xxx $SCRIPT_DIR/notify-feishu.sh $NEW_VERSION $PREV_VERSION" +fi +echo "" + +echo "=== Release complete: v$NEW_VERSION ===" diff --git a/skillhub-cli/.npmignore b/skillhub-cli/.npmignore index 0217fc47..c59f4093 100644 --- a/skillhub-cli/.npmignore +++ b/skillhub-cli/.npmignore @@ -1,7 +1,7 @@ tmp/ -还未发布 tests/ vitest.config.ts unbuild.config.ts tsconfig.json *.test.ts +src/