🐛 修复生成的CHANGELOG格式不对
Hello from ImmortalWrt / say-hello (push) Successful in 0s Details

 过滤commit新增`Initial commit`

🎨 代码格式化
This commit is contained in:
csh 2025-11-01 10:04:52 +08:00
parent 29cd19ec5b
commit b651daf225
1 changed files with 43 additions and 42 deletions

View File

@ -22,11 +22,11 @@ jobs:
# 📌 语义版本号规范 (SemVer) # 📌 语义版本号规范 (SemVer)
# 格式: MAJOR.MINOR.PATCH[-prerelease] # 格式: MAJOR.MINOR.PATCH[-prerelease]
# #
# 开发版本示例: # 开发版本示例:
# - 1.0.0-beta1, 1.0.0-beta2, 1.0.0-beta10 等 # - 1.0.0-beta1, 1.0.0-beta2, 1.0.0-beta10 等
# - 1.2.0-alpha1, 1.2.0-rc1 等 # - 1.2.0-alpha1, 1.2.0-rc1 等
# #
# 正式版本示例: # 正式版本示例:
# - 1.0.0 (首个稳定版PATCH必须从0开始) # - 1.0.0 (首个稳定版PATCH必须从0开始)
# - 1.1.0 (新增功能,向后兼容) # - 1.1.0 (新增功能,向后兼容)
@ -76,6 +76,7 @@ jobs:
"^style: " "^style: "
"^chore: format" "^chore: format"
"^chore: lint" "^chore: lint"
"^Initial commit"
) )
# Git 提交消息格式 # Git 提交消息格式
@ -319,7 +320,7 @@ jobs:
break break
fi fi
done done
if [ "$SHOULD_SKIP" = false ]; then if [ "$SHOULD_SKIP" = false ]; then
COMMITS_HASH[$COMMIT_INDEX]="$CURRENT_HASH" COMMITS_HASH[$COMMIT_INDEX]="$CURRENT_HASH"
COMMITS_AUTHOR[$COMMIT_INDEX]="$CURRENT_AUTHOR" COMMITS_AUTHOR[$COMMIT_INDEX]="$CURRENT_AUTHOR"
@ -328,14 +329,14 @@ jobs:
COMMIT_INDEX=$((COMMIT_INDEX + 1)) COMMIT_INDEX=$((COMMIT_INDEX + 1))
fi fi
fi fi
CURRENT_HASH="" CURRENT_HASH=""
CURRENT_AUTHOR="" CURRENT_AUTHOR=""
CURRENT_MESSAGE="" CURRENT_MESSAGE=""
CURRENT_BODY="" CURRENT_BODY=""
IN_BODY=false IN_BODY=false
STATE="HASH" STATE="HASH"
elif [[ "$line" == "BODY_START" ]]; then elif [[ "$line" == "BODY_START" ]]; then
IN_BODY=true IN_BODY=true
CURRENT_BODY="" CURRENT_BODY=""
@ -366,7 +367,7 @@ jobs:
break break
fi fi
done done
if [ "$SHOULD_SKIP" = false ]; then if [ "$SHOULD_SKIP" = false ]; then
COMMITS_HASH[$COMMIT_INDEX]="$CURRENT_HASH" COMMITS_HASH[$COMMIT_INDEX]="$CURRENT_HASH"
COMMITS_AUTHOR[$COMMIT_INDEX]="$CURRENT_AUTHOR" COMMITS_AUTHOR[$COMMIT_INDEX]="$CURRENT_AUTHOR"
@ -390,7 +391,7 @@ jobs:
# 使用配置的标题 # 使用配置的标题
NEW_ENTRY="## :bookmark: ${CHANGELOG_VERSION}\n\n" NEW_ENTRY="## :bookmark: ${CHANGELOG_VERSION}\n\n"
NEW_ENTRY="${NEW_ENTRY}${CHANGELOG_SECTION_TITLE}\n" NEW_ENTRY="${NEW_ENTRY}${CHANGELOG_SECTION_TITLE}\n\n"
REPO_URL="${{ github.server_url }}/${{ github.repository }}" REPO_URL="${{ github.server_url }}/${{ github.repository }}"
@ -399,21 +400,21 @@ jobs:
author="${COMMITS_AUTHOR[$i]}" author="${COMMITS_AUTHOR[$i]}"
message="${COMMITS_MESSAGE[$i]}" message="${COMMITS_MESSAGE[$i]}"
body="${COMMITS_BODY[$i]}" body="${COMMITS_BODY[$i]}"
echo " [$((i+1))/$COMMIT_INDEX] ${hash:0:7}: ${message:0:60}..." echo " [$((i+1))/$COMMIT_INDEX] ${hash:0:7}: ${message:0:60}..."
COMMIT_LINK="([${hash}](${REPO_URL}/commit/${hash}))" COMMIT_LINK="([${hash}](${REPO_URL}/commit/${hash}))"
if [ -n "$body" ]; then if [ -n "$body" ]; then
FULL_MESSAGE="${message}\n${body}" FULL_MESSAGE="${message}\n${body}"
LINE_COUNT=$(echo -e "$FULL_MESSAGE" | sed '/^$/d' | wc -l) LINE_COUNT=$(echo -e "$FULL_MESSAGE" | sed '/^$/d' | wc -l)
CURRENT_LINE=1 CURRENT_LINE=1
FORMATTED_MESSAGE="" FORMATTED_MESSAGE=""
while IFS= read -r line; do while IFS= read -r line; do
[ -z "$line" ] && continue [ -z "$line" ] && continue
if [ $CURRENT_LINE -eq $LINE_COUNT ]; then if [ $CURRENT_LINE -eq $LINE_COUNT ]; then
FORMATTED_MESSAGE="${FORMATTED_MESSAGE}${line} ${COMMIT_LINK}" FORMATTED_MESSAGE="${FORMATTED_MESSAGE}${line} ${COMMIT_LINK}"
if [ -n "$author" ]; then if [ -n "$author" ]; then
@ -424,7 +425,7 @@ jobs:
fi fi
CURRENT_LINE=$((CURRENT_LINE + 1)) CURRENT_LINE=$((CURRENT_LINE + 1))
done <<< "$(echo -e "$FULL_MESSAGE" | sed '/^$/d')" done <<< "$(echo -e "$FULL_MESSAGE" | sed '/^$/d')"
NEW_ENTRY="${NEW_ENTRY}- ${FORMATTED_MESSAGE}\n" NEW_ENTRY="${NEW_ENTRY}- ${FORMATTED_MESSAGE}\n"
else else
if [ -n "$author" ]; then if [ -n "$author" ]; then
@ -447,9 +448,9 @@ jobs:
if [ -n "$CONTRIBUTORS" ]; then if [ -n "$CONTRIBUTORS" ]; then
CONTRIBUTOR_COUNT=$(echo "$CONTRIBUTORS" | wc -l) CONTRIBUTOR_COUNT=$(echo "$CONTRIBUTORS" | wc -l)
echo "✓ Found ${CONTRIBUTOR_COUNT} contributors" echo "✓ Found ${CONTRIBUTOR_COUNT} contributors"
# 使用配置的标题和服务器地址 # 使用配置的标题和服务器地址
NEW_ENTRY="${NEW_ENTRY}\n${CHANGELOG_CONTRIBUTORS_TITLE}\n" NEW_ENTRY="${NEW_ENTRY}\n${CHANGELOG_CONTRIBUTORS_TITLE}\n\n"
while IFS= read -r name; do while IFS= read -r name; do
NEW_ENTRY="${NEW_ENTRY}<a href=\"${GITEA_SERVER}/${name}\">\n" NEW_ENTRY="${NEW_ENTRY}<a href=\"${GITEA_SERVER}/${name}\">\n"
@ -458,7 +459,7 @@ jobs:
done <<< "$CONTRIBUTORS" done <<< "$CONTRIBUTORS"
fi fi
NEW_ENTRY="${NEW_ENTRY}\n---\n\n" NEW_ENTRY="${NEW_ENTRY}\n---\n"
echo "" echo ""
echo "💾 Writing to CHANGELOG.md..." echo "💾 Writing to CHANGELOG.md..."
@ -468,11 +469,11 @@ jobs:
if [ "$VERSION_EXISTS" = "true" ]; then if [ "$VERSION_EXISTS" = "true" ]; then
# 版本已存在,叠加新的条目(不是替换) # 版本已存在,叠加新的条目(不是替换)
echo "🔄 Appending new commits to existing entry for $CHANGELOG_VERSION" echo "🔄 Appending new commits to existing entry for $CHANGELOG_VERSION"
# 提取现有版本区域的内容 # 提取现有版本区域的内容
TEMP_OLD_CONTENT=$(mktemp) TEMP_OLD_CONTENT=$(mktemp)
TEMP_NEW_FILE=$(mktemp) TEMP_NEW_FILE=$(mktemp)
# 提取旧版本区域的所有内容 # 提取旧版本区域的所有内容
IN_VERSION=false IN_VERSION=false
while IFS= read -r line; do while IFS= read -r line; do
@ -481,12 +482,12 @@ jobs:
elif [[ "$line" =~ ^##[[:space:]]:bookmark: ]] && [ "$IN_VERSION" = true ]; then elif [[ "$line" =~ ^##[[:space:]]:bookmark: ]] && [ "$IN_VERSION" = true ]; then
IN_VERSION=false IN_VERSION=false
fi fi
if [ "$IN_VERSION" = true ]; then if [ "$IN_VERSION" = true ]; then
echo "$line" >> "$TEMP_OLD_CONTENT" echo "$line" >> "$TEMP_OLD_CONTENT"
fi fi
done < CHANGELOG.md done < CHANGELOG.md
# 提取旧的提交记录(在 What's Changed 和 Contributors 之间的内容) # 提取旧的提交记录(在 What's Changed 和 Contributors 之间的内容)
OLD_COMMITS="" OLD_COMMITS=""
if [ -f "$TEMP_OLD_CONTENT" ]; then if [ -f "$TEMP_OLD_CONTENT" ]; then
@ -498,7 +499,7 @@ jobs:
} }
' "$TEMP_OLD_CONTENT") ' "$TEMP_OLD_CONTENT")
fi fi
# 提取旧的贡献者(在 Contributors 部分的内容) # 提取旧的贡献者(在 Contributors 部分的内容)
OLD_CONTRIBUTORS="" OLD_CONTRIBUTORS=""
if [ -f "$TEMP_OLD_CONTENT" ]; then if [ -f "$TEMP_OLD_CONTENT" ]; then
@ -514,16 +515,16 @@ jobs:
} }
' "$TEMP_OLD_CONTENT") ' "$TEMP_OLD_CONTENT")
fi fi
# 构建新的完整条目(叠加模式) # 构建新的完整条目(叠加模式)
MERGED_ENTRY="## :bookmark: ${CHANGELOG_VERSION}\n\n" MERGED_ENTRY="## :bookmark: ${CHANGELOG_VERSION}\n\n"
MERGED_ENTRY="${MERGED_ENTRY}${CHANGELOG_SECTION_TITLE}\n" MERGED_ENTRY="${MERGED_ENTRY}${CHANGELOG_SECTION_TITLE}\n\n"
# 先添加旧的提交(如果有) # 先添加旧的提交(如果有)
if [ -n "$OLD_COMMITS" ]; then if [ -n "$OLD_COMMITS" ]; then
MERGED_ENTRY="${MERGED_ENTRY}${OLD_COMMITS}\n" MERGED_ENTRY="${MERGED_ENTRY}${OLD_COMMITS}\n"
fi fi
# 再添加新的提交从NEW_ENTRY中提取 # 再添加新的提交从NEW_ENTRY中提取
NEW_COMMITS=$(echo -e "$NEW_ENTRY" | awk ' NEW_COMMITS=$(echo -e "$NEW_ENTRY" | awk '
/^### :pencil: What/,/^### :busts_in_silhouette:/ { /^### :pencil: What/,/^### :busts_in_silhouette:/ {
@ -533,13 +534,13 @@ jobs:
} }
') ')
MERGED_ENTRY="${MERGED_ENTRY}${NEW_COMMITS}\n" MERGED_ENTRY="${MERGED_ENTRY}${NEW_COMMITS}\n"
# 合并贡献者(去重) # 合并贡献者(去重)
MERGED_ENTRY="${MERGED_ENTRY}\n${CHANGELOG_CONTRIBUTORS_TITLE}\n" MERGED_ENTRY="${MERGED_ENTRY}\n${CHANGELOG_CONTRIBUTORS_TITLE}\n\n"
# 使用数组来去重贡献者 # 使用数组来去重贡献者
declare -A SEEN_CONTRIBUTORS declare -A SEEN_CONTRIBUTORS
# 处理旧的贡献者 # 处理旧的贡献者
if [ -n "$OLD_CONTRIBUTORS" ]; then if [ -n "$OLD_CONTRIBUTORS" ]; then
while IFS= read -r line; do while IFS= read -r line; do
@ -556,7 +557,7 @@ jobs:
fi fi
done <<< "$OLD_CONTRIBUTORS" done <<< "$OLD_CONTRIBUTORS"
fi fi
# 处理新的贡献者 # 处理新的贡献者
NEW_CONTRIBUTORS=$(echo -e "$NEW_ENTRY" | awk ' NEW_CONTRIBUTORS=$(echo -e "$NEW_ENTRY" | awk '
/^### :busts_in_silhouette: Contributors/,/^---/ { /^### :busts_in_silhouette: Contributors/,/^---/ {
@ -565,7 +566,7 @@ jobs:
else if ($0 ~ /<\/a>/) print $0 else if ($0 ~ /<\/a>/) print $0
} }
') ')
if [ -n "$NEW_CONTRIBUTORS" ]; then if [ -n "$NEW_CONTRIBUTORS" ]; then
while IFS= read -r line; do while IFS= read -r line; do
if [[ "$line" =~ href=\"[^\"]+/([^\"]+)\" ]]; then if [[ "$line" =~ href=\"[^\"]+/([^\"]+)\" ]]; then
@ -581,9 +582,9 @@ jobs:
fi fi
done <<< "$NEW_CONTRIBUTORS" done <<< "$NEW_CONTRIBUTORS"
fi fi
MERGED_ENTRY="${MERGED_ENTRY}\n---\n\n" MERGED_ENTRY="${MERGED_ENTRY}\n---\n"
# 替换CHANGELOG中的对应版本区域 # 替换CHANGELOG中的对应版本区域
IN_VERSION=false IN_VERSION=false
while IFS= read -r line; do while IFS= read -r line; do
@ -597,14 +598,14 @@ jobs:
echo "$line" >> "$TEMP_NEW_FILE" echo "$line" >> "$TEMP_NEW_FILE"
fi fi
done < CHANGELOG.md done < CHANGELOG.md
mv "$TEMP_NEW_FILE" CHANGELOG.md mv "$TEMP_NEW_FILE" CHANGELOG.md
rm -f "$TEMP_OLD_CONTENT" rm -f "$TEMP_OLD_CONTENT"
echo "✓ Appended new commits to existing CHANGELOG entry" echo "✓ Appended new commits to existing CHANGELOG entry"
else else
# 版本不存在,添加新条目 # 版本不存在,添加新条目
echo " Adding new entry for $CHANGELOG_VERSION" echo " Adding new entry for $CHANGELOG_VERSION"
TEMP_FILE=$(mktemp) TEMP_FILE=$(mktemp)
head -n 1 CHANGELOG.md > "$TEMP_FILE" head -n 1 CHANGELOG.md > "$TEMP_FILE"
echo "" >> "$TEMP_FILE" echo "" >> "$TEMP_FILE"
@ -811,11 +812,11 @@ jobs:
try: try:
with open('/tmp/release_response.json', 'r') as f: with open('/tmp/release_response.json', 'r') as f:
data = json.load(f) data = json.load(f)
if 'id' not in data: if 'id' not in data:
print("❌ ERROR: No 'id' field in response", file=sys.stderr) print("❌ ERROR: No 'id' field in response", file=sys.stderr)
sys.exit(1) sys.exit(1)
print(data['id']) print(data['id'])
except Exception as e: except Exception as e:
print(f"❌ ERROR: {e}", file=sys.stderr) print(f"❌ ERROR: {e}", file=sys.stderr)
@ -851,7 +852,7 @@ jobs:
echo "📦 Uploading additional files..." echo "📦 Uploading additional files..."
FILE_INDEX=2 FILE_INDEX=2
TOTAL_FILES=$((1 + $(echo "$ADDITIONAL_RELEASE_FILES" | wc -w))) TOTAL_FILES=$((1 + $(echo "$ADDITIONAL_RELEASE_FILES" | wc -w)))
for file in $ADDITIONAL_RELEASE_FILES; do for file in $ADDITIONAL_RELEASE_FILES; do
if [ -f "$file" ]; then if [ -f "$file" ]; then
echo "📤 [$FILE_INDEX/$TOTAL_FILES] Uploading $(basename $file)..." echo "📤 [$FILE_INDEX/$TOTAL_FILES] Uploading $(basename $file)..."
@ -859,7 +860,7 @@ jobs:
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
-F "attachment=@${file}" \ -F "attachment=@${file}" \
"${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$(basename $file)") "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$(basename $file)")
if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "200" ]; then if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "200" ]; then
echo "✅ $(basename $file) uploaded successfully" echo "✅ $(basename $file) uploaded successfully"
else else
@ -931,4 +932,4 @@ jobs:
fi fi
echo "" echo ""
echo "✅ Workflow summary generated" echo "✅ Workflow summary generated"