From b651daf22546737dc6b4ea5eb02935a9e4e69526 Mon Sep 17 00:00:00 2001 From: csh Date: Sat, 1 Nov 2025 10:04:52 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=9A=84CHANGELOG=E6=A0=BC=E5=BC=8F=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :sparkles: 过滤commit新增`Initial commit` :art: 代码格式化 --- .gitea/workflows/changelog_and_release.yaml | 85 +++++++++++---------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/.gitea/workflows/changelog_and_release.yaml b/.gitea/workflows/changelog_and_release.yaml index 87658f2..274b514 100644 --- a/.gitea/workflows/changelog_and_release.yaml +++ b/.gitea/workflows/changelog_and_release.yaml @@ -22,11 +22,11 @@ jobs: # 📌 语义版本号规范 (SemVer) # 格式: MAJOR.MINOR.PATCH[-prerelease] - # + # # 开发版本示例: # - 1.0.0-beta1, 1.0.0-beta2, 1.0.0-beta10 等 # - 1.2.0-alpha1, 1.2.0-rc1 等 - # + # # 正式版本示例: # - 1.0.0 (首个稳定版,PATCH必须从0开始) # - 1.1.0 (新增功能,向后兼容) @@ -76,6 +76,7 @@ jobs: "^style: " "^chore: format" "^chore: lint" + "^Initial commit" ) # Git 提交消息格式 @@ -319,7 +320,7 @@ jobs: break fi done - + if [ "$SHOULD_SKIP" = false ]; then COMMITS_HASH[$COMMIT_INDEX]="$CURRENT_HASH" COMMITS_AUTHOR[$COMMIT_INDEX]="$CURRENT_AUTHOR" @@ -328,14 +329,14 @@ jobs: COMMIT_INDEX=$((COMMIT_INDEX + 1)) fi fi - + CURRENT_HASH="" CURRENT_AUTHOR="" CURRENT_MESSAGE="" CURRENT_BODY="" IN_BODY=false STATE="HASH" - + elif [[ "$line" == "BODY_START" ]]; then IN_BODY=true CURRENT_BODY="" @@ -366,7 +367,7 @@ jobs: break fi done - + if [ "$SHOULD_SKIP" = false ]; then COMMITS_HASH[$COMMIT_INDEX]="$CURRENT_HASH" COMMITS_AUTHOR[$COMMIT_INDEX]="$CURRENT_AUTHOR" @@ -390,7 +391,7 @@ jobs: # 使用配置的标题 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 }}" @@ -399,21 +400,21 @@ jobs: author="${COMMITS_AUTHOR[$i]}" message="${COMMITS_MESSAGE[$i]}" body="${COMMITS_BODY[$i]}" - + echo " [$((i+1))/$COMMIT_INDEX] ${hash:0:7}: ${message:0:60}..." - + COMMIT_LINK="([${hash}](${REPO_URL}/commit/${hash}))" - + if [ -n "$body" ]; then FULL_MESSAGE="${message}\n${body}" LINE_COUNT=$(echo -e "$FULL_MESSAGE" | sed '/^$/d' | wc -l) - + CURRENT_LINE=1 FORMATTED_MESSAGE="" - + while IFS= read -r line; do [ -z "$line" ] && continue - + if [ $CURRENT_LINE -eq $LINE_COUNT ]; then FORMATTED_MESSAGE="${FORMATTED_MESSAGE}${line} ${COMMIT_LINK}" if [ -n "$author" ]; then @@ -424,7 +425,7 @@ jobs: fi CURRENT_LINE=$((CURRENT_LINE + 1)) done <<< "$(echo -e "$FULL_MESSAGE" | sed '/^$/d')" - + NEW_ENTRY="${NEW_ENTRY}- ${FORMATTED_MESSAGE}\n" else if [ -n "$author" ]; then @@ -447,9 +448,9 @@ jobs: if [ -n "$CONTRIBUTORS" ]; then CONTRIBUTOR_COUNT=$(echo "$CONTRIBUTORS" | wc -l) 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 NEW_ENTRY="${NEW_ENTRY}\n" @@ -458,7 +459,7 @@ jobs: done <<< "$CONTRIBUTORS" fi - NEW_ENTRY="${NEW_ENTRY}\n---\n\n" + NEW_ENTRY="${NEW_ENTRY}\n---\n" echo "" echo "💾 Writing to CHANGELOG.md..." @@ -468,11 +469,11 @@ jobs: if [ "$VERSION_EXISTS" = "true" ]; then # 版本已存在,叠加新的条目(不是替换) echo "🔄 Appending new commits to existing entry for $CHANGELOG_VERSION" - + # 提取现有版本区域的内容 TEMP_OLD_CONTENT=$(mktemp) TEMP_NEW_FILE=$(mktemp) - + # 提取旧版本区域的所有内容 IN_VERSION=false while IFS= read -r line; do @@ -481,12 +482,12 @@ jobs: elif [[ "$line" =~ ^##[[:space:]]:bookmark: ]] && [ "$IN_VERSION" = true ]; then IN_VERSION=false fi - + if [ "$IN_VERSION" = true ]; then echo "$line" >> "$TEMP_OLD_CONTENT" fi done < CHANGELOG.md - + # 提取旧的提交记录(在 What's Changed 和 Contributors 之间的内容) OLD_COMMITS="" if [ -f "$TEMP_OLD_CONTENT" ]; then @@ -498,7 +499,7 @@ jobs: } ' "$TEMP_OLD_CONTENT") fi - + # 提取旧的贡献者(在 Contributors 部分的内容) OLD_CONTRIBUTORS="" if [ -f "$TEMP_OLD_CONTENT" ]; then @@ -514,16 +515,16 @@ jobs: } ' "$TEMP_OLD_CONTENT") fi - + # 构建新的完整条目(叠加模式) 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 MERGED_ENTRY="${MERGED_ENTRY}${OLD_COMMITS}\n" fi - + # 再添加新的提交(从NEW_ENTRY中提取) NEW_COMMITS=$(echo -e "$NEW_ENTRY" | awk ' /^### :pencil: What/,/^### :busts_in_silhouette:/ { @@ -533,13 +534,13 @@ jobs: } ') 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 - + # 处理旧的贡献者 if [ -n "$OLD_CONTRIBUTORS" ]; then while IFS= read -r line; do @@ -556,7 +557,7 @@ jobs: fi done <<< "$OLD_CONTRIBUTORS" fi - + # 处理新的贡献者 NEW_CONTRIBUTORS=$(echo -e "$NEW_ENTRY" | awk ' /^### :busts_in_silhouette: Contributors/,/^---/ { @@ -565,7 +566,7 @@ jobs: else if ($0 ~ /<\/a>/) print $0 } ') - + if [ -n "$NEW_CONTRIBUTORS" ]; then while IFS= read -r line; do if [[ "$line" =~ href=\"[^\"]+/([^\"]+)\" ]]; then @@ -581,9 +582,9 @@ jobs: fi done <<< "$NEW_CONTRIBUTORS" fi - - MERGED_ENTRY="${MERGED_ENTRY}\n---\n\n" - + + MERGED_ENTRY="${MERGED_ENTRY}\n---\n" + # 替换CHANGELOG中的对应版本区域 IN_VERSION=false while IFS= read -r line; do @@ -597,14 +598,14 @@ jobs: echo "$line" >> "$TEMP_NEW_FILE" fi done < CHANGELOG.md - + mv "$TEMP_NEW_FILE" CHANGELOG.md rm -f "$TEMP_OLD_CONTENT" echo "✓ Appended new commits to existing CHANGELOG entry" else # 版本不存在,添加新条目 echo "➕ Adding new entry for $CHANGELOG_VERSION" - + TEMP_FILE=$(mktemp) head -n 1 CHANGELOG.md > "$TEMP_FILE" echo "" >> "$TEMP_FILE" @@ -811,11 +812,11 @@ jobs: try: with open('/tmp/release_response.json', 'r') as f: data = json.load(f) - + if 'id' not in data: print("❌ ERROR: No 'id' field in response", file=sys.stderr) sys.exit(1) - + print(data['id']) except Exception as e: print(f"❌ ERROR: {e}", file=sys.stderr) @@ -851,7 +852,7 @@ jobs: echo "📦 Uploading additional files..." FILE_INDEX=2 TOTAL_FILES=$((1 + $(echo "$ADDITIONAL_RELEASE_FILES" | wc -w))) - + for file in $ADDITIONAL_RELEASE_FILES; do if [ -f "$file" ]; then echo "📤 [$FILE_INDEX/$TOTAL_FILES] Uploading $(basename $file)..." @@ -859,7 +860,7 @@ jobs: -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -F "attachment=@${file}" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$(basename $file)") - + if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "200" ]; then echo "✅ $(basename $file) uploaded successfully" else @@ -931,4 +932,4 @@ jobs: fi echo "" - echo "✅ Workflow summary generated" \ No newline at end of file + echo "✅ Workflow summary generated"