From 848cc841a65811b6436aad883fe9fd140ab28f20 Mon Sep 17 00:00:00 2001 From: D8D Developer Date: Fri, 2 Jan 2026 00:52:10 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(scripts):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建自动化发布脚本 release.sh,支持版本发布和标签管理 - 提供版本号格式验证和参数检查功能 - 支持查看远程和本地标签列表 - 包含工作目录状态检查和用户确认流程 - 自动拉取最新代码并创建推送标签 - 添加友好的中文提示信息和进度展示 --- scripts/release.sh | 88 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 scripts/release.sh diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100644 index 0000000..9d2be01 --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +# 发布脚本 +# 使用方法: ./release.sh <版本号> +# 例如: ./release.sh 1.0.0 +# 查看标签: ./release.sh --list 或 ./release.sh -l + +set -e + +# 检查参数 +if [ $# -eq 0 ]; then + echo "错误: 请提供版本号" + echo "使用方法: $0 <版本号>" + echo "例如: $0 1.0.0" + echo "" + echo "📋 Gitea 最近10个标签:" + # 尝试获取远程标签,如果失败则使用本地标签 + REMOTE_TAGS=$(git ls-remote --tags gitea 2>/dev/null | grep -v "\^{}" | cut -f 2 | sed 's|refs/tags/||') + if [ -z "$REMOTE_TAGS" ]; then + echo "⚠️ 无法获取远程标签,显示本地最近10个标签:" + git tag --list | sort -V | tail -10 + else + echo "$REMOTE_TAGS" | sort -V | uniq | tail -10 + fi + exit 1 +fi + +# 特殊参数: 查看所有标签 +if [ "$1" = "--list" ] || [ "$1" = "-l" ]; then + echo "📋 Gitea 所有标签:" + # 尝试获取远程标签,如果失败则使用本地标签 + REMOTE_TAGS=$(git ls-remote --tags gitea 2>/dev/null | grep -v "\^{}" | cut -f 2 | sed 's|refs/tags/||') + if [ -z "$REMOTE_TAGS" ]; then + echo "⚠️ 无法获取远程标签,显示本地标签:" + git tag --list | sort -V + else + echo "$REMOTE_TAGS" | sort -V | uniq + fi + exit 0 +fi + +VERSION="$1" +TAG="v$VERSION" + +# 验证版本号格式 +if ! [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "错误: 版本号格式不正确,请使用语义化版本格式 (例如: 1.0.0)" + exit 1 +fi + +echo "🚀 开始发布 版本: $VERSION" + +# 检查工作目录是否干净 +if [ -n "$(git status --porcelain)" ]; then + echo "⚠️ 警告: 工作目录有未提交的更改" + git status + read -p "是否继续发布? [y/N] " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "发布已取消" + exit 1 + fi +fi + +# 检查当前分支 +CURRENT_BRANCH=$(git branch --show-current) +echo "🌿 当前分支: $CURRENT_BRANCH" + +# 拉取最新代码 +echo "📥 拉取最新代码..." +git pull gitea "$CURRENT_BRANCH" + + +# 创建标签 +echo "🏷️ 创建标签 $TAG..." +git tag "$TAG" + +# 推送标签 +echo "📤 推送标签到远程仓库..." +git push gitea "$TAG" + +echo "" +echo "🎉 发布流程已启动!" +echo "📋 版本: $VERSION" +echo "🏷️ 标签: $TAG" +echo "🔗 GitHub Actions 将自动构建和发布 Docker 镜像" +echo "" +echo "📊 查看构建进度: $(git config --get remote.gitea.url | sed 's|^ssh://||' | sed 's|^git@||' | sed 's|:|/|' | sed 's|\.git$||')/actions" \ No newline at end of file