@@ -182,6 +182,8 @@ jobs:
182182 uses : actions/checkout@v4
183183 with :
184184 fetch-depth : 0 # 获取完整的git历史,包括tags
185+ # 确保获取所有 refs,包括 annotated tag 对象
186+ ref : ${{ github.ref }}
185187
186188 - name : Download VSIX artifact
187189 uses : actions/download-artifact@v4
@@ -209,21 +211,46 @@ jobs:
209211 # 获取 Tag annotation 作为 Release Notes(修复逻辑)
210212 echo "🔍 获取 Tag ${TAG_NAME} 的 annotation..."
211213
212- # 首先检查这是否是一个 annotated tag
214+ # 确保 tag 对象已正确获取
215+ echo "🔄 刷新远程 tags..."
216+ git fetch origin --tags --force
217+
218+ # 验证 tag 是否存在
219+ if ! git tag -l | grep -q "^${TAG_NAME}$"; then
220+ echo "❌ Tag ${TAG_NAME} 在本地不存在,尝试重新获取..."
221+ git fetch origin "refs/tags/${TAG_NAME}:refs/tags/${TAG_NAME}"
222+ fi
223+
224+ # 检查这是否是一个 annotated tag
213225 TAG_TYPE=$(git cat-file -t "${TAG_NAME}" 2>/dev/null || echo "")
214226 echo "🏷️ Tag ${TAG_NAME} 类型: ${TAG_TYPE}"
215227
228+ # 额外调试信息
229+ echo "🔍 调试信息:"
230+ echo " - 当前 git ref: $(git rev-parse HEAD)"
231+ echo " - Tag ${TAG_NAME} 指向: $(git rev-parse "${TAG_NAME}^{}" 2>/dev/null || echo "无法解析")"
232+ echo " - Tag 对象哈希: $(git rev-parse "${TAG_NAME}" 2>/dev/null || echo "无法解析")"
233+
216234 TAG_MESSAGE=""
217235
218236 if [ "$TAG_TYPE" = "tag" ]; then
219237 # 这是一个 annotated tag,获取 tag annotation
220238 echo "📝 检测到 Annotated Tag,获取 tag message..."
221239 TAG_MESSAGE=$(git tag -l --format='%(contents)' "${TAG_NAME}" 2>/dev/null || echo "")
222240
241+ echo "🔍 方法1获取结果 - 长度: ${#TAG_MESSAGE} 字符"
242+ if [ ${#TAG_MESSAGE} -gt 0 ]; then
243+ echo "📄 方法1内容预览 (前50字符): '$(echo "$TAG_MESSAGE" | head -c 50)'"
244+ fi
245+
223246 # 如果上面的方法失败,尝试使用 git cat-file
224247 if [ -z "$TAG_MESSAGE" ]; then
225248 echo "🔄 尝试备用方法获取 annotated tag message..."
226249 TAG_MESSAGE=$(git cat-file -p "${TAG_NAME}" 2>/dev/null | sed '1,/^$/d' || echo "")
250+ echo "🔍 方法2获取结果 - 长度: ${#TAG_MESSAGE} 字符"
251+ if [ ${#TAG_MESSAGE} -gt 0 ]; then
252+ echo "📄 方法2内容预览 (前50字符): '$(echo "$TAG_MESSAGE" | head -c 50)'"
253+ fi
227254 fi
228255 else
229256 # 这是一个 lightweight tag,没有独立的 tag message
@@ -232,7 +259,14 @@ jobs:
232259 fi
233260
234261 # 检查是否成功获取到有意义的内容
262+ echo "🔬 开始验证 TAG_MESSAGE 有效性..."
263+ echo " - TAG_MESSAGE 长度: ${#TAG_MESSAGE}"
264+ echo " - 是否非空: $([ -n "$TAG_MESSAGE" ] && echo "是" || echo "否")"
265+ echo " - 是否不等于空字符串: $([ "$TAG_MESSAGE" != "" ] && echo "是" || echo "否")"
266+ echo " - 是否不等于标签名: $([ "$TAG_MESSAGE" != "$TAG_NAME" ] && echo "是" || echo "否")"
267+
235268 if [ -n "$TAG_MESSAGE" ] && [ "$TAG_MESSAGE" != "" ] && [ "$TAG_MESSAGE" != "$TAG_NAME" ]; then
269+ echo "✅ TAG_MESSAGE 验证通过,使用 annotation 作为 Release Notes"
236270 echo "📝 成功获取 Tag annotation,长度: ${#TAG_MESSAGE} 字符"
237271 echo "📄 Release Notes 预览 (前100字符):"
238272 echo "$TAG_MESSAGE" | head -c 100
@@ -249,10 +283,14 @@ jobs:
249283 --notes-file "$NOTES_FILE"
250284 else
251285 # 根据 tag 类型显示不同的提示信息
286+ echo "❌ TAG_MESSAGE 验证失败,使用默认 Release Notes"
252287 if [ "$TAG_TYPE" = "tag" ]; then
253- echo "⚠️ 无法获取 Annotated Tag 的 annotation 内容,使用默认 Release Notes"
288+ echo "⚠️ Annotated Tag annotation 内容无效,可能的原因:"
289+ echo " - annotation 内容为空"
290+ echo " - annotation 内容等于标签名称"
291+ echo " - git 命令执行失败"
254292 else
255- echo "ℹ️ Lightweight Tag 没有 annotation 信息,使用默认 Release Notes "
293+ echo "ℹ️ Lightweight Tag 没有 annotation 信息"
256294 fi
257295
258296 # 创建默认的 Release Notes
0 commit comments