Initial commit with translated description

This commit is contained in:
2026-03-29 10:19:19 +08:00
commit 5aa1f324c6
81 changed files with 27526 additions and 0 deletions

157
scripts/release.sh Normal file
View File

@@ -0,0 +1,157 @@
#!/usr/bin/env bash
#
# release.sh - Create a versioned release with git tag and ClawHub publish
#
# Usage:
# ./scripts/release.sh <version> # Create tag + publish
# ./scripts/release.sh <version> --tag-only # Create tag only
# ./scripts/release.sh --current # Show current version
#
# Examples:
# ./scripts/release.sh 0.4.0
# ./scripts/release.sh 1.0.0-beta.1
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$REPO_DIR"
# Get current version from latest tag
get_current_version() {
git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.0.0"
}
# Show help
show_help() {
echo "Usage: release.sh <version> [--tag-only]"
echo " release.sh --current"
echo ""
echo "Options:"
echo " <version> Semver version (e.g., 0.4.0, 1.0.0-beta.1)"
echo " --tag-only Create git tag without ClawHub publish"
echo " --current Show current version from git tags"
echo " -h, --help Show this help"
}
# Parse args
if [[ $# -eq 0 ]]; then
show_help
exit 1
fi
TAG_ONLY=false
VERSION=""
while [[ $# -gt 0 ]]; do
case "$1" in
--current)
echo "Current version: $(get_current_version)"
exit 0
;;
--tag-only)
TAG_ONLY=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
VERSION="$1"
shift
;;
esac
done
if [[ -z "$VERSION" ]]; then
echo "❌ Version required"
show_help
exit 1
fi
# Validate semver (basic check)
if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
echo "❌ Invalid semver: $VERSION"
echo " Expected format: X.Y.Z or X.Y.Z-prerelease"
exit 1
fi
TAG="v$VERSION"
CURRENT=$(get_current_version)
echo "📦 Release: $CURRENT$VERSION"
echo ""
# Check for uncommitted changes
if ! git diff --quiet || ! git diff --cached --quiet; then
echo "❌ Uncommitted changes detected. Commit or stash first."
exit 1
fi
# Check if tag already exists
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "❌ Tag $TAG already exists"
exit 1
fi
# Update package.json version
if [[ -f package.json ]]; then
# Use npm version without git tag (we do our own tagging)
npm version "$VERSION" --no-git-tag-version
fi
# Update SKILL.md version if it exists
if [[ -f SKILL.md ]]; then
sed -i '' "s/\*\*Version\*\* | \`[^\"]*\`/\*\*Version\*\* | \`$VERSION\`/" SKILL.md 2>/dev/null || \
sed -i "s/\*\*Version\*\* | \`[^\"]*\`/\*\*Version\*\* | \`$VERSION\`/" SKILL.md
fi
# Commit version bump
git add package.json package-lock.json SKILL.md 2>/dev/null || true
git commit -m "chore: release v$VERSION" --allow-empty
# Create annotated tag
echo "🏷️ Creating tag $TAG..."
git tag -a "$TAG" -m "Release $VERSION"
# Push commit and tag
echo "⬆️ Pushing to origin..."
git push origin main
git push origin "$TAG"
echo ""
echo "✅ Tagged $TAG"
# Publish to ClawHub unless --tag-only
if [[ "$TAG_ONLY" == "false" ]]; then
echo ""
echo "📤 Publishing to ClawHub..."
# Get changelog from CHANGELOG.md if available
CHANGELOG=""
if [[ -f CHANGELOG.md ]]; then
CHANGELOG=$(awk '/^## \['"$VERSION"'\]/{found=1; next} /^## \[/{if(found) exit} found{print}' CHANGELOG.md | head -20)
fi
if command -v clawhub &>/dev/null; then
if [[ -n "$CHANGELOG" ]]; then
clawhub publish . --version "$VERSION" --changelog "$CHANGELOG"
else
clawhub publish . --version "$VERSION" --changelog "Release v$VERSION"
fi
echo ""
echo "✅ Published to ClawHub: $VERSION"
else
echo "⚠️ clawhub CLI not found. Skipping ClawHub publish."
echo " Install: npm install -g clawhub"
fi
fi
echo ""
echo "🎉 Release $VERSION complete!"
echo ""
echo " Git tag: $TAG"
echo " GitHub: https://github.com/jontsai/openclaw-command-center/releases/tag/$TAG"