🐛 修复tag获取错误问题
Hello from ImmortalWrt / say-hello (push) Successful in 0s
Details
Hello from ImmortalWrt / say-hello (push) Successful in 0s
Details
This commit is contained in:
parent
0bb627fd34
commit
84e2751668
|
|
@ -236,9 +236,10 @@ jobs:
|
|||
git clean -fdx
|
||||
git reset --hard
|
||||
|
||||
# 获取最新代码
|
||||
# 获取最新代码和标签,同时清理远程已删除的 tag
|
||||
echo "📥 拉取最新代码和标签..."
|
||||
git fetch --all --tags --force
|
||||
git fetch --all --tags --force --prune --prune-tags
|
||||
echo "✓ 已同步远程状态(包括已删除的 tag)"
|
||||
|
||||
echo "✓ 仓库已更新"
|
||||
else
|
||||
|
|
@ -392,13 +393,44 @@ jobs:
|
|||
echo ""
|
||||
|
||||
# 查找前一个 tag
|
||||
PREVIOUS_TAG=$(git tag --sort=-version:refname | grep -v "^${VERSION}$" | head -n 1)
|
||||
# 排除所有属于当前 CHANGELOG 版本的 tag(例如 0.0.2-rc1, 0.0.2-rc2 都属于 0.0.2)
|
||||
echo "🔍 查找前一个版本的 tag..."
|
||||
|
||||
# 获取所有 tag
|
||||
ALL_TAGS=$(git tag --sort=-version:refname)
|
||||
|
||||
# 遍历查找第一个不属于当前 CHANGELOG 版本的 tag
|
||||
PREVIOUS_TAG=""
|
||||
while IFS= read -r tag; do
|
||||
# 跳过空行
|
||||
[ -z "$tag" ] && continue
|
||||
|
||||
# 对每个 tag 执行 strip 操作(去除 pre-release 后缀)
|
||||
if [[ "${{ env.CHANGELOG_VERSION_MODE }}" == "strip" ]]; then
|
||||
tag_stripped=$(echo "$tag" | sed -E 's/-(alpha|beta|rc|pre|preview|dev|test)[0-9]*$//')
|
||||
else
|
||||
tag_stripped="$tag"
|
||||
fi
|
||||
|
||||
# 如果这个 tag 的 CHANGELOG 版本不等于当前版本,就是我们要找的
|
||||
if [ "$tag_stripped" != "$CHANGELOG_VERSION" ]; then
|
||||
PREVIOUS_TAG="$tag"
|
||||
break
|
||||
fi
|
||||
done <<< "$ALL_TAGS"
|
||||
|
||||
if [ -z "$PREVIOUS_TAG" ]; then
|
||||
echo "ℹ️ No previous tag found, using all commits"
|
||||
COMMIT_RANGE=""
|
||||
else
|
||||
echo "📍 Previous tag: $PREVIOUS_TAG"
|
||||
|
||||
# 对 previous tag 也执行 strip,显示对应的 CHANGELOG 版本
|
||||
if [[ "${{ env.CHANGELOG_VERSION_MODE }}" == "strip" ]]; then
|
||||
PREV_CHANGELOG_VERSION=$(echo "$PREVIOUS_TAG" | sed -E 's/-(alpha|beta|rc|pre|preview|dev|test)[0-9]*$//')
|
||||
echo " (对应 CHANGELOG 版本: $PREV_CHANGELOG_VERSION)"
|
||||
fi
|
||||
|
||||
COMMIT_RANGE="${PREVIOUS_TAG}..${VERSION}"
|
||||
fi
|
||||
|
||||
|
|
@ -552,6 +584,7 @@ jobs:
|
|||
|
||||
# 检查内容是否真的改变
|
||||
content_changed = (new_content != existing_content)
|
||||
version_exists = f"## :bookmark: {changelog_version}" in existing_content
|
||||
|
||||
if content_changed:
|
||||
with open(changelog_file, 'w', encoding='utf-8') as f:
|
||||
|
|
@ -562,17 +595,36 @@ jobs:
|
|||
|
||||
with open('/tmp/changelog_updated.txt', 'w') as f:
|
||||
f.write('true')
|
||||
else:
|
||||
with open('/tmp/content_changed.txt', 'w') as f:
|
||||
f.write('true')
|
||||
elif version_exists:
|
||||
# 内容没有变化,但版本已存在
|
||||
# 这通常发生在重建已删除的 tag
|
||||
# 我们仍然应该创建 Release(从现有 CHANGELOG 提取内容)
|
||||
print(f"ℹ️ No new content to add")
|
||||
print(f" Version {changelog_version} already contains all {len(commits)} commits")
|
||||
print(f" This usually happens when recreating a deleted tag")
|
||||
print(f" Will still create Release from existing CHANGELOG content")
|
||||
|
||||
with open('/tmp/changelog_updated.txt', 'w') as f:
|
||||
f.write('true') # 返回 true 以触发 Release 创建
|
||||
with open('/tmp/content_changed.txt', 'w') as f:
|
||||
f.write('false') # 但文件没有变化,不需要提交
|
||||
else:
|
||||
# 既没有新内容,版本也不存在(不应该发生)
|
||||
print(f"⚠️ Unexpected state: no content change and version doesn't exist")
|
||||
|
||||
with open('/tmp/changelog_updated.txt', 'w') as f:
|
||||
f.write('false')
|
||||
with open('/tmp/content_changed.txt', 'w') as f:
|
||||
f.write('false')
|
||||
PYSCRIPT
|
||||
|
||||
UPDATED=$(cat /tmp/changelog_updated.txt)
|
||||
CONTENT_CHANGED=$(cat /tmp/content_changed.txt 2>/dev/null || echo "false")
|
||||
|
||||
echo "changelog_updated=$UPDATED" >> $GITHUB_OUTPUT
|
||||
echo "content_changed=$CONTENT_CHANGED" >> $GITHUB_OUTPUT
|
||||
|
||||
if [ "$UPDATED" = "true" ]; then
|
||||
echo ""
|
||||
|
|
@ -587,7 +639,7 @@ jobs:
|
|||
|
||||
- name: 📤 提交 CHANGELOG 到主分支
|
||||
id: commit
|
||||
if: steps.changelog.outputs.changelog_updated == 'true'
|
||||
if: steps.changelog.outputs.content_changed == 'true'
|
||||
run: |
|
||||
echo "======================================"
|
||||
echo "📤 提交 CHANGELOG 更新"
|
||||
|
|
@ -868,7 +920,8 @@ jobs:
|
|||
版本 `${{ env.CHANGELOG_VERSION }}` 已存在于 CHANGELOG.md 中。
|
||||
EOFEXIST
|
||||
elif [ "${{ steps.changelog.outputs.changelog_updated }}" = "true" ]; then
|
||||
cat >> $GITHUB_STEP_SUMMARY << 'EOFSUCCESS'
|
||||
if [ "${{ steps.changelog.outputs.content_changed }}" = "true" ]; then
|
||||
cat >> $GITHUB_STEP_SUMMARY << 'EOFSUCCESS'
|
||||
| 📋 执行状态 | ✅ 执行成功 |
|
||||
|
||||
---
|
||||
|
|
@ -880,6 +933,21 @@ jobs:
|
|||
- ✅ Release 已创建
|
||||
- ✅ CHANGELOG.md 已作为附件上传
|
||||
EOFSUCCESS
|
||||
else
|
||||
cat >> $GITHUB_STEP_SUMMARY << 'EOFREBUILD'
|
||||
| 📋 执行状态 | ✅ 执行成功 (重建 Tag) |
|
||||
|
||||
---
|
||||
|
||||
### ✅ 完成的操作
|
||||
|
||||
- ℹ️ CHANGELOG.md 无需更新(内容已存在)
|
||||
- ✅ Release 已创建
|
||||
- ✅ CHANGELOG.md 已作为附件上传
|
||||
|
||||
💡 **说明**: 检测到这是重建已删除的 tag,CHANGELOG 中已包含所有提交内容,因此直接从现有内容创建 Release。
|
||||
EOFREBUILD
|
||||
fi
|
||||
|
||||
if [ -n "${{ env.ADDITIONAL_RELEASE_FILES }}" ]; then
|
||||
echo "- ✅ 额外文件已上传" >> $GITHUB_STEP_SUMMARY
|
||||
|
|
@ -949,10 +1017,20 @@ jobs:
|
|||
echo " - Release 标题: ${{ env.RELEASE_TITLE_PROCESSED }}"
|
||||
echo " - Pre-release: ${{ env.RELEASE_IS_PRERELEASE }}"
|
||||
echo ""
|
||||
echo "✅ 已完成的操作:"
|
||||
echo " - CHANGELOG.md 已更新并推送到 ${{ env.MAIN_BRANCH }} 分支"
|
||||
echo " - Release 已创建"
|
||||
echo " - CHANGELOG.md 已上传为附件"
|
||||
|
||||
if [ "${{ steps.changelog.outputs.content_changed }}" = "true" ]; then
|
||||
echo "✅ 已完成的操作:"
|
||||
echo " - CHANGELOG.md 已更新并推送到 ${{ env.MAIN_BRANCH }} 分支"
|
||||
echo " - Release 已创建"
|
||||
echo " - CHANGELOG.md 已上传为附件"
|
||||
else
|
||||
echo "✅ 已完成的操作:"
|
||||
echo " - Release 已创建(从现有 CHANGELOG 内容)"
|
||||
echo " - CHANGELOG.md 已上传为附件"
|
||||
echo ""
|
||||
echo "💡 说明: 检测到这是重建已删除的 tag,CHANGELOG 中已包含"
|
||||
echo " 所有提交内容,因此直接从现有内容创建 Release。"
|
||||
fi
|
||||
else
|
||||
echo "ℹ️ 无新内容需要更新"
|
||||
echo ""
|
||||
|
|
@ -975,5 +1053,5 @@ jobs:
|
|||
if: always()
|
||||
run: |
|
||||
echo "🧹 清理临时文件..."
|
||||
rm -rf /tmp/commits.txt /tmp/changelog_updated.txt /tmp/release-body.txt /tmp/payload.json /tmp/release_response.json /tmp/upload_response_*.json
|
||||
rm -rf /tmp/commits.txt /tmp/changelog_updated.txt /tmp/content_changed.txt /tmp/release-body.txt /tmp/payload.json /tmp/release_response.json /tmp/upload_response_*.json
|
||||
echo "✅ 清理完成"
|
||||
Loading…
Reference in New Issue