Skip to content

Commit 32fe0bc

Browse files
committed
优化 Maven Central 发布流程和版本检查
- 更新 `force_publish` 描述以明确忽略 Maven Central 版本存在性检查 - 增加 Maven Central 版本存在性检查步骤 - 优化发布决策逻辑,仅在 Maven Central 不存在该版本时发布 - 更新预发布验证报告以包含版本检查结果 - 调整跳过发布的原因说明
1 parent 4e77015 commit 32fe0bc

1 file changed

Lines changed: 41 additions & 30 deletions

File tree

.github/workflows/maven-central-publish.yaml

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ on:
1717
type: boolean
1818
default: false
1919
force_publish:
20-
description: '强制发布(忽略版本检测'
20+
description: '强制发布(忽略 Maven Central 版本存在性检查'
2121
type: boolean
2222
default: false
2323
skip_tests:
@@ -37,7 +37,7 @@ env:
3737
jobs:
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:
@@ -90,7 +90,7 @@ jobs:
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

Comments
 (0)