@@ -57,55 +57,96 @@ jobs:
5757 pnpm install --no-frozen-lockfile
5858 }
5959
60- - name : 类型检查
61- run : pnpm run type-check
62-
63- - name : 运行测试
64- run : pnpm run test
65-
66- - name : 构建项目
67- run : pnpm run build
68-
69- - name : 包检查
70- run : pnpm run lint:package
71-
7260 - name : 获取版本号
7361 id : get_version
7462 run : |
7563 if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
7664 echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
7765 echo "tag_name=v${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
66+ echo "is_manual=true" >> $GITHUB_OUTPUT
7867 else
7968 echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
8069 echo "tag_name=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
70+ echo "is_manual=false" >> $GITHUB_OUTPUT
8171 fi
8272
8373 - name : 检查版本是否已存在
8474 id : check_version
8575 run : |
8676 VERSION=${{ steps.get_version.outputs.version }}
8777 PACKAGE_NAME=$(node -p "require('./package.json').name")
78+ CURRENT_VERSION=$(node -p "require('./package.json').version")
79+
80+ echo "🔍 检查版本信息:"
81+ echo " 目标版本: $VERSION"
82+ echo " 当前版本: $CURRENT_VERSION"
83+ echo " 包名: $PACKAGE_NAME"
84+ echo " 触发方式: ${{ github.event_name }}"
85+
86+ # 检查版本格式
87+ if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?$ ]]; then
88+ echo "❌ 版本格式不正确: $VERSION"
89+ echo "请使用语义化版本格式,例如: 1.0.0, 1.0.0-beta.1"
90+ exit 1
91+ fi
8892
8993 # 检查版本是否已在npm上发布
9094 if npm view "$PACKAGE_NAME@$VERSION" version 2>/dev/null; then
9195 echo "❌ 版本 $VERSION 已存在于 npm 上"
9296 echo "请使用新的版本号重新发布"
9397 exit 1
94- else
95- echo "✅ 版本 $VERSION 可以发布"
9698 fi
99+
100+ # 检查标签是否已存在
101+ if git tag -l | grep -q "^v$VERSION$"; then
102+ echo "❌ 标签 v$VERSION 已存在"
103+ echo "请使用新的版本号或删除已存在的标签"
104+ exit 1
105+ fi
106+
107+ # 对于手动触发,检查版本是否大于当前版本
108+ if [ "${{ steps.get_version.outputs.is_manual }}" = "true" ]; then
109+ if [ "$VERSION" = "$CURRENT_VERSION" ]; then
110+ echo "❌ 新版本号不能与当前版本相同"
111+ echo "当前版本: $CURRENT_VERSION"
112+ echo "请使用更高的版本号"
113+ exit 1
114+ fi
115+ fi
116+
117+ echo "✅ 版本 $VERSION 可以发布"
97118
98119 - name : 更新版本号 (手动触发时)
99120 if : github.event_name == 'workflow_dispatch'
100121 run : |
101- npm version ${{ steps.get_version.outputs.version }} --no-git-tag-version
122+ VERSION=${{ steps.get_version.outputs.version }}
123+ echo "📝 更新 package.json 版本号到 $VERSION"
124+
125+ # 更新 package.json 版本号
126+ npm version $VERSION --no-git-tag-version
127+
128+ # 提交版本更新
102129 git config --local user.email "action@github.com"
103130 git config --local user.name "GitHub Action"
104131 git add package.json
105- git commit -m "chore: bump version to ${{ steps.get_version.outputs.version }}"
132+ git commit -m "chore: bump version to $VERSION"
133+
134+ # 创建标签
106135 git tag ${{ steps.get_version.outputs.tag_name }}
107- git push origin HEAD:${{ github.ref_name }}
108- git push origin ${{ steps.get_version.outputs.tag_name }}
136+
137+ echo "✅ 版本号已更新,标签已创建"
138+
139+ - name : 类型检查
140+ run : pnpm run type-check
141+
142+ - name : 运行测试
143+ run : pnpm run test
144+
145+ - name : 构建项目
146+ run : pnpm run build
147+
148+ - name : 包检查
149+ run : pnpm run lint:package
109150
110151 - name : 生成变更日志
111152 id : changelog
@@ -126,10 +167,21 @@ jobs:
126167 echo "changelog_file=changelog.txt" >> $GITHUB_OUTPUT
127168
128169 - name : 发布到 npm
129- run : pnpm publish --no-git-checks
170+ run : |
171+ echo "🚀 开始发布到 npm..."
172+ pnpm publish --no-git-checks
173+ echo "✅ npm 发布成功"
130174 env :
131175 NODE_AUTH_TOKEN : ${{ secrets.NPM_TOKEN }}
132176
177+ - name : 推送更改和标签 (手动触发时)
178+ if : github.event_name == 'workflow_dispatch'
179+ run : |
180+ echo "📤 推送更改和标签..."
181+ git push origin HEAD:${{ github.ref_name }}
182+ git push origin ${{ steps.get_version.outputs.tag_name }}
183+ echo "✅ 推送完成"
184+
133185 - name : 创建 GitHub Release
134186 uses : actions/create-release@v1
135187 env :
0 commit comments