release_tag.sh 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/bin/bash
  2. # 发布脚本
  3. # 使用方法: ./release.sh <版本号>
  4. # 例如: ./release.sh 1.0.0
  5. # 查看标签: ./release.sh --list 或 ./release.sh -l
  6. set -e
  7. # 检查参数
  8. if [ $# -eq 0 ]; then
  9. echo "错误: 请提供版本号"
  10. echo "使用方法: $0 <版本号>"
  11. echo "例如: $0 1.0.0"
  12. echo ""
  13. echo "📋 Gitea 最近10个标签:"
  14. # 尝试获取远程标签,如果失败则使用本地标签
  15. REMOTE_TAGS=$(git ls-remote --tags gitea 2>/dev/null | grep -v "\^{}" | cut -f 2 | sed 's|refs/tags/||')
  16. if [ -z "$REMOTE_TAGS" ]; then
  17. echo "⚠️ 无法获取远程标签,显示本地最近10个标签:"
  18. git tag --list | sort -V | tail -10
  19. else
  20. echo "$REMOTE_TAGS" | sort -V | uniq | tail -10
  21. fi
  22. exit 1
  23. fi
  24. # 特殊参数: 查看所有标签
  25. if [ "$1" = "--list" ] || [ "$1" = "-l" ]; then
  26. echo "📋 Gitea 所有标签:"
  27. # 尝试获取远程标签,如果失败则使用本地标签
  28. REMOTE_TAGS=$(git ls-remote --tags gitea 2>/dev/null | grep -v "\^{}" | cut -f 2 | sed 's|refs/tags/||')
  29. if [ -z "$REMOTE_TAGS" ]; then
  30. echo "⚠️ 无法获取远程标签,显示本地标签:"
  31. git tag --list | sort -V
  32. else
  33. echo "$REMOTE_TAGS" | sort -V | uniq
  34. fi
  35. exit 0
  36. fi
  37. VERSION="$1"
  38. TAG="v$VERSION"
  39. # 验证版本号格式
  40. if ! [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  41. echo "错误: 版本号格式不正确,请使用语义化版本格式 (例如: 1.0.0)"
  42. exit 1
  43. fi
  44. echo "🚀 开始发布 版本: $VERSION"
  45. # 检查工作目录是否干净
  46. if [ -n "$(git status --porcelain)" ]; then
  47. echo "⚠️ 警告: 工作目录有未提交的更改"
  48. git status
  49. read -p "是否继续发布? [y/N] " -n 1 -r
  50. echo
  51. if [[ ! $REPLY =~ ^[Yy]$ ]]; then
  52. echo "发布已取消"
  53. exit 1
  54. fi
  55. fi
  56. # 检查当前分支
  57. CURRENT_BRANCH=$(git branch --show-current)
  58. echo "🌿 当前分支: $CURRENT_BRANCH"
  59. # 拉取最新代码
  60. echo "📥 拉取最新代码..."
  61. git pull gitea "$CURRENT_BRANCH"
  62. # 创建标签
  63. echo "🏷️ 创建标签 $TAG..."
  64. git tag "$TAG"
  65. # 推送标签
  66. echo "📤 推送标签到远程仓库..."
  67. git push gitea "$TAG"
  68. echo ""
  69. echo "🎉 发布流程已启动!"
  70. echo "📋 版本: $VERSION"
  71. echo "🏷️ 标签: $TAG"
  72. echo "🔗 GitHub Actions 将自动构建和发布 Docker 镜像"
  73. echo ""
  74. echo "📊 查看构建进度: $(git config --get remote.gitea.url | sed 's|^ssh://||' | sed 's|^git@||' | sed 's|:|/|' | sed 's|\.git$||')/actions"