hookehuyr

docs(changelog): 归档历史 CHANGELOG 记录

- 归档 102 条历史记录到 docs/changelog-archive/
- 主文件只保留最近 20 条记录
- 添加自动化归档脚本 scripts/archive-changelog.sh

详细变更:
- docs/CHANGELOG.md: 从 122 条精简到 20 条
- docs/changelog-archive/CHANGELOG-archive-2024-2026.md: 历史记录归档
- scripts/archive-changelog.sh: 自动化归档脚本
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +#!/bin/bash
2 +
3 +# CHANGELOG 归档脚本
4 +# 当 CHANGELOG.md 超过 20 条记录时,自动归档旧记录
5 +
6 +CHANGELOG_FILE="docs/CHANGELOG.md"
7 +ARCHIVE_DIR="docs/changelog-archive"
8 +MAX_ENTRIES=20
9 +
10 +# 检查主文件是否存在
11 +if [ ! -f "$CHANGELOG_FILE" ]; then
12 + echo "❌ CHANGELOG.md 文件不存在"
13 + exit 1
14 +fi
15 +
16 +# 创建归档目录
17 +mkdir -p "$ARCHIVE_DIR"
18 +
19 +# 统计当前记录数
20 +ENTRY_COUNT=$(grep -c "^## \[" "$CHANGELOG_FILE")
21 +
22 +echo "📊 当前 CHANGELOG.md 记录数: $ENTRY_COUNT"
23 +
24 +# 如果记录数超过阈值,执行归档
25 +if [ "$ENTRY_COUNT" -gt "$MAX_ENTRIES" ]; then
26 + echo "⚠️ 记录数超过 $MAX_ENTRIES 条,开始归档..."
27 +
28 + # 找到第 (MAX_ENTRIES + 1) 条记录的起始行
29 + SPLIT_LINE=$(grep -n "^## \[" "$CHANGELOG_FILE" | sed -n "$((MAX_ENTRIES + 1))p" | cut -d: -f1)
30 +
31 + if [ -z "$SPLIT_LINE" ]; then
32 + echo "❌ 无法找到分割点"
33 + exit 1
34 + fi
35 +
36 + # 生成归档文件名(带日期)
37 + ARCHIVE_FILE="$ARCHIVE_DIR/CHANGELOG-archive-$(date +%Y%m%d).md"
38 +
39 + # 移动旧记录到归档文件
40 + tail -n +"$SPLIT_LINE" "$CHANGELOG_FILE" > "$ARCHIVE_FILE"
41 +
42 + # 只保留前 MAX_ENTRIES 条记录
43 + head -n "$((SPLIT_LINE - 1))" "$CHANGELOG_FILE" > "$CHANGELOG_FILE.tmp"
44 + mv "$CHANGELOG_FILE.tmp" "$CHANGELOG_FILE"
45 +
46 + NEW_COUNT=$(grep -c "^## \[" "$CHANGELOG_FILE")
47 + ARCHIVE_COUNT=$(grep -c "^## \[" "$ARCHIVE_FILE")
48 +
49 + echo "✅ 归档完成"
50 + echo " 主文件记录数: $NEW_COUNT"
51 + echo " 归档文件记录数: $ARCHIVE_COUNT"
52 + echo " 归档文件: $ARCHIVE_FILE"
53 +
54 + # 显示文件大小
55 + echo ""
56 + echo "📏 文件大小:"
57 + ls -lh "$CHANGELOG_FILE" "$ARCHIVE_FILE"
58 +else
59 + echo "✅ 记录数 ($ENTRY_COUNT) 未超过阈值 ($MAX_ENTRIES),无需归档"
60 +fi