archive-changelog.sh 1.68 KB
#!/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