1717 type : boolean
1818 default : false
1919 force_publish :
20- description : ' 强制发布(忽略版本检测 )'
20+ description : ' 强制发布(忽略 Maven Central 版本存在性检查 )'
2121 type : boolean
2222 default : false
2323 skip_tests :
3737jobs :
3838 # 🧪 发布前验证
3939 pre-publish-validation :
40- name : " 🧪 Pre-publish Validation"
40+ name : " 🧪 Pre-publish Validation & Maven Central Check "
4141 runs-on : ubuntu-latest
4242 timeout-minutes : 30
4343 outputs :
9090 - name : Grant execute permission
9191 run : chmod +x gradlew
9292
93- - name : Extract version information
93+ - name : Extract version and check Maven Central
9494 id : version-info
9595 run : |
9696 # 语义化版本验证函数
@@ -142,7 +142,7 @@ jobs:
142142 echo "🚀 正式发布版本类型" >> $GITHUB_STEP_SUMMARY
143143 fi
144144
145- # 简化的发布决策逻辑
145+ # 优化的发布决策逻辑:只要 Maven Central 没有该版本就发布
146146 should_publish="false"
147147 force_publish="${{ github.event.inputs.force_publish }}"
148148
@@ -153,52 +153,63 @@ jobs:
153153 # 强制发布模式
154154 if [[ "$force_publish" == "true" ]]; then
155155 should_publish="true"
156- echo "⚡ **强制发布模式已启用**" >> $GITHUB_STEP_SUMMARY
157- # 明确的发布触发器
158- elif [[ "${{ github.ref_type }}" == "tag" ]] || [[ "${{ github.event_name }}" == "release" ]] || [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
159- should_publish="true"
160- echo "🎯 **直接触发**:标签/Release/手动触发 - 将发布" >> $GITHUB_STEP_SUMMARY
161- # main 分支 push:检查版本变化
162- elif [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
163- echo "🌱 **Main 分支 push**:检查版本变化..." >> $GITHUB_STEP_SUMMARY
164-
165- # 使用更简单的版本检查方法
166- if git diff HEAD~1 --name-only | grep -q "gradle/libs.versions.toml"; then
167- prev_version=$(git show HEAD~1:gradle/libs.versions.toml 2>/dev/null | sed -n 's/^project\s*=\s*"\(.*\)"/\1/p' | head -n1 || echo "unknown")
168- if [[ "$prev_version" != "$version" && "$prev_version" != "unknown" ]]; then
169- should_publish="true"
170- echo " 🔼 检测到版本变化:$prev_version → $version" >> $GITHUB_STEP_SUMMARY
171- else
172- echo " ⚠️ 版本文件已变化,但版本号未变化" >> $GITHUB_STEP_SUMMARY
173- fi
156+ echo "⚡ **强制发布模式已启用** - 跳过 Maven Central 版本检查" >> $GITHUB_STEP_SUMMARY
157+ else
158+ # 检查 Maven Central 是否已存在该版本
159+ echo "🔍 检查 Maven Central 是否存在版本 $version..." >> $GITHUB_STEP_SUMMARY
160+
161+ # 使用 Maven Central Search API 检查版本是否存在
162+ group="io.github.truenine"
163+ search_url="https://search.maven.org/solrsearch/select?q=g:${group}+AND+v:${version}&rows=1&wt=json"
164+
165+ echo " 📡 查询 URL: $search_url" >> $GITHUB_STEP_SUMMARY
166+
167+ # 进行网络请求,设置较短的超时时间
168+ response=$(curl -f -s --max-time 15 "$search_url" 2>/dev/null || echo '{"response":{"numFound":0}}')
169+
170+ # 解析响应,检查是否找到匹配的版本
171+ found=$(echo "$response" | jq -r '.response.numFound' 2>/dev/null || echo "0")
172+
173+ if [[ "$found" -gt 0 ]]; then
174+ should_publish="false"
175+ echo " ❌ **版本已存在** - Maven Central 上已存在版本 $version,跳过发布" >> $GITHUB_STEP_SUMMARY
174176 else
175- echo " ⏭️ 版本文件未变化,跳过发布" >> $GITHUB_STEP_SUMMARY
177+ should_publish="true"
178+ echo " ✅ **版本不存在** - Maven Central 上未找到版本 $version,将执行发布" >> $GITHUB_STEP_SUMMARY
176179 fi
177- else
178- echo "⏭️ **其他情况**:非发布分支或事件,跳过发布" >> $GITHUB_STEP_SUMMARY
179180 fi
180181
181182 echo "should-publish=$should_publish" >> $GITHUB_OUTPUT
182183
183184 # 最终决策摘要
184185 echo "" >> $GITHUB_STEP_SUMMARY
186+ echo "### 📊 发布决策结果" >> $GITHUB_STEP_SUMMARY
187+ echo "" >> $GITHUB_STEP_SUMMARY
185188 if [[ "$should_publish" == "true" ]]; then
186- echo "✅ **发布决策:继续发布**" >> $GITHUB_STEP_SUMMARY
189+ if [[ "$force_publish" == "true" ]]; then
190+ echo "✅ **发布决策:强制发布** - 将忽略所有检查直接发布" >> $GITHUB_STEP_SUMMARY
191+ else
192+ echo "✅ **发布决策:继续发布** - Maven Central 上不存在此版本" >> $GITHUB_STEP_SUMMARY
193+ fi
187194 else
188- echo "⏭️ **发布决策:跳过发布**" >> $GITHUB_STEP_SUMMARY
195+ echo "⏭️ **发布决策:跳过发布** - Maven Central 上已存在此版本 " >> $GITHUB_STEP_SUMMARY
189196 fi
197+ echo "" >> $GITHUB_STEP_SUMMARY
198+ echo "**触发方式:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
199+ echo "**检查版本:** $version" >> $GITHUB_STEP_SUMMARY
190200
191201 - name : Generate pre-publish report
192202 run : |
193203 echo "## 🚀 发布准备情况" >> $GITHUB_STEP_SUMMARY
194204 echo "" >> $GITHUB_STEP_SUMMARY
195205 echo "| 检查项 | 状态 |" >> $GITHUB_STEP_SUMMARY
196206 echo "|--------|------|" >> $GITHUB_STEP_SUMMARY
197- echo "| 构建验证 | ✅ 通过 |" >> $GITHUB_STEP_SUMMARY
198- echo "| 核心测试 | ✅ 通过 |" >> $GITHUB_STEP_SUMMARY
207+ echo "| 版本格式验证 | ✅ 通过 |" >> $GITHUB_STEP_SUMMARY
208+ echo "| Maven Central 版本检查 | ${{ steps.version-info.outputs.should-publish == 'true' && '✅ 未发布' || '❌ 已存在' }} |" >> $GITHUB_STEP_SUMMARY
199209 echo "" >> $GITHUB_STEP_SUMMARY
200210 echo "**版本:** ${{ steps.version-info.outputs.version }}" >> $GITHUB_STEP_SUMMARY
201211 echo "**类型:** ${{ steps.version-info.outputs.is-snapshot == 'true' && '快照版本' || '正式版本' }}" >> $GITHUB_STEP_SUMMARY
212+ echo "**发布状态:** ${{ steps.version-info.outputs.should-publish == 'true' && '将执行发布' || '跳过发布' }}" >> $GITHUB_STEP_SUMMARY
202213
203214 # 📦 Maven Central 发布
204215 publish :
@@ -621,7 +632,7 @@ jobs:
621632 if [[ "${{ needs.publish.result }}" == "success" ]]; then
622633 echo "🎉 **发布成功!** 新版本已成功发布到 Maven Central" >> $GITHUB_STEP_SUMMARY
623634 elif [[ "${{ needs.publish.result }}" == "skipped" ]]; then
624- echo "⏭️ **发布已跳过** - 无版本变化或为 PR 验证 " >> $GITHUB_STEP_SUMMARY
635+ echo "⏭️ **发布已跳过** - Maven Central 上已存在该版本 " >> $GITHUB_STEP_SUMMARY
625636 elif [[ "${{ needs.publish.result }}" == "failure" ]]; then
626637 echo "❌ **发布失败** - 请查看错误日志并重试" >> $GITHUB_STEP_SUMMARY
627638 else
0 commit comments