#!/bin/bash
set -e
TAG="${1:-}"
ERRORS=0
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_error() {
echo -e "${RED}❌ $1${NC}"
ERRORS=$((ERRORS + 1))
}
log_warn() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
log_ok() {
echo -e "${GREEN}✅ $1${NC}"
}
if [ -z "$TAG" ]; then
TAG=$(gh release list --limit 1 --json tagName -q '.[0].tagName')
echo "📋 Checking latest release: $TAG"
fi
NOTES=$(gh release view "$TAG" --json body -q '.body' 2>/dev/null)
if [ -z "$NOTES" ]; then
log_error "リリースが見つかりません: $TAG"
exit 1
fi
echo ""
echo "🔍 リリースノート検証: $TAG"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if echo "$NOTES" | grep -qE "^## 🎯 (あなたにとって何が変わるか|What's Changed for You)"; then
if echo "$NOTES" | grep -qE "^## 🎯 .*\|"; then
log_error "見出しに日英混在があります(| で区切られている)"
else
log_ok "見出し: 正しい形式"
fi
else
log_error "見出しがありません: 🎯 あなたにとって何が変わるか"
fi
if echo "$NOTES" | grep -q "Before → After"; then
log_ok "Before → After テーブル: あり"
else
log_error "Before → After テーブルがありません"
fi
if echo "$NOTES" | grep -q "Generated with \[Claude Code\]"; then
log_ok "フッター: あり"
else
log_error "フッターがありません: 🤖 Generated with [Claude Code](...)"
fi
if echo "$NOTES" | grep -qE "^## (What's New|What's Changed|Summary)$"; then
log_warn "英語の見出しが使用されています(日本語推奨)"
fi
if echo "$NOTES" | grep -qE "^\*\*.+\*\*$" | grep -q "[a-zA-Z]" && echo "$NOTES" | grep -qE "^\*\*.+\*\*$" | grep -q "[ぁ-んァ-ン一-龥]"; then
log_warn "説明文に日英混在の可能性があります"
fi
for section in "Added" "Changed" "Fixed" "Security"; do
if echo "$NOTES" | grep -q "^## $section"; then
log_ok "セクション: $section あり"
fi
done
if echo "$NOTES" | head -10 | grep -qE "^\*\*.+\*\*$"; then
log_ok "太字サマリー: あり"
else
log_warn "太字サマリーが見つかりません(1行で変更の価値を説明)"
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ $ERRORS -gt 0 ]; then
echo -e "${RED}検証結果: $ERRORS 件のエラー${NC}"
echo ""
echo "📖 参照: .claude/rules/github-release.md"
exit 1
else
echo -e "${GREEN}検証結果: すべてのチェックを通過${NC}"
exit 0
fi