Compare commits
No commits in common. "b651daf22546737dc6b4ea5eb02935a9e4e69526" and "d50ee5d5ccd6ae25219c679e5165f21076ba4a5e" have entirely different histories.
b651daf225
...
d50ee5d5cc
|
|
@ -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,7 +76,6 @@ jobs:
|
||||||
"^style: "
|
"^style: "
|
||||||
"^chore: format"
|
"^chore: format"
|
||||||
"^chore: lint"
|
"^chore: lint"
|
||||||
"^Initial commit"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Git 提交消息格式
|
# Git 提交消息格式
|
||||||
|
|
@ -320,7 +319,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"
|
||||||
|
|
@ -329,14 +328,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=""
|
||||||
|
|
@ -367,7 +366,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"
|
||||||
|
|
@ -391,7 +390,7 @@ jobs:
|
||||||
|
|
||||||
# 使用配置的标题
|
# 使用配置的标题
|
||||||
NEW_ENTRY="## :bookmark: ${CHANGELOG_VERSION}\n\n"
|
NEW_ENTRY="## :bookmark: ${CHANGELOG_VERSION}\n\n"
|
||||||
NEW_ENTRY="${NEW_ENTRY}${CHANGELOG_SECTION_TITLE}\n\n"
|
NEW_ENTRY="${NEW_ENTRY}${CHANGELOG_SECTION_TITLE}\n"
|
||||||
|
|
||||||
REPO_URL="${{ github.server_url }}/${{ github.repository }}"
|
REPO_URL="${{ github.server_url }}/${{ github.repository }}"
|
||||||
|
|
||||||
|
|
@ -400,21 +399,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
|
||||||
|
|
@ -425,7 +424,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
|
||||||
|
|
@ -448,9 +447,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\n"
|
NEW_ENTRY="${NEW_ENTRY}\n${CHANGELOG_CONTRIBUTORS_TITLE}\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"
|
||||||
|
|
@ -459,7 +458,7 @@ jobs:
|
||||||
done <<< "$CONTRIBUTORS"
|
done <<< "$CONTRIBUTORS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NEW_ENTRY="${NEW_ENTRY}\n---\n"
|
NEW_ENTRY="${NEW_ENTRY}\n---\n\n"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "💾 Writing to CHANGELOG.md..."
|
echo "💾 Writing to CHANGELOG.md..."
|
||||||
|
|
@ -469,11 +468,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
|
||||||
|
|
@ -482,12 +481,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
|
||||||
|
|
@ -499,7 +498,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
|
||||||
|
|
@ -515,16 +514,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\n"
|
MERGED_ENTRY="${MERGED_ENTRY}${CHANGELOG_SECTION_TITLE}\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:/ {
|
||||||
|
|
@ -534,13 +533,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\n"
|
MERGED_ENTRY="${MERGED_ENTRY}\n${CHANGELOG_CONTRIBUTORS_TITLE}\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
|
||||||
|
|
@ -557,7 +556,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/,/^---/ {
|
||||||
|
|
@ -566,7 +565,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
|
||||||
|
|
@ -582,9 +581,9 @@ jobs:
|
||||||
fi
|
fi
|
||||||
done <<< "$NEW_CONTRIBUTORS"
|
done <<< "$NEW_CONTRIBUTORS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MERGED_ENTRY="${MERGED_ENTRY}\n---\n"
|
MERGED_ENTRY="${MERGED_ENTRY}\n---\n\n"
|
||||||
|
|
||||||
# 替换CHANGELOG中的对应版本区域
|
# 替换CHANGELOG中的对应版本区域
|
||||||
IN_VERSION=false
|
IN_VERSION=false
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
|
|
@ -598,14 +597,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"
|
||||||
|
|
@ -812,11 +811,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)
|
||||||
|
|
@ -852,7 +851,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)..."
|
||||||
|
|
@ -860,7 +859,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
|
||||||
|
|
@ -932,4 +931,4 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "✅ Workflow summary generated"
|
echo "✅ Workflow summary generated"
|
||||||
|
|
@ -19,5 +19,3 @@ tags
|
||||||
# Persistent undo
|
# Persistent undo
|
||||||
[._]*.un~
|
[._]*.un~
|
||||||
|
|
||||||
CHANGELOG.md
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue