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