tool(monitor): 创建 antd v6 升级就绪监控脚本
定期检查 antd v6 和 pro-components v3 的 npm 发布状态; 输出详细检查报告并保存状态到 .antd-upgrade-state.json; 建议每周运行一次,当两者均就绪时提示可启动升级。
This commit is contained in:
Executable
+166
@@ -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 "$@"
|
||||||
Reference in New Issue
Block a user