🐛 修复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 clean -fdx
|
||||||
git reset --hard
|
git reset --hard
|
||||||
|
|
||||||
# 获取最新代码
|
# 获取最新代码和标签,同时清理远程已删除的 tag
|
||||||
echo "📥 拉取最新代码和标签..."
|
echo "📥 拉取最新代码和标签..."
|
||||||
git fetch --all --tags --force
|
git fetch --all --tags --force --prune --prune-tags
|
||||||
|
echo "✓ 已同步远程状态(包括已删除的 tag)"
|
||||||
|
|
||||||
echo "✓ 仓库已更新"
|
echo "✓ 仓库已更新"
|
||||||
else
|
else
|
||||||
|
|
@ -392,13 +393,44 @@ jobs:
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 查找前一个 tag
|
# 查找前一个 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
|
if [ -z "$PREVIOUS_TAG" ]; then
|
||||||
echo "ℹ️ No previous tag found, using all commits"
|
echo "ℹ️ No previous tag found, using all commits"
|
||||||
COMMIT_RANGE=""
|
COMMIT_RANGE=""
|
||||||
else
|
else
|
||||||
echo "📍 Previous tag: $PREVIOUS_TAG"
|
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}"
|
COMMIT_RANGE="${PREVIOUS_TAG}..${VERSION}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -552,6 +584,7 @@ jobs:
|
||||||
|
|
||||||
# 检查内容是否真的改变
|
# 检查内容是否真的改变
|
||||||
content_changed = (new_content != existing_content)
|
content_changed = (new_content != existing_content)
|
||||||
|
version_exists = f"## :bookmark: {changelog_version}" in existing_content
|
||||||
|
|
||||||
if content_changed:
|
if content_changed:
|
||||||
with open(changelog_file, 'w', encoding='utf-8') as f:
|
with open(changelog_file, 'w', encoding='utf-8') as f:
|
||||||
|
|
@ -562,17 +595,36 @@ jobs:
|
||||||
|
|
||||||
with open('/tmp/changelog_updated.txt', 'w') as f:
|
with open('/tmp/changelog_updated.txt', 'w') as f:
|
||||||
f.write('true')
|
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"ℹ️ No new content to add")
|
||||||
print(f" Version {changelog_version} already contains all {len(commits)} commits")
|
print(f" Version {changelog_version} already contains all {len(commits)} commits")
|
||||||
print(f" This usually happens when recreating a deleted tag")
|
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:
|
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')
|
f.write('false')
|
||||||
PYSCRIPT
|
PYSCRIPT
|
||||||
|
|
||||||
UPDATED=$(cat /tmp/changelog_updated.txt)
|
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 "changelog_updated=$UPDATED" >> $GITHUB_OUTPUT
|
||||||
|
echo "content_changed=$CONTENT_CHANGED" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
if [ "$UPDATED" = "true" ]; then
|
if [ "$UPDATED" = "true" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
|
|
@ -587,7 +639,7 @@ jobs:
|
||||||
|
|
||||||
- name: 📤 提交 CHANGELOG 到主分支
|
- name: 📤 提交 CHANGELOG 到主分支
|
||||||
id: commit
|
id: commit
|
||||||
if: steps.changelog.outputs.changelog_updated == 'true'
|
if: steps.changelog.outputs.content_changed == 'true'
|
||||||
run: |
|
run: |
|
||||||
echo "======================================"
|
echo "======================================"
|
||||||
echo "📤 提交 CHANGELOG 更新"
|
echo "📤 提交 CHANGELOG 更新"
|
||||||
|
|
@ -868,7 +920,8 @@ jobs:
|
||||||
版本 `${{ env.CHANGELOG_VERSION }}` 已存在于 CHANGELOG.md 中。
|
版本 `${{ env.CHANGELOG_VERSION }}` 已存在于 CHANGELOG.md 中。
|
||||||
EOFEXIST
|
EOFEXIST
|
||||||
elif [ "${{ steps.changelog.outputs.changelog_updated }}" = "true" ]; then
|
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 已创建
|
- ✅ Release 已创建
|
||||||
- ✅ CHANGELOG.md 已作为附件上传
|
- ✅ CHANGELOG.md 已作为附件上传
|
||||||
EOFSUCCESS
|
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
|
if [ -n "${{ env.ADDITIONAL_RELEASE_FILES }}" ]; then
|
||||||
echo "- ✅ 额外文件已上传" >> $GITHUB_STEP_SUMMARY
|
echo "- ✅ 额外文件已上传" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
@ -949,10 +1017,20 @@ jobs:
|
||||||
echo " - Release 标题: ${{ env.RELEASE_TITLE_PROCESSED }}"
|
echo " - Release 标题: ${{ env.RELEASE_TITLE_PROCESSED }}"
|
||||||
echo " - Pre-release: ${{ env.RELEASE_IS_PRERELEASE }}"
|
echo " - Pre-release: ${{ env.RELEASE_IS_PRERELEASE }}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "✅ 已完成的操作:"
|
|
||||||
echo " - CHANGELOG.md 已更新并推送到 ${{ env.MAIN_BRANCH }} 分支"
|
if [ "${{ steps.changelog.outputs.content_changed }}" = "true" ]; then
|
||||||
echo " - Release 已创建"
|
echo "✅ 已完成的操作:"
|
||||||
echo " - CHANGELOG.md 已上传为附件"
|
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
|
else
|
||||||
echo "ℹ️ 无新内容需要更新"
|
echo "ℹ️ 无新内容需要更新"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
@ -975,5 +1053,5 @@ jobs:
|
||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
echo "🧹 清理临时文件..."
|
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 "✅ 清理完成"
|
echo "✅ 清理完成"
|
||||||
Loading…
Reference in New Issue