release_tag.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/bin/bash
  2. # 发布脚本
  3. # 使用方法: ./release.sh <版本号>
  4. # 例如: ./release.sh 1.0.0
  5. set -e
  6. # 检查参数
  7. if [ $# -eq 0 ]; then
  8. echo "错误: 请提供版本号"
  9. echo "使用方法: $0 <版本号>"
  10. echo "例如: $0 1.0.0"
  11. exit 1
  12. fi
  13. VERSION="$1"
  14. TAG="v$VERSION"
  15. # 验证版本号格式
  16. if ! [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  17. echo "错误: 版本号格式不正确,请使用语义化版本格式 (例如: 1.0.0)"
  18. exit 1
  19. fi
  20. echo "🚀 开始发布 版本: $VERSION"
  21. # 检查工作目录是否干净
  22. if [ -n "$(git status --porcelain)" ]; then
  23. echo "⚠️ 警告: 工作目录有未提交的更改"
  24. git status
  25. read -p "是否继续发布? [y/N] " -n 1 -r
  26. echo
  27. if [[ ! $REPLY =~ ^[Yy]$ ]]; then
  28. echo "发布已取消"
  29. exit 1
  30. fi
  31. fi
  32. # 检查当前分支
  33. CURRENT_BRANCH=$(git branch --show-current)
  34. echo "🌿 当前分支: $CURRENT_BRANCH"
  35. # 拉取最新代码
  36. echo "📥 拉取最新代码..."
  37. git pull gitea "$CURRENT_BRANCH"
  38. # 运行测试
  39. echo "🧪 运行测试..."
  40. yarn test
  41. # 运行类型检查
  42. echo "🔍 运行类型检查..."
  43. yarn build
  44. echo "✅ 所有检查通过"
  45. # 创建标签
  46. echo "🏷️ 创建标签 $TAG..."
  47. git tag "$TAG"
  48. # 推送标签
  49. echo "📤 推送标签到远程仓库..."
  50. git push gitea "$TAG"
  51. echo ""
  52. echo "🎉 发布流程已启动!"
  53. echo "📋 版本: $VERSION"
  54. echo "🏷️ 标签: $TAG"
  55. echo "🔗 GitHub Actions 将自动构建和发布 Docker 镜像"
  56. echo ""
  57. echo "📊 查看构建进度: $(git config --get remote.gitea.url | sed 's|^ssh://||' | sed 's|^git@||' | sed 's|:|/|' | sed 's|\.git$||')/actions"