tool(monitor): 创建 antd v6 升级就绪监控脚本

定期检查 antd v6 和 pro-components v3 的 npm 发布状态;
输出详细检查报告并保存状态到 .antd-upgrade-state.json;
建议每周运行一次,当两者均就绪时提示可启动升级。
This commit is contained in:
张翔
2026-05-06 16:58:47 +08:00
parent ddf8ad0d4b
commit 2f4ec2d080
+166
View File
@@ -0,0 +1,166 @@
#!/usr/bin/env bash
set -euo pipefail
CHECK_INTERVAL_DAYS=7
STATE_FILE=".antd-upgrade-state.json"
CURRENT_ANTD="5"
TARGET_ANTD="6"
TARGET_PRO_COMPONENTS="3"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
check_npm_version() {
local pkg=$1
local version
version=$(npm view "$pkg" version 2>/dev/null || echo "unknown")
echo "$version"
}
check_npm_dist_tag() {
local pkg=$1
local tag=$2
local version
version=$(npm view "$pkg" dist-tags."$tag" 2>/dev/null || echo "unknown")
echo "$version"
}
get_major_version() {
local version=$1
echo "$version" | cut -d. -f1 | sed 's/[^0-9]//g'
}
is_pro_components_v3_ready() {
local pro_pkgs=(
"@ant-design/pro-components"
"@ant-design/pro-layout"
"@ant-design/pro-table"
"@ant-design/pro-form"
"@ant-design/pro-list"
"@ant-design/pro-descriptions"
)
local all_ready=true
for pkg in "${pro_pkgs[@]}"; do
local version
version=$(check_npm_version "$pkg")
local major
major=$(get_major_version "$version")
if [[ "$major" == "$TARGET_PRO_COMPONENTS" ]]; then
log_info "$pkg: v$version ✅ (v3 已发布)"
elif [[ "$version" == "unknown" ]]; then
log_warn "$pkg: 无法获取版本信息"
all_ready=false
else
log_warn "$pkg: v$version ❌ (当前 v${major},需要 v${TARGET_PRO_COMPONENTS})"
all_ready=false
fi
done
$all_ready
}
check_antd_v6_compatibility() {
local antd_version
antd_version=$(check_npm_version "antd")
local major
major=$(get_major_version "$antd_version")
if [[ "$major" == "$TARGET_ANTD" ]]; then
log_info "antd: v$antd_version ✅ (v6 已正式发布)"
return 0
else
log_warn "antd: v$antd_version (当前 v${major},目标 v${TARGET_ANTD})"
local next_version
next_version=$(check_npm_dist_tag "antd" "next")
if [[ "$next_version" != "unknown" ]]; then
local next_major
next_major=$(get_major_version "$next_version")
if [[ "$next_major" == "$TARGET_ANTD" ]]; then
log_info "antd@next: v$next_version (v6 预览版可用)"
fi
fi
return 1
fi
}
check_react_compatibility() {
local react_version
react_version=$(check_npm_version "react")
log_info "React: v$react_version"
local react_major
react_major=$(get_major_version "$react_version")
if [[ "$react_major" -ge 19 ]]; then
log_info "React v19+ 已发布,antd v5 存在兼容性警告,升级到 antd v6 可解决"
fi
}
save_state() {
local antd_v="$1"
local pro_v="$2"
local ready="$3"
cat > "$STATE_FILE" <<EOF
{
"lastCheck": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"antdVersion": "$antd_v",
"proComponentsReady": $ready,
"upgradeRecommended": $ready
}
EOF
}
main() {
echo "========================================="
echo " antd v6 升级就绪监控"
echo " 检查时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================="
echo ""
log_info "检查 antd v6 发布状态..."
local antd_ready=false
check_antd_v6_compatibility && antd_ready=true || true
echo ""
log_info "检查 React 兼容性..."
check_react_compatibility
echo ""
log_info "检查 pro-components v3 发布状态..."
local pro_ready=false
is_pro_components_v3_ready && pro_ready=true || true
echo ""
echo "========================================="
echo " 检查结论"
echo "========================================="
local antd_v
antd_v=$(check_npm_version "antd")
if $antd_ready && $pro_ready; then
log_info "🎉 antd v6 + pro-components v3 均已就绪,可以启动升级!"
save_state "$antd_v" "v3" true
elif $antd_ready && ! $pro_ready; then
log_warn "antd v6 已发布,但 pro-components v3 尚未就绪,建议继续等待"
save_state "$antd_v" "pending" false
else
log_warn "antd v6 和 pro-components v3 均未就绪,继续等待"
save_state "$antd_v" "pending" false
fi
echo ""
log_info "状态已保存到 $STATE_FILE"
log_info "建议每 ${CHECK_INTERVAL_DAYS} 天运行一次此脚本"
}
main "$@"